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", 226, 402, 516, 210)
$Mensur = GUICtrlCreateInput("z.B.: 650", 104, 8, 57, 21)
$Buende = GUICtrlCreateInput("z.B.: 14", 104, 32, 57, 21)
$Label1 = GUICtrlCreateLabel("Mensur", 48, 8, 48, 20)
GUICtrlSetFont(-1, 10, 400, 0, "MS Sans Serif")
$label_buende = GUICtrlCreateLabel("Bünde", 56, 32, 43, 20)
GUICtrlSetFont(-1, 10, 400, 0, "MS Sans Serif")
$Edit = GUICtrlCreateEdit("", 8, 88, 209, 281)
$button_berechnen_GUI = GUICtrlCreateButton("Berechnen", 8, 56, 209, 25)
$button_kopieren_GUI = GUICtrlCreateButton("In Zwischenablage kopieren", 8, 368, 211, 25)
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($b1) von der eingegebenen Mensur($a1) abgezogen 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 erlangen, wird die Mensur durch das erste Ergebniss($b1) der vorhergehenden Rechnung ersetzt 
            $c2 
= ($a1 - $b2)                ;Um den Abstand von Sattel zum ersten Bund zu erlangen muss der Wert($b2) von der eingegebenen Mensur($a1) abgezogen
            $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", 226, 402, 516, 210)
$Mensur = GUICtrlCreateInput("650", 104, 8, 57, 21)
$Buende = GUICtrlCreateInput("14", 104, 32, 57, 21)
GUICtrlCreateLabel("Mensur", 48, 8, 48, 20)
GUICtrlCreateLabel("Bünde", 56, 32, 43, 20)
$Edit = GUICtrlCreateEdit("", 8, 88, 209, 281)
$button_berechnen_GUI = GUICtrlCreateButton("Berechnen", 8, 56, 209, 25)
$button_kopieren_GUI = GUICtrlCreateButton("In Zwischenablage kopieren", 8, 368, 211, 25)
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($Edit, Round($a - $b, 2) & @CRLF, True)
            
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