| Autor |
Beitrag |
Dude566
      
Beiträge: 1592
Erhaltene Danke: 79
W8, W7 (Chrome, FF, IE)
Delphi XE2 Pro, Eclipse Juno, VS2012
|
Verfasst: Mi 24.09.08 19:51
Also ich habe vor einen BMI Rechner zu erstellen, aber er gibt mir bei den Variablen die ich mit float deklariert habe einen Fehler an, wenn ich sie als double angebe läuft das Programm. Jedoch das Ergebnis kann auf keinen Fall stimmen.
Schaut doch bitte mal drüber:
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41: 42: 43: 44: 45: 46: 47: 48: 49: 50: 51: 52: 53: 54: 55: 56: 57: 58: 59: 60: 61: 62: 63: 64: 65: 66: 67: 68: 69: 70: 71:
| unit Unit1;
interface
uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, jpeg, ExtCtrls;
type TForm1 = class(TForm) Image1: TImage; Label1: TLabel; Edit1: TEdit; Label2: TLabel; Label3: TLabel; Edit2: TEdit; Label4: TLabel; RadioButton1: TRadioButton; Button1: TButton; Image2: TImage; RadioButton2: TRadioButton; Edit3: TEdit; procedure FormCreate(Sender: TObject); procedure Button1Click(Sender: TObject); private public end;
var Form1: TForm1; groese1 : float; groese2 : float; gewicht : float; bmi : float;
implementation
{$R *.dfm}
procedure TForm1.FormCreate(Sender: TObject); begin Image2.Visible := false; end;
procedure TForm1.Button1Click(Sender: TObject); begin gewicht := StrToFloat(Edit1.Text); groese1 := StrToFloat(Edit2.Text);
if RadioButton2.Checked then begin Image2.Visible := false; groese2 := groese1 * groese1; bmi := gewicht / groese2; Edit3.Text := FloatToStr(bmi); end;
if RadioButton1.Checked then begin Image2.Visible := true; groese2 := groese1 * groese1; bmi := gewicht / groese2; Edit3.Text := FloatToStr(bmi); end;
end;
end. |
|
|
Xentar
      
Beiträge: 2077
Erhaltene Danke: 2
Win XP
Delphi 5 Ent., Delphi 2007 Prof
|
Verfasst: Mi 24.09.08 20:04
Die rechnung sieht erstmal richtig aus.. und Double sollte auch stimmen.
Was für Werte bekommst du denn? Du weißt, dass die Größe in Metern, nicht in cm, angegeben wird?
_________________ PROGRAMMER: A device for converting coffee into software.
|
|
Dude566 
      
Beiträge: 1592
Erhaltene Danke: 79
W8, W7 (Chrome, FF, IE)
Delphi XE2 Pro, Eclipse Juno, VS2012
|
Verfasst: Mi 24.09.08 22:11
Wenn ich 80kg bei 1,80 Meter angebe, zeigt er einen BMI von "0,00246913580246914" an.
Ich bin verwirrt... was ist falsch???
|
|
jackle32
      
Beiträge: 183
Erhaltene Danke: 7
Win7
Delphi XE5 Starter, RAD Studio XE7 Pro
|
Verfasst: Mi 24.09.08 22:47
Hallo,
dein Fehler ist, das du zur Berechnung des BMI die Größe in Meter nehmen musst. Da ich denke das du in deinem Edit cm eingibst musst du den Wert für groesse1 noch durch 100 rechnen bevor du ihn quadrierst.
Also für deine Beispiel:
NICHT 80/(180*180)= 0,002469
Sondern 80/(1,8*1,8 ) = 24,691, der Wert ist auch realistisch
Grüße Jack
_________________ Es gibt keine dummen Fragen, nur dumme Antworten.
Zuletzt bearbeitet von jackle32 am Mi 24.09.08 22:48, insgesamt 1-mal bearbeitet
|
|
Xentar
      
Beiträge: 2077
Erhaltene Danke: 2
Win XP
Delphi 5 Ent., Delphi 2007 Prof
|
Verfasst: Mi 24.09.08 22:48
Hab ich erwähnt, dass man die Größe in Metern, und NICHT in Zentimetern, angeben muss? *grübel* *scroll* ja, hab ich.
Also, hab das mal schnell nachgestellt. Wenn ich in Edit2 "1,80" eintrage, kommt das korrekte Ergebnis raus, nämlich 24,69
Wenn ihc in Edit2 den Wert "180" eintrag, bekomm ich das Ergebnis von dir.
Och man, zu langsam 
_________________ PROGRAMMER: A device for converting coffee into software.
|
|
Dude566 
      
Beiträge: 1592
Erhaltene Danke: 79
W8, W7 (Chrome, FF, IE)
Delphi XE2 Pro, Eclipse Juno, VS2012
|
Verfasst: Mi 24.09.08 22:58
Ja sorry da kam die ersten Version in der ich noch mit Zentimetern hatte mit der Zweiten durcheinander.
Ich hatte als Wert für das Edit2 feld 180 "cm", habe es aber nicht umgeändert.
|
|
baka0815
      
Beiträge: 489
Erhaltene Danke: 14
Win 10, Win 8, Debian GNU/Linux
Delphi 10.1 Berlin, Java, C#
|
Verfasst: Do 25.09.08 08:56
|
|
DeddyH
Ehemaliges Mitglied
Erhaltene Danke: 1
|
Verfasst: Do 25.09.08 10:41
Ich würde aus der Berechnung eine Funktion machen, um die Logik von der Darstellung zu trennen. Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13:
| function BMI(const gew, groesse: double): double; begin Result := gew/sqr(groesse); end;
procedure TForm1.Button1Click(Sender: TObject); var gewicht, groesse: double; begin gewicht := StrToFloatDef(Edit1.Text,0); groesse := StrToFloatDef(Edit2.Text,1); Edit3.Text := FloatToStr(BMI(gewicht,groesse)); Image2.Visible := RadioButton1.Checked; end; |
Getippt und nicht getestet.
Zuletzt bearbeitet von DeddyH am Do 25.09.08 15:57, insgesamt 1-mal bearbeitet
|
|
baka0815
      
Beiträge: 489
Erhaltene Danke: 14
Win 10, Win 8, Debian GNU/Linux
Delphi 10.1 Berlin, Java, C#
|
Verfasst: Do 25.09.08 10:56
DeddyH hat folgendes geschrieben: | Ich würde aus der Berechnung eine Funktion machen, um die Logik von der Darstellung zu trennen. Delphi-Quelltext 1: 2: 3: 4: 5:
| function BMI(const gew, groesse: double): double; begin Result := gew/sqr(groesse); end; [...] |
Getippt und nicht getestet. |
sqr ( sqrt?) ist auch falsch (Square root = Wurzel), du meinst pow.
|
|
DeddyH
Ehemaliges Mitglied
Erhaltene Danke: 1
|
Verfasst: Do 25.09.08 11:07
sqr(), nicht sqrt(). Steht in Unit System und die Hilfe dazu sagt: | Zitat: | | Die Funktion Sqr gibt das Quadrat eines Wertes zurück. |

|
|
baka0815
      
Beiträge: 489
Erhaltene Danke: 14
Win 10, Win 8, Debian GNU/Linux
Delphi 10.1 Berlin, Java, C#
|
Verfasst: Do 25.09.08 12:34
|
|
|