Zum Inhalt springen
View in the app

A better way to browse. Learn more.

Fachinformatiker.de

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

min und max von drei Zahlen (war: Ist es zu einfach, bin ich zu blöd!)

Empfohlene Antworten

Veröffentlicht

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

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?

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.

int getmax(int a, int b, int c)

{

if(a > B)

{

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<B)

{

if(a<c) return a;

else return c;

}

else

{

if(b<c) return b;

else return c;

}

}

Voilá

Aufgabenstellung nicht gelesen. Aufgabe verfehlt. 0 Punkt. Setzen! ;)

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...

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.

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

Doch, doch! Variablen kann man so viele nehmen, wie man lustig ist!

du könntest auch die 3 zahlen nach größe sortieren und dann variable1 und variable 3 augeben!

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. ;)

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.

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

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 ;)

@Bubble

Habe ich auch nicht so verstanden. Und abgeben brauche ich auch nichts. Die Aufgabenlösung dient einfach der persönlichen Befriedigung.

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.

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.

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.

... 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?

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.

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.