Ir ao conteúdo
  • Cadastre-se
Daniel Natan Schmitz

Problema com função em c

Recommended Posts

Boa tarde, sou novato e estou no 1 período da faculdade, e meu professor passou o seguinte exercício :

 

"Desenvolva um programa que contenha uma função que receba 4 notas de um aluno e uma letra que representa o tipo do cálculo. Se a letra for “A”, a função deverá fazer o cálculo da média aritmética das notas do aluno. Caso for a letra “P”, a função deverá realizar o cálculo de média ponderada com pesos, 4, 3, 2 e 1. Não deve ser permitido que o usuário informe uma letra diferente daquelas definidas para a função (para isso crie uma função que leia e valide o caractere digitado e retorne o mesmo para ser passado para a função do cálculo). Apresente o resultado da média, bem como se é média ponderada ou aritmética no corpo do programa principal."

 

Cheguei ao seguinte código:

#include <stdio.h>

char valida (char *escolha)
{
    if (*escolha = 'P' || 'p' || 'A' || 'a'){
        return *escolha;
    }
    else return 'r';
}

media_aritmetica(float *nota1, float *nota2, float *nota3, float *nota4)
{
    float resultado=0;
    resultado = (*nota1 + *nota2 + *nota3 + *nota4) / 4;
    return resultado;
}

media_ponderada(float *nota1, float *nota2, float *nota3, float *nota4)
{
    float resultado=0;
    resultado = (*nota1 * 4 + *nota2 * 3 + *nota3 * 2 + *nota4 * 1) / (4+3+2+1);
}

int main()
{
    char escolha, escolha_validada;
    float nota1=0, nota2=0, nota3=0, nota4=0, media=0;

    printf("Digite os valores das quatro notas:\n");
    scanf("%f%f%f%f", &nota1, &nota2, &nota3, &nota4);

    fflush(stdin);

    do {
        printf("Digite A para media aritmetica e P para media ponderada\n");
        scanf("%c", &escolha);

        escolha_validada = valida(&escolha);

        if(escolha_validada == 'r'){
            printf("Escolha invalida, por favor tente novamente\n");
        }

    }while (escolha_validada == 'r');

    if (escolha == 'P' || 'p' ){
        media = media_ponderada(&nota1, &nota2, &nota3, &nota4);
        printf("A media ponderada é: %f", media);
    }
    else{
        media = media_aritmetica(&nota1, &nota2, &nota3, &nota4);
        printf("A media aritmetica é: %f", media);
    }
    return 0;
}

 

Porém ao executa-lo ele não esta executando corretamente, apresenta sempre a média ponderada, e ainda por cima pega lixo na memória. Como na imagem:Capturar.JPG

Compartilhar este post


Link para o post
Compartilhar em outros sites

Tente fazer assim

Citação

escolha == 'P' || escolha == 'p'

Porque que eu saiba precisa fazer a comparação para cada situação.

 

E também na função que calcula a media ponderada você não está dando o retorno do resultado, por isso está imprimindo lixo de memoria.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisar ser um membro para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora





Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas publicações sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×