예제 #1
0
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");
    }
}
예제 #2
0
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;
}
예제 #3
0
void *carro(void *ptr) {
  Args *args= ptr;
  args->lugar= reservar(args->nom, args->k);
  return NULL;
}