Veröffentlicht 3. Februar 200619 j 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
3. Februar 200619 j 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?
3. Februar 200619 j 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.
3. Februar 200619 j 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á
3. Februar 200619 j 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...
3. Februar 200619 j 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.
3. Februar 200619 j Klotzkopp hat ja nicht gesagt das es nicht geht sondern das dein Ansatz schlecht ist
3. Februar 200619 j 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.
3. Februar 200619 j 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
3. Februar 200619 j Zwei weitere Variablen wirken Wunder. Sicherlich, aber die darf er glaube ich wegen Bedingung 2 nicht verwenden.
3. Februar 200619 j du könntest auch die 3 zahlen nach größe sortieren und dann variable1 und variable 3 augeben!
4. Februar 200619 j 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.
4. Februar 200619 j 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.
6. Februar 200619 j 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
6. Februar 200619 j 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
6. Februar 200619 j @Bubble Habe ich auch nicht so verstanden. Und abgeben brauche ich auch nichts. Die Aufgabenlösung dient einfach der persönlichen Befriedigung.
6. Februar 200619 j 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.
6. Februar 200619 j 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.
6. Februar 200619 j 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.
6. Februar 200619 j ... 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?
6. Februar 200619 j 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.
Erstelle ein Konto oder melde dich an, um einen Kommentar zu schreiben.