Einzelnen Beitrag anzeigen

HappyTreeFriend

Registriert seit: 17. Jun 2003
14 Beiträge
 
#1

toleranzgrenze zu hoch/niedrig oder wie?

  Alt 29. Jun 2003, 16:20
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]
  Mit Zitat antworten Zitat