AutoIt BMI Berechner Problem

11/02/2010 16:52 Belur#1
Hey E*pvpers.


Ich übe mich zurzeit ein wenig an AutoIt.

Wollte zur Übung einen kleinen BMI Berechner schreiben.
Es haben sich allerdings 2 Probleme ergeben:

1. Sobald ich einmal den Button "Berechne BMI" gedrückt habe wird mir ein Ergebnis angezeigt. Allerdings nur das eine Mal. Danach kann ich drücken und drücken und nichts passiert. Das gilt eig. für alle 3 Buttons.

2. Kriege ich zB. einen BMI von 19 raus, werden mir 3 Ergebnisse angezeigt anstatt eins. Dh. er prüft irgendwie nicht richtig, die ComboBox, sondern berechnet das für mehrere Sachen und gibt das Ergebnis raus.


Hier einmal der Code:

PHP Code:
#include <ButtonConstants.au3>
#include <ComboConstants.au3>
#include <EditConstants.au3>
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
#Region ### START Koda GUI section ### Form=
$Form1 GUICreate("Gewicht"599285192124)
$Gewicht GUICtrlCreateInput("Gewicht"3762414521)
$BerechneBMI GUICtrlCreateButton("Berechne Bmi"2089620133$WS_GROUP)
$Idealgewicht GUICtrlCreateButton("Idealgewicht"20814420133$WS_GROUP)
$BewerteBMI GUICtrlCreateButton("BewerteBMI"20819220133$WS_GROUP)
$Geschlecht GUICtrlCreateCombo("Geschlecht"2562410525)
GUICtrlSetData(-1"Mann|Frau")
$Groesse GUICtrlCreateInput("Groesse"962412921)
GUISetState(@SW_SHOW)
#EndRegion ### END Koda GUI section ###

While 1
    $nMsg 
GUIGetMsg()
    Switch 
$nMsg
        
Case $GUI_EVENT_CLOSE
            
Exit


        Case 
$BerechneBMI

            $BerechneBMI 
GUICtrlRead($Gewicht) / GUICtrlRead($Groesse)^2
            MsgBox
(0,"Dein BMI"$BerechneBMI)

        Case 
$Idealgewicht

            $Idealgewicht 
=  GUICtrlRead($Groesse)^22
            MsgBox
(0,"Dein Idealgewicht"$Idealgewicht)

        Case 
$BewerteBMI

            $BerechneBMI 
GUICtrlRead($Gewicht) / GUICtrlRead($Groesse)^2

            
If $BerechneBMI 18 &   GUICtrlRead($Geschlecht) = "Frau"  Then MsgBox(0"Bewertung""Untergewicht")
            If 
$BerechneBMI >18 &   $BerechneBMI <25 GUICtrlRead($Geschlecht) = "Frau"  Then MsgBox(0"Bewertung""Normalgewicht")
            If 
$BerechneBMI 26 &  GUICtrlRead($Geschlecht) = "Frau"  Then MsgBox(0"Bewertung""Übergewicht")

            If 
$BerechneBMI 20 &  GUICtrlRead($Geschlecht) = "Mann"  Then MsgBox(0"Bewertung""Untergewicht")
            If 
$BerechneBMI 20 &  $BerechneBMI 28 GUICtrlRead($Geschlecht) = "Mann"  Then MsgBox(0"Bewertung""Normalgewicht")
            If 
$BerechneBMI 28 &  GUICtrlRead($Geschlecht) = "Mann"  Then MsgBox(0"Bewertung""Übergewicht")




    EndSwitch
WEnd 

Hoffe mir kann da vllt jmd helfen.

Lg

Niklas
11/02/2010 17:01 PenGuin :O#2
Problem 2:
ElseIf ;)
11/02/2010 17:11 lolkop#3
Quote:
Originally Posted by Belur View Post
Hey E*pvpers.


Ich übe mich zurzeit ein wenig an AutoIt.

Wollte zur Übung einen kleinen BMI Berechner schreiben.
Es haben sich allerdings 2 Probleme ergeben:

1. Sobald ich einmal den Button "Berechne BMI" gedrückt habe wird mir ein Ergebnis angezeigt. Allerdings nur das eine Mal. Danach kann ich drücken und drücken und nichts passiert. Das gilt eig. für alle 3 Buttons.

2. Kriege ich zB. einen BMI von 19 raus, werden mir 3 Ergebnisse angezeigt anstatt eins. Dh. er prüft irgendwie nicht richtig, die ComboBox, sondern berechnet das für mehrere Sachen und gibt das Ergebnis raus.
die probleme liegen in den abfragen.
erstmal wird "&" nur genutzt um strings/zeichen zu verknüpfen. willst du logische verknüpfungen machen, musst du "And" nutzen.

nun zu deinen abfragen. das ganze würde ich natürlich zu einer abfrage zusammen fassen. wenn es sich um einen übergewichtigen mann handelt, wird das ergebnis wohl keine untergewichtige frau mehr sein.

also:
Code:
$BerechneBMI = GUICtrlRead($Gewicht) / GUICtrlRead($Groesse)^2
If $BerechneBMI < 18 And GUICtrlRead($Geschlecht) = "Frau"  Then
    MsgBox(0, "Bewertung", "Untergewicht")
ElseIf $BerechneBMI < 26 & GUICtrlRead($Geschlecht) = "Frau"  Then
    MsgBox(0, "Bewertung", "Normalgewicht")
ElseIf GUICtrlRead($Geschlecht) = "Frau"  Then
    MsgBox(0, "Bewertung", "Übergewicht")
ElseIf $BerechneBMI < 20 And GUICtrlRead($Geschlecht) = "Mann"  Then
    MsgBox(0, "Bewertung", "Untergewicht")
ElseIf $BerechneBMI < 28 & GUICtrlRead($Geschlecht) = "Mann"  Then
    MsgBox(0, "Bewertung", "Normalgewicht")
Else
    MsgBox(0, "Bewertung", "Übergewicht")
EndIf
11/02/2010 19:06 Belur#4
Okay. Danke euch beiden ;)

Klappt.

Bleibt nur noch das Problem, dass wenn ich man zB Daten ändert ( oder auch nicht) und nochmal entweder BerechneBMI oder Idealgewicht klickt nichts mehr kommt beim 2. Mal.

Nur bei BewerteBMI kommt noch die MsgBox mit dem Ergebnis.
Vllt weiß da auch jmd weiter.
11/03/2010 07:12 Mozo_#5
Quote:
Originally Posted by Belur View Post
Okay. Danke euch beiden ;)

Klappt.

Bleibt nur noch das Problem, dass wenn ich man zB Daten ändert ( oder auch nicht) und nochmal entweder BerechneBMI oder Idealgewicht klickt nichts mehr kommt beim 2. Mal.

Nur bei BewerteBMI kommt noch die MsgBox mit dem Ergebnis.
Vllt weiß da auch jmd weiter.
Dein Problem liegt darin, das du die Variablen in der der Wert vom Idealgewicht und der Wert vom BMI gespeichert wird, genauso genannt hast wie die Buttonvariablen. Sprich wenn du nun auf den Button Berechne BMI klickst, führt er die berechnung aus und überschreibt die Variable "$BerechneBMI" mit dem BMI Wert. Dadurch das in der Variable nun nichtmehr der Button gespeichert ist, kann das Programm nicht mehr erkennen, wann der Button gedrückt worden ist. Lange rede kurzer sinn, einfach die Variablem ändern.

Zum Beispiel so:

11/03/2010 10:02 Belur#6
Okay. Klappt. Thx.