Hallöchen! Ich melde mich mal nach laaaaaaaaaaanger Zeit wieder
Ich habe neulich mal ein kleines Programm geschrieben, womit man die Binomische Formeln errechnen kann, egal welchen Grades. Ein Beispiel hierfür (für jene, die offenbar keinen Mathematikunterricht genossen haben ) wäre wohl folgendes:
(a+b)^2 = a^2 + 2ab + b^2
Ich weiß, es ist nix besonderes. Aber vielleicht ja trotzdem praktisch
Spoiler anzeigen
#include <Array.au3>
#include <GUIConstants.au3>
#include <WindowsConstants.au3>
#include <EditConstants.au3>
$hGUI = GUICreate( "Binomische Formel Rechner", 415, 290, -1, -1, $WS_MINIMIZEBOX + $WS_CAPTION + $WS_POPUP + $WS_SYSMENU + $WS_VISIBLE )
$hZeigeFormelAn = GUICtrlCreateButton( "&Zeige Formel an", 95, 5, 315, 20 )
GUICtrlCreateLabel( "(", 5, 8, 7, 17 )
$ZeichenA = GUICtrlCreateInput( "a", 12, 5, 20, 20 )
GUICtrlCreateLabel( "+", 32, 8, 7, 17 )
$ZeichenB = GUICtrlCreateInput( "b", 39, 5, 20, 20 )
GUICtrlCreateLabel( ")^", 59, 8, 10, 17 )
$Grad = GUICtrlCreateInput( "2", 69, 5, 20, 20 )
$Output = GUICtrlCreateEdit( "( a + b )^2 = a^2 + 2ab + b^2", 5, 30, 405, 175, $ES_READONLY )
$malzeichen = GUICtrlCreateCheckbox( "Unnötige &Malzeichen entfernen", 5, 205, 405, 20 )
GUICtrlSetState( $malzeichen, $GUI_CHECKED )
$maleins = GUICtrlCreateCheckbox( "&Ein mal irgendwas entfernen", 5, 225, 405, 20 )
GUICtrlSetState( $maleins, $GUI_CHECKED )
$expoeins = GUICtrlCreateCheckbox( "E&xponent gleich eins entfernen", 5, 245, 405, 20 )
GUICtrlSetState( $expoeins, $GUI_CHECKED )
$ausrechnen = GUICtrlCreateCheckbox( "&Faktoren ausrechnen", 5, 265, 405, 20 )
GUICtrlSetState( $ausrechnen, $GUI_DISABLE )
Do
$msg = GUIGetMsg( )
If $msg = $hZeigeFormelAn Then
If GUICtrlRead( $ZeichenA ) = "" Or GUICtrlRead( $ZeichenA ) = "" Or GUICtrlRead( $ZeichenA ) = "" Then
MsgBox( 0, "Binomische Formel Rechner", "Geben sie Werter für a, b und den Exponenten (Grad) an." )
Else
$vMalzeichen = Checked( GUICtrlRead( $malzeichen ) )
$vMaleins = Checked( GUICtrlRead( $maleins ) )
$vExpoeins = Checked( GUICtrlRead( $expoeins ) )
$vAusrechnen = Checked( GUICtrlRead( $ausrechnen ) )
GUICtrlSetData( $Output, BinomischeFormel( GUICtrlRead( $Grad ), GUICtrlRead( $ZeichenA ), GUICtrlRead( $ZeichenB ), $vMaleins, $vMalzeichen, $vExpoeins, $vAusrechnen ) )
EndIf
EndIf
Until $msg = -3
Exit
[/autoit] [autoit][/autoit] [autoit]Func BinomischeFormel( $Grad, $a = "a", $b = "b", $EinMalX = True, $Malzeichen = True, $ExponentGleich1 = True, $AutoAusrechnen = True )
[/autoit] [autoit][/autoit] [autoit]$Koeffizienten = KoeffizientenAusrechnen( $Grad )
$string = ""
If Not $Malzeichen Then
$mal = "*"
Else
$mal = ""
EndIf
$tmpString = ""
$string = "( " & $a & " + " & $b & " )^" & $Grad & " = "
$aExp = $Grad
$bExp = 0
For $i = 0 To UBound( $Koeffizienten, 1 ) - 1
If $i = 0 And $EinMalX = True Then
$string &= $a & "^" & $aExp
ElseIf $i = UBound( $Koeffizienten, 1 ) - 1 And $EinMalX = True Then
$string &= $b & "^" & $bExp
Else
If IsNumber( $a ) Or IsNumber( $b ) Then
If IsNumber( $a ) and $AutoAusrechnen Then
$tmpString &= $Koeffizienten[$i] * $a
Else
$tmpString &= $Koeffizienten[$i] & "*" & $a
EndIf
Else
$tmpString &= $Koeffizienten[$i] & $mal & $a
EndIf
If $ExponentGleich1 Then
If $aExp <> 1 Then $tmpString &= "^" & $aExp
Else
$tmpString &= "^" & $aExp
EndIf
;mal b rechnen (wenn a oder b Zahlen sind Malzeichen hinzufügen)
If IsNumber( $a ) Or IsNumber( $b ) Then
$tmpString &= "*" & $b
Else
$tmpString &= $mal & $b
EndIf
If $ExponentGleich1 Then ;Wenn ^1 Exponenten entfernt werden sollen...
If $bExp <> 1 Then $tmpString &= "^" & $bExp ;checke, ob der b Exponent = 1 ist und schreibe ihn wenn aj hin
Else ;ansonsten...
$tmpString &= "^" & $bExp ;Schreibe einfach den Exponenten hin
EndIf
If Execute( $tmpString ) = "" Then
$string &= $tmpString
Else
$string &= Execute( $tmpString )
EndIf
EndIf
;Addieren
$string &= " + "
;Exponenten in- bzw. dekrementieren
$aExp -= 1
$bExp += 1
$tmpString = ""
Next
Return StringTrimRight( $string, 3 )
EndFunc
Func KoeffizientenAusrechnen( $iBinomischerGrad )
Local $KoeffizientenListe[1] = [1]
Local $TmpKoeffizientenListe[1] = [1]
For $i = 0 To $iBinomischerGrad
If $i <> 0 Then _ArrayAdd( $TmpKoeffizientenListe, 1 )
For $i2 = 1 To $i - 1
$TmpKoeffizientenListe[$i2] = $KoeffizientenListe[$i2] + $KoeffizientenListe[$i2-1]
Next
$KoeffizientenListe = $TmpKoeffizientenListe
Next
Return $KoeffizientenListe
EndFunc
Func Checked( $v )
If $v = $GUI_CHECKED Then Return True
If $v = $GUI_UNCHECKED Then Return False
EndFunc
[Edit:] Ach ja... es ist auch keine besonders gute Technik... aber es funktioniert. Nur bei hohen Exponenten können die Variablen überlaufen.