![]() |
toleranzgrenze zu hoch/niedrig oder wie?
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:
slotmachine bildet randomwerte für w[7]...w[9] was irgendwie doppelt gemacht wird, weils anders nicht funzt komischerweise.
// 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; potenz bildet den faktor mit dem die werte jeweil multipliziert werden müssen
Delphi-Quellcode:
rU1Slot-rU4Slot sind zufallszahlen von 0-6 und rUDiff die differenz der zahlen. rUdiffbet ist der Betrag dieser Zehl.
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; nun meine Frage, wo liegt mein fehler? thx 4 reply [edit=Daniel B]Delphi-Tags eingefügt. MfG Daniel B.[/edit] |
Ich würde Vorschlagen eine Summe mit x Nachkommastellen vorzugeben, Delphi rundet richtig, der Rechenkünster sollte es auch können :mrgreen:
Es könnte aber auch was bringen den Typ extended für deine Kommazahlen zu verwenden. Ansonst step doch mal druch und schau dir die Werte genau an, dann sollte man sehen können wo was falsch läuft. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 19:48 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz