hoe bepaal ik de hoogste en laagste waarde met do while-lussen

ik zit momenteel vast in mijn huiswerk en het probleem is dat ik een programma moet maken dat 5 gehele getallen zal vragen en ik zou de hoogste en laagste waarde moeten bepalen. Ik ben vanaf nu behoorlijk in de war en mijn eerste code is dit.

#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 : " <

Alle hulp wordt op prijs gesteld. Bij voorbaat dank!

3
Neem een ​​kijkje op std :: max , ervan uitgaande dat je opdracht het toelaat.
toegevoegd de auteur Cornstalks, de bron
Weet je wat een array is?
toegevoegd de auteur NathanOliver, de bron
Arrays of vectoren zoals ze in c ++ worden genoemd, maken deze taak een stuk eenvoudiger. Je zou een tutorial voor deze hier kunnen bekijken. Ik weet zeker dat de professor het niet erg zal vinden als je met een gemakkelijkere oplossing komt.
toegevoegd de auteur K1ngjulien_, de bron
@NathanOliver zei mijn professor dat we do while alleen moeten gebruiken en als we nog niet op array zijn
toegevoegd de auteur james, de bron

6 antwoord

Als u std: max en std :: min mag gebruiken, kunt u het volgende gebruiken:

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

om de code in de lus te vereenvoudigen.

1
toegevoegd

In plaats van alle getallen elke keer te vergelijken. Vergelijk eenvoudig je huidige kleinste tegen de nummers in volgorde.

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
toegevoegd

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
toegevoegd

Het is niet nodig om een ​​lus te gebruiken om dit te doen. U kunt dat doen zonder het anders, als het nodig is om een ​​lus te gebruiken, moet u een array of een andere datastructuur gebruiken

0
toegevoegd

Dit zou mijn oplossing zijn zonder arrays te gebruiken. Ik raad je aan het zelf eens te proberen. Je leert niet wanneer je alleen maar de code kopieert.

#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
toegevoegd
Dit geeft de verkeerde max voor {- 1, -2, -3}
toegevoegd de auteur NathanOliver, de bron
Waarom niet INT_MIN en INT_MAX als de waarden. Ik denk niet dat FP_INFINITE je de juiste waarde zal geven.
toegevoegd de auteur NathanOliver, de bron
Ik krijg er 1 voor zijn waarde hier , dus het is geen draagbare oplossing.
toegevoegd de auteur NathanOliver, de bron
@NathanOliver Bedankt. Max. Gewoon gewijzigd van initally 0 naar -FP_INFINITE. Nu zou het moeten werken
toegevoegd de auteur Uli Sotschok, de bron
Ik heb beide (FP_INFINITE en INT_MAX/INT_MIN) getest en voor mij werkten beide prima. Maar ik ben ook heel nieuw voor C ++, dus ik weet niet echt welke er beter bij past
toegevoegd de auteur Uli Sotschok, de bron

Als u het niet hoeft te onthouden, kunt u lus maken voor bijvoorbeeld 5 keer, dan een vergelijking voordat u het volgende nummer vraagt.

dus in het algemeen (idee, schrijf het zelf en leer):

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

Ga door voor lustijden.

0
toegevoegd
In plaats van het grootste aantal op nul in te stellen, moet je gewoon controleren of dit de eerste iteratie is. Als dat het geval is, is het eerste ingevoerde nummer het grootste getal, anders vergelijkt u het ingevoerde nummer met het grootste aantal. Daarnaast is dit een geweldig antwoord. Het lost het probleem eigenlijk het meest efficiënt op.
toegevoegd de auteur NathanOliver, de bron
Het probleem met het geven van het grootste aantal een initiële waarde is als de gebruiker alle nummers lager dan dat invoert, dan geeft u ze het verkeerde nummer. Als u deze op "null" (0) instelt en ik voer -1, -2, -3 in, dan krijg ik 0 als max en niet -1. Je moet dus controleren of het de eerste iteratie is, vraag om het eerste nummer vóór de lus en pas dan 4 keer een lus, of stel het grootste aantal in op de kleinste waarde.
toegevoegd de auteur NathanOliver, de bron
Meestal probeer ik te voorkomen dat het wordt gecontroleerd op 0/eerste iteratie omdat je het misschien zo wilt instellen dat je eerder een groot getal hebt ingesteld, maar in dit geval gebeurt dit niet, dus beide hebben gelijk./schouderophalen
toegevoegd de auteur Marco, de bron
Nee, wat ik daarmee bedoel is als je het eerder bewaart, bijvoorbeeld je neemt het van een opslag of eerder ingevoerd nummer, je kunt de nieuwe nummers krijgen en het vergelijken met oud. Maakt het gewoon zo dat als ik terugkom en functies toevoeg, ik me nooit zorgen hoef te maken over het bewerken van oude dingen. Ik bedoel niet dat ik het een waarde moet geven om mee te beginnen. Een andere manier om hierboven te doen, is om het eerste nummer te vragen voordat je de lus ingeeft, waardoor de lege cheque wordt vermeden.
toegevoegd de auteur Marco, de bron