2
respostas

Atividade com função

Estou tentando fazer uns exercícios com função, porém não consigo entender o pq está dando errado, alguém pode me dar uma luz?

#include <stdio.h>
#include <stdlib.h>

/*Escreva o programa que recebe um numero arbitrário de inteiros
positivos e:
• mostra qual foi o maior e o menor valor fornecido
• calcula a soma dos números pares.
Obs. Desconsiderar os eventuais números negativos digitados por usuário*/


int acharmenorvalor(int vetor[], int tamanho){
    int menor, i;
    menor = vetor[1];
    for (i=1;i<tamanho;i++){
        if (vetor[i]<menor){
        menor = vetor[i];
        }
    }
}

int acharmaiorvalor(int vetor[], int tamanho){
    int maior, i;
    maior = vetor[0];
    for (i=1;i<tamanho;i++){
        if (vetor[i]>maior){
        maior = vetor[i];
        }
    }
}


int soma(int x){
    int som;
    if(x%2 == 0){
        som+= x;
}else{
    som = som;
}
    return som;
}

int main()
{
    int quant, numero,ma,me,so;
    int cont = 1;
    printf("Quantos numeros você deseja digitar? ");
    scanf("%i", &quant);
    while(cont <= quant){
        printf("Digite um numero: ");
        scanf("%i", &numero);
        me = acharmenorvalor(numero);
        ma = acharmaiorvalor(numero);
        so = soma(numero);
        cont++;
    }
    printf("Maior numero: %i \n", ma);
    printf("Menor numero: %i \n", me);
    printf("A soma dos numeros pares: %i \n", so);
    return 0;
}
2 respostas

Olá Pâmella,

Não tenho conhecimento aprofundado de C para poder tirar todas as suas duvidas, porém irei indicar alguns pontos para ir te auxiliando enquanto alguém responda de maneira mais detalhada.

1 - função acharmenorvalor:

  • um vetor em C sempre inicia na posição zero, por isso menor = vetor[1]; pode produzir resultados indesejados, o correto seria menor = vetor[0];;

  • após encontrar o menor valor, o mesmo não é retornado pela função (return menor;);

2 - função acharmaiorvalor:

  • após encontrar o maior valor, o mesmo não é retornado pela função (return maior;);

3 - função soma:

  • como nas duas funções anteriores você utiliza um vetor com os números digitados, seria legal você utilizar a mesma abordagem para a função soma, ai você verificaria do primeiro até o último número somando em caso de número par. Um ponto importante, inicialize sua variável que irá armazenar o resultado da soma com zero para evitar resultados incorretos.

4 - função main:

  • você utiliza vetores nas suas funções, porém não declarou nenhum.

  • você está chamando as funções acharmenorvalor, acharmaiorvalor e soma dentro do while, porém enquanto você está no loop, nem todos os valores já foram lidos, então deixe para chamar essas funções fora do while.

  • as funções acharmenorvalor e acharmaiorvalor possuem dois parâmetros, porém você informou somente um e que não é um vetor.

Espero ter auxiliado em algo.

Att., Mateus

O mateus colocou alguns pontos importantes que valem ser vistos.

Tem alguns erros no seu código, e não necessariamente precisa usar array nele da pra fazer sem, vou mandar a versão dele corrigido sem array.

#include <stdio.h>
#include <stdlib.h>

/*Escreva o programa que recebe um numero arbitrário de inteiros
positivos e:
• mostra qual foi o maior e o menor valor fornecido
• calcula a soma dos números pares.
Obs. Desconsiderar os eventuais números negativos digitados por usuário*/


int acharmenorvalor(int x, int me){
    if (x<me){
        me =x;
    }
    return me;
}

int acharmaiorvalor(int x, int ma){
    if (x>ma){
        ma = x;
    }
    return ma;
}


int soma(int x, int so){
    if(x%2 == 0){
        so+= x;
    }
    return so;
}

int main()
{
    int quant, numero,ma=0,me=9999,so=0;
    int cont = 1;
    printf("Quantos numeros você deseja digitar? ");
    scanf("%i \n", &quant);
    while(cont <= quant){
        printf("Digite um numero: ");
        scanf("%i", &numero);

        if (numero>=0){
            me = acharmenorvalor(numero,me);
            ma = acharmaiorvalor(numero,ma);
            so = soma(numero,so);
            cont++;
        }
    }

    printf("Maior numero: %i \n", ma);
    printf("Menor numero: %i \n", me);
    printf("A soma dos numeros pares: %i \n", so);
    return 0;
}

foram alguns pequenos erros bobos que se aprende com a pratica.

como no caso de buscar o maior numero sempre iniciar maior com 0 para que qualquer variável que venha seja maior que ela e o menor com um numero bem alto que no caso coloquei 9999 para que ele possa pegar o verdadeiro numero menor do programa porque se deixasse como 0 ele passaria como o menor.

também foi preciso uma verificação para ver se o numero é positivo antes de executar porque foi pedido no enunciado.

espero ter ajudado.