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 
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