Ir para o conteúdo
  • Revista PROGRAMAR: Já está disponível a edição #60 da revista programar. Faz já o download aqui!

peterpah

Estrutura de dados

Mensagens Recomendadas

peterpah

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

typedef struct Data
 {
   int Dia[500];
   int Mes[500];
  }DATA ;

typedef struct Hora
 {
   int hora[500];
   int min[500];
 }HORA ;

typedef struct carro
 {
   char matricula[500];
   int classe [100] ;
   int portico[100];
   DATA data;
   HORA hora;
 }veiculo;

/* run this program using the console pauser or add your own getch, system("pause") or input loop */
void inserir (float porticos[20] [5])
{
  int i,j=0,cont=0;
  for (i=0;i<4;i++){
   cont++;
   printf("Protico %i \n",cont);
   for (j=0;j<5;j++)
 {
   printf("Insiria o preco do classe %i ",j+1);
   scanf("%f",&porticos[i][j]);
 }
   }
  }

void listar (float porticos[20] [5])
{
  int i,j,cont=0;
  for (i=0;i<4;i++)
   {
  cont++;
  printf("Protico %i \n",cont);
  for (j=0;j<5;j++)
   {
	 printf("O preco da %i classe e %f\n",j+1,porticos[i][j]);
   }
 }
 system ("Pause");
}

void procurar (float portico [20][5])
{
  int op,op2,i,j;
  printf("Escolha o portico\n Portico 1 \n Portico 2 \n Portico 3\n Portico 4\n Escolha -> ");
  scanf ("%i",&op);
  printf("Escolha a Classe \n Classe 1 \n Classe 2 \n Classe 3\n Classe 4 \n Classe 5\n Escolha-> ");
  scanf ("%i",&op2);
  system ("ClS");
  i=op-1;
  j=op2-1;
  printf("O preco da classe %i do portico %i e %f\n",op2,op,portico[i][j]);
  system ("Pause");
 }

void alterar (float porticos [20][5])
{
  int op,op2,i,j;
  printf("Escolha o portico que quer alterar os precos\n Portico 1 \n Portico 2 \n Portico 3\n Portico 4\n Escolha -> ");
  scanf ("%i",&op);
  system ("ClS");
  i=op-1;
 for (j=0;j<5;j++)
  {
    printf("Alterar o preco do classe %i ",j+1);
    scanf("%f",&porticos[i][j]); 
   }
}

void inserircarro(veiculo p,int soma){
int cont;
printf("%i",soma);
cont=soma;
printf("Insira a matricula do carro %i\n ",cont+1);
scanf ("%s",&p.matricula[cont]);
printf("Insira o dia \n ");
scanf ("%i",&p.data.Dia[cont]);
printf("Insira o mes ex('Janeiro corresponde ao 1')\n ");
scanf ("%i",&p.data.Mes[cont]);
printf("Insira a Hora \n");
scanf ("%i",&p.hora.hora[cont]);
printf("Insira os Minutos \n");
scanf ("%i",&p.hora.min[cont]);
printf("Insira o Portico\n");
scanf("%i",&p.portico[cont]);
printf("Insira a Classe \n ");
scanf ("%i",&p.classe[cont]);
}

void gasto (float porticos [20][5],veiculo p,int soma)
{
int at=0,i,k,pt,port,l;
float gasto;
char carro[100];
printf("Insira o carro que quer ver os gasto \n");
scanf ("%s",&carro);
for (i=0;i<=soma;i++)
 {
   if (strcmp(carro,p.matricula)==0 ) {
   at=1;
   printf("Qual e portico\n Portico 1 \n Portico 2 \n Portico 3\n Portico 4\n ->");
   scanf("%i",&port);
   system ("ClS");
   for (i=0;i<=soma;i++){
  if (strcmp (carro,p.matricula)==0)
   { l=p.classe[i];
	 k= l-1;
	 pt=port-1;
        gasto=gasto+porticos[pt][k];
   }
 }
   printf("O gasto do carro é %i ",gasto);
  }
  else {
   printf("O carro nao existe");
  }
 }
}
void ganhoclasse(float porticos [20][5], veiculo p,int soma)
{
int pot,i,l,k,pt;
float ganho=0;
printf("%i",soma);
printf("Qual e portico que quer saber o ganho \n Portico 1 \n Portico 2 \n Portico 3\n Portico 4\n ->");
scanf("%i",&pot);
for (i=0;i<soma;i++){
if (pot==p.portico[i])
{	 l=p.classe[i];
k= l-1;
pt=pot-1;
 ganho=ganho+porticos[pt][k];

}


}
printf("O Dinheiro do portico %i e %f ",pot,ganho);
system ("PAUSE");
}
void listarcarros (veiculo p,int soma)
{
int j;
for (j=0;j<soma;j++)
{
printf("%s",p.matricula[j]);
printf("%i",p.matricula[j]);
printf("o dia \n %i ",p.data.Dia[j]);
printf(" o mes \n %i",p.data.Mes[j]);
printf(" a Hora \n %i",p.hora.hora[j]);
printf(" os Minutos %i \n",p.hora.min[j]);
printf(" o Portico %i\n",p.portico[j]);
printf(" a Classe %i \n ",p.classe[j]);


}
system ("Pause");
}
int main(int argc, char *argv[]) {
 veiculo p;
int op,soma;
float porticos [20][5];
do
{
 system ("ClS");
printf(" Escolha a opccao!\n");
printf("1. Inserir os porticos no sistema.\n");
printf("2. Listar a informacao de todos os porticos;\n");
printf("3. Saber o preco pago num determinado portico por uma classe de veiculos;\n");
printf("4. Alterar os precos de um determinado portico; \n");
printf("5. Inserir uma passagem de um veiculo num portico;\n");
printf("6. Saber o total gasto (em €) por um veiculo, em todos os porticos ao longo dos tempos;\n ");
printf("7. Saber, para uma determinada classe de veiculos, o total (em €) recebido num determinado dia, em todos os porticos; \n");
printf("8. Saber, para cada classe de veiculos, o total de veiculos que passaram um determinado portico.\n");
printf("9. Saber o total (em €) recebido num determinado portico num determinado dia;\n");
printf("10. Saber o número de veiculos que passa em media nos porticos;\n");
printf("0. Sair;\n");
printf("Op ->");
scanf("%i",&op);
switch (op){

case 1 :
	 system ("ClS");
inserir(porticos);
break;
case 2:
	 system ("ClS");
	 listar(porticos);
break;
case 3:
		 system ("ClS");
	 procurar(porticos);
break;
case 4:
		 system ("ClS");
	 alterar(porticos);
break;
case 5:
system ("ClS");

inserircarro(p,soma);
soma=soma+1;
break;
case 6:
system ("ClS");
gasto (porticos,p,soma);
break;

case 7:
ganhoclasse(porticos,p,soma);
break;
case 8:
listarcarros(p,soma);
break;
case 9:
break;

}


} while (op!=0);
return 0;
}

Eu meto a listar a estrutura de dados e nao aparece nada onde ta o problema?

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
eatg75

Se queres que alguem te ajude idente o teu codigo se faz fazor!


Victarion seized the dusky woman by the wrist and pulled her to him.

Victarion - She will do it. Go pray to your red god. Light your fire, and tell me what you see.

Moqorro's dark eyes seemed to shine.

Moqorro - I see dragons.

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
NuGuN

Boas!

peterpah, devias realmente identar o teu código para que se perceba um bocado melhor. ;)

Agora ao que interessa, vi apenas a parte dos pórticos e parece-me que o teu problema está na forma como passas o argumento para a função inserir().

Da forma como a estás a passar, vais estar a alterar uma variável que apenas existe no escopo daquela função, e assim sendo, quando essa função termina, essa variável é apagada.

O melhor será utilizares ponteiros.

Cumps!

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
eatg75

@NuGun nao existe nada de errada com a inserir() (a nao ser a especificao explicita do tamanho do array no primeiro nivel, nao e obrigatorio aqui apenas e obrigatorio para o segundo nivel, tambem a especificao dos duas dimensoes de um array multidimensional e apenas obrigatorio para variaveis quando estao a declaradas sem inicializacao). Quando a "forma" como ele esta passar os parametros nao existe problema nenhum pois o argumento e um ponteiro valido, um array e um pointeiro!... i.e. um ponteiro para o primeiro elemento do array (Pointers 101).

@peterpah vi algumas coisas que nao tas a fazer bem e comentei-as

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
typedef struct Data
{
 int Dia[500];
 int Mes[500];
}DATA ;
typedef struct Hora
{
 int hora[500];
 int min[500];
}HORA ;
typedef struct carro
{
 char matricula[500];
 int classe [100] ;
 int portico[100];
 DATA data;
 HORA hora;
}veiculo;
/* run this program using the console pauser or add your own getch, system("pause") or input loop */
void inserir (float porticos[20] [5]) // 1 -> aqui nao precisas expecificar o tamanho do array no nivel 1, o 20 e facultativo,
{									 // mas o tamanho para o segundo nivel e obrigatorio e deves passar um array multidimensional
								  // que especificado aqui.
 int i,j=0,cont=0;				  
 for (i=0;i<4;i++){
   cont++;
   printf("Protico %i \n",cont);
   for (j=0;j<5;j++)
  {
    printf("Insiria o preco do classe %i ",j+1);
    scanf("%f",&porticos[i][j]); // 2 -> o carater "&" e opcional  porticos ja e um ponteiro, ja estas a ter acesso a referencia de porticose[i][j]
  }
 }
}
void listar (float porticos[20] [5])
{
 int i,j,cont=0;
 for (i=0;i<4;i++)
   {
  cont++;
  printf("Protico %i \n",cont);
  for (j=0;j<5;j++)
    {
	  printf("O preco da %i classe e %f\n",j+1,porticos[i][j]);
    }
   }
 system ("Pause");
}
void procurar (float portico [20][5])
{
 int op,op2,i,j;
 printf("Escolha o portico\n Portico 1 \n Portico 2 \n Portico 3\n Portico 4\n Escolha -> ");
 scanf ("%i",&op);
 printf("Escolha a Classe \n Classe 1 \n Classe 2 \n Classe 3\n Classe 4 \n Classe 5\n Escolha-> ");
 scanf ("%i",&op2);
 system ("ClS");
 i=op-1;
 j=op2-1;
 printf("O preco da classe %i do portico %i e %f\n",op2,op,portico[i][j]);
 system ("Pause");
}
void alterar (float porticos [20][5])
{
 int op,op2,i,j;
 printf("Escolha o portico que quer alterar os precos\n Portico 1 \n Portico 2 \n Portico 3\n Portico 4\n Escolha -> ");
 scanf ("%i",&op);
 system ("ClS");
 i=op-1;
 for (j=0;j<5;j++)
   {
  printf("Alterar o preco do classe %i ",j+1);
  scanf("%f",&porticos[i][j]); // mesma coisa que em 2
   }
}
void inserircarro(veiculo p,int soma){
 int cont;
 printf("%i",soma);
 cont=soma;
 printf("Insira a matricula do carro %i\n ",cont+1);
 scanf ("%s",&p.matricula[cont]); // p.matricula e um ponteiro logo "&" e facultativo
 printf("Insira o dia \n ");
 scanf ("%i",&p.data.Dia[cont]);
 printf("Insira o mes ex('Janeiro corresponde ao 1')\n ");
 scanf ("%i",&p.data.Mes[cont]);
 printf("Insira a Hora \n");
 scanf ("%i",&p.hora.hora[cont]);
 printf("Insira os Minutos \n");
 scanf ("%i",&p.hora.min[cont]);
 printf("Insira o Portico\n");
 scanf("%i",&p.portico[cont]);
 printf("Insira a Classe \n ");
 scanf ("%i",&p.classe[cont]);
}
void gasto (float porticos [20][5],veiculo p,int soma)
{
 int at=0,i,k,pt,port,l;
 float gasto;
 char carro[100];
 printf("Insira o carro que quer ver os gasto \n");
 scanf ("%s",&carro); // "&" opcional
 for (i=0;i<=soma;i++)
   {
  if (strcmp(carro,p.matricula)==0 ) {
    at=1;
    printf("Qual e portico\n Portico 1 \n Portico 2 \n Portico 3\n Portico 4\n ->");
    scanf("%i",&port);
    system ("ClS");
    for (i=0;i<=soma;i++){
	  if (strcmp (carro,p.matricula)==0)
	    { l=p.classe[i];
		  k= l-1;
		  pt=port-1;
		  gasto=gasto+porticos[pt][k];
	    }
    }
    printf("O gasto do carro é %i ",gasto); //  deves usar %f para o gasto {see man 3 printf}
  }
  else {
    printf("O carro nao existe");
  }
   }
}
void ganhoclasse(float porticos [20][5], veiculo p,int soma)
{
 int pot,i,l,k,pt;
 float ganho=0;
 printf("%i",soma);
 printf("Qual e portico que quer saber o ganho \n Portico 1 \n Portico 2 \n Portico 3\n Portico 4\n ->");
 scanf("%i",&pot);
 for (i=0;i<soma;i++){
   if (pot==p.portico[i])
  {	    l=p.classe[i];
    k= l-1;
    pt=pot-1;
    ganho=ganho+porticos[pt][k];
  }

 }
 printf("O Dinheiro do portico %i e %f ",pot,ganho);
 system ("PAUSE");
}
void listarcarros (veiculo p,int soma)
{
 int j;
 for (j=0;j<soma;j++)
   {
  printf("%s",p.matricula[j]); // estas mandar o printf() escrever para STDOUT um string com um inteiro ? WTF? N
  printf("%i",p.matricula[j]); // ao queres antes escrever a matricula toda? podias faze-lo com '"%s", p.matriculas ' sem indexar o array
  printf("o dia \n %i ",p.data.Dia[j]);
  printf(" o mes \n %i",p.data.Mes[j]);
  printf(" a Hora \n %i",p.hora.hora[j]);
  printf(" os Minutos %i \n",p.hora.min[j]);
  printf(" o Portico %i\n",p.portico[j]);
  printf(" a Classe %i \n ",p.classe[j]);

   }
 system ("Pause");
}
int main(int argc, char *argv[]) {
 veiculo p;
 int op,soma;
 float porticos [20][5];
 do
   {
  system ("ClS");
  printf(" Escolha a opccao!\n");
  printf("1. Inserir os porticos no sistema.\n");
  printf("2. Listar a informacao de todos os porticos;\n");
  printf("3. Saber o preco pago num determinado portico por uma classe de veiculos;\n");
  printf("4. Alterar os precos de um determinado portico; \n");
  printf("5. Inserir uma passagem de um veiculo num portico;\n");
  printf("6. Saber o total gasto (em €) por um veiculo, em todos os porticos ao longo dos tempos;\n ");
  printf("7. Saber, para uma determinada classe de veiculos, o total (em €) recebido num determinado dia, em todos os porticos; \n");
  printf("8. Saber, para cada classe de veiculos, o total de veiculos que passaram um determinado portico.\n");
  printf("9. Saber o total (em €) recebido num determinado portico num determinado dia;\n");
  printf("10. Saber o número de veiculos que passa em media nos porticos;\n");
  printf("0. Sair;\n");
  printf("Op ->");
  scanf("%i",&op);
  switch (op){
  case 1 :
    system ("ClS");
    inserir(porticos);
    break;
  case 2:
    system ("ClS");
    listar(porticos);
    break;
  case 3:
    system ("ClS");
    procurar(porticos);
    break;
  case 4:
    system ("ClS");
    alterar(porticos);
    break;
  case 5:
    system ("ClS");
    inserircarro(p,soma);
    soma=soma+1;
    break;
  case 6:
    system ("ClS");
    gasto (porticos,p,soma);
    break;
  case 7:
    ganhoclasse(porticos,p,soma);
    break;
  case 8:
    listarcarros(p,soma);
    break;
  case 9:
    break;
  }

   } while (op!=0);
 return 0;
}


Victarion seized the dusky woman by the wrist and pulled her to him.

Victarion - She will do it. Go pray to your red god. Light your fire, and tell me what you see.

Moqorro's dark eyes seemed to shine.

Moqorro - I see dragons.

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
HappyHippyHippo

o problema encontrasse (como sempre) no uso indiscriminado do scanf. bastou fazer a limpeza do buffer de leitura para por tudo a listar correctamente.

para não falar no uso da função system, algo que não deveria existir, só complica as coisas ... (se bem que uso no clear screen porque desconfio que gostas disso)

código alterado para resolver a tua situação:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

typedef struct Data {
 int Dia[500];
 int Mes[500];
} DATA ;

typedef struct Hora {
 int hora[500];
 int min[500];
}HORA ;

typedef struct carro {
 char matricula[500];
 int classe[100] ;
 int portico[100];
 DATA data;
 HORA hora;
} veiculo;

#define CLEAR_SCREEN system("clear")
#define CLEAR_INPUT while ( getchar() != '\n' );
#define PAUSE CLEAR_INPUT; getchar();

void inserir (float porticos[][5]) {
 int i,j=0,cont=0;

 for (i=0;i<4;i++){
   cont++;
   printf("Protico %i \n",cont);
   for (j=0;j<5;j++) {
     printf("Insiria o preco do classe %i ",j+1);
     scanf("%f",&porticos[i][j]);
     CLEAR_INPUT;
   }
 }
}

void listar (float porticos[][5]) {
 int i,j,cont=0;

 for (i=0;i<4;i++) {
   cont++;
   printf("Protico %i \n",cont);
   for (j=0;j<5;j++)
     printf("O preco da %i classe e %f\n", j+1, porticos[i][j]);
 }
}

void procurar (float porticos[][5]) {
 int op,op2,i,j;

 printf("Escolha o portico\n Portico 1 \n Portico 2 \n Portico 3\n Portico 4\n Escolha -> ");
 scanf ("%i",&op);
 CLEAR_INPUT;
 printf("Escolha a Classe \n Classe 1 \n Classe 2 \n Classe 3\n Classe 4 \n Classe 5\n Escolha-> ");
 scanf ("%i",&op2);
 CLEAR_INPUT;
 CLEAR_SCREEN;
 i=op-1;
 j=op2-1;
 printf("O preco da classe %i do portico %i e %f\n",op2,op,porticos[i][j]);
}

void alterar (float porticos[][5]) {
 int op,i,j;

 printf("Escolha o portico que quer alterar os precos\n Portico 1 \n Portico 2 \n Portico 3\n Portico 4\n Escolha -> ");
 scanf ("%i",&op);
 CLEAR_INPUT;
 CLEAR_SCREEN;
 i=op-1;
 for (j=0;j<5;j++) {
   printf("Alterar o preco do classe %i ",j+1);
   scanf("%f",&porticos[i][j]); // mesma coisa que em 2
   CLEAR_INPUT;
 }
}

void inserircarro(veiculo p,int soma) {
 int cont;

 printf("%i",soma);
 cont=soma;
 printf("Insira a matricula do carro %i\n ",cont+1);
 scanf ("%s",&p.matricula[cont]);
 CLEAR_INPUT;
 printf("Insira o dia \n ");
 scanf ("%i",&p.data.Dia[cont]);
 CLEAR_INPUT;
 printf("Insira o mes ex('Janeiro corresponde ao 1')\n ");
 scanf ("%i",&p.data.Mes[cont]);
 CLEAR_INPUT;
 printf("Insira a Hora \n");
 scanf ("%i",&p.hora.hora[cont]);
 CLEAR_INPUT;
 printf("Insira os Minutos \n");
 scanf ("%i",&p.hora.min[cont]);
 CLEAR_INPUT;
 printf("Insira o Portico\n");
 scanf("%i",&p.portico[cont]);
 CLEAR_INPUT;
 printf("Insira a Classe \n ");
 scanf ("%i",&p.classe[cont]);
 CLEAR_INPUT;
}

void gasto (float porticos[][5],veiculo p,int soma) {
 int i,k,pt,port,l;
 float gasto;
 char carro[100];
 printf("Insira o carro que quer ver os gasto \n");
 scanf ("%s", carro);
 CLEAR_INPUT;
 for (i=0;i<=soma;i++) {
   if (strcmp(carro,p.matricula)==0 ) {
     printf("Qual e portico\n Portico 1 \n Portico 2 \n Portico 3\n Portico 4\n ->");
     scanf("%i",&port);
     CLEAR_INPUT;
     CLEAR_SCREEN;
     for (i=0;i<=soma;i++){
       if (strcmp (carro,p.matricula)==0) {
         l=p.classe[i];
         k= l-1;
         pt=port-1;
         gasto=gasto+porticos[pt][k];
       }
     }
     printf("O gasto do carro é %f ", gasto);
   } else {
     printf("O carro nao existe");
   }
 }
}

void ganhoclasse(float porticos[][5], veiculo p,int soma) {
 int pot,i,l,k,pt;
 float ganho=0;

 printf("%i",soma);
 printf("Qual e portico que quer saber o ganho \n Portico 1 \n Portico 2 \n Portico 3\n Portico 4\n ->");
 scanf("%i",&pot);
 CLEAR_INPUT;
 for (i=0;i<soma;i++) {
   if (pot==p.portico[i]) {
     l=p.classe[i];
     k= l-1;
     pt=pot-1;
     ganho=ganho+porticos[pt][k];
   }
 }

 printf("O Dinheiro do portico %i e %f ",pot,ganho);
}

void listarcarros (veiculo p,int soma) {
 int j;
 for (j=0;j<soma;j++) {
   printf("%i",p.matricula[j]);
   printf("%i",p.matricula[j]);
   printf("o dia \n %i ",p.data.Dia[j]);
   printf(" o mes \n %i",p.data.Mes[j]);
   printf(" a Hora \n %i",p.hora.hora[j]);
   printf(" os Minutos %i \n",p.hora.min[j]);
   printf(" o Portico %i\n",p.portico[j]);
   printf(" a Classe %i \n ",p.classe[j]);
 }
}

int main(int argc, char *argv[]) {
 veiculo p;
 int op,soma;
 float porticos [20][5];

 do {
   CLEAR_SCREEN;
   printf(" Escolha a opccao!\n");
   printf("1. Inserir os porticos no sistema.\n");
   printf("2. Listar a informacao de todos os porticos;\n");
   printf("3. Saber o preco pago num determinado portico por uma classe de veiculos;\n");
   printf("4. Alterar os precos de um determinado portico; \n");
   printf("5. Inserir uma passagem de um veiculo num portico;\n");
   printf("6. Saber o total gasto (em €) por um veiculo, em todos os porticos ao longo dos tempos;\n ");
   printf("7. Saber, para uma determinada classe de veiculos, o total (em €) recebido num determinado dia, em todos os porticos; \n");
   printf("8. Saber, para cada classe de veiculos, o total de veiculos que passaram um determinado portico.\n");
   printf("9. Saber o total (em €) recebido num determinado portico num determinado dia;\n");
   printf("10. Saber o número de veiculos que passa em media nos porticos;\n");
   printf("0. Sair;\n");
   printf("Op ->");
   scanf("%i",&op);
   switch (op) {
   case 1 :
     CLEAR_SCREEN;
     inserir(porticos);
     PAUSE;
     break;
   case 2:
     CLEAR_SCREEN;
     listar(porticos);
     PAUSE;
     break;
   case 3:
     CLEAR_SCREEN;
     procurar(porticos);
     PAUSE;
     break;
   case 4:
     CLEAR_SCREEN;
     alterar(porticos);
     PAUSE;
     break;
   case 5:
     CLEAR_SCREEN;
     inserircarro(p,soma);
     soma=soma+1;
     PAUSE;
     break;
   case 6:
     CLEAR_SCREEN;
     gasto (porticos, p, soma);
     PAUSE;
     break;
   case 7:
     CLEAR_SCREEN;
     ganhoclasse(porticos, p, soma);
     PAUSE;
     break;
   case 8:
     CLEAR_SCREEN;
     listarcarros(p,soma);
     PAUSE;
     break;
   case 9:
     break;
   }

 } while (op!=0);

 return 0;
}

Editado por HappyHippyHippo

IRC : sim, é algo que ainda existe >> #p@p

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!

Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.

Entrar Agora

×

Aviso Sobre Cookies

Ao usar este site você aceita os nossos Termos de Uso e Política de Privacidade. Este site usa cookies para disponibilizar funcionalidades personalizadas. Para mais informações visite esta página.