AndinhoJp 0 Denunciar post Postado Setembro 18, 2014 Boa noite,estou tentando resolver um algoritmo através de uma função que deve receber a idade e o peso da pessoa e depois retornar com a média do peso entre uma determinada faixa etária. Para isso eu decidi fazer o retorno através de um vetor que voltaria "apenas" uma variavel e na hora de classificar os pesos seria apenas definir onde os valores se encontram. Porém, percebi que ele não está retornando sempre com valor 0 no vetor e gostaria de saber o que eu estou fazendo de errado: #include<stdio.h> #define max 5 int organizador(int idade,float peso){ int cla1, cla2, cla3, cla4; cla1 = cla2 = cla3 = cla4 = 0; float faixa_et2[4] = {0,0,0,0}; if(idade>=1 && idade<= 10){ faixa_et2[0] = faixa_et2[0]+peso; cla1++; }else{if(idade>=11 && idade<=20){ faixa_et2[1] = faixa_et2[1]+peso; cla2++; }else{if(idade>=21 && idade<= 30){ faixa_et2[2] = faixa_et2[2]+peso; cla3++; }else{if(idade>=30){ faixa_et2[3] = faixa_et2[3]+peso; cla4++; } } } } faixa_et2[0] = faixa_et2[0]/cla1; faixa_et2[1] = faixa_et2[1]/cla2; faixa_et2[2] = faixa_et2[2]/cla3; faixa_et2[3] = faixa_et2[3]/cla4; return faixa_et2[5]; } int main(void){ int idade, k=1; float peso, faixa_et, faixa_et2[4]; while(k != max){ printf("\nDigite a idade da %d%c pessoa: ",k, 167); scanf("%d", &idade); printf("Digite o peso da %d%c pessoa: ",k, 167); scanf("%f", &peso); faixa_et = organizador(idade, peso); k++; } printf("\nMedia:\n"); printf("De 1 a 10 anos: %.2fkg\n", faixa_et2[0]); printf("De 11 a 20 anos: %.2fkg\n", faixa_et2[1]); printf("De 21 a 30 anos: %.2fkg\n", faixa_et2[2]); printf("Mais de 30 anos: %.2fkg\n", faixa_et2[3]); return 0; } Compartilhar este post Link para o post Compartilhar em outros sites
zanuttin 0 Denunciar post Postado Setembro 28, 2014 Deixe eu ver se entendi: Você quer que a função organizador retorne um vetor? Bem, se não for me corrija mas se for ai vão alguns erros: -A função foi declarada como int e está retornando um valor float -A função está retornando o valor da sexta casa do vetor faixa_et, que tem quatro posições -A varíavel foi declarada dentro da função e consequentemente nao pode ser usada no main O que você pode fazer: -Declarar a função como float -Alocar o vetor dinamicamente o que o fará utilizavel dentro da main -Retornar o endereço de memória do vetor (&faixa_et) que será recebido por um ponteiro Coisas que eu faria diferente por questões de bons padrões de programação: -Na função é desnecessário o abuso dos elses -Tente usar seu código mais matematicamente, como nos prints do final do código que poderiam ficar: for(h = 1, i = 0; i < 3; h+=10, i++){ printf("De %d a %d anos: %.2fkg\n", h, h+9, faixa_et2[i]); } printf("Mais de 30 anos: %.2fkg\n", faixa_et2[3]); Primeiro porque aplicar uma mudança no código fica muito mais facil e segundo porque estimula o seu raiocinio lógico e facilitara o desenvolvimento de algoritmos no futuro. Espero não ter ajudado, estou aprendendo assim como você então me desculpe qualquer erro e se puder ajudar com outra coisa só falar :) Compartilhar este post Link para o post Compartilhar em outros sites
edsoncury 0 Denunciar post Postado Outubro 1, 2014 Põe o enunciado do problema, talvez eu possa ajudar! Não consigo resolver , porque não entendí o que o program quer fazer, mas existem diversos erros simples que você está cometendo: int organizador(int idade,float peso){ int cla1, cla2, cla3, cla4; cla1 = cla2 = cla3 = cla4 = 0; //abaixo, os ifs estão alinhados de forma muiiito confusa float faixa_et2[4] = {0,0,0,0}; if(idade>=1 && idade<= 10){ faixa_et2[0] = faixa_et2[0]+peso; cla1++; }else{if(idade>=11 && idade<=20){ faixa_et2[1] = faixa_et2[1]+peso; cla2++; }else{if(idade>=21 && idade<= 30){ faixa_et2[2] = faixa_et2[2]+peso; cla3++; }else{if(idade>=30){ faixa_et2[3] = faixa_et2[3]+peso; cla4++; } } } } faixa_et2[0] = faixa_et2[0]/cla1;//???porque dividir float por int, se tanto cla1, cla2, cla3 e cla4 são sempre 1 ou //pior ZERO!!! faixa_et2[1] = faixa_et2[1]/cla2; faixa_et2[2] = faixa_et2[2]/cla3; faixa_et2[3] = faixa_et2[3]/cla4; //ERRO se um dos cla for zero, você terá um #NAM!!!! return faixa_et2[5];//ERRO você está retornando além do tamanho do vetor que tem 4 itens [0,1,2,3] //ERRO você está retornando float ao invés de int!!!! } int main(void){ int idade, k=1; float peso, faixa_et, faixa_et2[4]; while(k != max){ printf("\nDigite a idade da %d%c pessoa: ",k, 167); scanf("%d", &idade); printf("Digite o peso da %d%c pessoa: ",k, 167); scanf("%f", &peso); faixa_et = organizador(idade, peso);//faixa_et espera um float, mas a funcao retorna um int? k++; } //faixa_et2[] ??? vai ser exibido sem inicialização? //ou faixa_et2 é uma variavel global preenchida por organizador()??? printf("\nMedia:\n"); printf("De 1 a 10 anos: %.2fkg\n", faixa_et2[0]); printf("De 11 a 20 anos: %.2fkg\n", faixa_et2[1]); printf("De 21 a 30 anos: %.2fkg\n", faixa_et2[2]); printf("Mais de 30 anos: %.2fkg\n", faixa_et2[3]); return 0; } Compartilhar este post Link para o post Compartilhar em outros sites