Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Problem mit 2 Bedingungen in einer IF Schleife! (https://www.delphipraxis.net/54940-problem-mit-2-bedingungen-einer-if-schleife.html)

Zwock 13. Okt 2005 18:21


Problem mit 2 Bedingungen in einer IF Schleife!
 
Hi Leute!
Wiedereinmal bin ich auf eure Hilfe angewiesen.
Ich soll wiedereinmal etwas für den Informatik-Kurs programmieren.
Dabei geht es dabei um einen Idealgewicht-berechner. Ich stelle euch meinen Gedankengang und meinen Code vor, damit ihr Denkansatz-Fehler u. Code Fehler ausmachen könnt. Vielen Dank schon im Voraus!

Aufgabenstellung:

Einen Idealgewichtserrechner programmieren! Die Formel für das männliche IDealgewicht ist: Körpergröße -100, und davon 95%. Wir sollen 2% +/- einbeziehen.

Meine Lösung: Ein Programm mit 2 Edit-Feldern (Größe/Gewicht), und einem Button "Antwort". Hat man beides eingetippt und klickt auf "Antwort", wird in 2 Variablen (IdealHigh; IdealLow - beides Real) das idealgewicht gespeichert. In IdealHigh also die Körpgeröße -100 * 0.97 (95% + 2% = 97% weg. der erwähnten 2 Prozent Karenz), und in IdealLow das Ganze mit 0.93 (93%, wieder weg. der Karenz). Das Ganze wird mit dem eingetippten Gewicht verglichen. Wenn IdealHigh kleiner als das eingetippte Gewicht ist, hat man übergewicht. Ist IdealLOW größer als das eingetippte Gewicht, hat man untergewicht.
Mein Problem ist nun das Idealgewicht, denn bei meiner Lösung (siehe Code unten), wird mir sobald ich auf 150 cm, 54 KG (IDealgewicht für 150 cm) eintippe, passiert beim klicken auf den Antwortbutton einfach garnichts! Was mache ich falsch?

Delphi-Quellcode:
 
unit Unit2;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, ExtCtrls;

type
  TForm2 = class(TForm)
    RGGender: TRadioGroup;
    LHeight: TLabel;
    LWeight: TLabel;
    EHeight: TEdit;
    EWeight: TEdit;
    BAnswer: TButton;
    BEnd: TButton;
    procedure BAnswerClick(Sender: TObject);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  Form2: TForm2;
  IdealHigh: Real;
  IdealLow: Real;

implementation

{$R *.dfm}

procedure TForm2.BAnswerClick(Sender: TObject);
begin

 if RGGender.ItemIndex = 0 then // einfach nicht beachten ist nur zur Geschlechtsfeststellung//
    IdealHigh:= StrToFloat(EHeight.Text) - 100;
    IdealHigh:= IdealHigh * 0.97;
    IdealLow:= StrToFloat(EHeight.Text) - 100;
    IdealLow:= IdealLow * 0.93;


 if IdealHigh < StrToFloat(EWeight.Text) then
    ShowMessage ('Sie haben Übergewicht!')

 else if IdealLow > StrToFloat(EWeight.Text) then
     ShowMessage ('Sie haben Untergewicht!')

 else if (IdealHigh >= StrToFloat(EWeight.Text)) and
         (IdealLow <= StrToFloat(EWeight.Text)) then
     ShowMessage ('Sie haben Idealgewicht!');
end;

end.

Muetze1 13. Okt 2005 18:35

Re: Problem mit 2 Bedingungen in einer IF Schleife!
 
1. Es gibt keine IF Schleife!!! Wo läuft er denn da im Kreis (bzw. in einer Schleife)?
2. Wenn du Untergewicht und Übergewicht ausgeschlossen hast, warum dann explizit noch testen, ob er denn über dem Untergewicht und unter dem Übergewicht? Du hast Über- und Untergewicht ausgeschlossen, also bleibt nur Idealgewicht übrig!

Delphi-Quellcode:
if IdealHigh < StrToFloat(EWeight.Text) then
    ShowMessage ('Sie haben Übergewicht!')

else if IdealLow > StrToFloat(EWeight.Text) then
     ShowMessage ('Sie haben Untergewicht!')

else
     ShowMessage ('Sie haben Idealgewicht!');

Zwock 13. Okt 2005 18:38

Re: Problem mit 2 Bedingungen in einer IF Schleife!
 
Den Begriff "If-Schleife" habe ich als alter PHP-Hase noch im Petto, gemeint sind einfach IF-Bedingungen samt den dazugehörigen Anweisungen ;) Danke trotzdem! Hast mir sehr weitergeholfen!


Habs nun mit else gemacht, angezeigt wird mir beim Klicken auf "Antwort" trotzdem nichts ;((


Hier nochmal der komplette Code:

Delphi-Quellcode:
unit Unit2;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, ExtCtrls;

type
  TForm2 = class(TForm)
    RGGender: TRadioGroup;
    LHeight: TLabel;
    LWeight: TLabel;
    EHeight: TEdit;
    EWeight: TEdit;
    BAnswer: TButton;
    BEnd: TButton;
    procedure BAnswerClick(Sender: TObject);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  Form2: TForm2;
  IdealHigh: Real;
  IdealLow: Real;

implementation

{$R *.dfm}

procedure TForm2.BAnswerClick(Sender: TObject);
begin

 if RGGender.ItemIndex = 0 then
    begin
    IdealHigh:= StrToFloat(EHeight.Text) - 100;
    IdealHigh:= IdealHigh * 0.97;
    IdealLow:= StrToFloat(EHeight.Text) - 100;
    IdealLow:= IdealLow * 0.93;


    if IdealHigh < StrToFloat(EWeight.Text) then
       ShowMessage ('Sie haben Übergewicht!')

    else if IdealLow > StrToFloat(EWeight.Text) then
       ShowMessage ('Sie haben Untergewicht!')

    else
       ShowMessage ('Sie haben Idealgewicht!');
    end

  else if RGGender.ItemIndex = 1 then
     begin
     IdealHigh:= StrToFloat(EHeight.Text) - 100;
     IdealHigh:= IdealHigh * 0.92;
     IdealLow:= StrToFloat(EHeight.Text) - 100;
     IdealLow:= IdealLow * 0.88;


     if IdealHigh < StrToFloat(EWeight.Text) then
       ShowMessage ('Sie haben Übergewicht!')

     else if IdealLow > StrToFloat(EWeight.Text) then
       ShowMessage ('Sie haben Untergewicht!')

     else
       ShowMessage ('Sie haben Idealgewicht!');
     end
end;

end.

leddl 13. Okt 2005 19:13

Re: Problem mit 2 Bedingungen in einer IF Schleife!
 
Hast du mal überprüft, was der ItemIndex beim ButtonClick ist? Vielleicht ist der nicht 0 oder 1, sondern -1.

Zwock 13. Okt 2005 20:19

Re: Problem mit 2 Bedingungen in einer IF Schleife!
 
Das ist ja nicht der Kasus-Knacksus, das Problem ist ja, egal welche NR das hat, dass er beim Idealgewicht nichts zeigt wennsch auf "antwort" klicke...

leddl 13. Okt 2005 20:50

Re: Problem mit 2 Bedingungen in einer IF Schleife!
 
Der Code sollte aber so stimmen. Also check das doch einfach mal. Das hatten wir neulich nämlich schonmal hier. Kanns sein, daß du Radiobuttons auf die Radiogroup gezogen hast, anstatt Items im OI hinzuzufügen? (Ich halte dich nicht fürn doof, keine Angst, aber wie gesagt, den Fall hatten wir neulich schonmal und ich will den Fehler nur ausschließen) Denn dann ist der ItemIndex immer -1 und in deinem ButtonClick passiert gar nüscht.

Zwock 13. Okt 2005 21:01

Re: Problem mit 2 Bedingungen in einer IF Schleife!
 
Ich habe ne Radiogroup erstellt, und habe in "Items" in die Liste die beiden Punkte eingetragen...

leddl 13. Okt 2005 21:13

Re: Problem mit 2 Bedingungen in einer IF Schleife!
 
OK, dann haben wir den Punkt geklärt. Nich daß wir den Fehler gesucht hätten und es dann doch das gewesen wär ;)

Aber irgendwas kann bei dir da nicht stimmen. Das muß funktionieren. Ich hab mir gerade den Code, 2 Editfelder, eine Radiogroup mit 2 Items und einen Button in ein Projekt eingebaut und es macht genau das, was es soll.
Also wie wärs, wenn du einfach testweise mal im ButtonClick am Anfang den ItemIndex per ShowMessage ausgibst?

tigerman33 14. Okt 2005 08:26

Re: Problem mit 2 Bedingungen in einer IF Schleife!
 
Funktioniert das nur dann nicht, wenn du das Idealgewicht eintippst (bzw einen Wert, der im Idealgewichts-Intervall liegt), oder auch nicht, wenn Über-/Untergewicht rauskommt?

jim_raynor 14. Okt 2005 08:51

Re: Problem mit 2 Bedingungen in einer IF Schleife!
 
Ich würde dir empfehlen bei der Einrückung das begin und end auf die gleiche Stufe wie das zugehörige if zu stellen.

Hast du denn schon mal den Debugger angeschmissen und geschaut, wo es langgeht?

Beispiel für die Einrückung:

Delphi-Quellcode:
if a=b then
begin
  if a=c then
  begin
    SHowMessage('Blub1');
  end
  else
    SHowMessage('Blub2');
end;
nur als kleiner Tipp ;)

freak4fun 14. Okt 2005 08:58

Re: Problem mit 2 Bedingungen in einer IF Schleife!
 
Hallo :hi:,
ich hab auch mal ein wenig versucht. Bei mir funktioniert alles.

Delphi-Quellcode:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;

type
  TForm1 = class(TForm)
    Button1: TButton;
    RGGender: TListBox;
    EHeight: TEdit;
    EWeight: TEdit;
    procedure Button1Click(Sender: TObject);
  private
    IdealHigh: Real;
    IdealLow: Real;
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
var
  lMultiHigh,
  lMultiLow: Double;
begin
  Case RGGender.ItemIndex of
    0: begin
         lMultiHigh := 0.97;
         lMultiLow := 0.93;
       end;
    1: begin
         lMultiHigh := 0.92;
         lMultiLow := 0.88;
       end;
    else
      begin
        ShowMessage('Berechnung nicht möglich. (ItemIndex: '+ IntToStr(RGGender.ItemIndex) + ')');
        Exit;
      end;
  end;

  try
    IdealHigh := StrToFloat(EHeight.Text) - 100;
    IdealHigh := IdealHigh * lMultiHigh;
    IdealLow := StrToFloat(EHeight.Text) - 100;
    IdealLow := IdealLow * lMultiLow;
  except
    ShowMessage('Fehler! Bitte überprüfe deine Eingabe.');
    Exit;
  end;

  if IdealHigh < StrToFloat(EWeight.Text) then
    ShowMessage ('Sie haben Übergewicht!')
  else
    if IdealLow > StrToFloat(EWeight.Text) then
      ShowMessage ('Sie haben Untergewicht!')
    else
      ShowMessage ('Sie haben Idealgewicht!');
end;


end.
MfG
freak

leddl 14. Okt 2005 09:18

Re: Problem mit 2 Bedingungen in einer IF Schleife!
 
Wie gesagt, ich könnte mir wirklich nur vorstellen, daß da was mit dem ItemIndex nicht stimmt. Hast du das denn jetzt mal überprüft, Zwock?

freak4fun 14. Okt 2005 09:27

Re: Problem mit 2 Bedingungen in einer IF Schleife!
 
Zitat:

Zitat von leddl
Wie gesagt, ich könnte mir wirklich nur vorstellen, daß da was mit dem ItemIndex nicht stimmt. Hast du das denn jetzt mal überprüft, Zwock?

Deshalb hab ich den ItemIndex mit rein geschrieben. Ich bin auch gespannt wo der Fehler ist. ;)

MfG
fR34k

leddl 14. Okt 2005 09:35

Re: Problem mit 2 Bedingungen in einer IF Schleife!
 
Zitat:

Zitat von freak4fun
Zitat:

Zitat von leddl
Wie gesagt, ich könnte mir wirklich nur vorstellen, daß da was mit dem ItemIndex nicht stimmt. Hast du das denn jetzt mal überprüft, Zwock?

Deshalb hab ich den ItemIndex mit rein geschrieben. Ich bin auch gespannt wo der Fehler ist. ;)

MfG
fR34k

:mrgreen: Hab mir deinen Code gar nich angesehen. Mit sowas hatte ich nich gerechnet. Wie gewitzt :mrgreen: Ich hätte einfach am Anfang der Prozedur ne ShowMessage reingepackt :mrgreen:

Zwock 14. Okt 2005 14:19

Re: Problem mit 2 Bedingungen in einer IF Schleife!
 
Also danke erstmal für die vielen Antworten!

1. Spuckt mir das Programm als Werte des ItemIndex für Männlich 0, und für weiblich 1 aus! Also wie erwartet...
2. Freak, dein Code in allen Ehren, und ich bin dir sehr dankbar, aber Teile deines Codes haben wir noch nicht behandelt, ich glaube kaum das mein Lehrer mir glaubt, wenn ich ihm sage, dass der von mir stammt, und er wäre nicht erfreut wenn ich sage, dasss ich ihn aus dem Internet habe ;)
3. Es funktioniert alles, nur wenn ich einen Wert eintippe, der theoretisch dem IDealgewicht entspricht, reagiert das Programm auf meinen Klick (auf den Antwortbutton) einfach nicht, es scheint ihn zu ignorieren...

Muetze1 14. Okt 2005 14:25

Re: Problem mit 2 Bedingungen in einer IF Schleife!
 
Zitat:

Zitat von Zwock
3. Es funktioniert alles, nur wenn ich einen Wert eintippe, der theoretisch dem IDealgewicht entspricht, reagiert das Programm auf meinen Klick (auf den Antwortbutton) einfach nicht, es scheint ihn zu ignorieren...

Dann schau nochmal in deinem Quellcode nach und benutze die Ende-Taste, ob da nicht vllt ein Semikolon irgendwo nach dem "Else" ist - vllt auch ganz rechts im nicht sichtbaren Bereich des Editorfensters..

leddl 14. Okt 2005 14:26

Re: Problem mit 2 Bedingungen in einer IF Schleife!
 
Sehr seltsam. Ich hatte bei mir mal verschiedene Werte ausprobiert und mit deinem Code alle 3 Fälle angezeigt bekommen... :gruebel:

//Edit:
Zu spät gesehen
Zitat:

Dann schau nochmal in deinem Quellcode nach und benutze die Ende-Taste, ob da nicht vllt ein Semikolon irgendwo nach dem "Else" ist - vllt auch ganz rechts im nicht sichtbaren Bereich des Editorfensters..
Am Code kann es eigentlich nicht liegen, da ich den in mein Projekt kopiert habe und es funktioniert hat.

Airblader 14. Okt 2005 14:29

Re: Problem mit 2 Bedingungen in einer IF Schleife!
 
Zitat:

Zitat von Zwock
Den Begriff "If-Schleife" habe ich als alter PHP-Hase noch im Petto

Das ist jetzt keineswegs böse gemeint, aber niemand, der - auch in PHP - if für ne Schleife hält kann sich zu Recht als "Hase" im Sinne von erfahren einstufen ;)

air

generic 14. Okt 2005 14:31

Re: Problem mit 2 Bedingungen in einer IF Schleife!
 
Delphi-Quellcode:
if RGGender.ItemIndex = 0 then // einfach nicht beachten ist nur zur Geschlechtsfeststellung//
    IdealHigh:= StrToFloat(EHeight.Text) - 100;
    IdealHigh:= IdealHigh * 0.97;
    IdealLow:= StrToFloat(EHeight.Text) - 100;
    IdealLow:= IdealLow * 0.93;
^ nach deiner einrückung nach wird das aber nicht so ausgeführt!

Delphi-Quellcode:
if RGGender.ItemIndex = 0 then // einfach nicht beachten ist nur zur Geschlechtsfeststellung//
    IdealHigh:= StrToFloat(EHeight.Text) - 100;

IdealHigh:= IdealHigh * 0.97;
IdealLow:= StrToFloat(EHeight.Text) - 100;
IdealLow:= IdealLow * 0.93;
vieleicht liegt hier dein fehler?

leddl 14. Okt 2005 14:38

Re: Problem mit 2 Bedingungen in einer IF Schleife!
 
Das hat er in seinem Post danach aber richtig gemacht ;)

freak4fun 14. Okt 2005 15:08

Re: Problem mit 2 Bedingungen in einer IF Schleife!
 
Kopier deine ganze Unit und poste sie hier. Das Gerate reicht langsam. ;)

MfG
freak

Sharky 14. Okt 2005 15:30

Re: Problem mit 2 Bedingungen in einer IF Schleife!
 
Zitat:

Zitat von Zwock
... 2. Freak, dein Code in allen Ehren, und ich bin dir sehr dankbar, aber Teile deines Codes haben wir noch nicht behandelt, ich glaube kaum das mein Lehrer mir glaubt, wenn ich ihm sage, dass der von mir stammt, und er wäre nicht erfreut wenn ich sage, dasss ich ihn aus dem Internet habe ;) ...

Hai Zwocke,
das finde ich eine sehr löbliche Einstellung :-D

Darum bekommst Du von mir jetzt auch keinen Code sondern nur einige Denkanstösse ;-)
  1. Mache die Umwandlung von des Strings in den Editfeld zu einer Zahl nur einmal im Code. Das ist einfacher und schneller (Also eine extra Variable für das Gewicht und die Größe und dann einmal vheight:= StrToFloat (EHeight.Text)
  2. Da die Abfragen und Berechnungsarten für Mann und Frau die selben sind führe diese auch nur einmal im Code aus. Verwende dafür, wie in dem Code vor freak zwei extra Variablen. Diese kannst Du über eine IF-Then-Else Abfrage ganz am anfang des Codes setzen.
  3. Prüfe mal ob dir die "ungenauigkeit" von Flieskommaoperationen nicht einen strich durch die rechnung macht. Eventuell ist es einfacher alles mit Integer-Variablen zu machen.

Eichhoernchen 14. Okt 2005 15:31

Re: Problem mit 2 Bedingungen in einer IF Schleife!
 
Dann werf ich einfach auch mal Kot in den Raum(ihh),
Ach ja: größe in cm und Gewicht in Kg angeben!

Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var idealhigh, ideallow, hight, weight : double;
    ausgabe : String;
begin
weight := StrToFloat(Weight.Text);
hight := StrToFloat(Height.Text);
if RadioGroup1.ItemIndex = 0
  then Begin
        IdealHigh:= height - 100;
        IdealHigh:= IdealHigh * 0.97;
        IdealLow:= height - 100;
        IdealLow:= IdealLow * 0.93;
       end
  else if RadioGroup1.ItemIndex = 1
         then Begin
               IdealHigh:= height - 100;
               IdealHigh:= IdealHigh * 0.92;
               IdealLow:= height - 100;
               IdealLow:= IdealLow * 0.88;
              end
         else Begin
               showmessage('Sie müssen ein Geschlecht wählen');
               exit;
              end;


if weight > IdealHigh
  then ausgabe := 'Sie haben Übergewicht! Gehen sie weniger zu MC Donalds'
  else if weight < IdealLow
         then ausgabe := 'Sie haben Untergewicht! Essen sie ruhig was!'
         else ausgabe := 'Sie haben Idealgewicht, also Spachteln was das Zeug hält!';

Showmessage(ausgabe);
end;

Zwock 15. Okt 2005 10:58

Re: Problem mit 2 Bedingungen in einer IF Schleife!
 
Ahh! Ich habe das Problem gelöst!
Das Problem lag in meiner Berechnung des IdealHigh und IdealLow Wertes, denn in der Form wie ich sie geschrieben hatte.

Siehe hier:
Delphi-Quellcode:
IdealHigh:= StrToFloat(EHeight.Text) - 100;
     IdealHigh:= IdealHigh * 0.92;
     IdealLow:= StrToFloat(EHeight.Text) - 100;
     IdealLow:= IdealLow * 0.88;
Kamen falsche Ergebnisse heraus, d.h. das Idealgewicht lag nur deutlich höher als ich erwartet hatte. Und ich habe es nicht gemerkt, weil ich zum Testen nur Extreme benutzte (z.B. 150 cm auf 1 Kg, oder 1000 Kg). Das Idealgewicht hätte durch diese Fehlberechnung ca. bei 750 KG gelegen (Schätzungsweise).

Als ich dies merkte schrieb ich die Berechnung um:

Delphi-Quellcode:
IdealHigh:= (StrToFloat(EHeight.Text) - 100) * 0.97;
    IdealLow:= (StrToFloat(EHeight.Text) - 100) * 0.93;
Nun kommen die richtigen Werte heraus! Ich wundere mich aber, warum die alte Schreibweise nicht klappte... Einzige Erklärung die ich mir persönlich geben kann:
Der Wert der Variable wurde bei der zweiten Rechnung, nicht wie gewollt um 100 reduziert... Warum auch immer... Vielleicht kann mich ja jmd. aufklären... Aber ich danke euch trotzdem für eure Hilfe, ihr seid echt spitze!

leddl 15. Okt 2005 11:03

Re: Problem mit 2 Bedingungen in einer IF Schleife!
 
:gruebel: Aber was soll das damit zu tun haben, daß die Messages nicht angezeigt werden?
Das verändert ja nur das Ergebnis...
Aber jetzt funktioniert alles?

Zwock 15. Okt 2005 11:42

Re: Problem mit 2 Bedingungen in einer IF Schleife!
 
Komischerweise ja , wie gesagt, ich wundere mich ja selbst o.O

leddl 15. Okt 2005 11:56

Re: Problem mit 2 Bedingungen in einer IF Schleife!
 
Also jetzt nochmal von vorne. Das hier
Delphi-Quellcode:
IdealHigh:= StrToFloat(EHeight.Text) - 100;
IdealHigh:= IdealHigh * 0.97;
IdealLow:= StrToFloat(EHeight.Text) - 100;
IdealLow:= IdealLow * 0.83;
bringt dir als Idealgewicht für 150cm 750kg? Das kann doch nicht stimmen. Das, was du daraus gemacht hast, dürfte am Ergebnis der Rechnung nichts ändern. Sicher, daß in deinem Code nicht sonst ein kleiner Fehler war, den du beim Posten hier nicht gemacht hast? :gruebel: Anders kann ich es mir wirklich nicht erklären... Denn wie gesagt, bei mir hat der Code, den ich hier rauskopiert hab, auf Anhieb funktioniert.

GuenterS 15. Okt 2005 12:07

Re: Problem mit 2 Bedingungen in einer IF Schleife!
 
Zitat:

Zitat von Zwock
Hi Leute!
Wiedereinmal bin ich auf eure Hilfe angewiesen.
Ich soll wiedereinmal etwas für den Informatik-Kurs programmieren.
Dabei geht es dabei um einen Idealgewicht-berechner. Ich stelle euch meinen Gedankengang und meinen Code vor, damit ihr Denkansatz-Fehler u. Code Fehler ausmachen könnt. Vielen Dank schon im Voraus!

Aufgabenstellung:

Einen Idealgewichtserrechner programmieren! Die Formel für das männliche IDealgewicht ist: Körpergröße -100, und davon 95%. Wir sollen 2% +/- einbeziehen.

Meine Lösung: Ein Programm mit 2 Edit-Feldern (Größe/Gewicht), und einem Button "Antwort". Hat man beides eingetippt und klickt auf "Antwort", wird in 2 Variablen (IdealHigh; IdealLow - beides Real) das idealgewicht gespeichert. In IdealHigh also die Körpgeröße -100 * 0.97 (95% + 2% = 97% weg. der erwähnten 2 Prozent Karenz), und in IdealLow das Ganze mit 0.93 (93%, wieder weg. der Karenz). Das Ganze wird mit dem eingetippten Gewicht verglichen. Wenn IdealHigh kleiner als das eingetippte Gewicht ist, hat man übergewicht. Ist IdealLOW größer als das eingetippte Gewicht, hat man untergewicht.
Mein Problem ist nun das Idealgewicht, denn bei meiner Lösung (siehe Code unten), wird mir sobald ich auf 150 cm, 54 KG (IDealgewicht für 150 cm) eintippe, passiert beim klicken auf den Antwortbutton einfach garnichts! Was mache ich falsch?

Delphi-Quellcode:
 
unit Unit2;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, ExtCtrls;

type
  TForm2 = class(TForm)
    RGGender: TRadioGroup;
    LHeight: TLabel;
    LWeight: TLabel;
    EHeight: TEdit;
    EWeight: TEdit;
    BAnswer: TButton;
    BEnd: TButton;
    procedure BAnswerClick(Sender: TObject);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  Form2: TForm2;
  IdealHigh: Real;
  IdealLow: Real;

implementation

{$R *.dfm}

procedure TForm2.BAnswerClick(Sender: TObject);
begin

 if RGGender.ItemIndex = 0 then // einfach nicht beachten ist nur zur Geschlechtsfeststellung//
    IdealHigh:= StrToFloat(EHeight.Text) - 100;
    IdealHigh:= IdealHigh * 0.97;
    IdealLow:= StrToFloat(EHeight.Text) - 100;
    IdealLow:= IdealLow * 0.93;


 if IdealHigh < StrToFloat(EWeight.Text) then
    ShowMessage ('Sie haben Übergewicht!')

 else if IdealLow > StrToFloat(EWeight.Text) then
     ShowMessage ('Sie haben Untergewicht!')

 else if (IdealHigh >= StrToFloat(EWeight.Text)) and
         (IdealLow <= StrToFloat(EWeight.Text)) then
     ShowMessage ('Sie haben Idealgewicht!');
end;

end.

Delphi-Quellcode:
 if RGGender.ItemIndex = 0 then // einfach nicht beachten ist nur zur Geschlechtsfeststellung//
    IdealHigh:= StrToFloat(EHeight.Text) - 100;
    IdealHigh:= IdealHigh * 0.97;
    IdealLow:= StrToFloat(EHeight.Text) - 100;
    IdealLow:= IdealLow * 0.93;
Hier wird nur wenn der ItemIndex = 0 ist das IdealHigh richtig berechnet. Für Itemindex <> 0 werden die 100 ja nicht abgezogen.

leddl 15. Okt 2005 12:14

Re: Problem mit 2 Bedingungen in einer IF Schleife!
 
Und nochmal: So wie ich das sehe ist der erste Codeschnipsel unvollständig, denn bei seinem zweiten Code passt das ja.
Allerdings muß ich dir recht geben, das sieht wirklich so aus, als obs das wäre.

@zwock:
Wie sieht denn dein Code wirklich aus?

Union 15. Okt 2005 12:22

Re: Problem mit 2 Bedingungen in einer IF Schleife!
 
In der Berechnung steckt übrigens noch ein logischer Fehler: Die Toleranz beim maximal zulässigen Idealgewicht muss addiert werden, nicht abgezogen.
Also nicht
Delphi-Quellcode:
IdealHigh:= IdealHigh * 0.97;
Sondern
Delphi-Quellcode:
IdealHigh:= IdealHigh * 1.03;
Wenn z.B. das maximale Idealgewicht 80 Kg ist, dann würde nach der ersten Methode Idealgewicht nur bis 77,6 gelten. Es sollte aber doch wohl 82,4 sein!

leddl 15. Okt 2005 12:35

Re: Problem mit 2 Bedingungen in einer IF Schleife!
 
:gruebel: Den Einwand versteh ich nich...

Das Idealgewicht liegt eben zwischen 93 und 97% der Größe - 100. Warum sollten das plötzlich 103% sein?

Eichhoernchen 15. Okt 2005 14:46

Re: Problem mit 2 Bedingungen in einer IF Schleife!
 
Den einwand verstehe ich auch nicht!

Siehe 1. Seite:
Zitat:

Zitat von Zwock
Einen Idealgewichtserrechner programmieren! Die Formel für das männliche IDealgewicht ist: Körpergröße -100, und davon 95%. Wir sollen 2% +/- einbeziehen.


denn nach deiner überlegung wäre das Idealgewicht ja größe minus hundert.

Aber es sind ja ca. 5 % weniger!

Union 15. Okt 2005 17:56

Re: Problem mit 2 Bedingungen in einer IF Schleife!
 
Zitat:

Zitat von Eichhoernchen
Den einwand verstehe ich auch nicht!

Siehe 1. Seite:
Zitat:

Zitat von Zwock
Einen Idealgewichtserrechner programmieren! Die Formel für das männliche IDealgewicht ist: Körpergröße -100, und davon 95%. Wir sollen 2% +/- einbeziehen.

denn nach deiner überlegung wäre das Idealgewicht ja größe minus hundert.
Aber es sind ja ca. 5 % weniger!

Mir hat das eben nicht gefallen, dass bei mir immer Übergewicht rauskommt :oops:

tigerman33 15. Okt 2005 18:16

Re: Problem mit 2 Bedingungen in einer IF Schleife!
 
Aber mit Idealgewicht 750kg auf 1,50m dürftest du eine ganze Industriesparte in den Ruin treiben. :lol:

Eichhoernchen 15. Okt 2005 18:26

Re: Problem mit 2 Bedingungen in einer IF Schleife!
 
Zitat:

Zitat von tigerman33
Aber mit Idealgewicht 750kg auf 1,50m dürftest du eine ganze Industriesparte in den Ruin treiben. :lol:

naja dafür würde aber ne andere gewinnen...McD, KFC, BK...

glkgereon 15. Okt 2005 19:01

Re: Problem mit 2 Bedingungen in einer IF Schleife!
 
hmmm....größe minus Hundert minus 5%...

*denk*

Hilfe!!!
ICH BIN NORMAL!!! :mrgreen:


kleine frage:
ist der BMI nicht wesentlich genauer und realistischer?


Alle Zeitangaben in WEZ +1. Es ist jetzt 07:29 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz