Zum Inhalt springen

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


Murcks

Empfohlene Beiträge

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

Link zu diesem Kommentar
Auf anderen Seiten teilen

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?

Link zu diesem Kommentar
Auf anderen Seiten teilen

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.

Link zu diesem Kommentar
Auf anderen Seiten teilen

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

Link zu diesem Kommentar
Auf anderen Seiten teilen

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.

Link zu diesem Kommentar
Auf anderen Seiten teilen

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

Link zu diesem Kommentar
Auf anderen Seiten teilen

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.

Link zu diesem Kommentar
Auf anderen Seiten teilen

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

Link zu diesem Kommentar
Auf anderen Seiten teilen

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.

Link zu diesem Kommentar
Auf anderen Seiten teilen

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.
Link zu diesem Kommentar
Auf anderen Seiten teilen

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.

Link zu diesem Kommentar
Auf anderen Seiten teilen

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

Link zu diesem Kommentar
Auf anderen Seiten teilen

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.

Link zu diesem Kommentar
Auf anderen Seiten teilen

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.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...