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); }
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"); }