Entwickler-Ecke

Grafische Benutzeroberflächen (VCL & FireMonkey) - Aufgabe Gewichtscoach


volkerb. - Di 03.04.07 13:43
Titel: Aufgabe Gewichtscoach
Hallo!!!

Ich beschäftige mich seit einigen Tagen mit Delphi und habe jetzt mein erstes Problem wo ich nich weiterkomme.
Ich habe mir aus dem Internet eine Aufgabe heruasgesucht (Gewichtsrechner) und komme jetzt leider nicht weiter.
Es soll je nachdem ob man männlich oder weiblich ist ein bestimmtes idealgewicht ausgerechnet werden und danach soll verglichen werden ob man Idealgewicht hat oder nicht.
Hier ist der Quelltext den ich bis jetzt habe.


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:
procedure TForm1.b_startClick(Sender: TObject);
var groese, gewicht, mideal, wideal, x, y :real;
begin

gewicht := strtofloat(e_gewicht.text);
groese := strtofloat(e_groese.text);
mideal := (groese -100) * 0.95;
wideal := (groese - 100) * 0.90;

if r_sex.ItemIndex = 0 then
  begin
  x := (groese - 100) * 0.95;
  end

else
  begin
  y := (groese - 100) * 0.90;
  end

if (x = Mideal) or (y=wideal) then
  begin
  showmessage('sie haben..');
  end
else
  begin
  showmessage('sie haben kein...');
  end


Wenn ich das Programm starte, meine Größe und Gewicht eingeben und dann auf Start klicke, kommt eine Fehlermeldung.

Seht ihr vielleicht einen (von vielen) Fehlern ^^

Dankeschön jetzt schon einmal für die Hilfe!!!


ZeitGeist87 - Di 03.04.07 14:02

Hallo!


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
if y := ideal then
  begin
  showmessage ('sie haben...');
  end
else
  begin
  showmessage('sie haben kein...');
end


Doppelpunkt entfernen, da es ein Vergleich und keine Zuweisung ist :)

LG
Stefan


Blackheart666 - Di 03.04.07 14:13

Das kommt Mir doch sehr bekannt vor.
http://www.delphi-forum.de/viewtopic.php?t=71619


volkerb. - Di 03.04.07 14:22

Da hat wohl jemand das gleiche Problem wie ich^^
also ich habe den Quellcode jetzt noch etwas umgeändert (erster Beitrag editiert) aber es kommt eine Fehlermeldung wenn ich das Programm starten will.

[Error] Unit1.pas(57): Missing operator or semicolon

Wo fehlt dort ein Semikolon??


ZeitGeist87 - Di 03.04.07 14:24

Nach jedem end, außer vor dem end beim else

Alles klar? ^^

LG
Stefan


volkerb. - Di 03.04.07 14:28

ah cool...jetzt muss ich es nur noch hinbekommen dass er untergewicht und übergewicht anzeigt und einen unterscheid von +-2% mit einrechnet xD....ich glaube ich werde hier noch ein paar mal posten ^^


volkerb. - Di 03.04.07 14:47

Ich habe mir jetzt noch mal Gedanken über den Quellcode gemacht und hab ihn noch etwas verändert.


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:
procedure TForm1.b_startClick(Sender: TObject);
var groese, gewicht, mideal, wideal, x, y :real;
begin

gewicht := strtofloat(e_gewicht.text);
groese := strtofloat(e_groese.text);
mideal := (groese -100) * 0.95;
wideal := (groese - 100) * 0.90;

if r_sex.ItemIndex = 0 then
  begin
  mideal := x;
  end

else
  begin
  wideal := y;
  end ;

if (x < gewicht) or (y < gewicht) then
  begin
  showmessage('sie haben untergewicht');
  end ;
if (x>gewicht) or (y>gewicht) then
  begin
  showmessage('sie haben übergewicht');
  end  ;
if (x=gewicht) or (y=gewicht) then
  begin
  showmessage('sie haben idealgewicht');
  end;


ich bin mir aber nicht sicher ob er das idealgewicht so richtig ausrechnet^^
wenn ich es starte und gewicht und größe eingebe kommt jedenfalls nur "sie haben untergewicht".
habe ich mir hier jetzt völligen schwachsinn ausgedacht oder kann man das so schreiben?? xD


ZeitGeist87 - Di 03.04.07 14:49

wo belegst du denn x und y??? :shock:


noidic - Di 03.04.07 14:53

Hm, ich würd mal nen Grundlagenkurs/buch empfehlen. Die Zuweisungen sind falsch, die Vergleiche sowieso.

Einfach mal drüber nachdenken, was wohl passiert, wenn ich a den Wert von b zuweise. Und die Bedeutung von < und > solltest du auch nochmal nachschlagen.


volkerb. - Di 03.04.07 14:58


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:
procedure TForm1.b_startClick(Sender: TObject);
var groese, gewicht, mideal, wideal, x, y :real;
begin

gewicht := strtofloat(e_gewicht.text);
groese := strtofloat(e_groese.text);
mideal := (groese -100) * 0.95;
wideal := (groese - 100) * 0.90;

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

else
  begin
  wideal := (groese - 100) * 0.90;
  y      := wideal;
  end ;

if (x = gewicht) or (y = gewicht) then
  begin
  showmessage('Sie haben Idealgewicht');
  end ;
[b]if (x > gewicht) or (y > gewicht) then
  begin
  showmessage('Sie haben Übergewicht')
  end;
if ( x < gewicht) or (y < gewicht) then
  begin
  showmessage('Sie haben Untergewicht')
  end;[/b]


so Quelltext noch mal umgeändert^^
bis auf den fett markierten bereich funktioniert alles...wenn ich den weglasse, dann zeigt er mit nur eine message wenn man genau idealgewicht hat. wenn ich den fetten teil jedoch dazu füge zeit er IMMER an die haben untergewicht UND sie haben übergewicht.
kann mir da einer helfen??

PS: ein buch habe ihc mir schon bestellt ist aber noch nicht da und deswegen fange ich jetzt so schon einmal an ^^


noidic - Di 03.04.07 15:03

zum einen wäre es wohl sinnvoll, unten auch mit else zu arbeiten. Zum anderen ist immer nur entweder x oder y befüllt, es wird aber immer beides verglichen. Solltest dich mal fragen, wozu du da zwei Variablen benutzt, eigentlich kannst du auf beide verzichten ( richtige nerds, denen Tippen zuviel arbeit ist, verzichten ganz auf die Variablen :)


volkerb. - Di 03.04.07 15:14

ich find mit den variablen übersichtlicher ^^...und da ich ein noob und kein nerd bin darf ich das auch xD


wie kann ich das da unten denn mit if und else machen??


noidic - Di 03.04.07 15:26

na genau wie paar Zeilen drüber auch.


volkerb. - Di 03.04.07 15:33

ja aber unten gibt es ja 3 möglichkeiten


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
if (x = gewicht) or (y = gewicht) then
  begin
  showmessage('Sie haben Idealgewicht');
  end ;
if (x > gewicht) or (y > gewicht) then
  begin
  showmessage('Sie haben Übergewicht');
  end
else
  begin
  showmessage('Sie haben Untergewicht');
  end;


so??^^


noidic - Di 03.04.07 15:37

du kannst beliebig oft mit else verketten. Beispiel:


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
if a < b then
begin
...
end
else if b > a then
begin
...
end
else if b + a > 0 then
begin
...
end

...


volkerb. - Di 03.04.07 15:52

und das nächste probelm ^^ (ich glaub das dauert noch den ganzen tag )

delphi berechnet immer BEIDE gewicht, egal was ich oben in der radiogroup auswähle.
wie kann ich das verändern??


volkerb. - Mi 04.04.07 09:25

DANKESCHÖN an alle die so viel geduld hatten ^^

habs endlich hinbekommen....
...mein nächster post lässt aber nicht lange auf sich warten ;)

MfG Volker