コード例 #1
0
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);

			}
}
コード例 #2
0
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;}
コード例 #3
0
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;
}
コード例 #4
0
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;

}
コード例 #5
0
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;
}
コード例 #6
0
/* 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");
    }
}
コード例 #7
0
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);

}