do..while() Problem?!

  • 3 Antworten
  • Letztes Antwortdatum
StefMa

StefMa

Dauer-User
450
Hi,

ich habe mir eben mal "größter Gemeinsamer Nenner" programmiert.
Dabei bin ich auf irgendwas "mysteriöses" gestoßen, was ich irgendwie nicht ganz kapiere...
Zuerst mal erkläre ich es anhang eines normalen Beispieles (eine Zahl wird runtergezählt). Der Code ist hier: https://gist.github.com/anonymous/3ea0a7d4562dda944702

Zuerst wird 12 auf beiden Variablen gesetzt.
In der ersten do...while() werden beide Zahlen verringert und abgefragt mit:
Code:
while (x != 0 && y != 0);
Heißt, solange bis BEIDE integer-werte 0 sind, wird die schleife durchlaufen. Funktioniert!

In der zweiten do..while habe ich den selben code. Wieder sind beide Zahlen zwölf. Die while fragt nach:
Code:
 while (!(x == 0 && y == 0));
Ist ja auch laut De Morgans Gesetz das gleiche!
Diese while funktioniert auch GENAU gleich. Ales es ist tatsächlich das gleiche...

Kommen wir zurück zum Gemeinsamen Teiler. Den Code dazu habe ich hier: https://gist.github.com/anonymous/f27eb38314da05154cb8
So wie es ist funktioniert es auch. Die while am ende fragt:
Code:
while (!(x == 0 && y == 0));
Super, klappt!
Laut dem Gesetz und dem Test von oben, sollte die folgende Abfrage auch funktioniere:
Code:
while (x != 0 && y !=0);
Dies funktioniert aber NICHT!! und bringt mich damit ans ende der verzeiflung!!

Er hört IMMER nach einem durchlauf auf. Wenn ich mir die Zahlen ausgebe kommt immer x == 0 (wenn x > y) bzw y == 0 (wenn y > x) raus, und die andere zahl ist != 0. Ergo müsste es nochmal durchlaufen. TUT ES ABER NICHT!!

Stehe ich grade auf dem Schlauch? Oder was ist hier falsch?!

Danke und Gruß
 
StefMa schrieb:
Code:
while (x != 0 && y != 0);
Heißt, solange bis BEIDE integer-werte 0 sind, wird die schleife durchlaufen. Funktioniert!

In der zweiten do..while habe ich den selben code. Wieder sind beide Zahlen zwölf. Die while fragt nach:
Code:
 while (!(x == 0 && y == 0));
Ist ja auch laut De Morgans Gesetz das gleiche!

Welches Gesetz meinst Du genau?

Vielleicht stehe ich auch gerade auf dem Schlauch, aber ich würde sagen

Code:
while (x != 0 && y != 0)

entspricht eher

Code:
while (!((x != 0) || (y != 0)))
 
  • Danke
Reaktionen: StefMa
Nochmal zur verdeutlichung eine komplette Klasse: https://gist.github.com/anonymous/a5ae944f8b1fd897e956

Der Output dafür ist:
FXmjYTx.png


Der ursprüngliche Beitrag von 11:35 Uhr wurde um 11:38 Uhr ergänzt:

ach fuck oO
Danke COleExeption...

War ja tatsächlich ein Denkfehler :o

x != 0 && y != 0 ist natürlich FALSE. Weil x == 0 aber y != 0. Ergo FALSE ... Oo

Ich sollte das Programmieren anderen überlassen ^^
 
Zuletzt bearbeitet:
Hello,
aber das Thema heißt doch größter gemeinsamer Teiler? :)
Der Nenner ist das was unter dem Bruchstrich steht und das lässt sich nach obenhin ja beliebig hochzaehlen...

1/2 -> 2/4 -> 4/8...

C++-Programmierung/ Brüche/ Die Methoden (hier fand ich es gut und umfassend erklaert)

btw: geiler Themenname, mit dem ASCII-Monster (auch wenns wohl nicht ASCII ist) :D
 
Zuletzt bearbeitet:
Zurück
Oben Unten