Zum Inhalt springen

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


Empfohlene Beiträge

Geschrieben

Zusatzaufgabe:

Schreiben sie das Programm ohne eine einzige If-Anweisung!

Murcks

Ich bezog mein Posting auf diese Aussage.

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?

Da sind wir wieder bei Funktionen ;)

Es bleibt halt ein gewisser Interpretationsfreiraum.

Geschrieben

Nich wirklich eine mathematische Funktion ist z.B. sowas: f(x) = 2y und nicht irgendeine Funktion einer Programmiersprache ;)

Ich sehe auch keine Möglichkeit das ohne if und ähnliches zu lösen. Man könnte zwar auch anderes rausbekommen welche zahl von zweien die kleinere/größere ist, aber irgendwie muss man ja am Ende das Ergebnis auswerten...

Geschrieben

Also, um nochmal Klarheit in die Sache zu bringen:

Es handelt sich, wie schon geschrieben, um eine alte Klausuraufgabe.

Man darf nur das benutzen, was bis dahin auch im Unterricht durchgenommen wurde, und das war zu dem Zeitpunkt:

iostream.h

Datentypen: void, int, char, float, double, (unsigned/short/long)

Operatoren: !, ~, +, -, ++, --, *, /, %, <<, >>, <, >, =, ==, !=, &, && |, ||, gekoppelte Zuweisungen wie += oder -=

cout

cin

(If-Anweisung, für den zweiten Teil der Aufgabe ja nicht mehr!)

Und nochmal die Aufgabe wie sie tatsächlich gestellt wurde:

AUFGABE

Schreiben Sie ein C++-Programm, welches folgende Funktionalität 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.

Zusatz 1: Benutzen Sie bei der Umsetzung genau drei If-Anweisungen.

Zusatz 2: Schreiben Sie das Programm ohne eine einzige If-Anweisung zu benutzen.

Würde mich daher SNOWMAN anschließen: Es müsste über eine mathematische Funktion zu lösen sein...

Geschrieben

Öhm, in einem der Lösungsbeispiele steht folgendes:

std::cout << "max: " << a*(a>b && a>c)+b*(b>a && b>c)+c*(c>a && c> << std::endl;

std::cout << "min: " << a*(a<b && a<c)+b*(b<a && b<c)+c*(c<a && c< << std::endl;[/code]

Was machen diese Zeilen genau? Kann mir das jemand erklären?

Geschrieben

Ich denk mal, dass nur dieser Abschnitt unklar ist, gell?

"a*(a>b && a>c)+b*(b>a && b>c)+c*(c>a && c>b)"

Betrachten wir mal nur "a*(a>b && a>c)" - der Ausdruck "(a>b && a>c)" ist logisch 1 wenn a größer als b ist und gleichzeitig a größer als c ist. somit ergibt die Gleichung nichts weiteres als "a*1" sprich a.

Die restlichen 2 Abschnitte machen das gleiche - nur halt mit b und mit c (und dort wird geprüft, ob b größer als der Rest ist bzw ob c größer als der Rest ist)

Angenommen, a sei die größte Zahl, so ist der 2. logische Teil 0 und der dritte auch - somit ergibt sich a*(1) + b*(0) + c*(0) und das ist nichts weiteres als a!

Beim Minimum wird das gleiche gemacht, nur eben statt ">" "<".

Ganz wichtig: die größte Zahl bzw. die kleinste Zahl darf nicht doppelt vorkommen! Denn sonst wären die logischen Teile immer 0!

Assemblermäßig kommt der gleiche Code raus, ob man nun if(a>B) schreibt oder man das "if" einfach weglässt - es wird immer noch a mit b verglichen und die entsprechenden Register werden gesetzt.

Somit ist der Algorithmus zwar korrekt, aber es muss ausgeschlossen sein, dass zwei/drei identische Zahlen eingegeben werden!

Geschrieben
Wenn die Eingabe in einen assoziativen Container ( würde ein set<float> nehmen) geschrieben wird, wird sie automatisch in aufsteigender Reihenfolge gespeichert.

Und nun rate mal wie der Container ein Element einordnet...

...richtig: Durch Vergleiche.

Geschrieben
Und nun rate mal wie der Container ein Element einordnet...

...richtig: Durch Vergleiche.

Danke für den Hinweis :(

Es ging um die Implementierung durch Murcks und nicht den internen Aufbau einer Bibliotheksfunktion. Mal davon abgesehen das (wie in den letzten Posts zu sehen) dieser Vorschlag wie auch andere (std::min usw.) als Lösung nicht in Betracht kamen.

Geschrieben
Danke für den Hinweis :(

Es ging um die Implementierung durch Murcks und nicht den internen Aufbau einer Bibliotheksfunktion.

Vielleicht hätte ich es diplomatischer ausdrücken können, aber es ging bei der Aufgabe halt nicht darum die "if"s in Funktionen zu verstecken (oder fertige Funktionen zu nutzen).

Geschrieben

Zur allgemeinen Belustigung noch eine Variante, die mir ein Freund schickte:

int main()

{

float a, b, c;

cin >> a >> b >> c;

cout << "Maximum " << (a >? b >? c) << endl;

cout << "Minimum " << (a <? b <? c) << endl;

}

Soll aber nur mit GNU C++ funktionieren und ist darum eigentlich off topic wegen Standardnichtkonformitaet.

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