Je travaille mon chemin à travers les principes de programmation et la pratique en utilisant C ++ et je suis coincé à l'étape 7 de l'exercice du chapitre 4. J'ai trouvé des questions similaires ici, mais quelque chose ne fonctionne pas bien avec la conversion des unités / valeurs et de voir ce qui est plus grand / plus petit. Le programme fonctionne bien, mais pour une raison quelconque, certaines conversions ne reviennent pas correctement, comme si j'entre 2 m, puis 2 pi 2 pi revient comme valeur la plus grande.

Je sais que le code a probablement l'air un peu moche, je mettrai la conversion dans une fonction si je peux faire fonctionner cela. Merci d'avance.

int main() {
double doubNum = 0;
double smallestNum = ' ';
double largestNum = 0;
string unitOfDistance = " ";
double testNum = 0;

cout << "Enter a distance with a unit of measure (ft, in, cm, m): ";

while (cin >> doubNum >> unitOfDistance) { //while tests to see if the input is a double and unit is legal

    //check the unitOfDistance and convert all values to cm and hold in testNum for comparison
    if (unitOfDistance == "in") { //in to cm
        testNum = doubNum * 2.54;
    }
    else if (unitOfDistance == "ft") { //ft to cm
        testNum = (doubNum * 12) * 2.54;
    }
    else if (unitOfDistance == "cm") { //cm
        testNum = doubNum;
    }
    else if (unitOfDistance == "m") { //m to cm
        testNum = doubNum * 100;
    }
    else {
        cout << "I don't know that unit.\n";
        return 0;
    }

    //check to see if testNum (the converted version of doubNum) is the smallest/largest/same value entered so far
    if (testNum < smallestNum) {
        smallestNum = doubNum;
        cout << smallestNum << " " << unitOfDistance << " is the smallest distance entered so far.\n";

    }
    else if (testNum > largestNum) {
        largestNum = doubNum;
        cout << largestNum << " " << unitOfDistance << " is the largest distance entered so far.\n";

    }
    else {
        cout << smallestNum << " " << unitOfDistance << " is the smallest distance entered so far.\n";
        cout << largestNum << " " << unitOfDistance << " is the largest distance entered so far.\n";
    }

    cout << "Enter another distance with unit: \n";
}}
c++
0
BigOrangeBall 17 janv. 2017 à 09:20

2 réponses

Meilleure réponse

Il y a quelques problèmes avec votre code:
1. double smallestNum = ' ' doit être remplacé par double smallestNum = DBL_MAX (ou une valeur très élevée).
2. Tout comme vous avez utilisé largestNum et smallestNum pour suivre les valeurs les plus grandes et les plus petites, vous devez également utiliser unitOfLargestDistance et unitOfSmallestDistance pour suivre leurs unités correspondantes .
3.

if (testNum < smallestNum) {
    smallestNum = doubNum;
    cout << smallestNum << " " << unitOfDistance << " is the smallest distance entered so far.\n";
}

Ici, vous devez mettre à jour smallestNum avec testNum et non doubNum. Donc ça devrait être comme:

if (testNum < smallestNum) {
    smallestNum = testNum;
    cout << doubNum << " " << unitOfDistance << " is the smallest distance entered so far.\n";
}

De même pour les 2 autres conditions.

0
xashru 17 janv. 2017 à 07:25

Essaye ça

#include <iostream>
#include <limits>
using namespace std;

int main() {
    double num, result, smallest, largest;
    smallest = numeric_limits<double>::max();
    largest = numeric_limits<double>::min();
    string unit;
    cout << "Enter a distance with a unit of measure (ft, in, cm, m): ";
    while (cin >> num >> unit) {
        if (unit == "in")       // in to cm
            result = num * 2.54;
        else if (unit == "ft")  // ft to cm
            result = (num * 12) * 2.54;
        else if (unit == "cm")  // cm
            result = num;
        else if (unit == "m")   // m to cm
            result = num * 100;
        else {
            cout << "I don't know that unit.\n";
            break;
        }
        smallest = min(smallest, result);
        largest = max(largest, result);
        cout << smallest << " cm is the smallest distance entered so far.\n";
        cout << largest << " cm is the largest distance entered so far.\n";
    }
    return 0;
}

Contribution

2 m
3 ft
6 in

Production

Enter a distance with a unit of measure (ft, in, cm, m):
200 cm is the smallest distance entered so far.
200 cm is the largest distance entered so far.
91.44 cm is the smallest distance entered so far.
200 cm is the largest distance entered so far.
15.24 cm is the smallest distance entered so far.
200 cm is the largest distance entered so far.
1
Shreevardhan 17 janv. 2017 à 10:12