Eigenartige Ausgabe einer Rechnung

Für Fragen von Einsteigern und Programmieranfängern...
Antworten
BaddyASK
Beiträge: 3
Registriert: Mi 13. Feb 2013, 15:00

Eigenartige Ausgabe einer Rechnung

Beitrag von BaddyASK »

Hallo Leute,
ich habe mich erst vor kurzem angemeldet und bin noch neu bei Lazarus. ich soll für die Schule ein Projekt entwickeln, bin dabei aber auf folgenden Fehler gestoßen...

Code: Alles auswählen

procedure TForm2.Button3Click(Sender: TObject);
var m , kg , a , gum , guf , leicht, normal, maesig , aktiv , saktiv : real ;       ///wichtig sind erstmal nur m , kg und a (Masse, Gewicht, Alter)
begin                                                                                                                                            
 
   if not TryStrtoFloat(Edit1.Text,m)
   then MessageDlg( 'Bitte trag deine Körpergröße ein!' , mtInformation , [mbOK] , 0) ;
   if not TryStrtoFloat(Edit1.Text,kg)
   then MessageDlg( 'Bitte trag dein Gewicht ein!' , mtInformation , [mbOK] , 0) ;
   if not TryStrtoFloat(Edit1.Text,a)
   then MessageDlg( 'Bitte trag dein Alter ein!' , mtInformation , [mbOK] , 0) ;
 
   m:=StrTOFloat (Edit1.Text) ;
   kg:=StrTOFloat (Edit2.Text) ;
   a:=StrTOFloat (Edit7.Text) ;
 
   if RadioGroup2.itemindex=-1
   then MessageDlg( 'Bitte gib dein Geschlecht an!' , mtInformation , [mbOK] , 0) ;
 
   if RadioGroup2.itemindex=0
   then gum:= 66 + (13.7 * kg)  + (5 * (m*100)) - (6.8 * a) ;            //diese Rechnung wird fasch ausgegeben   (1,78757208972527E-298) 
   Edit8.Text:=FloatToStr(gum) ;
 
   if RadioGroup2.itemindex=1
   then guf:= 655 + (9.6 * kg) + (1.8 * (m*100)) - (4.7 * a) ;             //diese Rechnung wird richtig ausgegeben   (etwa 1000-2000)
   Edit8.Text:=FloatToStr(guf) ;
end;                           
 
Meine Frage also: Was soll das mit dem Wert aus der ersten Rechnung und wie bekomm ich das hin?
Zuletzt geändert von Lori am Mi 13. Feb 2013, 17:29, insgesamt 3-mal geändert.
Grund: Highlighter

Benutzeravatar
m.fuchs
Lazarusforum e. V.
Beiträge: 2815
Registriert: Fr 22. Sep 2006, 19:32
OS, Lazarus, FPC: Winux (Lazarus 2.0.10, FPC 3.2.0)
CPU-Target: x86, x64, arm
Wohnort: Berlin
Kontaktdaten:

Re: Eigenartige Ausgabe einer Rechnung

Beitrag von m.fuchs »

Bitte editiere deine Beitrag und benutze den Highlighter für den Quellcode, also einfach folgende Tags um den Code machen:""

Gib dann bitte ein paar Beispieldaten an, was du erwartest und was du bekommst.
Software, Bibliotheken, Vorträge und mehr: https://www.ypa-software.de

BaddyASK
Beiträge: 3
Registriert: Mi 13. Feb 2013, 15:00

Re: Eigenartige Ausgabe einer Rechnung

Beitrag von BaddyASK »

Code: Alles auswählen

procedure TForm2.Button3Click(Sender: TObject);
var m , kg , a , gum , guf , leicht, normal, maesig , aktiv , saktiv : real ;
begin
 
   if not TryStrtoFloat(Edit1.Text,m)
   then MessageDlg( 'Bitte trag deine Körpergröße ein!' , mtInformation , [mbOK] , 0) ;
   if not TryStrtoFloat(Edit1.Text,kg)
   then MessageDlg( 'Bitte trag dein Gewicht ein!' , mtInformation , [mbOK] , 0) ;
   if not TryStrtoFloat(Edit1.Text,a)
   then MessageDlg( 'Bitte trag dein Alter ein!' , mtInformation , [mbOK] , 0) ;
 
   m:=StrTOFloat (Edit1.Text) ;
   kg:=StrTOFloat (Edit2.Text) ;
   a:=StrTOFloat (Edit7.Text) ;
 
   if RadioGroup2.itemindex=-1
   then MessageDlg( 'Bitte gib dein Geschlecht an!' , mtInformation , [mbOK] , 0) ;
 
   if RadioGroup2.itemindex=0
   then gum:= 66 + (13.7 * kg)  + (5 * (m*100)) - (6.8 * a) ;
   Edit8.Text:=FloatToStr(gum) ;
 
   if RadioGroup2.itemindex=1
   then guf:= 655 + (9.6 * kg) + (1.8 * (m*100)) - (4.7 * a) ;
   Edit8.Text:=FloatToStr(guf) ;
 
end;    
Danke für den Tipp :)
Ich erwarte für die erste Rechnung ebenfalls einen Wert zwischen 1000 und 2000 (so in etwa, je nach Variablen), aber es erscheint nur 1,78757208972527E-298 egal was ich eingebe...die Wahl was man rechnet wird mit einer RadioGroup gemacht und dann in Edit8 ausgegeben. So war der Plan

Benutzeravatar
theo
Beiträge: 10873
Registriert: Mo 11. Sep 2006, 19:01

Re: Eigenartige Ausgabe einer Rechnung

Beitrag von theo »

Das liegt wahrsch. daran das du am Schluss in jedem Fall

Edit8.Text:=FloatToStr(guf) ;

nochmal füllst, obwohl guf gar keinen definierten Wert hat.
Du hast begin und end vergessen.

Code: Alles auswählen

   if RadioGroup2.itemindex=1 then
   begin 
        guf:= 655 + (9.6 * kg) + (1.8 * (m*100)) - (4.7 * a) ;
        Edit8.Text:=FloatToStr(guf) ;
   end;
Gilt oben auch.

Benutzeravatar
m.fuchs
Lazarusforum e. V.
Beiträge: 2815
Registriert: Fr 22. Sep 2006, 19:32
OS, Lazarus, FPC: Winux (Lazarus 2.0.10, FPC 3.2.0)
CPU-Target: x86, x64, arm
Wohnort: Berlin
Kontaktdaten:

Re: Eigenartige Ausgabe einer Rechnung

Beitrag von m.fuchs »

Geh mal deinen Code Schritt für Schritt durch (mit dem Debugger zum Beispiel). Dein

Code: Alles auswählen

Edit8.Text:=FloatToStr(guf) ;
wird IMMER ausgeführt.

Und damit steht zum Schluss der Inhalt der nicht-initialisierten Variable guf in deinem Feld.
Software, Bibliotheken, Vorträge und mehr: https://www.ypa-software.de

BaddyASK
Beiträge: 3
Registriert: Mi 13. Feb 2013, 15:00

Re: Eigenartige Ausgabe einer Rechnung

Beitrag von BaddyASK »

Okay, habs geändert und es hat nur begin und end; gefehlt.
Danke für die schnelle Hilfe, das Forum ist top :mrgreen:

Eclipticon
Beiträge: 292
Registriert: Sa 5. Feb 2011, 20:38
OS, Lazarus, FPC: Windows XP VirtualBox (FPC 2.6.4, Laz 1.2.4)
CPU-Target: 32Bit
Wohnort: Wien

Re: Eigenartige Ausgabe einer Rechnung

Beitrag von Eclipticon »

Und noch ein Hinweis am Rande: In deinen TryStrToFloat() versteckt sich ein Copy-and-Paste-Fehler der wohl bei aussagekraeftiger Benennung der visuellen Komponenten haette vermieden werden koennen ;-)

Antworten