Brauche Hilfe - Aufgabe von Stroustrup - Kapitel 4
-
Hallo,
ich bräuchte Hilfe bei Aufgabe 6 aus dem Buch Einführung in die Programmierung mit C++ - Kapitel 4.
Die Aufgabe ist, das ich eine double Variable einlesen und dann den Wert ausgeben soll und je nachdem ob es dann der bisher größte oder kleinste Wert ist hinter dem Wert „ ist größer“ oder „ ist kleinster“ Wert ausgeben soll.
Bei dem größten Wert ist das kein Problem. Ich initialisiere max. mit 0 und alles was größer ist, ist dann der erste max. wert.
Wenn ich dann 3 eingebe wäre das ja der bisher kleinste Wert abhängig von max. also initialisiere ich min. mit dem Wert von max. wenn min noch 0 ist.
Das klappt dann soweit bis ich wieder eine 0 eingebe - dann wird min wieder resettet also auf den Wert von max. gesetzt.Außerdem funktioniert die Eingabe bei 1 2 1 nicht. Die Bedingung für min. lautet ja ob die eingeben Zahl kleiner als min. ist. Da min. = max. nach dem ersten Durchlauf ist gilt das also nicht. Würde ich aber kleiner gleich benutzen würde die Ausgabe bei allen doppelten min. Werten erscheinen.
Da Code mehr als tausend Worte sagt:
#include <iostream> using namespace std; int main(){ double value, max = 0, min = 0; while (cin >> value){ cout << value; if (value > max){ max = value; cout << " bisher der groesste Wert\n"; } if (value == max && min == 0) min = max; if (value < min){ min = value; cout << " bisher der kleinste Wert\n"; } } return 0; }Gruß Dentho
-
#include <limits> double min = std::numeric_limits<double>::max(); double max = std::numeric_limits<double>::min();
-
Vielen Dank! Kannte zwar den Befehl aber wäre da jetzt echt nicht drauf gekommen

-
du kannst alternativ auch den ersten eingelesenen wert direkt in min und max reinschreiben (also ohne die bedingung bei der if).
und die sache bei zeile 15 solltest du lassen, gleichheits-vergleiche bei fliesskommazahlen machen oft nicht was du denkst.
-
Aber da der Wert ja in der Schleife eingelesen wird würde ich doch bei jedem Durchlauf immer wieder den aktuellen Wert in min und max schreiben?
Edit: Der Min/Max Befehl funktioniert auch leider nur bei positiven Zahlen.
Die Eingabe -2 -1 erkennt nicht das -1 größer ist. Aber gut das kann ich ja abfangen indem ich es vorher in eine positive Zahl umwandel.
-
Wie gefällt Dir:
#include <iostream> using namespace std; int main(){ double value, max = 0, min = 0; cin >> value; cout << value << '\n' << "bisher sowohl groesster als auch kleinster Wert\n"; min = max = value; while (cin >> value){ cout << value << '\n'; if (value > max){ max = value; cout << " bisher der groesste Wert\n"; } if (value < min){ min = value; cout << " bisher der kleinste Wert\n"; } } return 0; }
-
Lynox schrieb:
Edit: Der Min/Max Befehl funktioniert auch leider nur bei positiven Zahlen.
Die Eingabe -2 -1 erkennt nicht das -1 größer ist. Aber gut das kann ich ja abfangen indem ich es vorher in eine positive Zahl umwandel.glaube ich dir nicht. zeige mal den code.
-
#include <iostream> using namespace std; int main(){ double value; double min = std::numeric_limits<double>::max(); double max = std::numeric_limits<double>::min(); while (cin >> value){ cout << value; if (value > max){ max = value; cout << " bisher der groesste Wert\n"; } if (value == max && min == 0) min = max; if (value < min){ min = value; cout << " bisher der kleinste Wert\n"; } } return 0; }Eingabe: -5 wird als kleinster Wert erkannt. -3 danach nicht als größter Wert. Der erste Wert der dann erkannt wird muss größer 0 sein.
Laut Definition des Befehls gibt er auch nur den kleinst möglichen "positiven" double Wert aus.
Die Variante von Belli ist für die Aufgabe super - nur bei der folge Aufgabe die darauf aufbaut leider nicht mehr da ich dann den Code aus der Schleife doppelt benutzen müsste.
Edit:
Okay mit: double max = std::numeric_limits<long>::min(); geht es - der erste Wert ist dann immer der größte. Danke
Edit2:
Belli´s Variante mit ner do-while Schleife klappt dann auch mit dem Rest der Aufgaben die auf dem Code aufbauen - kam zwar bisher nur while und for im Buch vor aber so gehts
Edit 3:
Belli´s Variante mit while(cin) und am Ende der Schleife erst neue Werte einlesen klappt auch. Ich danke euch, ihr habt mir sehr dabei geholfen es zu verstehen
-
Wirf das hier raus:
if (value == max && min == 0)
min = max;