Mathetrainer in Pascal Division!

Ich hab ne Frage zu einem von mir programmierten Programm. Es geht darum, dass ich einen Mathetrainer schreiben will, bei dem in der Division nur gerade Werte rauskommen und keine Brüche. Das Problem liegt darin, dass das nicht klappt, aus mir unerklärlichen Gründen. Außerdem sagt er bei jedem ergebnis, dass die falsch ist. Kann mir einer helfen?? Danke schon mal für alles. Gruß Felix
Hier das Programm:

program mathetrainer;
uses crt;
var a, b, c, e, ergebnis:real;
d,antwort :char;
begin
clrscr;
randomize;
repeat

write('Geben sie bitte die gewuenschte Rechenop. an! ');
readln(d);
a:=random(10)+1;

b:=random(10)+1;
case d of
‚+‘:c:=a+b;
‚-‘:c:=a-b;
‚*‘:c:=a*b;
‚/‘:begin c:=a*b;
c:=c/b;
end;
end;

repeat
write(‚Geben sie das Ergebnis ein von: ‚,a:2:2,d,b:2:2,‘=‘);

readln(ergebnis);

if ergebnisc then
write('Schade, das Ergebnis ist falsch! ')

else
write('Sehr gut dein Ergebnis ist richtig! ');
readln;
until ergebnis=c;

write('wollen sie noch weiter ben (y,n)? ');
readln(antwort);
until antwort=‚n‘;

End.

Hallo Felix,

Es geht darum, dass ich einen Mathetrainer schreiben will, bei
dem in der Division nur gerade Werte rauskommen und keine
Brüche.

Um auf die nächste ganze Zahl zu kommen, kannst Du mit trunc() die Mantisse von a/b abschneiden.
Ersetze diesen Teil:

‚/‘:begin c:=a*b;
c:=c/b;
end;

damit:

 '/' : c:= trunc(a/b);

Dann akzeptiert das Programm nur mehr die Ganzzahlen als richtiges Ergebnis, z.B. 4/3 = 1

Ciao,
Rudy

ja danke,rudy, das ist natürlich auch eine Lösung, aber ich wollte ja eigentlich, dass die erste zahl immer ein Vielfaches der zweiten zahl ist,(z.b a=8 und b=2) und somit ein gerades Ergebnis herauskommt!

Felix

Hallo Felix,

ich wollte ja eigentlich, dass die erste zahl immer ein Vielfaches
der zweiten zahl ist,(z.b a=8 und b=2) und somit ein gerades
Ergebnis herauskommt!

ach so, ich habe mich schon über die Zeilen gewundert :wink:

wie wärs dann damit:

 '/': 
 begin
 a := a\*b;
 c := a/b; 
 end;

Ciao,
Rudy

Hi felixppp,

du hättest dein Programm mal mit F7 durchtracen sollen, dann wäre dir sicher aufgefallen, das beim teilen deine Variablen falsch befüllt sind.

Bei deiner Version wenn a = 5 und b = 10 würde das Ergebnis so aussehen

c := a * b;
a = 5
b = 10
c = 50

c := c / b;
a = 5
b = 10
c = 5

Richtig wäre aber
c := a;
a = 5
b = 10
c = 5

a := a * b;
a = 50
b = 10
c = 5

ersetze einfach die beiden Anweisungen und schon funktionierts.

Ach und du solltest dir unbeding angewöhnen, etwas übersichtlicher zu programmieren, dann tust du dir später einfacher. dein Programm wäre wie folgt wesentlich übersichtlicher

PROGRAM mathetrainer;
USES crt;

VAR
 a, b, c, e, ergebnis: real;
 d, antwort : char;

BEGIN
 CLRSCR;
 RANDOMIZE;

 REPEAT
 WRITE('Geben Sie bitte die gewuenschte Rechenop. an!');
 READLN(d);
 a := RANDOM(10) + 1;
 b := RANDOM(10) + 1;

 CASE d OF
 '+' : c := a + b;
 '-' : c := a - b;
 '\*' : c := a \* b;
 '/' : BEGIN
 c := a;
 a := a \* b;
 END;
 END;

 REPEAT
 WRITE('Geben Sie das Ergebnis von: ',a:2:2,d,b:2:2,'=');
 READLN(ergebnis);
 IF ergebnis c THEN
 WRITE('Schade, das Ergebnis ist falsch!')
 ELSE
 WRITE('Sehr gut, das Ergebnis ist richtig!');
 READLN;
 UNTIL ergebnis=c;

 WRITE('wollen Sie noch weiter ben(y,n)?');
 READLN(antwort);

 UNTIL antwort = 'n';
END.

ah perfekt danke an alle für ihre Hilfe, jetzt klappt es endlich so, wie ich es wollte. Felix