Global, Function, Array? Wie soll ich es lösen?

10/01/2011 16:21 Elborod#1
Also:

Ich möchte mir einen Mensurrechner skripten. Es gibts zwar schon welche online und in Excel aber es geht mir ja schließlich mehr ums machen...

Soweit bin ich bis jetzt:
PHP Code:
#include <ButtonConstants.au3>
#include <EditConstants.au3>
#include <GUIConstantsEx.au3>
#include <StaticConstants.au3>
#include <WindowsConstants.au3>
#Region ### START Koda GUI section ### Form=
$rechner_GUI GUICreate("Rechner"226402516210)
$Mensur GUICtrlCreateInput("z.B.: 650"10485721)
$Buende GUICtrlCreateInput("z.B.: 14"104325721)
$Label1 GUICtrlCreateLabel("Mensur"4884820)
GUICtrlSetFont(-1104000"MS Sans Serif")
$label_buende GUICtrlCreateLabel("Bünde"56324320)
GUICtrlSetFont(-1104000"MS Sans Serif")
$Edit GUICtrlCreateEdit(""888209281)
$button_berechnen_GUI GUICtrlCreateButton("Berechnen"85620925)
$button_kopieren_GUI GUICtrlCreateButton("In Zwischenablage kopieren"836821125)
GUISetState(@SW_SHOW)
#EndRegion ### END Koda GUI section ###

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


Case 
$button_berechnen_GUI
    
            $a1 
GUICtrlRead($Mensur)         ;Inputbox auslesen und in Variable $a1 speichern
             $b1 
= ($a1 / (2^(1/12)))        ;Mensur dividiert durch die 12. Wurzel aus 2 (=2^(1/2)) und in Variable $b1 speichern
            $c1 
= ($b1 $a1) *(-1)            ;Um den Abstand von Sattel zum ersten Bund zu erlangen muss der Wert($b1von der eingegebenen Mensur($a1abgezogen und in eine positive Zahle umgerechnet(*(-1)) werden
            $d1 
Round($c1,2)                ;Nun noch die Zahl auf zwei Stellen runden

             $b2 
= ($b1 / (2^(1/12)))        ;Um den Abstand vom Sattel zum zweiten Bund zu erlangenwird die Mensur durch das erste Ergebniss($b1der vorhergehenden Rechnung ersetzt 
            $c2 
= ($a1 $b2)                ;Um den Abstand von Sattel zum ersten Bund zu erlangen muss der Wert($b2von der eingegebenen Mensur($a1abgezogen
            $d2 
Round($c2,2)                ;Nun noch die Zahl auf zwei Stellen runden

            $b3
= ($b2 / (2^(1/12)))
            
$c3 = ($a1 $b3)
            
$d3 Round($c3,2)

            
$b4 = ($b3 / (2^(1/12)))
            
$c4 = ($a1 $b4)
            
$d4 Round($c4,2)
            
            
$b5 = ($b4 / (2^(1/12)))
            
$c5 = ($a1 $b5)
            
$d5 Round($c5,2)

            
$b6= ($b5 / (2^(1/12)))
            
$c6 = ($a1 $b6)
            
$d6 Round($c6,2)
            
            
$b7 = ($b6 / (2^(1/12)))
            
$c7 = ($a1 $b7)
            
$d7 Round($c7,2)
            
            
$b8 = ($b7 / (2^(1/12)))
            
$c8 = ($a1 $b8)
            
$d8 Round($c8,2)

            
$b9= ($b8 / (2^(1/12)))
            
$c9 = ($a1 $b9)
            
$d9 Round($c9,2)
            
            
$b10 = ($b9 / (2^(1/12)))
            
$c10 = ($a1 $b10)
            
$d10 Round($c10,2)
            
            
$b11 = ($b10 / (2^(1/12)))
            
$c11 = ($a1 $b11)
            
$d11 Round($c11,2)
            
            
$b12 = ($b11 / (2^(1/12)))
            
$c12 = ($a1 $b12)
            
$d12 Round($c12,2)
            
            
$b13 = ($b12 / (2^(1/12)))
            
$c13 = ($a1 $b13)
            
$d13 Round($c13,2)
            
            
$b14 = ($b13 / (2^(1/12)))
            
$c14 = ($a1 $b14)
            
$d14 Round($c14,2)
            
            
$b15 = ($b14 / (2^(1/12)))
            
$c15 = ($a1 $b15)
            
$d15 Round($c15,2)
            
            
$b16 = ($b15 / (2^(1/12)))
            
$c16 = ($a1 $b16)
            
$d16 Round($c16,2)
            
            
$b17 = ($b16 / (2^(1/12)))
            
$c17 = ($a1 $b17)
            
$d17 Round($c17,2)
            
            
$b18 = ($b17 / (2^(1/12)))
            
$c18 = ($a1 $b18)
            
$d18 Round($c18,2)
            
            
$b19 = ($b18 / (2^(1/12)))
            
$c19 = ($a1 $b19)
            
$d19 Round($c19,2)
            
            
$b20 = ($b19 / (2^(1/12)))
            
$c20 = ($a1 $b20)
            
$d20 Round($c20,2)
            
            
$b21 = ($b20 / (2^(1/12)))
            
$c21 = ($a1 $b21)
            
$d21 Round($c21,2)
            
            
$b22 = ($b21 / (2^(1/12)))
            
$c22 = ($a1 $b22)
            
$d22 Round($c22,2)
            
            
$b23 = ($b22 / (2^(1/12)))
            
$c23 = ($a1 $b23)
            
$d23 Round($c23,2)
            
            
$b24 = ($b23 / (2^(1/12)))
            
$c24 = ($a1 $b24)
            
$d24 Round($c24,2)

GUICtrlSetData($Edit,$d1 & @CRLF $d2 & @CRLF $d3 & @CRLF $d4 & @CRLF $d5 & @CRLF $d6 & @CRLF $d7 & @CRLF $d8 & @CRLF $d9 & @CRLF $d10 & @CRLF $d11 & @CRLF $d12 & @CRLF $d13 & @CRLF $d14 & @CRLF $d15 & @CRLF $d16 & @CRLF $d17 & @CRLF $d18 & @CRLF $d19 & @CRLF $d20 & @CRLF $d21 & @CRLF $d22 & @CRLF $d23 & @CRLF $d24)


Case 
$button_kopieren_GUI
    
EndSwitch
WEnd 

Die Rechenschritte hab ich als Comment beschrieben, soweit ist alles klar.

Habt ihr einen Vorschlag, wie ich das ganze mit der Inputbox für die Bünde kombinieren könnte? Soll ich jede einzelne Rechnung mit einem Array, einer Funktion oder einer Globalen Variable bestücken?

So sollte es später funktionieren:
Man gibt die Mensur ein(zb. 650) und die Anzahl der gewünschten Bünde(zb. 20). Dann sollte in der Editbox eine Liste mit den Werten bis zum 20. Bund erscheinen.

Wie gesagt, das einzige das ich nicht hinbekomme ist dieses Kombinieren, dass er nur 6,7,9 oder 19 Bünde anzeigt wenn ich 6,7,9 oder 19 in die Inputbox schreibe....



Grüßé
Stoani
10/02/2011 03:04 KDeluxe#2
Dafür kann man ganz einfach eine For-Schleife benutzen. Um den Inhalt des Richedits in die Zwischenablage zu kopieren kannst du die Funktion "ClipPut" benutzen.

Sollte dann in etwa so aussehen:
PHP Code:
#include <GUIConstantsEx.au3>

#Region ### START Koda GUI section ### Form=
$rechner_GUI GUICreate("Rechner"226402516210)
$Mensur GUICtrlCreateInput("650"10485721)
$Buende GUICtrlCreateInput("14"104325721)
GUICtrlCreateLabel("Mensur"4884820)
GUICtrlCreateLabel("Bünde"56324320)
$Edit GUICtrlCreateEdit(""888209281)
$button_berechnen_GUI GUICtrlCreateButton("Berechnen"85620925)
$button_kopieren_GUI GUICtrlCreateButton("In Zwischenablage kopieren"836821125)
GUISetState(@SW_SHOW)
#EndRegion ### END Koda GUI section ###

While Sleep(10)
    
$nMsg GUIGetMsg()
    Switch 
$nMsg
        
Case $GUI_EVENT_CLOSE
            
Exit

        Case 
$button_berechnen_GUI
            GUICtrlSetData
($Edit"")
            
Local $a GUICtrlRead($Mensur), $b

            
For $i 1 To GUICtrlRead($Buende)
                If 
$i == 1 Then
                    $b 
= ($a / (2^(1/12)))
                Else
                    
$b = ($b / (2^(1/12)))
                EndIf

                
GUICtrlSetData($EditRound($a $b2) & @CRLFTrue)
            
Next

        
Case $button_kopieren_GUI
            ClipPut
(GUICtrlRead($Edit))
    EndSwitch
WEnd 
10/02/2011 15:47 Elborod#3
Vielen Dank! Ich hätte vielleicht wirklich einen anderen Ansatz suchen sollen ;)

Grüßé
Stoani