Hilfe bei einer Aufgabe (while-Schleife)



  • Hallo liebe Community,
    also ich bin ein ziemlicher Anfänger, interessiere mich aber sehr für C++ Programmierung, deswegen habe ich mir auch dafür ein ziemlich gutes Buch gekauft
    (nennt sich "Einführung in die Programmierung mit C++" von Bjarne Stroustrup). Bisher bin ich ganz zufrieden mit dem Buch, den es gibt dort auch Aufgaben zu den Kapitel. Ich lern C++ privat d.h. keine Schulfach.

    Lange Rede , kurzer Sinn. Ich bin in dem Buch auf eine Aufgabe gestossen, bei der ich weiter weiss. Kapitel habe ich mir öfters durchgelesen, habe auch versucht die Aufgabe zu lösen, leider nicht funktioniert. Nun muss ich mich "leider" hilfesuchend an diese Forum wenden.

    Die Aufgabe lautet wie folgt:
    *
    Ändern sie jetzt den Schleifenrumpf, sodass er bei jedem Schleifendurchlauf nur einen double-Wert einliest. Definieren Sie zwei Variablen um festzuhalten, welcher Wert bisher der kleinste und bisher der größte war. Geben Sie nach jedem Schleifendurchlauf den eingegebenen Wert aus. Wenn es der bisher kleinste Wert war, schreiben Sie nach der ausgegebenen Zahl "bisher der kleinste Wert", und wenn es bisher größte Wert war, schreiben Sie nach der Zahl "bisher der größte Wert".*

    Dieser Code soll geändert werden.

    #include "../../../std_lib_facilities.h"
    
    int main () 
    //Zeigt die grösste bzw. die kleinste Zahl an
    { 
    	double zahl1 = 0;
    	double zahl2 = 0;
    
    	cout<<"Geben sie zwei ganzzahlige Zahlen ein."<<endl;
    
    	//Eingabeaufforderung
    	while (cin>>zahl1>>zahl2){ 
    
    		if (zahl1<zahl2){
    			cout<<"Die groesste Zahl ist: "<<zahl2<<endl;
    			cout<<"Die kleinste Zahl ist: "<<zahl1<<endl;}
    
    		else if (zahl1==zahl2){
    			cout<<"Die Zahlen sind identisch."<<endl;}
    
    		else if (zahl1>zahl2){ 
    			cout<<"Die groesste Zahl ist: "<<zahl1<<endl;
    			cout<<"Die kleinste Zahl ist: "<<zahl2<<endl;}
    
    		cout<<"Zum Beenden der Schleife '|' eintippen."<<endl;
    	}
    
    keep_window_open();
    return 0;}
    

    Die Header-Datei (falls diese benötigt wird)kann man hier finden :http://www.stroustrup.com/Programming/std_lib_facilities.h

    Vektoren wurden in diesem Kapitel schon behandelt, aber in der Aufgabenstellung steht nichts von der Anwendung von Vektoren.

    Würde mich um einen Ratschlagen freuen 😃 .



  • Du brauchst eine Variable zum speichern der Eingabe und zwei weitere zum speichern des größte und kleinsten Wertes. Diese musst du in der Schleife mit einer if-Abfrage prüfen ob die eingegebene Zahl kleiner/größer ist. Wenn eines eintrifft muss die entsprechende Variable die Eingabe zugewiesen bekommen. Dann folgt die Ausgabe der Werte.



  • Danke für die schnelle Antwort. Leider komme ich mit der Aufgabe immer noch nicht klar :(.



  • Sizzling_Hot schrieb:

    Danke für die schnelle Antwort. Leider komme ich mit der Aufgabe immer noch nicht klar :(.

    Wie sieht dein Code nun aus, aber es scheint an den einfachsten Grundlagen zu mangeln. Du solltest dein Verständniss für Variablen verbessern.



  • Du muesstest dein Problem etwas genauer beschreiben...
    Hast Du einen Compiler fehler? oder macht das Program einfach nicht das was Du willst?

    Also
    Du sollst bei jedem Schleifendurchlauf genau EINE Zahl einlesen diese brauchst du nur dann zu speichern wenn sie groesser oder kleiner als die bisherigen extremwerte sind .
    Dafuer brauchst Du 2 Variablen die den min und max wert der bisher eingelesenen Zahlen speichert.

    Stell dir erstmal die Frage: Wo liest Du Zahlen ein und was musst du tun um nur eine einzulesen?

    Dann schick deinen Code mit deinen Aenderung und man schaut sich das mit sicherheit an und wird Dir helfen koennen



  • Danke für die Antwort. Und zu deiner Frage: Es ist kein Compilerfehler. Ich versteh nur die Aufgabe nicht ganz.Ich hab einen Code geschrieben, der gibt den eingegeben Wert aus und gibt an ob dieser kleiner bzw. größer als der Vorherige ist.

    #include "../../../std_lib_facilities.h"
    
    int main (){
    
    	double eingabe = 0;
    	double speicher =0 ;
    	double min = 0;
    	double max = 0;
    
    	while (cin>>eingabe){
    
    		if(eingabe < speicher){
    			max = eingabe;}
    
    		else if(eingabe>speicher){
    			min = eingabe;}
    
    		if (max < speicher){
    			cout<<"vorheriger Wert:"<<speicher<<endl;
    			cout<<"bisher niedrigster Wert:"<<max<<endl;}
    
    		else if(min>speicher){
    			cout<<"vorheriger Wert:"<<speicher<<endl;
    			cout<<"bisher höchster Wert:"<<min<<endl;}
    
    		 if(eingabe > speicher ||eingabe <speicher){
    			speicher = eingabe;}
    	}
    
    	keep_window_open();
    	return 0;
    }
    

    Stimmt der Code soweit? (Compiler meldet keine Fehler oder Warnungen)



  • Du brauchst keine zusätzliche Hilfsvariable, sondern solltest die Eingabe direkt mit min bzw. max vergleichen.
    (dabei solltest du min mit einem Wert initialisieren, der größer ist als jede mögliche Eingabe)



  • Wo kommt CStoll auf einmal her?



  • Incocnito schrieb:

    Wo kommt CStoll auf einmal her?

    Ist ne lange Geschichte, die aber nichts mit dem Thema zu tun hat 😉



  • Hier ist mein Vorschlag:

    #include "../../../std_lib_facilities.h" 
    
    int main (){ 
    	cout << "Geben Sie einen Wert ein: ";
    	double eingabe = 0;
    	cin >> eingabe;
    
    	double min = eingabe;
        double max = eingabe;
    	double speicher = eingabe;
    
        do{
    		cout << "\nvorheriger Wert:" << speicher;
    
            if(eingabe > max){
                max = eingabe;
                cout << "\nbisher höchster Wert:" << max;
    		}
            else if(eingabe < min){
                min = eingabe;
    			cout << "\nbisher niedrigster Wert: " << min;
    		}
            speicher = eingabe;
    
    		cout << "\n\nGeben Sie einen neuen Wert ein: ";
        }while(cin >> eingabe);
    
        keep_window_open();
    }
    


  • HighLigerBiMBam schrieb:

    Hier ist mein Vorschlag:

    #include "../../../std_lib_facilities.h" 
    
    int main (){ 
    	cout << "Geben Sie einen Wert ein: ";
    	double eingabe = 0;
    	cin >> eingabe;
    
    	double min = eingabe;
        double max = eingabe;
    	double speicher = eingabe;
    
        do{
    		cout << "\nvorheriger Wert:" << speicher;
    
            if(eingabe > max){
                max = eingabe;
                cout << "\nbisher höchster Wert:" << max;
    		}
            else if(eingabe < min){
                min = eingabe;
    			cout << "\nbisher niedrigster Wert: " << min;
    		}
            speicher = eingabe;
    
    		cout << "\n\nGeben Sie einen neuen Wert ein: ";
        }while(cin >> eingabe);
    
        keep_window_open();
    }
    

    bei do-while schleife bin ich noch nicht angekommen, hab aber meinen Code jetzt verändert, das er nicht zu gross ist. Vielen Dank dafür.

    CStoll schrieb:

    Du brauchst keine zusätzliche Hilfsvariable, sondern solltest die Eingabe direkt mit min bzw. max vergleichen.
    (dabei solltest du min mit einem Wert initialisieren, der größer ist als jede mögliche Eingabe)

    Danke für die Antwort. Werde mir den Code nochmal angucken ^^


Anmelden zum Antworten