[Resolvido] programa com struc aninhado
#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
Discussão (4)
Carregando comentários...