Entwickler-Ecke

Grafische Benutzeroberflächen (VCL & FireMonkey) - gewichtsrechner


xilos - Mo 02.04.07 17:01
Titel: gewichtsrechner
hi...

ich habe ein problem mit einem gewichtsrechner!!!
und zwar soll er zwischen mann und frau unterscheiden und je nachdem ausrechnen ob man idealgewicht hat oder nicht.
(mann: (groeße - 100) * 0.95)
(frau: (groeße - 100) * 0.90)

ich hab schon mal angefangen. hier ist der bisherige quelltext, aber es funktioniert irgendwie noch nicht wirklich viel ^^


Delphi-Quelltext
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:
72:
73:
74:
75:
76:
77:
78:
79:
80:
81:
82:
83:
84:
85:
86:
87:
88:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, ExtCtrls;
  
type
  TForm1 = class(TForm)
    L_caption: TLabel;
    L_groese: TLabel;
    L_gewicht: TLabel;
    E_groese: TEdit;
    E_gewicht: TEdit;
    B_antwort: TButton;
    B_ende: TButton;
    R_sex: TRadioGroup;
    Edit1: TEdit;
    procedure B_endeClick(Sender: TObject);
    procedure R_sexClick(Sender: TObject);
    procedure E_groeseChange(Sender: TObject);
    procedure B_antwortClick(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.B_endeClick(Sender: TObject);
begin
close
end;

procedure TForm1.R_sexClick(Sender: TObject);
begin
 if R_sex.itemindex = 0 then
   begin
   form1.color := clskyblue;
   end
 else
   begin
   form1.Color := $00C8C0DC;
   end
end;

procedure TForm1.E_groeseChange(Sender: TObject);
begin
 e_groese.setfocus;
end;

procedure TForm1.B_antwortClick(Sender: TObject);
var groese, mideal, wideal, gewicht : real ;
begin

 e_groese.Clear;
 e_gewicht.Clear;
 groese  := strtofloat(e_groese.text);
 gewicht := strtofloat(e_gewicht.text);

if r_sex.ItemIndex = 0 then
  begin
  mideal := (groese-100) * 0.95 ;
  end
else
  begin
  wideal := (groese-100) * 0.90;
  end

  if mideal or wideal = groese then
    begin
    showmessage('sie haben idealgewicht');
    end
  else
    begin
    showmessage('sie haben kein idealgewicht');
    end

end;

end.


kann mir einer von euch sagen was daran falsch ist?? ^^

thx jetzt schon mal


JayEff - Mo 02.04.07 17:28

der or Operator wird falsch eingesetzt. Zahl1 or Zahl2 ist eine Rechnung:
Nehmen wir an, Zahl1 sei 10 und Zahl2 15, dann rechnen wir das in binär um:

Quelltext
1:
2:
3:
4:
   Zahl1=1010
or Zahl2=1111
-------------
Ergebnis=0101=5(10)

Du musst das folgendermaßen machen: if (Wert1 = 10or (Wert2 = 10then {...}


xilos - Di 03.04.07 08:21

also würde das gehn wenn ich schreiben würde


Delphi-Quelltext
1:
2:
if (mideal = gewicht) or (wideal = gewicht) then
...


wenn ich das so hinschreibe kommt bei mir folgende fehlermeldung...

project project1.exe raised exception dass econverterror with message "is not a valid floating point value'.process stopped. use step or run to continue.


uro3 - Di 03.04.07 09:08


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
e_groese.Clear;   // leert das Edit Feld
 
groese  := strtofloat(e_groese.text); // was soll dann umgewandelt werden?


if r_sex.ItemIndex = 0 then
begin
  mideal := (groese-100) * 0.95 ;     // wird bei Frau nie gesetzt
end
else
begin
    wideal := (groese-100) * 0.90;   // wird bei Mann nie gesetzt
end

if (mideal = gewicht) or (wideal = gewicht) then   // Vergleich mit nicht initialisierten Wert (mideal bzw. wideal)


xilos - Di 03.04.07 12:27

ich hab keine ahnung wie ich das in einem delphicode umschreiben soll ^^
kann mir das vll einer von euch "übersetzen" xD

wenn r_sex.itemindex = 0 dann
-rechne die körpergröße - 100 und das * 0.95
-vergleiche dies mit dem idealgewicht eines mannes
-wenn es gleich ist zeige message "sie haben idealgewicht"
-wenn es nicht gleich ist zeige message "sie haben kein idealgewicht"
andernfalls
-rechne die körpergröße - 100 und das * 0.90
-vergleiche dies mit dem idealgewicht einer frau
-wenn es gleich ist zeige message "sie haben idealgewicht"
-wenn es nicht gleich ist zeige message "sie haben kein idealgewicht"


ich komm echt nicht weiter und weiß nicht wie ich das machen soll....thx jetzt schon mal


Blackheart666 - Di 03.04.07 12:44

Dann arbeite doch das ab wie Du es schreibst, gegebenenfalls erstmal nur mit männlich.
Lass Dir zb. Zwischenergebnisse anzeigen mit Showmessage, dann findest Du deine Fehler von allein.


Andidreas - Di 03.04.07 12:54

Ja, ja. Lesen können erleichtert die Sache ungemein.

Delphi-Quelltext
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:
72:
73:
74:
75:
76:
77:
78:
79:
80:
81:
82:
83:
84:
85:
86:
87:
88:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, ExtCtrls;
  
type
  TForm1 = class(TForm)
    L_caption: TLabel;
    L_groese: TLabel;
    L_gewicht: TLabel;
    E_groese: TEdit;
    E_gewicht: TEdit;
    B_antwort: TButton;
    B_ende: TButton;
    R_sex: TRadioGroup;
    Edit1: TEdit;
    procedure B_endeClick(Sender: TObject);
    procedure R_sexClick(Sender: TObject);
    procedure E_groeseChange(Sender: TObject);
    procedure B_antwortClick(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.B_endeClick(Sender: TObject);
begin
close
end;

procedure TForm1.R_sexClick(Sender: TObject);
begin
 if R_sex.itemindex = 0 then
   begin
   form1.color := clskyblue;
   end
 else
   begin
   form1.Color := $00C8C0DC;
   end
end;

procedure TForm1.E_groeseChange(Sender: TObject);
begin
 e_groese.setfocus;
end;

procedure TForm1.B_antwortClick(Sender: TObject);
var groese, mideal, wideal, gewicht : real ;
begin

 e_groese.Clear; // Wenn Du das hier
 e_gewicht.Clear; // und das hier schon jetzt leerst, was bitte soll er dann berechnen
 groese  := strtofloat(e_groese.text);
 gewicht := strtofloat(e_gewicht.text);

if r_sex.ItemIndex = 0 then
  begin
  mideal := (groese-100) * 0.95 ;
  end
else
  begin
  wideal := (groese-100) * 0.90;
  end// Semikolon fehlt

  if (mideal = gewicht) or (wideal = gewicht) then // so wird ein Schuh draus für die Abfrage
    begin
    showmessage('sie haben idealgewicht');
    end
  else
    begin
    showmessage('sie haben kein idealgewicht');
    end

end;

end.