Moin Moin
Also ich hab ne Aufgabe die von kg in g und mg umrechnet und umgekehrt und überhaupt. Es werden randomzahlen (INTEGER) erstellt, diese sollen in die jeweilige einheit umgewandelt und zusammengerechnet werden und als realzahl ausgegeben werden. Das is ja kein Problem, jedoch soll jemand das ergebnis eingeben und es soll geprüft werden ob die antwort richtig oder falsch ist. nun mein problem. ich benutze abs <0,01, die toleranz ist zu niedrig, jedoch 0,0001 ist zu hoch. bei 0,01 sagt er bei allem es sei richtig wenn die 2 nachkommastellen richtig sind, bei 0,0001 sagt er bei allem es sei falsch... und wenn ich die toleranz ganz weglasse sagt er auch es sei falsch. irgenwie muss da ja was an der toleranzgrenze sein, was ich aber bei integerzahlen nicht ganz verstehen kann...
hier mal die aufgabe
Delphi-Quellcode:
// AUFGABE 2
procedure RichtigEdit12;
begin
form8.Edit14.text:='Richtig :) !';
Richtig:=Richtig+1;
end;
procedure FalschEdit12;
begin
form8.Edit14.text:='Falsch :( !';
Falsch:=Falsch+1;
end;
procedure TForm8.Button3Click(Sender: TObject);
begin
GerechneteAufgaben:=GerechneteAufgaben+1;
slotmachine2;
potenz2;
w[7]:=strtofloat(form8.edit6.text);
w[8]:=strtofloat(form8.edit8.text);
w[9]:=strtofloat(form8.edit10.text);
form8.Edit6.text:=FloattoStr(w[7]);
form8.Edit8.text:=FloatToStr(w[8]);
form8.Edit10.text:=FloatToStr(w[9]);
ZufEinheitSLOT1;
ZufEinheitSLOT2;
ZufEinheitSLOT3;
edit12.text:='';
end;
procedure editpruef2;
var i:integer;
begin
if (form8.edit12.text='')
then begin
form8.edit12.setfocus;
exit;
i:=0
end
else i:=1;
pruef:=i;
end;
//H1, H2, H3 Hilfsvariablen zur Errechnung von w[10]
procedure TForm8.Button4Click(Sender: TObject);
var H1,H2,H3:real;
begin
Editpruef2;
if pruef<1 then
showmessage('Du hast eine Zahl vergessen')
else begin
H1:=0;
H2:=0;
H3:=0;
w[10]:=StrToFloat(form8.Edit12.text);
case rUDiff2 of
-3 : H1:=w[7]/Pot[2];
-2 : H1:=w[7]/Pot[2];
-1 : H1:=w[7]/Pot[2];
1 : H1:=w[7]*Pot[2];
2 : H1:=w[7]*Pot[2];
3 : H1:=w[7]*Pot[2];
0 : H1:=w[7]
end;
case rUDiff3 of
-3 : H2:=w[8]/Pot[3];
-2 : H2:=w[8]/Pot[3];
-1 : H2:=w[8]/Pot[3];
1 : H2:=w[8]*Pot[3];
2 : H2:=w[8]*Pot[3];
3 : H2:=w[8]*Pot[3];
0 : H2:=w[8]
end;
case rUDiff4 of
-3 : H3:=w[9]/pot[4];
-2 : H3:=w[9]/Pot[4];
-1 : H3:=w[9]/Pot[4];
1 : H3:=w[9]/Pot[4];
2 : H3:=w[9]/Pot[4];
3 : H3:=w[9]/Pot[4];
0 : H3:=w[9]
end;
if abs (w[10]-(H1+H2+H3))<0.01
then RichtigEdit12
else FalschEdit12;
end;
Ausgabe(IntToStr(Richtig), IntToStr(Falsch), IntToStr(Gerechneteaufgaben));
button4.Enabled:=false;
button3.enabled:=true;
pruef:=0;
w[7]:=0;
w[8]:=0;
w[9]:=0;
end;
slotmachine bildet randomwerte für w[7]...w[9] was irgendwie doppelt gemacht wird, weils anders nicht funzt komischerweise.
potenz bildet den faktor mit dem die werte jeweil multipliziert werden müssen
Delphi-Quellcode:
procedure potenz2;
begin
rUDiff2:=rU1SLOT-rU4SLOT;
if rUDiff2 > 0 then
rUDiffBet2:=rUDiff2 else
if rUDiff2 < 0 then
rUDiffBet2:=-rUDiff2
else rUDiffBet2:=0;
Pot[2]:=1000;
pot[2]:=power(pot[2],rUDiffBet2);
rUDiff3:=rU2SLOT-rU4SLOT;
if rUDiff3 > 0 then
rUDiffBet3:=rUDiff3 else
if rUDiff3 < 0 then
rUDiffBet3:=-rUDiff3
else rUDiffBet3:=0;
Pot[3]:=1000;
pot[3]:=power(pot[3],rUDiffBet3);
rUDiff4:=rU3SLOT-rU4SLOT;
if rUDiff4 > 0 then
rUDiffBet4:=rUDiff4 else
if rUDiff4 < 0 then
rUDiffBet4:=-rUDiff4
else rUDiffBet4:=0;
Pot[4]:=1000;
pot[4]:=power(pot[4],rUDiffBet4);
end;
rU1Slot-rU4Slot sind zufallszahlen von 0-6 und rUDiff die differenz der zahlen. rUdiffbet ist der Betrag dieser Zehl.
nun meine Frage, wo liegt mein fehler?
thx 4 reply
[edit=Daniel B]Delphi-Tags eingefügt. MfG Daniel B.[/edit]