Ir para conteúdo

Arquivado

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

AndinhoJp

Função que retorne vetor.

Recommended Posts

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

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

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

×

Informação importante

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