AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Sonstige Fragen zu Delphi Delphi Problem mit 2 Bedingungen in einer IF Schleife!
Thema durchsuchen
Ansicht
Themen-Optionen

Problem mit 2 Bedingungen in einer IF Schleife!

Ein Thema von Zwock · begonnen am 13. Okt 2005 · letzter Beitrag vom 15. Okt 2005
Antwort Antwort
Seite 3 von 4     123 4      
Benutzerbild von freak4fun
freak4fun

Registriert seit: 22. Sep 2004
Ort: Hannover
1.807 Beiträge
 
Delphi 10.2 Tokyo Starter
 
#21

Re: Problem mit 2 Bedingungen in einer IF Schleife!

  Alt 14. Okt 2005, 15:08
Kopier deine ganze Unit und poste sie hier. Das Gerate reicht langsam.

MfG
freak
Christian
IT: Schließen Sie bitte das Fenster. User: Die Tür auch?
i++; // zaehler i um 1 erhoehen
  Mit Zitat antworten Zitat
Benutzerbild von Sharky
Sharky

Registriert seit: 29. Mai 2002
Ort: Frankfurt
8.251 Beiträge
 
Delphi 2006 Professional
 
#22

Re: Problem mit 2 Bedingungen in einer IF Schleife!

  Alt 14. Okt 2005, 15:30
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

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.
Stephan B.
"Lasst den Gänsen ihre Füßchen"
  Mit Zitat antworten Zitat
Eichhoernchen

Registriert seit: 22. Apr 2004
Ort: Hagen
322 Beiträge
 
Turbo Delphi für Win32
 
#23

Re: Problem mit 2 Bedingungen in einer IF Schleife!

  Alt 14. Okt 2005, 15:31
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;
Jan
  Mit Zitat antworten Zitat
Zwock

Registriert seit: 14. Sep 2005
Ort: Erlensee
20 Beiträge
 
#24

Re: Problem mit 2 Bedingungen in einer IF Schleife!

  Alt 15. Okt 2005, 10:58
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!
Denke nie gedacht zu haben, denn das Denken der Gedanken ist gedankenloses Denken!
  Mit Zitat antworten Zitat
Benutzerbild von leddl
leddl

Registriert seit: 13. Okt 2003
Ort: Künzelsau
1.613 Beiträge
 
Delphi 2006 Professional
 
#25

Re: Problem mit 2 Bedingungen in einer IF Schleife!

  Alt 15. Okt 2005, 11:03
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?
Axel Sefranek
A programmer started to cuss, cause getting to sleep was a fuss.
As he lay there in bed, looping round in his head
was: while(!asleep()) ++sheep;
  Mit Zitat antworten Zitat
Zwock

Registriert seit: 14. Sep 2005
Ort: Erlensee
20 Beiträge
 
#26

Re: Problem mit 2 Bedingungen in einer IF Schleife!

  Alt 15. Okt 2005, 11:42
Komischerweise ja , wie gesagt, ich wundere mich ja selbst o.O
Denke nie gedacht zu haben, denn das Denken der Gedanken ist gedankenloses Denken!
  Mit Zitat antworten Zitat
Benutzerbild von leddl
leddl

Registriert seit: 13. Okt 2003
Ort: Künzelsau
1.613 Beiträge
 
Delphi 2006 Professional
 
#27

Re: Problem mit 2 Bedingungen in einer IF Schleife!

  Alt 15. Okt 2005, 11:56
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? 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.
Axel Sefranek
A programmer started to cuss, cause getting to sleep was a fuss.
As he lay there in bed, looping round in his head
was: while(!asleep()) ++sheep;
  Mit Zitat antworten Zitat
Benutzerbild von GuenterS
GuenterS

Registriert seit: 3. Mai 2004
Ort: Österreich > Bad Vöslau
760 Beiträge
 
Turbo Delphi für Win32
 
#28

Re: Problem mit 2 Bedingungen in einer IF Schleife!

  Alt 15. Okt 2005, 12:07
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.
Günter
Pünktlichkeit ist die Fähigkeit vorherzusagen um wieviel sich der Andere verspäten wird.
  Mit Zitat antworten Zitat
Benutzerbild von leddl
leddl

Registriert seit: 13. Okt 2003
Ort: Künzelsau
1.613 Beiträge
 
Delphi 2006 Professional
 
#29

Re: Problem mit 2 Bedingungen in einer IF Schleife!

  Alt 15. Okt 2005, 12:14
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?
Axel Sefranek
A programmer started to cuss, cause getting to sleep was a fuss.
As he lay there in bed, looping round in his head
was: while(!asleep()) ++sheep;
  Mit Zitat antworten Zitat
Benutzerbild von Union
Union

Registriert seit: 18. Mär 2004
Ort: Luxembourg
3.487 Beiträge
 
Delphi 7 Enterprise
 
#30

Re: Problem mit 2 Bedingungen in einer IF Schleife!

  Alt 15. Okt 2005, 12:22
In der Berechnung steckt übrigens noch ein logischer Fehler: Die Toleranz beim maximal zulässigen Idealgewicht muss addiert werden, nicht abgezogen.
Also nicht
IdealHigh:= IdealHigh * 0.97; Sondern
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!
Ibi fas ubi proxima merces
sudo /Developer/Library/uninstall-devtools --mode=all
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 3 von 4     123 4      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 02:36 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz