H
Holodoc
Guest
Ich habe ein Programm zum üben der Grundrechenarten in Pascal geschrieben. Die Fehleranalyse bei der Division und bei gemischten Aufgaben am Ende spinnt aber ein biscchen.
Danke schon mal im voraus!
===================================================
program Grundrechenarten;
uses crt,dos;
var sg,p,i,ra,hm : integer;
t,t1,t2 : real;
x,y,erg1,erg2,gzw1,gzw2,rest1,rest2,op : array[1..10] of integer;
fa : char;
h,m,s,cs : word;
procedure zufallszahlen;
begin
randomize;
case sg of
1 : begin x[p] := random(10)+1; y[p] := random(10)+1; end;
2 : begin x[p] := random(100)+1; y[p] := random(100)+1; end;
3 : begin x[p] := random(1000)+1; y[p] := random(1000)+1; end;
end;
end;
procedure time1;
begin
gettime(h,m,s,cs);
t1 := h*3600+m*60+s+cs/100;
end;
procedure time2;
begin
gettime(h,m,s,cs);
t2 := h*3600+m*60+s+cs/100;
end;
procedure operator;
begin
randomize;
op[p] := random(4)+1;
end;
procedure addition;
begin
time1;
clrscr;
while (p < 10) do begin
p := p+1;
zufallszahlen;
write(x[p],' + ',y[p],' = '); readln(erg1[p]);
erg2[p] := x[p]+y[p];
if (erg1[p] = erg2[p]) then begin i := i+1; end;
end;
time2;
end;
procedure subtraktion;
begin
time1;
clrscr;
while (p < 10) do begin
p := p+1;
zufallszahlen;
write(x[p],' - ',y[p],' = '); readln(erg1[p]);
erg2[p] := x[p]-y[p];
if (erg1[p] = erg2[p]) then begin i := i+1; end;
end;
time2;
end;
procedure multiplikation;
begin
time1;
clrscr;
while (p < 10) do begin
p := p+1;
zufallszahlen;
write(x[p],' * ',y[p],' = '); readln(erg1[p]);
erg2[p] := x[p]*y[p];
if (erg1[p] = erg2[p]) then begin i := i+1; end;
end;
time2;
end;
procedure division;
begin
time1;
while (p < 10) do begin
p := p+1;
clrscr;
zufallszahlen;
writeln(x[p],' / ',y[p],' = ');
writeln;
write('Ganzzahliger Wert: '); readln(gzw1[p]);
write('Rest: '); readln(rest1[p]);
gzw2[p] := x[p] div y[p];
rest2[p] := x[p] mod y[p];
if (gzw1[p] = gzw2[p]) and (rest1[p] = rest2[p]) then begin i := i+1; end;
writeln;
end;
time2;
end;
procedure gemischt;
begin
time1;
while (p < 10) do begin
p := p+1;
clrscr;
zufallszahlen;
operator;
case op[p] of
1 : begin
write(x[p],' + ',y[p],' = '); readln(erg1[p]);
erg2[p] := x[p]+y[p];
if (erg1[p] = erg2[p]) then begin i := i+1; end;
end;
2 : begin
write(x[p],' - ',y[p],' = '); readln(erg1[p]);
erg2[p] := x[p]-y[p];
if (erg1[p] = erg2[p]) then begin i := i+1; end;
end;
3 : begin
write(x[p],' * ',y[p],' = '); readln(erg1[p]);
erg2[p] := x[p]*y[p];
if (erg1[p] = erg2[p]) then begin i := i+1; end;
end;
4 : begin
writeln(x[p],' / ',y[p],' = ');
writeln;
write('Ganzzahliger Wert: '); readln(gzw1[p]);
write('Rest: '); readln(rest1[p]);
gzw2[p] := x[p] div y[p];
rest2[p] := x[p] mod y[p];
if (gzw1[p] = gzw2[p]) and (rest1[p] = rest2[p]) then begin i := i+1; end;
end;
end;
writeln;
end;
time2;
end;
procedure rechenartwahl;
begin
clrscr;
textcolor(white);
writeln('Wahl einer Rechenart');
textcolor(lightgray);
writeln;
writeln;
writeln('Addition',1:11);
writeln('Subtraktion',2:8);
writeln('Multiplikation',3:5);
writeln('Division',4:11);
writeln('Gemischt',5:11);
writeln;
repeat write('Auswahl: '); readln(ra); until (ra > 0) and (ra < 6);
end;
procedure schwierigkeitsgrad;
begin
clrscr;
textcolor(white);
writeln('Schwierigkeitsgrad');
textcolor(lightgray);
writeln;
writeln;
writeln('Einfach',1:12);
writeln('Mittel',2:13);
writeln('Schwer',3:13);
writeln;
repeat write('Auswahl: '); readln(sg); until (sg > 0) and (sg < 4);
end;
procedure rechnung;
begin
p := 0;
i := 0;
case ra of
1 : addition;
2 : subtraktion;
3 : multiplikation;
4 : division;
5 : gemischt;
end;
end;
procedure bewertung;
begin
clrscr;
writeln('Richtige Antworten: ',i);
writeln('Falsche Antworten: ',10-i);
t := t2-t1;
writeln('Benoetigte Zeit: ',t:0:2,' Sekunden');
writeln;
writeln;
textcolor(white);
write('Bewertung: ');
case i of
0..2 : write('0 Punkte');
3 : write('1 Punkt');
4 : write('3 Punkte');
5 : write('5 Punkte');
6 : write('7 Punkte');
7 : write('9 Punkte');
8 : write('11 Punkte');
9 : write('13 Punkte');
10 : write('15 Punkte');
end;
textcolor(lightgray);
if (i < 10) then begin
writeln;
writeln;
writeln;
writeln;
writeln;
write('Fehleranalyse erstellen (J/N)? '); repeat fa := readkey until fa in ['J','j','N','n'];
end
else begin readln; end;
end;
procedure fehleranalyse;
begin
clrscr;
textcolor(white);
writeln('Fehleranalyse');
textcolor(lightgray);
writeln;
writeln;
for p := 1 to 10 do begin
if (erg1[p] <> erg2[p]) or (gzw1[p] <> gzw2[p]) or (rest1[p] <> rest2[p]) then begin
case ra of
1 : begin writeln(x[p],' + ',y[p],' ist nicht ',erg1[p],' sondern ',erg2[p]); end;
2 : begin writeln(x[p],' - ',y[p],' ist nicht ',erg1[p],' sondern ',erg2[p]); end;
3 : begin writeln(x[p],' * ',y[p],' ist nicht ',erg1[p],' sondern ',erg2[p]); end;
4 : begin writeln(x[p],' / ',y[p],' ist nicht ',gzw1[p],' Rest ',rest1[p],' sondern ',gzw2[p],' Rest ',rest2[p]); end;
5 : begin
case op[p] of
1 : begin writeln(x[p],' + ',y[p],' ist nicht ',erg1[p],' sondern ',erg2[p]); end;
2 : begin writeln(x[p],' - ',y[p],' ist nicht ',erg1[p],' sondern ',erg2[p]); end;
3 : begin writeln(x[p],' * ',y[p],' ist nicht ',erg1[p],' sondern ',erg2[p]); end;
4 : begin writeln(x[p],' / ',y[p],' ist nicht ',gzw1[p],' Rest ',rest1[p],' sondern ',gzw2[p],' Rest ',rest2[p]); end;
end;
end;
end;
end;
end;
readln;
end;
procedure hauptmenue;
begin
clrscr;
textcolor(white);
writeln('Hauptmenue');
textcolor(lightgray);
writeln;
writeln;
writeln('Programmstart',1:6);
writeln('Programmende',2:7);
writeln;
repeat write('Auswahl: '); readln(hm); until (hm > 0) and (hm < 3);
end;
begin
repeat
hauptmenue;
if (hm = 1) then begin
rechenartwahl;
schwierigkeitsgrad;
rechnung;
bewertung;
if (fa = 'J') or (fa = 'j') then begin fehleranalyse; end;
end;
until (hm = 2);
end.
Danke schon mal im voraus!
===================================================
program Grundrechenarten;
uses crt,dos;
var sg,p,i,ra,hm : integer;
t,t1,t2 : real;
x,y,erg1,erg2,gzw1,gzw2,rest1,rest2,op : array[1..10] of integer;
fa : char;
h,m,s,cs : word;
procedure zufallszahlen;
begin
randomize;
case sg of
1 : begin x[p] := random(10)+1; y[p] := random(10)+1; end;
2 : begin x[p] := random(100)+1; y[p] := random(100)+1; end;
3 : begin x[p] := random(1000)+1; y[p] := random(1000)+1; end;
end;
end;
procedure time1;
begin
gettime(h,m,s,cs);
t1 := h*3600+m*60+s+cs/100;
end;
procedure time2;
begin
gettime(h,m,s,cs);
t2 := h*3600+m*60+s+cs/100;
end;
procedure operator;
begin
randomize;
op[p] := random(4)+1;
end;
procedure addition;
begin
time1;
clrscr;
while (p < 10) do begin
p := p+1;
zufallszahlen;
write(x[p],' + ',y[p],' = '); readln(erg1[p]);
erg2[p] := x[p]+y[p];
if (erg1[p] = erg2[p]) then begin i := i+1; end;
end;
time2;
end;
procedure subtraktion;
begin
time1;
clrscr;
while (p < 10) do begin
p := p+1;
zufallszahlen;
write(x[p],' - ',y[p],' = '); readln(erg1[p]);
erg2[p] := x[p]-y[p];
if (erg1[p] = erg2[p]) then begin i := i+1; end;
end;
time2;
end;
procedure multiplikation;
begin
time1;
clrscr;
while (p < 10) do begin
p := p+1;
zufallszahlen;
write(x[p],' * ',y[p],' = '); readln(erg1[p]);
erg2[p] := x[p]*y[p];
if (erg1[p] = erg2[p]) then begin i := i+1; end;
end;
time2;
end;
procedure division;
begin
time1;
while (p < 10) do begin
p := p+1;
clrscr;
zufallszahlen;
writeln(x[p],' / ',y[p],' = ');
writeln;
write('Ganzzahliger Wert: '); readln(gzw1[p]);
write('Rest: '); readln(rest1[p]);
gzw2[p] := x[p] div y[p];
rest2[p] := x[p] mod y[p];
if (gzw1[p] = gzw2[p]) and (rest1[p] = rest2[p]) then begin i := i+1; end;
writeln;
end;
time2;
end;
procedure gemischt;
begin
time1;
while (p < 10) do begin
p := p+1;
clrscr;
zufallszahlen;
operator;
case op[p] of
1 : begin
write(x[p],' + ',y[p],' = '); readln(erg1[p]);
erg2[p] := x[p]+y[p];
if (erg1[p] = erg2[p]) then begin i := i+1; end;
end;
2 : begin
write(x[p],' - ',y[p],' = '); readln(erg1[p]);
erg2[p] := x[p]-y[p];
if (erg1[p] = erg2[p]) then begin i := i+1; end;
end;
3 : begin
write(x[p],' * ',y[p],' = '); readln(erg1[p]);
erg2[p] := x[p]*y[p];
if (erg1[p] = erg2[p]) then begin i := i+1; end;
end;
4 : begin
writeln(x[p],' / ',y[p],' = ');
writeln;
write('Ganzzahliger Wert: '); readln(gzw1[p]);
write('Rest: '); readln(rest1[p]);
gzw2[p] := x[p] div y[p];
rest2[p] := x[p] mod y[p];
if (gzw1[p] = gzw2[p]) and (rest1[p] = rest2[p]) then begin i := i+1; end;
end;
end;
writeln;
end;
time2;
end;
procedure rechenartwahl;
begin
clrscr;
textcolor(white);
writeln('Wahl einer Rechenart');
textcolor(lightgray);
writeln;
writeln;
writeln('Addition',1:11);
writeln('Subtraktion',2:8);
writeln('Multiplikation',3:5);
writeln('Division',4:11);
writeln('Gemischt',5:11);
writeln;
repeat write('Auswahl: '); readln(ra); until (ra > 0) and (ra < 6);
end;
procedure schwierigkeitsgrad;
begin
clrscr;
textcolor(white);
writeln('Schwierigkeitsgrad');
textcolor(lightgray);
writeln;
writeln;
writeln('Einfach',1:12);
writeln('Mittel',2:13);
writeln('Schwer',3:13);
writeln;
repeat write('Auswahl: '); readln(sg); until (sg > 0) and (sg < 4);
end;
procedure rechnung;
begin
p := 0;
i := 0;
case ra of
1 : addition;
2 : subtraktion;
3 : multiplikation;
4 : division;
5 : gemischt;
end;
end;
procedure bewertung;
begin
clrscr;
writeln('Richtige Antworten: ',i);
writeln('Falsche Antworten: ',10-i);
t := t2-t1;
writeln('Benoetigte Zeit: ',t:0:2,' Sekunden');
writeln;
writeln;
textcolor(white);
write('Bewertung: ');
case i of
0..2 : write('0 Punkte');
3 : write('1 Punkt');
4 : write('3 Punkte');
5 : write('5 Punkte');
6 : write('7 Punkte');
7 : write('9 Punkte');
8 : write('11 Punkte');
9 : write('13 Punkte');
10 : write('15 Punkte');
end;
textcolor(lightgray);
if (i < 10) then begin
writeln;
writeln;
writeln;
writeln;
writeln;
write('Fehleranalyse erstellen (J/N)? '); repeat fa := readkey until fa in ['J','j','N','n'];
end
else begin readln; end;
end;
procedure fehleranalyse;
begin
clrscr;
textcolor(white);
writeln('Fehleranalyse');
textcolor(lightgray);
writeln;
writeln;
for p := 1 to 10 do begin
if (erg1[p] <> erg2[p]) or (gzw1[p] <> gzw2[p]) or (rest1[p] <> rest2[p]) then begin
case ra of
1 : begin writeln(x[p],' + ',y[p],' ist nicht ',erg1[p],' sondern ',erg2[p]); end;
2 : begin writeln(x[p],' - ',y[p],' ist nicht ',erg1[p],' sondern ',erg2[p]); end;
3 : begin writeln(x[p],' * ',y[p],' ist nicht ',erg1[p],' sondern ',erg2[p]); end;
4 : begin writeln(x[p],' / ',y[p],' ist nicht ',gzw1[p],' Rest ',rest1[p],' sondern ',gzw2[p],' Rest ',rest2[p]); end;
5 : begin
case op[p] of
1 : begin writeln(x[p],' + ',y[p],' ist nicht ',erg1[p],' sondern ',erg2[p]); end;
2 : begin writeln(x[p],' - ',y[p],' ist nicht ',erg1[p],' sondern ',erg2[p]); end;
3 : begin writeln(x[p],' * ',y[p],' ist nicht ',erg1[p],' sondern ',erg2[p]); end;
4 : begin writeln(x[p],' / ',y[p],' ist nicht ',gzw1[p],' Rest ',rest1[p],' sondern ',gzw2[p],' Rest ',rest2[p]); end;
end;
end;
end;
end;
end;
readln;
end;
procedure hauptmenue;
begin
clrscr;
textcolor(white);
writeln('Hauptmenue');
textcolor(lightgray);
writeln;
writeln;
writeln('Programmstart',1:6);
writeln('Programmende',2:7);
writeln;
repeat write('Auswahl: '); readln(hm); until (hm > 0) and (hm < 3);
end;
begin
repeat
hauptmenue;
if (hm = 1) then begin
rechenartwahl;
schwierigkeitsgrad;
rechnung;
bewertung;
if (fa = 'J') or (fa = 'j') then begin fehleranalyse; end;
end;
until (hm = 2);
end.