Murcks Geschrieben 3. Februar 2006 Geschrieben 3. Februar 2006 Hi ihr! Brüte schon seit einiger Zeit über einer Aufgabe: Schreiben Sie ein C++ Programm, welches folgende Funktionalitäten hat: Es sollen drei Zahlen (Datentyp float) über die Tastatur eingelesen werden. Anschließend sollen das Minimum und das Maximum der drei Zahlen auf dem Bildschirm angezeigt werden. Beispiel für die Bildschirmausgabe: Erster Wert: 5 Zweiter Wert: 33 Dritter Wert: 22 Maximum: 33 Minimum: 5 Bedingungen: 1. Benutzen Sie genau drei If-Anweisungen. 2. Sie dürfen nur If-Anweisungen, Operatoren, cin und cout verwenden. Zusatzaufgabe: Schreiben sie das Programm ohne eine einzige If-Anweisung! Das habe ich bisher fabriziert: #include <iostream.h> void main() { float fNum1 = 0, fNum2 = 0, fNum3 = 0; cout << "Bitte geben Sie den ersten Wert ein: "; cin >> fNum1; cout << "Bitte geben Sie den zweiten Wert ein: "; cin >> fNum2; cout << "Bitte geben Sie den dritten Wert ein: "; cin >> fNum3; if ( ( fNum1 < fNum2 ) && ( fNum1 > fNum3 ) ) { cout << "Minimum: " << fNum2 << endl; cout << "Maximum: " << fNum3 << endl; } else { cout << "Minimum: " << fNum3 << endl; cout << "Maximum: " << fNum2 << endl; } if ( ( fNum2 < fNum1 ) && ( fNum2 > fNum3 ) ) { cout << "Minimum: " << fNum1 << endl; cout << "Maximum: " << fNum3 << endl; } else { cout << "Minimum: " << fNum3 << endl; cout << "Maximum: " << fNum1 << endl; } if ( ( fNum3 < fNum1 ) && ( fNum3 > fNum2 ) ) { cout << "Minimum: " << fNum1 << endl; cout << "Maximum: " << fNum2 << endl; } else { cout << "Minimum: " << fNum2 << endl; cout << "Maximum: " << fNum1 << endl; } } Irgendwie schaff ich's net... Weiß jemand weiter? LG Murcks Zitieren
SNOWMAN Geschrieben 3. Februar 2006 Geschrieben 3. Februar 2006 wo genau ist denn dein problem? hmm... wenn ich mir die erste abfrage mal anguck if ( ( fNum1 < fNum2 ) && ( fNum1 > fNum3 ) ) { cout << "Minimum: " << fNum2 << endl; cout << "Maximum: " << fNum3 << endl; } seh ich das Minimum und Maximum vertauscht sind. Wenn Num1 kleiner Num 2 ist Num2 als Num1 ist num1 > Num3 ist Num3 < Num 2 Als kette: Num2>Num1>Num3 Num2 = maximum Num3 = minimum naja und der else-zwei der ersten abfrage is ja dann auch andersrum oder blick ichs grad selber nich? Zitieren
Klotzkopp Geschrieben 3. Februar 2006 Geschrieben 3. Februar 2006 Irgendwie schaff ich's net... Deine Vorgehensweise ist ja auch schon vom Ansatz her schlecht. Es gibt 6 Möglichkeiten, wie Minimum und Maximum verteilt sein können. Wenn du jede einzeln abprüfst, wirst du nie mit drei if-Anweisungen auskommen. Ein anderer Ansatz muss also her. P.S.: Bitte beim nächsten Thread selbst einen aussagekräftigen Titel wählen. Zitieren
marcom Geschrieben 3. Februar 2006 Geschrieben 3. Februar 2006 int getmax(int a, int b, int c) { if(a > { if(a > c) return a; else return c; } else { if(b > c) return b; else return c; } } int getmin(int a, int b, int c) { if(a< { if(a<c) return a; else return c; } else { if(b<c) return b; else return c; } } Voilá Zitieren
Whatever Geschrieben 3. Februar 2006 Geschrieben 3. Februar 2006 Aufgabenstellung nicht gelesen. Aufgabe verfehlt. 0 Punkt. Setzen! Zitieren
Murcks Geschrieben 3. Februar 2006 Autor Geschrieben 3. Februar 2006 Deine Vorgehensweise ist ja auch schon vom Ansatz her schlecht. Es gibt 6 Möglichkeiten, wie Minimum und Maximum verteilt sein können. Wenn du jede einzeln abprüfst, wirst du nie mit drei if-Anweisungen auskommen. Ein anderer Ansatz muss also her. P.S.: Bitte beim nächsten Thread selbst einen aussagekräftigen Titel wählen. Doch! Es MUSS gehen! Das ist ne alte Klausuraufgabe! PS: Sorry für den schlecht gewählten Titel... Zitieren
Carnie Geschrieben 3. Februar 2006 Geschrieben 3. Februar 2006 Also ohne if würde ich mit dem tertiären operator machen.Aber keine Ahnung ob das als if gilt.. Lösung mal wieder wegeditiert. Zitieren
Guybrush Threepwood Geschrieben 3. Februar 2006 Geschrieben 3. Februar 2006 Klotzkopp hat ja nicht gesagt das es nicht geht sondern das dein Ansatz schlecht ist Zitieren
Klotzkopp Geschrieben 3. Februar 2006 Geschrieben 3. Februar 2006 Doch! Es MUSS gehen! Das ist ne alte Klausuraufgabe! Sicher geht das. Ist nicht mal besonders kompliziert. Aber es geht nicht so, wie du das versucht hast. Zwei Tipps: 1) Du brauchst nicht herauszufinden, welche Variable das Minimum und das Maximum enthält, du brauchst nur die Werte. Zwei weitere Variablen wirken Wunder. 2) Annahmen treffen und überprüfen. Zitieren
Murcks Geschrieben 3. Februar 2006 Autor Geschrieben 3. Februar 2006 Klotzkopp hat ja nicht gesagt das es nicht geht sondern das dein Ansatz schlecht ist Stimmt! Hab ich "überlesen" in meiner Verzweiflung! :floet: @Klotzkopp Ok, danke für die Tipps, dann guck ich ma... :beagolisc Zitieren
gajUli Geschrieben 3. Februar 2006 Geschrieben 3. Februar 2006 Zwei weitere Variablen wirken Wunder. Sicherlich, aber die darf er glaube ich wegen Bedingung 2 nicht verwenden. Zitieren
Guybrush Threepwood Geschrieben 3. Februar 2006 Geschrieben 3. Februar 2006 Denke ich nicht, er muss die Eingabe ja auch irgendwo drin speichern Zitieren
Murcks Geschrieben 3. Februar 2006 Autor Geschrieben 3. Februar 2006 Doch, doch! Variablen kann man so viele nehmen, wie man lustig ist! Zitieren
IceDuck Geschrieben 3. Februar 2006 Geschrieben 3. Februar 2006 du könntest auch die 3 zahlen nach größe sortieren und dann variable1 und variable 3 augeben! Zitieren
gajUli Geschrieben 4. Februar 2006 Geschrieben 4. Februar 2006 Denke ich nicht, er muss die Eingabe ja auch irgendwo drin speichern Klar, das ist implizit durch cin vorgegeben, weitere Variablen dagegen nicht. Aber Du hast natuerlich Recht, weil es ohne zusaetzliche Variablen mit nur drei if-clauses kaum gehen wird. Ist halt schwierig, wasserdichte Aufgaben zu formulieren. Zitieren
Bubble Geschrieben 4. Februar 2006 Geschrieben 4. Februar 2006 So schwer ist das doch gar nicht. Ich mach mal ein Beispiel für eine Funktion, die die kleinste von drei int Zahlen ausgibt, denn am Beispiel lernt man ja wie so oft am besten: int Min(int a, int b, int c) { int z; if(a< z=a; else z=b; if(c<z) z=c; return z; } [/code] Und wenn es kürzer sein soll: [code] int Min2(int a, int b, int c) { a=(b<a?b:a); return a<c?a:c; } Ein guter Compiler dürfte aus beiden Varianten den gleichen Code machen, also bevorzuge die vertändlichere An float (double) musst Du es noch selbst anpassen (Du musst nur "int" durch "float" tauschen) und für den 2. von Dir umzusetzenden Fall, der suche nach der größten Zahl, umschreiben. Das Prinzip ist jedoch gleich. Zitieren
Murcks Geschrieben 6. Februar 2006 Autor Geschrieben 6. Februar 2006 Danke für eure Antworten! @Bubble Die Operatoren "?" und ":" sowie das Schreiben von Funktionen dürfen nicht verwendet werden. Trotzdem danke! @Klotzkopp Dein Tipp war der ausschlaggebendste! Hab's hinbekommen: #include <iostream.h> void main() { float fNum1, fNum2, fNum3, fMax, fMin; cout<<"Erste Zahl: "; cin>>fNum1; cout<<"Zweite Zahl: "; cin>>fNum2; cout<<"Dritte Zahl: "; cin>>fNum3; if (fNum1 < fNum2) { fMin = fNum1; fMax = fNum2; } else { fMin = fNum2; fMax = fNum1; } if (fNum3 < fMin) fMin = fNum3; if (fNum3 > fMax) fMax = fNum3; cout<<endl; cout<<"Das Maximum ist: "<<fMax<<endl; cout<<"Das Minimum ist: "<<fMin<<endl<<endl; } War wirklich nicht so schwer. Manchmal sieht man den Wald vor lauter Bäumen nicht! So jetzt das ganze OHNE eine If-Anweisung! :eek Zitieren
Klotzkopp Geschrieben 6. Februar 2006 Geschrieben 6. Februar 2006 Ich glaube nicht, dass das ohne if und ohne ?: möglich ist. Zitieren
Bubble Geschrieben 6. Februar 2006 Geschrieben 6. Februar 2006 Die Operatoren "?" und ":" sowie das Schreiben von Funktionen dürfen nicht verwendet werden. Es war auch nicht als abgabefertige Lösung für Dich gedacht Zitieren
Murcks Geschrieben 6. Februar 2006 Autor Geschrieben 6. Februar 2006 @Bubble Habe ich auch nicht so verstanden. Und abgeben brauche ich auch nichts. Die Aufgabenlösung dient einfach der persönlichen Befriedigung. Zitieren
athlet1 Geschrieben 6. Februar 2006 Geschrieben 6. Februar 2006 Ich glaube nicht, dass das ohne if und ohne ?: möglich ist. Ich muss dir widersprechen. (Wird wohl selten vorkommen:) ) Wenn die Eingabe in einen assoziativen Container ( würde ein set<float> nehmen) geschrieben wird, wird sie automatisch in aufsteigender Reihenfolge gespeichert. Damit ist der erste Eintrag im set das min und der letzte Eintrag das max. Zitieren
Klotzkopp Geschrieben 6. Februar 2006 Geschrieben 6. Februar 2006 Ich muss dir widersprechen. Du meinst also, dass ich das nicht glaube? Wenn die Eingabe in einen assoziativen Container ( würde ein set<float> nehmen) geschrieben wird, wird sie automatisch in aufsteigender Reihenfolge gespeichert. Damit ist der erste Eintrag im set das min und der letzte Eintrag das max.Das ließe sich auch einfacher mit std::min und std::max lösen. Ich denke nicht, dass die Aufgabenstellung die Verwendung solcher Funktionen oder std::set erlaubt. Zitieren
athlet1 Geschrieben 6. Februar 2006 Geschrieben 6. Februar 2006 Das ließe sich auch einfacher mit std::min und std::max lösen. Da hast du natürlich recht. Da hab ich den schreibtechnisch aufwändigeren Weg gewählt. Ich denke nicht, dass die Aufgabenstellung die Verwendung solcher Funktionen oder std::set erlaubt. Da bewegen wir uns eigentlich im Gebiet der Kaffeesatzleserei und überlassen die Entscheidung dem Threadersteller. In der Aufgabenstellung war nichts dazu zu finden. Zitieren
SNOWMAN Geschrieben 6. Februar 2006 Geschrieben 6. Februar 2006 ... In der Aufgabenstellung war nichts dazu zu finden. ... 1. Benutzen Sie genau drei If-Anweisungen. 2. Sie dürfen nur If-Anweisungen, Operatoren, cin und cout verwenden. ... Naja, für mich ist die Aufgabenstellung eindeutig so, dass diese Funktionen nicht erlaubt sind (siehe 2.) vllt. soll das auf irgernd eine mathematische funktion abzielen? Zitieren
Klotzkopp Geschrieben 6. Februar 2006 Geschrieben 6. Februar 2006 Es ist wohl möglich, wenn man gewisse Annahmen über die Speicherdarstellung von Fließkommatypen macht. Dann kann man das Vorzeichenbit der Differenz als Flag benutzen. Aber soweit ich weiß, ist die Binärdarstellung im Standard nicht festgeschrieben. Wenn man die Betrags-, Signum- oder Wurzelfunktion benutzen dürfte, ginge es auch. Zitieren
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.