Zitat von
Problemmacher:
dann wird überprüft ob Zahl1 größer ist als Zahl2 (damit eine Teilung
nie < 0 ergibt) ist. Ebenso wird dann geprüft ob die Teilung der
Zahl1 durch Zahl2 einen Rest von 0 ergibt. Im Kontext zur der
Abfrage davor will ich also nur das ganzzahlige Werte über 0
entstehen können.
Falls diese gewünschten Werte nicht vorliegen sollen sie eben
per repeat until erzeugt werden.
Ich wollte euch fragen wieso ich allerdings trotzdem immer noch
Rechnungne wie 2 / 8 etc. rausbekomme?
Allgemeine Hinweise:- Zunächst einmal erwarte ich, dass bei Deinem Verfahren eine Teilung nie < 1 ergibt (nicht < 0).
- Dann nehme ich an, dass Du in Deinem Code ein IF nicht kopiert hattest.
- Außerdem scheint es mir bei solchen Verschachtelungen besser zu sein, zusätzlich mit begin..end und Klammern zu arbeiten (das aber nur wegen der Optik, also der besseren Lesbarkeit).
Entscheidend ist Folgendes:- Du willst als erstes prüfen, ob Zahl1 > Zahl2 ist. Das ist bei Deiner Frage "2/8" falsch.
- Welche Maßnahme hast Du dafür vorgesehen??? Nichts! Denn dafür gibt es keinen else-Block.
- Du willst Deine Bedingung am Anfang erfüllt sehen; und wenn nicht dann... Das ist genau die Situation für while-Anweisungen:
Delphi-Quellcode:
IF Operator = '/' then
begin
// Verneinung Deiner Abfrage:
// IF NOT ((Zahl1 > Zahl2) AND (Zahl1 MOD Zahl2 = 0))
while ((Zahl1 < Zahl2) OR (Zahl1 MOD Zahl2 = 0)) then
begin
Zahl1 := ZufallsZahl(Radiobox);
Zahl2 := ZufallsZahl(Radiobox);
end;
end;
Zusatzbemerkungen:
1. Maja Jessica hat zurecht darauf hingewiesen, dass in der Funktion ZufallsZahl() der default-Wert die Ausgangszahl ist, aber keine neu erzeugte Zahl.
2. Ist bei Deinen Prüfungen sichergestellt, dass Zahl2 ungleich Null ist?
Viel Erfolg! Jürgen