Ir ao conteúdo

Posts recomendados

Postado

Então, eu fiz um programinha que aborda várias funções, dentre elas, calcular a média escolar.

A média é com base em 4 notas, então eu pego >>> (nota1 + nota2 + nota3 + nota4) / 4

 

Até aí, tudo bem. Mas quando eu executo o programa e digito as 4 notas no valor 5, por exemplo, a média final deveria ser 5, correto?

 

Porém a média final sempre passa de 5. No caso, fica: 5.19038e-318...

 

A média que o aluno precisa atingir é o usuário que escolhe. Tipo assim, o usuário escolhe que ele precisa atingir a média 5 pra ser aprovado. Aí ele digita as 4 notas, vamos supor que todas elas são 5. Ele deveria ser aprovado, porém alguma coisa acontece na condição 'if' que diz que o resultado é menor que a média, então o programa entende que o aluno foi reprovado.

 

Eu não tô entendo o porquê disso, vou mandar o código pra vocês verem. Quem puder me dizer o que tá errado, eu agradeço. Valeu!

 

image.thumb.png.f639fcfb7a5c1d10c2be1aaca62d6d3f.png

 

            double media;
            double nota1;
            double nota2;
            double nota3;
            double nota4;
            double resultado = (nota1 + nota2 + nota3 + nota4) / 4;


            cout <<"Você acessou a função 'Média'."<< endl;
            cout << endl;
            cout <<"Primeiramente, me diga qual é a média mínima: ";
            cin >> media;
            cout <<"Você precisa atingir a média '"<< media <<"' para ser aprovado."<< endl;
            cout << endl;
            cout <<"Agora, me diga a sua primeira nota: "<< endl;
            cin >> nota1;
            cout <<"Agora, me diga a sua segunda nota: "<< endl;
            cin >> nota2;
            cout <<"Agora, me diga a sua terceira nota: "<< endl;
            cin >> nota3;
            cout <<"Agora, me diga a sua quarta nota: "<< endl;
            cin >> nota4;
            cout <<"Sua média final foi: "<< resultado << endl;
                if (resultado >= media)
                {
                    cout << endl;
                    cout <<"Parabéns, você foi aprovado!"<< endl;
                }
                else
                {
                    cout << endl;
                    cout <<"Infelizmente, você foi reprovado!"<< endl;
                }

 

Postado
19 minutos atrás, Math.Pi disse:

Engraçado. Parece tudo certo, mas está errado. Acho que isso é pegadinha do double. Troque aquele número 4 por 4.0.

Troquei mas o problema continua, não sei o que pode ser. Revisei o código inteiro umas 1000x e parece tudo OK...

Postado

@Math.Pi Booooa! Agora foi. Valeu mesmo!

 

Tem algum motivo específico pra isso ficar após a leitura das notas ou é só alguma regra da linguagem mesmo?

  • Membro VIP
Postado

Você precisa ter alguma informação na variável antes de fazer o cálculo. Você estava fazendo o cálculo com a variável vazia. O resultado era aquele lixo de memória, aquele número esquisito.

  • Curtir 1
Postado
10 horas atrás, Ian Vianna disse:

Tem algum motivo específico pra isso ficar após a leitura das notas ou é só alguma regra da linguagem mesmo?

 

O motivo é a realidade, não a linguagem. Seria como você me dever R$35,50 e você me pagar com 4 notas. E eu te dar o troco ANTES de saber o valor das quatro notas.

 

Não sei se entendi o que quer programar, mas se usava isso em outras linguagens em C++ você pode escrever assim

 

    auto f_media = [](double a, double b, double c, double d) -> double
        { return  (a+b+c+d) / 4.; };

 

E aí pode sim definir em uma linha só, mas calcular na hora em que chama. Sim, uma função.

 

O mesmo poderia ser usado, claro, para comparar o resultado com a média e dizer se o cara foi aprovado
 

        auto f_res = [](double m, double a) -> string
            { return m >= a ? "Aprovado" : "Reprovado"; };

 

E aí poderia escrever no código
 

    double media = f_media(nota1,nota2,nota3,nota4);
    cout <<"\nSua media final foi: "<< media << 
        " e com esse resultado voce foi \"" << f_res(media,alvo) <<
        "\" neste curso\n";

 

Quando postar um código poste um PROGRAMA inteiro, que se possa copiar e compilar., Ajude os outros a ajudarem você :)

 

Algo assim

 

#include <iostream>
using namespace std;

int main()
{
    double alvo;
    double nota1;
    double nota2;
    double nota3;
    double nota4;

    auto f_media = [](double a, double b, double c, double d) -> double
        { return  (a+b+c+d) / 4.;  };
    auto f_res = [](double m, double a) -> string
        { return m >= a ? "Aprovado" : "Reprovado"; };

    cout <<"voce acessou a funcao 'Media'.\n";
    cout <<"Primeiramente, me diga qual a media minima: ";
    cin >> alvo;
    cout <<"voce precisa atingir a media '"<< alvo <<"' para ser aprovado.\n";
    cout <<"Agora, me diga a sua primeira nota: ";
    cin >> nota1;
    cout <<"Agora, me diga a sua segunda nota: ";
    cin >> nota2;
    cout <<"Agora, me diga a sua terceira nota: ";
    cin >> nota3;
    cout <<"Agora, me diga a sua quarta nota: ";
    cin >> nota4;

    double media = f_media(nota1,nota2,nota3,nota4);
    cout <<"\nSua media final foi: "<< media << 
        " e com esse resultado voce foi \"" << f_res(media,alvo) <<
        "\" neste curso\n";
    return 0;
}

 

  • Curtir 2

Crie uma conta ou entre para comentar

Você precisa ser um usuário 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 comunidades 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

×
×
  • Criar novo...

Ebook grátis: Aprenda a ler resistores e capacitores!

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!