void leer(FILE *farch_out){
int i;
double z;
char campo[200];
//printf("of2:%i\n",offset);
fseek(farch_out,offset,SEEK_SET);
//printf("of3:%i\n",offset);
for(i=0;i<iHilos;i++){
leer_campo (farch_out, campo);
DATCICLO.C_inicial[i]->nombre=strdup (campo);
leer_campo (farch_out, campo);
DATCICLO.C_inicial[i]->masa=atof(campo);
leer_campo (farch_out, campo);
DATCICLO.C_inicial[i]->x=atof(campo);
leer_campo (farch_out, campo);
DATCICLO.C_inicial[i]->y=atof(campo);
leer_campo (farch_out, campo);
DATCICLO.C_inicial[i]->z=atof(campo);
leer_campo (farch_out, campo);
DATCICLO.C_inicial[i]->vx=atof(campo);
leer_campo (farch_out, campo);
DATCICLO.C_inicial[i]->vy=atof(campo);
leer_campo (farch_out, campo);
DATCICLO.C_inicial[i]->vz=atof(campo);
}
}
main (int argc, char* argv[])
{
  int t,iteraciones,tamano=0,N=0;
char campo[200];
char *salida;
double tiempo=0;
long i;

CUERPO **arreglo_inicial=NULL, **arreglo_final=NULL;
CUERPO *particula,*particula2;
  pthread_t *thread;                 /* hilos */
  pthread_attr_t attr;
//  pthread_mutex_init (&mutex1, NULL);   /* inicializa el mutex */
  FILE *farch_in,*farch_out, *jFile;
salida=argv[2];
   if (argc != 5){
     fprintf(stderr,"Uso %s arch_in arch_out iteraciones delta_t\n", argv[0]);
    exit(1);
	}

iteraciones=atoi(argv[3]);
delta_t=atof(argv[4]);
  /*Aqui se obtiene delta_t de los argumentos de entrada*/
  if (delta_t <= 0){
      fprintf(stderr,"delta_t debe ser un numero mayor a cero, usted puso %s\n",argv[4]);
      exit(1);
    } 

///////////////////////////////// AQUI SE LEE DEL ARCHIVO DE ENTRADA //////////////////////////////////////////
    if (farch_in = fopen(argv[1], "r"))
{
//        datos_in(farch_in,**particulas);

while (leer_campo (farch_in, campo))
        {
            particula = (CUERPO*) malloc (sizeof (CUERPO));
            particula2 = (CUERPO*) malloc (sizeof (CUERPO));
            particula->nombre = strdup (campo);
            leer_campo (farch_in, campo);
            particula->masa = atof (campo);
            leer_campo (farch_in, campo);
            particula->x = atof (campo);
            leer_campo (farch_in, campo);
            particula->y = atof (campo);
            leer_campo (farch_in, campo);
            particula->z = atof (campo);
            leer_campo (farch_in, campo);
            particula->vx = atof (campo);
            leer_campo (farch_in, campo);
            particula->vy = atof (campo);
            leer_campo (farch_in, campo);
            particula->vz = atof (campo);
            arreglo_inicial = (CUERPO**) arreglo_insertar ((void**)arreglo_inicial, &tamano, particula);
	    particula2->nombre = particula->nombre;
	    particula2->masa = particula->masa;
	    particula2->x = particula->x;
	    particula2->y = particula->y;
	    particula2->z = particula->z;
	    particula2->vx = particula->vx;
	    particula2->vy = particula->vy;
	    particula2->vz = particula->vz;
	    tamano--;
            arreglo_final = (CUERPO**) arreglo_insertar ((void**)arreglo_final, &tamano, particula2);
//	    printf("%i %s\n",N,arreglo_inicial[N]->nombre);
	    N++;
        }
        fclose(farch_in);
	printf("Numero de particulas: %i\n",N);
	iHilos=N;
	DATCICLO.C_inicial=arreglo_inicial;
	DATCICLO.C_final=arreglo_final;
//	    printf("%i %s\n",N-1,arreglo_inicial[N-2]->nombre);
//	    printf("%i %f\n",N-1,arreglo_inicial[N-2]->vz);

}
    else{
      printf("No se puede abrir el archivo\n");
}
//Se crean aloja el espacio para los N hilos
  thread = malloc(iHilos*sizeof(pthread_t));

/// SE ALOJA LA MEMORIA PARA LA CONFIGURACION FINAL



   /* Initialize and set thread detached attribute */
   pthread_attr_init(&attr);
   pthread_attr_setdetachstate(&attr, PTHREAD_CREATE_JOINABLE);
/////////////////////////////////////////////////// AQUI VA EL CALCULO //////////////////////////////////// 
///////////////////// SALIDA/////////////////////////
farch_out = fopen(argv[2], "w+");
jFile = fopen("EVOLUCION.xyz", "w");
/*
if ((offset = fseek(farch_out, 0L, SEEK_END)) == -1)
      perror("lseek() error");
printf("of0:%i %i\n",offset,temporal);
*/
///imprimimos para t=0//
t=0;
imprimir(farch_out,tiempo);
imprimir_jmol(jFile);
 ////////////////CICLOS EN EL TIEMPO///////////////////
for(t=1;t<=iteraciones;t++){
leer(farch_out);
tiempo=t*delta_t;
  for (i=0;i<iHilos;i++)   /* crea los hilos */  ///ESCLAVO DEBE SER LA FUNCION DE RICARDO///
          if (pthread_create(&thread[i], &attr, trayectoria, (void *)i) != 0)     
                  perror ("pthread_create");
 
  for (i=0;i<iHilos;i++)             /* Une los hilos */
          if (pthread_join(thread[i],NULL)!=0)
                  perror ("pthread_join");
////////IMPRESION A ARCHIVO////////
imprimir(farch_out,tiempo);
imprimir_jmol(jFile);
////////////////////////////////////////////////
//printf("TIEMPO: %f\n",tiempo);
}

printf("Tiempo final: %f\n",tiempo);
//////////////////////////////////////////////////////////////////////
fclose(farch_out);
fclose(jFile);

 free(particula);
 free(particula2);
 free(arreglo_inicial);
 free(arreglo_final);
}
Example #3
0
void menu_principal(int opc, char *id, Usuarios *ListaUsuarios, int *numUser) {
    int x, numVehiculos = 0, numViajes = 0, numPasos = 0, numIncidencias = 0, pos;
    int o, i;
    char *id_new, *matricula, c;
    Vehiculos* L_Vehiculos;
    Viajes* L_Viajes;
    Pasos* L_Pasos;
    Incidencias* L_Incidencias;

    printf("\nCargando información en el programa.\n");
    L_Vehiculos = obtenerVehiculos(&numVehiculos);
    L_Viajes = obtenerViajes(&numViajes);
    L_Pasos = obtenerPasos(&numPasos);
    L_Incidencias = obtenerIncidencias(&numIncidencias);
    printf("\nInformación cargada.\n");

    printf("\nActualizando información\n");
    autoFinalizarViaje(L_Viajes, numViajes);
    printf("\nInformación actualizada\n");

    if (opc == 1) {
        do {
            printf("Bienvenido al menu de administración\n"
                    "Introduzca la opcion que desea\n\n "
                    "1: Menú usuarios\n "
                    "2: Menú vehiculos\n "
                    "3: Menú viajes\n "
                    "4: Menú incidencias\n "
                    "0: salir\n");
            x = leer_numero("Indica la opción");
            switch (x) {
                case 0:
                    break;
                case 1:
                    do {
                        printf("Bienvenido al menu de administración\n"
                                "Introduzca la opcion que desea\n\n "
                                "1: Alta usuario\n "
                                "2: Baja usuario\n "
                                "3: Modificar usuario\n "
                                "4: Mostrar usuarios\n "
                                "0: salir\n");
                        o = leer_numero("Indica la opción");
                        switch (o) {
                            case 0:
                                break;
                            case 1:
                                id = altaUsuario(ListaUsuarios, numUser);
                                printf("\n\tDado de alta usuario nuevo con el id : %s\n", id_new);
                                break;
                            case 2:
                                bajaUsuario(ListaUsuarios, numUser);
                                break;
                            case 3:
                                modificaAdmin(ListaUsuarios, numUser);
                                break;
                            case 4:
                                listarUsuario(ListaUsuarios, numUser);
                                break;
                            default:
                                printf("Error al elegir la opcion.\t");
                                break;
                        }
                    } while (o != 0);
                    break;
                case 2:
                    do {
                        printf("Introduzca la opcion que desea\n\n "
                                "1: Alta vehiculo\n "
                                "2: Baja vehiculos\n "
                                "3: Listar vehiculos\n "
                                "4: Modificar vehiculos\n "
                                "5: Listar los viajes de un vehiculo"
                                "0: salir\n");
                        o = leer_numero("Indica la opción");
                        switch (o) {
                            case 0:
                                break;
                            case 1:
                                alta_vehiculo(L_Vehiculos,&numVehiculos,id);
                                break;
                            case 2:
                                baja_vehiculo(L_Vehiculos,numVehiculos);
                                break;
                            case 3:
                                vehiculos_user(id,L_Vehiculos,numVehiculos);
                                break;
                            case 4:
                                vehiculos_user(id,L_Vehiculos,numVehiculos);
                                matricula = leer_campo(TAM_ID_VEI, "Escriba la matricula del vehiculo a modificar");
                                pos = buscar_vehiculo(matricula,L_Vehiculos,numVehiculos);
                                modificar_vehiculo(L_Vehiculos,pos);
                                break;
                            case 5:
                                listar_viajes_coche(L_Viajes,matricula,numVehiculos);
                            default:
                                printf("Error al elegir la opcion.\t");
                                break;
                        }
                    } while (o != 0);
                    break;
                case 3:
                    do {
                        printf("Introduzca la opcion que desea:\n1.- Publicar viaje.\n2.- Eliminar viaje.\n3.- Modificar viaje.\n4.- Listar viajes.\n0.- Salir.");
                        scanf("%d", &o);
                        switch (o) {
                            case 0:
                                exit(0);
                                break;
                            case 1:
                                publicar_viaje(L_Viajes,&numViajes,id);
                                break;
                            case 2:
                                eliminar_viaje(L_Viajes,&numViajes);
                                break;
                            case 3:
                                modificar_viaje(L_Viajes);
                                break;
                            case 4:
                                listar_viaje(L_Viajes,numViajes,L_Pasos,&numPasos);
                                break;
                            default:
                                printf("ERROR: Opcion invalida.");
                                break;
                        }
                    } while (o != 0);
                    break;
                case 4:
                    do {
                        printf("Introduzca la opcion que desea:\n"
                                "1.- Publicar incidencia.\n"
                                "2.- Eliminar incidencia.\n"
                                "3.- Modificar incidencia.\n"
                                "4.- Listar incidencia.\n"
                                "5.- Validar incidencia.\n"
                                "0.- Salir.");
                        scanf("%d", &o);
                        char *usuario,*conductor,*viaje;
                        
                        if(o == 1 || o == 2 || o == 3){
                            usuario = leer_campo(TAM_ID_USER,"Introduce el id del usuario que realiza la incidencia");
                            viaje = leer_campo(TAM_ID_VIA,"Introduce el id dek viaje de la incidencia");
                            conductor = leer_campo(TAM_ID_USER,"Introduce el id del conductor de la incidencia");
                        }
               
                        switch (o) {
                            case 0:
                                exit(0);
                                break;
                            case 1:
                                crearIncidencias(L_Incidencias, &numIncidencias,usuario,viaje,conductor);
                                break;
                            case 2:
                                eliminarIncidencias(L_Incidencias, &numIncidencias,usuario,viaje,conductor);
                                break;
                            case 3:
                                modificarIncidencias(L_Incidencias,numIncidencias,usuario,viaje,conductor);
                                break;
                            case 4:
                                listarIncidencias(L_Incidencias,numIncidencias,"Admin");
                                break;
                            case 5:
                                validarIncidencias(L_Incidencias,numIncidencias);
                                break;
                            default:
                                printf("ERROR: Opcion invalida.");
                                break;
                        }
                    } while (o != 0);
                    break;
                default:
                    printf("Error al elegir la opcion.\t");
                    break;
            }
        } while (x != 0);
    } else {
        pos = buscar_usuario(id, ListaUsuarios, *numUser);
        do {
            printf("Bienvenido al menú de la aplicación %s\n "
                    "Introduzca la opcion que desea\n\n "
                    "1: Perfil\n "
                    "2: Menú vehiculos\n "
                    "3: Menú viajes\n "
                    "4: Menú incidencias\n "
                    "0: salir\n", ListaUsuarios[pos].Nomb_usuario);
            x = leer_numero("Indica la opción");
            switch (x) {
                case 0:
                    break;
                case 1:
                    do {
                        printf("Bienvenido al menú del usuario, administra tu cuenta %s\n "
                                "Introduzca la opcion que desea\n\n "
                                "1: Mostrar datos\n "
                                "2: Modificar datos\n "
                                "0: salir\n", ListaUsuarios[pos].Nomb_usuario);
                        o = leer_numero("Indica la opción");
                        switch (o) {
                            case 0:
                                break;
                            case 1:
                                mostrarUsuario(ListaUsuarios, pos);
                                break;
                            case 2:
                                modificaUsuario(ListaUsuarios, pos);
                                break;
                            default:
                                printf("Error al elegir la opcion.\t");
                                break;
                        }
                    } while (o != 0);
                    break;
                case 2:
                    do {
                        printf("Bienvenido al menú de la aplicación \n "
                                "Introduzca la opcion que desea\n\n "
                                "1: Alta vehiculo\n "
                                "2: Baja vehiculos\n "
                                "3: Listas vehiculos(propios)\n "
                                "4: Modificar vehiculo\n "
                                "0: salir\n");
                        o = leer_numero("Indica la opción");
                        switch (o) {
                            case 0:
                                break;
                            case 1:
                                alta_vehiculo(L_Vehiculos,&numVehiculos,id);
                                break;
                            case 2:
                                baja_vehiculo(L_Vehiculos,numVehiculos);
                                break;
                            case 3:
                                vehiculos_user(id,L_Vehiculos,numVehiculos);
                                break;
                            case 4:
                                vehiculos_user(id,L_Vehiculos,numVehiculos);
                                matricula = leer_campo(TAM_ID_VEI, "Escriba la matricula del vehiculo a modificar");
                                pos = buscar_vehiculo(matricula,L_Vehiculos,numVehiculos);
                                modificar_vehiculo(L_Vehiculos,pos);
                                break;
                            default:
                                printf("Error al elegir la opcion.\t");
                                break;
                        }
                    } while (x != 0);
                    break;
                case 3:
                    printf("Bienvenido al menú de viajes. Estos son los viajes que hay abiertos actualmente.\n");
                    for (i = 0; i < numViajes; i++) {
                        if (!strcmp(L_Viajes[i].Estado, "Abierto")) {
                            listar_viaje(L_Viajes, numViajes, L_Pasos, &numPasos);
                            if (!strcmp(id, L_Vehiculos[i].Id_usuario) && !strcmp(L_Vehiculos[i].Num_plazas, L_Viajes[i].Plazas_libre)) {
                                printf("¿Desea modificar algún viaje que usted haya publicado? s/n");
                                scanf("%s", &c);
                                if (c == 's') {
                                    modificar_viaje(L_Viajes);
                                }
                            }
                        }
                    }
                    
                    printf("Introduzca la opcion que desea:\n"
                                "1.- Publicar viaje.\n"
                                "2.- Incorporarse a un viaje.\n"
                                "3.- Visualizar viaje.\n"
                                "0.- Salir.");
                    switch(o){
                        case 0:
                            exit(0);
                            break;
                        case 1:
                            publicar_viaje(L_Viajes, &numViajes, id);
                            break;
                        case 2:
                            unirse_viaje(L_Viajes, &numViajes,id);
                            break;
                        case 3:
                            listar_viaje(L_Viajes, numViajes, L_Pasos, &numPasos);
                            break;
                        default:
                            printf("ERROR: Opcion invalida.");
                            break;
                    }
                    break;
                case 4:
                    do {
                        printf("Introduzca la opcion que desea:\n"
                                "1.- Publicar incidencia.\n"
                                "2.- Listar incidencia.\n"
                                "0.- Salir.");
                        scanf("%d", &o);
                        char *conductor,*viaje;
                        switch (o) {
                            case 0:
                                exit(0);
                                break;
                            case 1:
                                viaje = leer_campo(TAM_ID_VIA,"Introduce el id dek viaje de la incidencia");
                                conductor = leer_campo(TAM_ID_USER,"Introduce el id del conductor de la incidencia");
                                crearIncidencias(L_Incidencias, &numIncidencias,id,viaje,conductor);
                                break;
                            case 2:
                                listarIncidencias(L_Incidencias,numIncidencias,id);
                                break;
                            default:
                                printf("ERROR: Opcion invalida.");
                                break;
                        }
                    } while (o != 0);
                    break;
                default:
                    printf("Error al elegir la opcion.\t");
                    break;
            }
        } while (x != 0);
    }

    printf("\nGuardando información del programa.\n");
    guardarDatosVehiculos(L_Vehiculos, numVehiculos);
    guardarDatosViajes(L_Viajes, numViajes);
    guardarDatosPasos(L_Pasos, numPasos);
    guardarDatosIncidencias(L_Incidencias, numIncidencias);
    printf("\nInformación guardada.\n");
}