ricardo99 0 Denunciar post Postado Junho 24, 2012 #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
GBecker 51 Denunciar post Postado Junho 24, 2012 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
ricardo99 0 Denunciar post Postado Junho 24, 2012 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
GBecker 51 Denunciar post Postado Junho 24, 2012 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
ricardo99 0 Denunciar post Postado Junho 24, 2012 valeu! Compartilhar este post Link para o post Compartilhar em outros sites