Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

ricardo99

[Resolvido] programa com struc aninhado

Recommended Posts

#include<stdio.h>
#include<string.h>
int anoatual;
int mesatualn;//mes em numeros
struct nascimento
{
   char mes[11];
   int ano;
};
typedef struct nascimento data;
struct gado
{
   int codigo;
   float leite;
   float alim;
   char abate[2];
   data nasc;
}vetgado[4];
void qtdabate()
{
   int abate;
   abate = 0;
   int i;
   for(i=0;i<4;i++)
   {
       if(vetgado[i].abate == 'S')
       {
           abate++;
       }
   }
}
void leiteabate()
{
   int i;
   i = 0;
   int leite_abate;
   leite_abate = 0;
   for(i=0;i<4;i++)
   {
       if(vetgado[i].abate == 'N')
       {
           leite_abate+= vetgado[i].leite;
       }
   }
   printf("%f",leite_abate);
}
void alimabate()
{
   int i;
   float alim_abate;
   alim_abate = 0;
   for(i=0;i<4;i++)
   {
       if(vetgado[i].abate == 'N')
       {
           alim_abate+=vetgado[i].alim;
       }
   }
   printf("%f\n",alim_abate);
}
void alimenporsemana()
{
   float kilosporsemana;
   kilosporsemana=0;
   int i;
   for(i=0;i<4;i++)
   {
       kilosporsemana+=vetgado[i].alim;
   }
   printf("%f\n",kilosporsemana);
}
void leiteporsemana()
{
   int i;
   float litrosporsemana;
   litrosporsemana=0;
   for(i=0;i<4;i++)
   {
       litrosporsemana+=vetgado[i].leite;
   }
   printf("%f\n",litrosporsemana);
}
void leitura()
{
   int i;
   int mes_aux;//para receber como um numero
   int meses_de_vida;//a quantos meses o animal
   //esta vivoe ex. 60 = 5 anos.
   for(i=0;i<4;i++)
   {
       do{
           printf("Digite o CODIGO do gado.\n");
           scanf("\n%i",&vetgado[i].codigo);
           printf("Digite a quantidade em litros de LEITE produzido por semana.\n");
           scanf("\n%f",&vetgado[i].leite);
           printf("Digite a quantidade em kilos de ALIMENTO consumido por semana.\n");
           scanf("\n%f",&vetgado[i].alim);
           printf("Digite o MES de nascimento do animal com 1 ao 12.\n");
           scanf("\n%i",&mes_aux);
           printf("Digite o ANO de nascimento do animal.\n");
           scanf("\n%i",&vetgado[i].nasc.ano);
       }while((mes_aux < 1)||(mes_aux > 12)||(vetgado[i].nasc.ano < 1));
       meses_de_vida = anoatual - vetgado[i].nasc.ano + mesatualn - mes_aux;
       switch (mes_aux)
       {
           case 1:
               strcpy(vetgado[i].nasc.mes, "janeiro");
           break;
           case 2:
               strcpy(vetgado[i].nasc.mes, "fevereiro");
           break;
           case 3:
               strcpy(vetgado[i].nasc.mes, "marco");
           break;
           case 4:
               strcpy(vetgado[i].nasc.mes, "abril");
           break;
           case 5:
               strcpy(vetgado[i].nasc.mes, "maio");
           break;
           case 6:
               strcpy(vetgado[i].nasc.mes, "junho");
           break;
           case 7:
               strcpy(vetgado[i].nasc.mes, "julho");
           break;
           case 8:
               strcpy(vetgado[i].nasc.mes, "agosto");
           break;
           case 9:
               strcpy(vetgado[i].nasc.mes, "setembro");
           break;
           case 10:
               strcpy(vetgado[i].nasc.mes, "outubro");
           break;
           case 11:
               strcpy(vetgado[i].nasc.mes, "novembro");
           break;
           case 12:
               strcpy(vetgado[i].nasc.mes, "dezembro");
           break;
           default:
               printf("Mes invalido");
           break;
       }
       if(meses_de_vida < 60)
       {
           if(vetgado[i].leite > 40)
           {
               if(((vetgado[i].alim)/7 < 50)&&(vetgado[i].leite > 50))
               {
                   strcpy(vetgado[i].abate, 'N');
               }
           }
       }
       else
           strcpy(vetgado[i].abate,'S');
   }
}
int main()
{
   int opcao;
   char mesatual[11];
   do{
       printf("Digite o mes em que estamos com numeros de 1 ao 12\n");
       scanf("\n%i",&mesatualn);
       printf("Digite o ano em que estamos\n");
       scanf("\n%i",&anoatual);
   }while((anoatual < 1)||(mesatualn < 1)||(mesatualn > 12));
   switch (mesatualn)
       {
           case 1:
               strcpy(mesatual, "janeiro");
           break;
           case 2:
               strcpy(mesatual, "fevereiro");
           break;
           case 3:
               strcpy(mesatual, "marco");
           break;
           case 4:
               strcpy(mesatual, "abril");
           break;
           case 5:
               strcpy(mesatual, "maio");
           break;
           case 6:
               strcpy(mesatual, "junho");
           break;
           case 7:
               strcpy(mesatual, "julho");
           break;
           case 8:
               strcpy(mesatual, "agosto");
           break;
           case 9:
               strcpy(mesatual, "setembro");
           break;
           case 10:
               strcpy(mesatual, "outubro");
           break;
           case 11:
               strcpy(mesatual, "novembro");
           break;
           case 12:
               strcpy(mesatual, "dezembro");
           break;
           default:
               printf("Mes invalido");
           break;
       }
   do{
       refaz: printf("Digite 1 para ler a base de dados.\n");
       printf("Digite 2 para ver o total de leite produzido pela fazenda por semana.\n");
       printf("Digite 3 para ver o total de alimento consumido por semana na fazenda.\n");
       printf("Digite 4 para ver o total de leite produzido pela fazenda por semana apos o abate.\n");
       printf("Digite 5 para ver o total de alimento consumindo pela fazenda por semana apos o abate.\n");
       printf("Digite 6 para ver o tatal de cabecas de gado que iram para o abate\n");
       printf("Digite 7 para 'SAIR' do programa.\n");
       scanf("%i",&opcao);
   }while((opcao<1)||(opcao>6));
   leitura();
   switch (opcao)
   {
       case 1:
           leitura(); goto refaz;
       break;
       case 2:
           leiteporsemana(); goto refaz;
       break;
       case 3:
           alimenporsemana(); goto refaz;
       break;
       case 4:
           leiteabate(); goto refaz;
       break;
       case 5:
           alimabate(); goto refaz;
       break;
       case 6:
           qtdabate(); goto refaz;
       break;
       case 7:
           return 1;
       break;
       default:
           printf("Opcao invalida");
       break;
   }
   return 0;
}

 

 

 

o enunciado do programa

Elaborar um programa em C que auxilie no controle de uma fazenda de gado que possuí um total de 2000 cabeças de gado. A base de dados é formada por um conjunto de estruturas (registros) contendo os seguintes campos referente a cada cabeça de gado:

código: código da cabeça de gado,

leite: número de litros de leite produzido por semana,

alim: quantidade de alimento ingerida por semana - em quilos,

nasc: data de nascimento - mês e ano,

abate: 'N" (não) ou 'S' (sim).

O campo nasc. é do tipo struct data que por sua vez, possui dois campos:

mês

ano

Elaborar funções para:

a) Ler a base de dados (código, leite, alim, nasc.mês e nasc.ano), armazenado em um vetor de estruturas.

B) Preencher o campo abate, considerando que a cabeça de gado irá para o abate caso:

 tenha mais de 5 anos, ou;

 produza menos de 40 litros de leite por semana, ou;

 produza entre 50 e 70 litros de leite por semana e ingira mais de 50 quilos de alimento por dia.

Crie o menu de opções para:

c) Devolver a quantidade total de leite produzida por semana na fazenda.

d) Devolver a quantidade total de alimento consumido por semana na fazenda.

e) Devolver a quantidade total de leite que vai ser produzido por semana na fazenda, após o abate

f) Devolver a quantidade total de alimento que vai ser consumido por semana na fazenda, após o abate

g) Devolver número de cabeças de gado que iram para o abate.

h) Sair do programa

OBS ao inves de 2000 cabeças de boi eu coloquei so 4 para teste

mas este programa para na 1 primeira ou 2 vez que faz o loop

Compartilhar este post


Link para o post
Compartilhar em outros sites

ricardo99,

 

Não adianta você postar o código senão explicar quais as suas dificuldades de forma mais sucinta.

 

Bom, pelo que analisei. Você de veria analisar melhor a função main a principal do programa.

Pois o uso da instrução goto para alterar o fluxo de execução é extremamente desaconselhada. O uso desta instrução deixa muitas brechas para erros por parte do programador.

Evite ela sempre, com certeza você consegue encontrar a solução sem o uso do goto.

 

As outras funções, aparentemente, estão corretas.

 

Sds, GBecker.

Compartilhar este post


Link para o post
Compartilhar em outros sites

veleu gente consegui fazer este codigo funcionar mas me tirem esta duvida com struct aninhado

 

struct nascimento

{

char mes[11];

int ano;

};

typedef struct nascimento data;

struct gado

{

int codigo;

float leite;

float alim;

char abate[2];

data nasc;

}vetgado[4];

 

ele esta desta forma?

 

e na hora de armazenar

 

&vetgado.alim

 

&vetgado.nasc.ano

Compartilhar este post


Link para o post
Compartilhar em outros sites

ricardo99,

 

Você não precisa utilizar o & para acessar o dado, quando a variável é estática.

Não o utiliza que irá funcionar.

 

Espero ter ajudado, FLW! :grin:

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.