Wie bestimme ich den höchsten und den niedrigsten Wert mithilfe von do while-Schleifen?

Ich stecke derzeit in meinen Hausaufgaben fest und das Problem ist, dass ich ein Programm erstellen muss, das nach 5 ganzen Zahlen gefragt wird, und ich sollte den höchsten und den niedrigsten Wert bestimmen. Ich bin jetzt ziemlich verwirrt, und mein ursprünglicher Code ist dieser.

#include
using namespace std;

int main(){

 int num1,num2,num3,num4,num5,min=0,max=0;

 cout << " Enter 1st number : ";
 cin >> num1;
 cout << " Enter 2nd number : ";
 cin >> num2;
 cout << " Enter 3rd number : ";
 cin >> num3;
 cout << " Enter 4th number : ";
 cin >> num4;
 cout << " Enter 5th number : ";
 cin >> num5;
 do{
    if(num10);
 cout << " The highest number is : " <

Jede Hilfe wäre dankbar. Danke im Voraus!

3
Schauen Sie sich std :: max an, vorausgesetzt, Ihr Auftrag erlaubt es.
hinzugefügt der Autor Cornstalks, Quelle
Wissen Sie, was ein Array ist?
hinzugefügt der Autor NathanOliver, Quelle
Arrays oder Vektoren, wie sie in C ++ aufgerufen werden, machen diese Aufgabe wesentlich einfacher. Ein Tutorial zu diesem Thema finden Sie hier . Ich bin sicher, dass der Professor nichts dagegen hat, wenn Sie eine einfachere Lösung finden.
hinzugefügt der Autor K1ngjulien_, Quelle
@NathanOliver mein Professor sagte uns, dass wir nur während und wenn wir nicht auf Arrays sind
hinzugefügt der Autor james, Quelle

6 Antworten

Wenn Sie std :: max und std :: min verwenden dürfen, können Sie Folgendes verwenden:

max = std::max({num1, num2, num3, num4, num5});
min = std::min({num1, num2, num3, num4, num5});

um den Code in der Schleife zu vereinfachen.

1
hinzugefügt

Anstatt alle Zahlen jedes Mal zu vergleichen. Vergleichen Sie einfach Ihren aktuellen Kleinsten mit den Zahlen in der Reihenfolge.

int data[5];
// read numbers into data.

int min = data[0];  //Guess that number 0 is the smallst number.

// Now check if the guess is correct and update if you are wrong.
for(int loop = 0; loop < 5; ++loop)
{
    //check if data[loop] is smaller than your current guess.
    //if it is smaller than update your guess.
    //when you have checked all the values exit the loop.
}
std::cout << "Smallest: " << min << "\n";
0
hinzugefügt

You should store your numbers into a std::vector or std::array and then use the std::minmax_element algorithm to obtain the largest and smallest number.

0
hinzugefügt

Es ist nicht notwendig, eine Schleife zu verwenden, um dies zu tun. Sie können dies auch ohne sie tun. Wenn Sie eine Schleife verwenden möchten, müssen Sie ein Array oder eine andere Datenstruktur verwenden

0
hinzugefügt

Dies wäre meine Lösung ohne Arrays. Ich würde dir vorschlagen, es vorher selbst auszuprobieren. Sie lernen nicht, wenn Sie nur Code kopieren.

#include 

int main() {
    int i=0, num, min=FP_INFINITE, max=-FP_INFINITE;

    do {
        std::cout << "Enter number: ";
        std::cin >> num;
        if (num < min) {
            min = num;
        }
        if (num > max) {
            max = num;
        }
        i++;
    } while (i < 5);

        std::cout << "The max number is: " << max << std::endl;
        std::cout << "The min number is: " << min << std::endl;

    return 0;
}
0
hinzugefügt
Dadurch wird das falsche Maximum für {- 1, -2, -3} angegeben
hinzugefügt der Autor NathanOliver, Quelle
Warum nicht INT_MIN und INT_MAX als Werte. Ich denke nicht, dass FP_INFINITE Ihnen den richtigen Wert geben wird.
hinzugefügt der Autor NathanOliver, Quelle
Ich bekomme 1 für seinen Wert hier .
hinzugefügt der Autor NathanOliver, Quelle
@ NathanOliver Vielen Dank. Max wurde von Anfang an 0 in -FP_INFINITE geändert. Jetzt sollte es klappen
hinzugefügt der Autor Uli Sotschok, Quelle
Ich habe sowohl (FP_INFINITE und INT_MAX/INT_MIN) als auch für mich getestet, beide haben einfach gut funktioniert. Aber ich bin auch sehr neu in C ++, daher weiß ich nicht wirklich, welcher besser passt
hinzugefügt der Autor Uli Sotschok, Quelle

Wenn Sie sich nicht erinnern müssen, können Sie eine Schleife für z. 5 mal, dann haben Sie einen Vergleich, bevor Sie die nächste Nummer abfragen.

so allgemein (idee, schreib es selbst und lerne):

for (5 times)
ask user input, save as input
if largest number is null, then equal to input
else if largest number is smaller, then set input equal to largest number

Weiter für Schleifenzeiten.

0
hinzugefügt
Anstatt die größte Zahl auf null zu setzen, sollten Sie nur prüfen, ob es sich um die erste Iteration handelt. Wenn dies der Fall ist, ist die erste eingegebene Zahl die größte Zahl. Andernfalls wird die eingegebene Zahl mit der größten Zahl verglichen. Abgesehen davon ist dies eine großartige Antwort. Es löst das Problem tatsächlich am effizientesten.
hinzugefügt der Autor NathanOliver, Quelle
Das Problem bei der Angabe der größten Nummer als Anfangswert ist, wenn der Benutzer alle niedrigeren Zahlen eingibt, dann geben Sie ihnen die falsche Nummer. Wenn Sie es auf "null" (0) setzen und ich -1, -2, -3 eingebe, erhalte ich 0 als Maximum und nicht -1. Sie müssen also entweder prüfen, ob es sich um die erste Iteration handelt, die erste Zahl vor der Schleife abfragen und dann nur noch 4-mal die Schleife eingeben oder die größte Zahl auf die kleinste Zahl setzen, die es sein kann.
hinzugefügt der Autor NathanOliver, Quelle
Normalerweise versuche ich es zu vermeiden, dass es auf 0/erste Iteration geprüft wird, da Sie vielleicht so vorgehen möchten, dass Sie zuvor eine größte Zahl festgelegt haben. Dies ist jedoch in diesem Fall nicht der Fall, daher sind beide richtig. /zucken
hinzugefügt der Autor Marco, Quelle
Nein, was ich damit meine, wenn Sie es vorher speichern, z. Wenn Sie es aus einem Speicher oder einer zuvor eingegebenen Nummer entnehmen, können Sie die neuen Nummern abrufen und sie mit den alten vergleichen. Wenn ich zurückkomme und Funktionen hinzufüge, muss ich mich nie darum kümmern, alte Sachen zu bearbeiten. Ich meine nicht, ihm einen Wert zu geben. Eine andere Möglichkeit besteht darin, vor dem Eintritt in die Schleife nach der ersten Nummer zu fragen, um den leeren Scheck zu vermeiden.
hinzugefügt der Autor Marco, Quelle