void replaceo(tabuleiro *tab){ int lin,col; for(lin=0;lin!=tab->tamanho[0];lin++) for(col=0;col!=tab->tamanho[1];col++) if(pos(tab,lin,col)=='o'){ if(((pos(tab,lin-1,col)=='#' || pos(tab,lin-1,col)=='^' || pos(tab,lin-1,col)=='o') && (pos(tab,lin+1,col)=='#' || pos(tab,lin+1,col)=='v' || pos(tab,lin+1,col)=='o')) || ((pos(tab,lin,col-1)=='#' || pos(tab,lin,col-1)=='<' || pos(tab,lin,col-1)=='o') && (pos(tab,lin,col+1)=='#' || pos(tab,lin,col+1)=='>' || pos(tab,lin,col+1)=='o'))) coloca(tab,'#',lin,col); else if((pos(tab,lin+1,col)=='v' || pos(tab,lin+1,col)=='o' || pos(tab,lin+1,col)=='#') && (pos(tab,lin-1,col)=='~' || pos(tab,lin-1,col)=='n' )) coloca(tab,'^',lin,col); else if((pos(tab,lin-1,col)=='^' || pos(tab,lin-1,col)=='o' || pos(tab,lin-1,col)=='#') && (pos(tab,lin+1,col)=='~' || pos(tab,lin+1,col)=='n')) coloca(tab,'v',lin,col); else if((pos(tab,lin,col+1)=='>' || pos(tab,lin,col+1)=='o' || pos(tab,lin,col+1)=='#') && (pos(tab,lin,col-1)=='~' || pos(tab,lin,col-1)=='n')) coloca(tab,'<',lin,col); else if((pos(tab,lin,col-1)=='<' || pos(tab,lin,col-1)=='o' || pos(tab,lin,col-1)=='#') && (pos(tab,lin,col+1)=='~' || pos(tab,lin,col+1)=='n')) coloca(tab,'>',lin,col); else if((pos(tab,lin+1,col)=='~' || pos(tab,lin+1,col)=='n') && (pos(tab,lin-1,col)=='~' || pos(tab,lin-1,col)=='n') && (pos(tab,lin,col+1)=='~' || pos(tab,lin,col+1)=='n') && (pos(tab,lin,col-1)=='~' || pos(tab,lin,col-1)=='n')) coloca(tab,'O',lin,col); } }
tabuleiro *estra3(tabuleiro *tab){ int lin,col,dots,boat,col1,lin1; for(lin=0;lin!=tab->tamanho[0];lin++){ dots=0; boat=0; for(col=0;col!=tab->tamanho[1];col++){ if(tab->quadro[lin][col]=='~'); else if (tab->quadro[lin][col]=='.')dots++; else boat++;} if(tab->linhas[lin]==(boat+dots)) for(col1=0;col1!=tab->tamanho[1];col1++) if(tab->quadro[lin][col1]=='.') coloca(tab,'A',lin,col1);} for(col=0;col!=tab->tamanho[1];col++){ dots=0; boat=0; for(lin=0;lin!=tab->tamanho[0];lin++){ if(tab->quadro[lin][col]=='~'); else if (tab->quadro[lin][col]=='.')dots++; else boat++;} if(tab->colunas[col]==(boat+dots)) for(lin1=0;lin1!=tab->tamanho[0];lin1++) if(tab->quadro[lin1][col]=='.') coloca(tab,'A',lin1,col);} substitui(tab); replaceo(tab); return tab;}
tabuleiro *estra4(tabuleiro *tab){ int lin,col; for(lin=0;lin!=tab->tamanho[0];lin++) for(col=0;col!=tab->tamanho[1];col++) if (pos(tab,lin,col)=='<' && pos(tab,lin,col+1)=='.') coloca(tab,'o',lin,col+1); else if (pos(tab,lin,col)=='>' && pos(tab,lin,col-1)=='.') coloca(tab,'o',lin,col-1); else if (pos(tab,lin,col)=='#' && ( (pos(tab,lin,col+1)=='#' || pos(tab,lin,col+1)=='>' || pos(tab,lin,col+1)=='o' || pos(tab,lin,col-1)=='#' || pos(tab,lin,col-1)=='<' || pos(tab,lin,col-1)=='o') || (pos(tab,lin+1,col)=='n' || pos(tab,lin+1,col)=='~' || pos(tab,lin-1,col)=='n' || pos(tab,lin-1,col)=='~'))) { if(pos(tab,lin,col-1)=='.') coloca(tab,'o',lin,col-1); if(pos(tab,lin,col+1)=='.') coloca(tab,'o',lin,col+1);} for(col=0;col!=tab->tamanho[1];col++) for(lin=0;lin!=tab->tamanho[0];lin++) if (pos(tab,lin,col)=='^' && pos(tab,lin+1,col)=='.') coloca(tab,'o',lin+1,col); else if (pos(tab,lin,col)=='v' && pos(tab,lin-1,col)=='.') coloca(tab,'o',lin-1,col); else if (pos(tab,lin,col)=='#' && ( (pos(tab,lin+1,col)=='#' || pos(tab,lin+1,col)=='v' || pos(tab,lin+1,col)=='o' || pos(tab,lin-1,col)=='#' || pos(tab,lin-1,col)=='^' || pos(tab,lin-1,col)=='o') || (pos(tab,lin,col+1)=='n' || pos(tab,lin,col+1)=='~' || pos(tab,lin,col-1)=='n' || pos(tab,lin,col-1)=='~'))) { if(pos(tab,lin-1,col)=='.') coloca(tab,'o',lin-1,col); if(pos(tab,lin+1,col)=='.') coloca(tab,'o',lin+1,col);} replaceo(tab); return tab; }
tabuleiro *aleoaux(tabuleiro *tab,int l,int play){ int col,i,nboats=0,posicoes=0,n,n1; int pos[100]; int inicio[100]; int limite[100]; int colunas[100]; posicoes=nbarcos(tab,l); for(col=0;col!=tab->tamanho[1];col++) if(tab->quadro[l][col]!='.' && tab->quadro[l][col]!='~') nboats++; nboats=tab->linhas[l]-nboats; for(i=0;i!=nboats;i++){pos[i]=1+i; inicio[i]=1+i;} for(i=nboats;i!=0;i--,posicoes--) limite[i]=posicoes; for(;play!=0;play--){ if(pos[nboats-1]!=limite[nboats-1]) pos[nboats-2]++; else{ for(n=nboats-1;n!=0;n--){ if(pos[n]!=limite[n]){ pos[n]++; inicio[n]++; for(n1=n+1;n1!=nboats;n1++){ inicio[n1]=inicio[n1-1]+1; pos[n1]=inicio[n1]; } } break; } } } for(col=0,i=0;col!=tab->tamanho[1];col++) if(caniboat(tab,l,col)) colunas[i++]=col; for(i=0;i!=nboats;i++) --pos[i]; for(i=0;i!=nboats;i++) coloca(tab,'o',l,colunas[pos[i]]); return tab; }
tabuleiro *estra1(tabuleiro *tab){ int lin,col; for(lin=0;lin!=tab->tamanho[0];lin++) for(col=0;col!=tab->tamanho[1];col++){ if(tab->quadro[lin][col]!='.' && tab->quadro[lin][col]!='~'){ if(pos(tab,lin+1,col+1)=='.') coloca(tab,'~',lin+1,col+1); if(pos(tab,lin+1,col-1)=='.') coloca(tab,'~',lin+1,col-1); if(pos(tab,lin-1,col+1)=='.') coloca(tab,'~',lin-1,col+1); if(pos(tab,lin-1,col-1)=='.') coloca(tab,'~',lin-1,col-1); if(tab->quadro[lin][col]=='o') ; else if(tab->quadro[lin][col]=='#'){ if(pos(tab,lin-1,col)=='~' || pos(tab,lin-1,col)=='n') {if(pos(tab,lin+1,col)=='.') coloca(tab,'~',lin+1,col);} else if(pos(tab,lin+1,col)=='~' || pos(tab,lin+1,col)=='n') {if(pos(tab,lin-1,col)=='.') coloca(tab,'~',lin-1,col);} else if(pos(tab,lin,col-1)=='~' || pos(tab,lin,col-1)=='n') {if(pos(tab,lin,col+1)=='.') coloca(tab,'~',lin,col+1);} else if(pos(tab,lin,col+1)=='~' || pos(tab,lin,col+1)=='n') {if(pos(tab,lin,col-1)=='.') coloca(tab,'~',lin,col-1);} if((pos(tab,lin-1,col)!='~' && pos(tab,lin-1,col)!='.' && pos(tab,lin-1,col)!='n') || (pos(tab,lin+1,col)!='~' && pos(tab,lin+1,col)!='.' && pos(tab,lin+1,col)!='n')){if(pos(tab,lin,col+1)=='.') coloca(tab,'~',lin,col+1); if(pos(tab,lin,col-1)=='.') coloca(tab,'~',lin,col-1);} else if((pos(tab,lin,col+1)!='~' && pos(tab,lin,col+1)!='.' && pos(tab,lin,col+1)!='n') || (pos(tab,lin,col-1)!='~' && pos(tab,lin,col-1)!='.' && pos(tab,lin,col-1)!='n')){if(pos(tab,lin+1,col)=='.') coloca(tab,'~',lin+1,col); if(pos(tab,lin-1,col)=='.') coloca(tab,'~',lin-1,col);} } else if(tab->quadro[lin][col]=='v'){ if(pos(tab,lin,col+1)=='.') coloca(tab,'~',lin,col+1); if(pos(tab,lin,col-1)=='.') coloca(tab,'~',lin,col-1); if(pos(tab,lin+1,col)=='.') coloca(tab,'~',lin+1,col);} else if(tab->quadro[lin][col]=='^'){ if(pos(tab,lin,col+1)=='.') coloca(tab,'~',lin,col+1); if(pos(tab,lin,col-1)=='.') coloca(tab,'~',lin,col-1); if(pos(tab,lin-1,col)=='.') coloca(tab,'~',lin-1,col);} else if(tab->quadro[lin][col]=='<'){ if(pos(tab,lin+1,col)=='.') coloca(tab,'~',lin+1,col); if(pos(tab,lin-1,col)=='.') coloca(tab,'~',lin-1,col); if(pos(tab,lin,col-1)=='.') coloca(tab,'~',lin,col-1);} else if(tab->quadro[lin][col]=='>'){ if(pos(tab,lin+1,col)=='.') coloca(tab,'~',lin+1,col); if(pos(tab,lin-1,col)=='.') coloca(tab,'~',lin-1,col); if(pos(tab,lin,col+1)=='.') coloca(tab,'~',lin,col+1);} else if(tab->quadro[lin][col]=='O'){ if(pos(tab,lin+1,col)=='.') coloca(tab,'~',lin+1,col); if(pos(tab,lin-1,col)=='.') coloca(tab,'~',lin-1,col); if(pos(tab,lin,col+1)=='.') coloca(tab,'~',lin,col+1); if(pos(tab,lin,col-1)=='.') coloca(tab,'~',lin,col-1);}} } return tab; }
/* funcao para processar a requisicao de um livro */ void requisitar(Livro livros, Utente utentes,Requisit requisit) { int reserva=1,valido=1; char opcao; Utente aux_u; Livro aux_l; Requisit aux_r; Requisit_str req_aux; f_espera aux_fila; while (valido==1) { if(!(aux_u = valida_u(utentes))) { printf("O codigo de utente introduzido nao existe!\n\n\n"); valido=0; break; } if(!vagas_u(requisit,aux_u->registo.cod_utente)) { printf("\n\nO utente ja atingiu o limite de requisicoes/reservas!\n\n\n"); valido=0; break; } if(!(aux_l = valida_l(livros))) { printf("O codigo do livro introduzido nao existe!\n\n\n"); valido=0; break; } if((aux_r = pesquisa_lista_r(requisit,aux_l->dados.cod_livro))) { printf("\n\nO livro encontra-se requisitado!\n\n\n"); aux_fila = aux_r->info.reserva.primeiro; while(aux_fila) { if(aux_fila->cod_utente==aux_u->registo.cod_utente) { printf("O utente ja possui um pedido de reserva para este livro!\n\n\n"); reserva=0; } aux_fila = aux_fila->prox; } if(reserva==1) { do { printf("Pretende reservar o livro? (S/N): "); printf("\n"); opcao=getchar(); opcao=toupper(opcao); } while (opcao!='S' && opcao != 'N'); if(opcao=='S') { coloca(&aux_r->info.reserva,aux_u->registo.cod_utente); printf("\nO livro foi reservado com sucesso!\n\n\n"); gravar_fich(requisit,0); printf("\n\nInformacao guardada em disco.\n\n\n"); } } valido=0; break; } break; } if(valido==1) { req_aux.cod_livro = aux_l->dados.cod_livro; req_aux.cod_utente = aux_u->registo.cod_utente; data_actual(&req_aux.data_r); cria_fila(&(req_aux.reserva)); insere_lista_r(requisit,req_aux); printf("\n\nO livro foi requisitado com sucesso!\n\n"); gravar_fich(requisit,aux_l->dados.cod_livro); printf("\n\nInformacao guardada em disco.\n\n\n"); } }
void constroi(Livro livros, Utente utentes, Requisit requisit) { int aux,teste; char nome_aux[MAX]; Livro_str livro_aux; Utente_str utente_aux; Requisit_str requisit_aux; FILE *livro_f, *utente_f, *requisit_f; livro_f = fopen("livros.txt","r"); utente_f = fopen("utentes.txt","r"); requisit_f = fopen("requisit.txt","r+"); /* Ler dados do ficheiro livros.txt para a lista ligada Livro */ while(1) { fgets(nome_aux,MAX,livro_f); aux = strlen(nome_aux); nome_aux[aux-1] = '\0'; strcpy(livro_aux.nome,nome_aux); if(fscanf(livro_f,"%d",&livro_aux.cod_livro)!=1) { printf("Houve um erro na leitura do ficheiro livros.txt\n\n"); pause(); exit(1); } insere_lista_l(livros,livro_aux); if(fscanf(livro_f,"%d",&aux)==EOF) break; } /* Ler dados do ficheiro utentes.txt para a lista ligada Utente */ while(1) { fgets(nome_aux,MAX,utente_f); if(!(aux = strlen(nome_aux))) { printf("Houve um erro na leitura do ficheiro utentes.txt\n\n"); pause(); exit(1); } nome_aux[aux-1] = '\0'; strcpy(utente_aux.nome,nome_aux); if(fscanf(utente_f,"%d",&utente_aux.cod_utente)!=1) { printf("Houve um erro na leitura do ficheiro utentes.txt\n\n"); pause(); exit(1); } insere_lista_u(utentes,utente_aux); if(fscanf(utente_f,"%d",&aux)==EOF) break; } /* Ler dados do ficheiro requisit.txt para a lista ligada Requisit */ while(1) { if((teste=fscanf(requisit_f,"%d",&requisit_aux.cod_livro))!=1 && teste!=-1) { printf("Houve um erro na leitura do ficheiro requisit.txt\n\n"); pause(); exit(1); } if (teste!=-1) { if(fscanf(requisit_f,"%d",&requisit_aux.cod_utente)!=1) { printf("Houve um erro na leitura do ficheiro requisit.txt\n\n"); pause(); exit(1); } if(fscanf(requisit_f,"%d/%d/%d",&requisit_aux.data_r.dia,&requisit_aux.data_r.mes,&requisit_aux.data_r.ano)!=3) { printf("Houve um erro na leitura do ficheiro requisit.txt\n\n"); pause(); exit(1); } cria_fila(&(requisit_aux.reserva)); while(1) { if(fscanf(requisit_f,"%d",&aux)!=1) { printf("Houve um erro na leitura do ficheiro requisit.txt\n\n"); pause(); exit(1); } if (aux!=0) coloca(&(requisit_aux.reserva),aux); else break; } insere_lista_r(requisit,requisit_aux); if((fgetc(requisit_f)==EOF)) break; } else break; } fclose(livro_f); fclose(utente_f); fclose(requisit_f); }