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

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.

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

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

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

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!

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.

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.

Ha! ich wussts doch, dass da ne math. funktion gefragt ist.

ich bin zwar n mathen00b und wäre da nie drauf gekommen, aber ich wusste zumindest wo ich ansetzen musste :cool: :P

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

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.

Vielleicht hätte ich es diplomatischer ausdrücken können

Simmt. Bin aber nicht beleidigt;)

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.