Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Algorithmen, Datenstrukturen und Klassendesign (https://www.delphipraxis.net/78-algorithmen-datenstrukturen-und-klassendesign/)
-   -   Delphi Rechen-"Spiel" (https://www.delphipraxis.net/169136-rechen-spiel.html)

diavy 1. Jul 2012 16:58

Rechen-"Spiel"
 
Hallo zusammen.

Ich hab mir neulich gedacht, ich könnt zur Übung mal versuchen ein ganz simples Konsole-Rechenspiel zu schreiben. Klappt soweit auch alles, nur hab ich das Problem, dass zufällig generierte Divisionen nicht klappen. Dass die Divisionen auch aufgehen habe ich ne while-Schleife eingebaut (while a mod b <>0 do b:=-200+random(401)). Manchmal funktionniert es jedoch nicht.

In verschiedenen Fällen bekomm ich eine Fehlermeldung dass ein integer durch 0 geteilt wurde obwohl ich in der genannten Schleife "or (b=0)" eingebaut habe.

In anderen Fällen kommt was in die Konsole stehen was ich nicht mehr lesen kann und die Konsole schließt sich sofort.

Ich kann echt keinen Fehler finden, von daher wäre ich froh wenn mir jemand helfen könnte. :)

Hier der Code (nur die Prozedur die sich um das Ausrechnen der Division kümmert):

Delphi-Quellcode:
procedure division(var i:boolean);
var a,b,res:integer;
begin
a:=-200+random(401);
b:=-200+random(401);
while (((a mod b)<>0) or (b=1) or (b=-1) or (b=a) or (b=0)) do
        b:=-200+random(401);
write(a,' / ',b,' = ');readln(res);
if res=(a div b) then i:=true
else i:=false;
end;
P.S.: Der boolean-Wert soll dazu dienen um die Anzahl an richtigen Antworten zu zählen.

jfheins 1. Jul 2012 17:32

AW: Rechen-"Spiel"
 
Also erstmal wird die Bedingungs standardmäßig "von links nach rechts" bearbeitet.
Konkret wird also erst versucht zu teilen, und danach geprüft ob b=1 usw. Die Überprüfung
auf b=0 müsste also an den Anfang um den Fehler zu verhindern.

Zum Konzept: Meinst du nicht, es ist einfacher zwei zufällige Zahlen zu multiplizieren
und dann daraus die Aufgabe zu erstellen?

Also sowas:
Delphi-Quellcode:
a:=-20+random(41);
b:=-200+random(401);

write(a*b,' / ',b,' = ');
readln(res);
i:= res = a;

DeddyH 1. Jul 2012 17:34

AW: Rechen-"Spiel"
 
Setz doch das b = 0 als erste Bedingung ein, sonst dürfte es beim mod schon knallen.

[edit] *Pfüh*, zu langsam :( [/edit]

diavy 1. Jul 2012 17:36

AW: Rechen-"Spiel"
 
Danke, das mit dem links nach rechts wusste ich nicht,hatte mir das simultan vorgestellt.
Dann wär das Problem mit dem durch 0-Teilen geklärt, bleibt noch das andere...

Edit: Ja die Idee find' ich gut, hätt ich auch drauf kommen können. :P
Bisher ist der andere Fehler noch nicht wieder aufgetreten.


Alle Zeitangaben in WEZ +1. Es ist jetzt 19:39 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz