AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

toleranzgrenze zu hoch/niedrig oder wie?

Ein Thema von HappyTreeFriend · begonnen am 29. Jun 2003 · letzter Beitrag vom 29. Jun 2003
Antwort Antwort
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
Touchdown

Registriert seit: 17. Feb 2003
227 Beiträge
 
#2
  Alt 29. Jun 2003, 18:02
Ich würde Vorschlagen eine Summe mit x Nachkommastellen vorzugeben, Delphi rundet richtig, der Rechenkünster sollte es auch können

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.
function getallfornothing: TGoldesel;
begin
result := TGoldesel.create;
end;
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 16:15 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz