2
respostas

Meu programa não está calculando corretamente ...

Quando compilo o programa, ele está dando erros esquisitos no cálculo. Por exemplo, quando coloco como chute o número 2, e então eu acerto o número que por conveniência coloquei como 32, ele apresenta que eu teria como pontuação final 984. Se faço ele trabalhar com vírgula fica pior ainda. Eis o código abaixo. Desde já agradeço.

#include <iomanip>
#include <ctype.h>
#include <iostream>
#include <stdlib.h>
using namespace std;

int const NUMERO_SECRETO=32;
int chute, acertou, maior, tentativas;
double pontos = 1000.0;
double pontos_perdidos = abs(chute - NUMERO_SECRETO) / 2.0;

int main () {
    setlocale (LC_ALL, "Portuguese");
    cout << "****************************************";
    cout << "\n****Bem-Vindo ao Jogo de Adivinhação****";
    cout << "\n****************************************";

    bool nao_acertou = true;



    while (nao_acertou) {
        tentativas++;
        cout << "\nTentativa(s) " << tentativas <<  ": " << endl;
        cout << "\n O valor do seu chute é: ";
        cin >> chute;
        cout << "\n O valor do seu chute é: " << chute << endl;


        acertou = chute == NUMERO_SECRETO;
        maior = chute > NUMERO_SECRETO;

        if(acertou) {
        cout << "\n\nParabéns, você acertou o número secreto!";
        nao_acertou = false;
        }
        else if (maior) {
        cout << "\n\nSeu número foi maior que o número secreto!";
        }
        else {
        cout << "\n\nSeu número foi menor que o número secreto!";
        }    
        }
        cout << "\n\nFim de jogo! ";
        cout << "\n Você acertou o número secreto em " << tentativas << "tentiva(s)" << endl;
        cout << "\n Sua pontuação foi de " << abs(pontos_perdidos - pontos) << "pontos.";
     }
2 respostas

Não há nada de estranho no funcionamento do seu programa, apenas o comportamento esperado dado o que você programou.

// Realiza o cálculo antes do valor de chute ser inserido, o que resulta valor padrão 0.
// Isso significa que o total de pontos_perdidos será sempre igual a 16; isto é |0 - 32|/2. 
// Como seu total de pontos é 1000, a diferença com 16 é precisamente 984.
double pontos_perdidos = abs(chute - NUMERO_SECRETO) / 2.0;

A sugestão mais simples para resolver seu problema é:

#include <iomanip>
#include <ctype.h>
#include <iostream>
#include <stdlib.h>

int const NUMERO_SECRETO = 32;
int chute, tentativas;
double pontos = 1000.0;

double debito(int);

int main () {
    setlocale (LC_ALL, "Portuguese");

    std::cout   << "****************************************"
                << "\n****Bem-Vindo ao Jogo de Adivinhação****"
                << "\n****************************************";

    bool nao_acertou = true;

    while (nao_acertou) {
        tentativas++;
        std::cout   << "\nTentativa(s) " << tentativas <<  ": \n"
                    << "\n\tO valor do seu chute é: ";
        std::cin    >> chute;

        if (chute == NUMERO_SECRETO) {
            std::cout << "\n\nParabéns, você acertou o número secreto!";
            nao_acertou = false;
        } else if (chute > NUMERO_SECRETO) {
            std::cout << "\n\nSeu número foi maior que o número secreto!";
        } else {
            std::cout << "\n\nSeu número foi menor que o número secreto!";
        }
    }

    std::cout   << "\n\nFim de jogo!\n"
                << "\n\tVocê acertou o número secreto em " << tentativas << "tentiva(s)" << '\n'
                << "\n\tSua pontuação foi de " << abs(pontos - debito(chute)) << " pontos.";

    return 0;
}

inline double debito(int chute) {
    return abs(chute - NUMERO_SECRETO) / 2.0;
}

Obrigado.