Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

1

16.11.2013, 19:57

Listing 3.12 Kapitel 3 Fehler?

Hallo Zusammen,

um das gleich mal vorweg zu nehmen, ich bin ein "C++-Noob".
Ich hab also den Fehlerquelltext 3.12 bearbeitet und dachte eine weiteren Fehler
gefunden zu haben.


C-/C++-Quelltext

1
2
do  {       cout << "Breite: ";     cin >> Breite;
        cout << "Hoehe: ";      cin >> Hoehe;   } while ((Breite % 2 == 0) || (Hoehe % 2 == 0));


Meine Fragen an dieser Stelle ist: Müsste anstatt der oder-Anweisung (||) nicht eine und-Anweisung (&&) folgen?.
Denn so kann ich doch immer noch eine der beiden Variablen mit einer geraden Zahl definieren oder nicht?

C-/C++-Quelltext

1
2
    do  {       cout << "Breite: ";     cin >> Breite;
        cout << "Hoehe: ";      cin >> Hoehe;   } while ((Breite % 2 == 0) && (Hoehe % 2 == 0));



So habe ich diesen korrigiert. Ich habe jetzt allerdings Zweifel, dass ich was überlesen oder falsch verstanden habe,
da der korrigierte "Fehlerquelltext" immer noch die oder-Anweisung hat.

Ich danke schon mal jedem der mir helfen kann meine Zweifel aus dem Weg zu räumen.

Gruß
Amnney

PS: Keine Haftung für Schreibfehler :P

TigerClaw25

unregistriert

2

16.11.2013, 20:14

Schau dir den Modulo an.

BEISPIEL:
---------------------------------------------
Breite: 2 (durch Modulo kein Rest)
Höhe 3: (Rest = 1)
--> Breite % 2 == 0 trifft zu, daher Schleife weiter laufen lassen.

Breite: 3 (Rest = 1)
Höhe: 2 (durch Modulo kein Rest)
--> Hoehe % 2 == 0 trifft zu, also Schleife weiter laufen lassen.-

Also solange Breite ODER Höhe einen Wert bekommt, der keinen Rest ergibt wie 2, 4, 6 oder 8, solange weiter laufen.

3

16.11.2013, 23:04

Hi,
das leuchtet ein, danke dafür :)

Wenn ich nun einer der Variablen den Wert 2 gebe und der anderen den Wert 3 so wird die
Schleife beendet, da ja dann die While Voraussetzung zutrifft oder ?

Somit ist doch der Zweite Teil der While-Funktion nutzlos sobald eine der Variablen auf eine ungerade Zahl trifft.

Ich glaub ich steh total aufm Schlauch.

Gruß
Amnney

TigerClaw25

unregistriert

4

16.11.2013, 23:32

Du gehst davon aus, dass wenn eine zutrifft, die Schleife beendet ist. Aber du musst dir die Bedingung genauer anschauen. Die Schleife ssoll so lange laufen, bis beide Werte ungerade sind. Gibt der Nutzer aber auch nur Wert A ODER Wert B falsch ein, geht die Schleife weiter

In Worten. Solange Schleife laufen lassen, so lange die Bedingung zutrifft.
Diese trifft zu, wenn Breite ODER Hoehe keinen Rest hat. Haben beide einen Rest, dann trifft sowohl Bedingung A als auch B nicht zu und die Schleife beendigt sich.

Würdest du das UND verwenden wurde es lauten: Solange Schleife laufen lassen, solange bis A und B einen Rest haben . Die Schleife laeuft nur solange A und B keinen Rest haben. Ist dann aBer einer der Wert mit Rest und der andere ohne Rest, trifft die Bedingung nicht mehr zu und du verlaesst die Schleife, unter Umstaenden mit einem Wert ohne Rest und einem mit Rest.

Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von »TigerClaw25« (16.11.2013, 23:43)


5

17.11.2013, 01:08

Jetzt hab ich's gerafft :thumbsup:

Danke für die spitzen Erklärung bzw. die spitzen Erklärung und das wachrütteln :P.

Hab alles nochmal neu kompiliert und getestet und ich glaube ich wollte einfach nur alles an dem Fehlerquelltext richtig machen (zu richtig) :D

Ich Danke dir nochmal herzlich und wünsche dir einen schönen Sonntag :)

Gruß Amnney

Werbeanzeige