void reserva(reservas lista_reservas, prereservas lista_pre) { int menu = 9; char op; printf("Reservar:\n1- Lavagem\n2- Manutenção\n0- Regressar ao menu principal\nO que reservar? "); scanf("%d", &menu); getchar(); //eliminar o '\n' não lido pelo scanf switch(menu) { case 0: clear_screen(); break; case 1: clear_screen(); printf("Reserva de Lavagem:\n"); op ='L'; reservar(lista_reservas, lista_pre, op); break; case 2: clear_screen(); printf("Reserva de Manutenção:\n"); op = 'M'; reservar(lista_reservas, lista_pre, op); break; default: clear_screen(); printf("Não é uma opção válida! A regressar ao menu principal...\n"); } }
int main() { inicializar(); int lugar_juan= reservar("juan", 1); printf("juan reservo el lugar %d\n", lugar_juan); if (lugar_juan!=0) { fprintf(stderr, "juan debio haber estacionado en 0, no en %d\n", lugar_juan); exit(1); } printE(); int lugar_eva= reservar("eva", 2); printf("eva reservo el lugar %d\n", lugar_eva); if (lugar_eva!=1) { fprintf(stderr, "eva debio haber estacionado en 1, no en %d\n", lugar_eva); exit(2); } printE(); pthread_t hebra_pato; Args args_pato= { "pato", 3, -1 }; pthread_create(&hebra_pato, NULL, carro, &args_pato); printf("Verificando que pato espera por obtener su lugar\n"); sleep(1); if (args_pato.lugar!=-1) { fprintf(stderr, "pato debio haber esperado, pero recibio\n"); fprintf(stderr, "incorrectamente el lugar %d\n", args_pato.lugar); exit(3); } printE(); int lugar_ana= reservar("ana", 1); printf("ana reservo el lugar %d\n", lugar_ana); if (lugar_ana!=3) { fprintf(stderr, "ana debio haber estacionado en 3, no en %d\n", lugar_ana); exit(4); } printE(); pthread_t hebra_pedro; Args args_pedro= { "pedro", 5, -1 }; pthread_create(&hebra_pedro, NULL, carro, &args_pedro); printf("Verificando que pedro espera por obtener su lugar\n"); sleep(1); if (args_pedro.lugar!=-1) { fprintf(stderr, "pedro debio haber esperado, pero recibio\n"); fprintf(stderr, "incorrectamente el lugar %d\n", args_pedro.lugar); exit(5); } printE(); liberar("eva"); printf("eva libera su lugar\n"); printE(); if (args_pato.lugar!=-1) { fprintf(stderr, "pato debio haber esperado, pero recibio\n"); fprintf(stderr, "incorrectamente el lugar %d\n", args_pato.lugar); exit(6); } printE(); liberar("juan"); printf("juan libera su lugar\n"); printE(); pthread_join(hebra_pato, NULL); printf("pato reservo el lugar %d\n", args_pato.lugar); if (args_pato.lugar!=0) { fprintf(stderr, "pato debio haber estacionado en 0, no en %d\n", args_pato.lugar); exit(7); } printE(); liberar("pato"); printf("pato libera su lugar\n"); if (args_pedro.lugar!=-1) { fprintf(stderr, "pedro debio haber esperado, pero recibio\n"); fprintf(stderr, "incorrectamente el lugar %d\n", args_pedro.lugar); exit(8); } printE(); /* Al liberar ana usamos una copia del string "ana". En el enunciado * se pide que se haga una copia del string y por lo tanto en la * comparacion se debe usar strcmp y no la igualdad de punteros. */ char copia_ana[4]; strcpy(copia_ana, "ana"); liberar(copia_ana); printf("ana libera su lugar\n"); pthread_join(hebra_pedro, NULL); printf("pedro reservo el lugar %d\n", args_pedro.lugar); if (args_pedro.lugar!=0) { fprintf(stderr, "pedro debio haber estacionado en 0, no en %d\n", args_pedro.lugar); exit(9); } printE(); liberar("pedro"); printf("pedro libera su lugar\n"); printE(); printf("\nFelicitaciones: su solucion funciona de acuerdo al enunciado.\n"); return 0; }
void *carro(void *ptr) { Args *args= ptr; args->lugar= reservar(args->nom, args->k); return NULL; }