Zahlensystem Umrechner!

  • Hallo,

    da wir uns in der Schule viel über Zahlensysteme beschäftigt hatten, habe ich einfach mal ein Script geschrieben, mit der ich meine Aufgaben kontrollieren kann. Natürlich kann man damit auch irgendwelche Zahlen ausrechnen. Es lassen sich von allen 15 Zahlensystemen in 15 "allen" Zahlensystemen umrechnen. Ich habe dafür auch die BigNum.au3- UDF benutzt, dass das ausrechnen von sehr großen Zahlen ermöglicht.

    ToDo


    Rechenschritte in der Edit-Box anzeigen

    Quellcode
    [autoit]

    #NoTrayIcon
    #Region ;**** Directives created by AutoIt3Wrapper_GUI ****
    #AutoIt3Wrapper_Icon=Calculator.ico
    #AutoIt3Wrapper_Compression=4
    #AutoIt3Wrapper_Res_Description=Zahlensystem Umrechner
    #AutoIt3Wrapper_Res_Fileversion=1.0.0.0
    #AutoIt3Wrapper_Res_LegalCopyright=Copyright © 2009 Burak Keskin
    #AutoIt3Wrapper_Res_Language=1031
    #AutoIt3Wrapper_Res_Field=E-Mail|[email='burak.keskin@arcor.de'][/email]
    #AutoIt3Wrapper_Res_Field=CompanyName|Burak Keskin
    #AutoIt3Wrapper_Res_Field=InternalName|Zahlensystem Umrechner
    #AutoIt3Wrapper_Res_Field=Comments|
    #AutoIt3Wrapper_Res_Field=OriginalFilename|Zahlensystem Umrechner.exe
    #AutoIt3Wrapper_Res_Field=ProductName|Zahlensystem Umrechner
    #AutoIt3Wrapper_Res_Field=ProductVersion|1.0.0.0
    #AutoIt3Wrapper_Run_After=del "Zahlensystem Umrechner_Obfuscated.au3"
    #AutoIt3Wrapper_Run_Obfuscator=y
    #Obfuscator_Parameters=/striponly
    #EndRegion ;**** Directives created by AutoIt3Wrapper_GUI ****
    #cs ----------------------------------------------------------------------------

    [/autoit] [autoit][/autoit] [autoit]

    AutoIt Version: 3.3.0.0
    Author: myName

    [/autoit] [autoit][/autoit] [autoit]

    Script Function:
    Template AutoIt script.

    [/autoit] [autoit][/autoit] [autoit]

    #ce ----------------------------------------------------------------------------

    [/autoit] [autoit][/autoit] [autoit]

    ; Script Start - Add your code below here

    [/autoit] [autoit][/autoit] [autoit]

    #include <ComboConstants.au3>
    #include <EditConstants.au3>
    #include <GUIConstantsEx.au3>
    #include <StaticConstants.au3>
    #include <WindowsConstants.au3>
    #include <GuiStatusBar.au3>
    #include <BigNum.au3>

    [/autoit] [autoit][/autoit] [autoit]

    Opt("GUIOnEventMode", 1)

    [/autoit] [autoit][/autoit] [autoit]

    Global $Text, $OldText, $Text1, $Text2
    Local $aParts[3] = [100, 800, -1]
    Global $ComboText = "2 (binär)|" & _
    "3|" & _
    "4|" & _
    "5|" & _
    "6|" & _
    "7 (septal)|" & _
    "8 (oktal)|" & _
    "9|" & _
    "10 (dezimal)|" & _
    "11|" & _
    "12 (duodezimal)|" & _
    "13|" & _
    "14|" & _
    "15|" & _
    "16 (hexadezimal)|"

    [/autoit] [autoit][/autoit] [autoit]

    $Form1 = GUICreate("Zahlensystem Umrechner", 594, 500)
    GUISetOnEvent($GUI_EVENT_CLOSE, "Close")

    [/autoit] [autoit][/autoit] [autoit]

    $Label1 = GUICtrlCreateLabel("Umrechnung von Zahlensystemen", 8, 8, 500, 40)
    GUICtrlSetFont(-1, 20, 800, 0, "Arial")
    $Label2 = GUICtrlCreateLabel("Zahlensystem", 8, 56, 69, 17)
    $Label3 = GUICtrlCreateLabel("Ziffernfolge", 144, 56, 57, 17)
    $Combo1 = GUICtrlCreateCombo("", 8, 80, 113, 25)
    GUICtrlSetData($Combo1, $ComboText, "10 (dezimal)")
    $Input1 = GUICtrlCreateInput("", 144, 80, 441, 21)
    $Combo2 = GUICtrlCreateCombo("", 8, 112, 113, 25)
    GUICtrlSetOnEvent($Combo2, "ComboChange")
    GUICtrlSetData($Combo2, $ComboText, "2 (binär)")
    $Input2 = GUICtrlCreateInput("", 144, 112, 441, 21)
    $Edit1 = GUICtrlCreateEdit("", 8, 144, 577, 321)
    $StatusBar = _GUICtrlStatusBar_Create($Form1, $aParts)
    GUISetState(@SW_SHOW)

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    ControlFocus($Form1, "", $Input1)

    [/autoit] [autoit][/autoit] [autoit]

    _StatusBar("Fertig")

    [/autoit] [autoit][/autoit] [autoit]

    While 1
    $Text = GUICtrlRead($Input1)
    Switch $Text
    Case $OldText
    Case ""
    GUICtrlSetData($Input2, "")
    $OldText = ""
    Case Else
    _StatusBar("Bitte warten...")
    _ComboRead()
    _StatusBar("Fertig")
    $OldText = $Text
    EndSwitch
    Sleep(10)
    WEnd

    [/autoit] [autoit][/autoit] [autoit]

    Func ComboChange()
    _StatusBar("Bitte warten...")
    _ComboRead()
    _StatusBar("Fertig")
    EndFunc ;==>ComboChange

    [/autoit] [autoit][/autoit] [autoit]

    Func Close()
    Exit
    EndFunc ;==>Close

    [/autoit] [autoit][/autoit] [autoit]

    Func _StatusBar($Msg)
    _GUICtrlStatusBar_SetText($StatusBar, " " & $Msg, 0)
    EndFunc ;==>_StatusBar

    [/autoit] [autoit][/autoit] [autoit]

    Func _ComboRead()
    If GUICtrlRead($Input1) = "" Then Return 0
    $Varrr = _CalcToBase(GUICtrlRead($Input1), Number(GUICtrlRead($Combo1)), 1)
    GUICtrlSetData($Input2, _CalcToBase($Varrr, Number(GUICtrlRead($Combo2))))
    EndFunc ;==>_ComboRead

    [/autoit] [autoit][/autoit] [autoit]

    Func _CalcToBase($Value, $Base, $Flag = 0)
    Local $Var1 = 1, $Var2[1] = [1], $Var3
    Switch $Flag
    Case 0
    While $Var2[0] <> 0
    Switch $Var1
    Case 1
    $Var2 = _DivWithRest($Value, $Base)
    $Var1 = 0
    Case Else
    $Var2 = _DivWithRest($Var2[0], $Base)
    EndSwitch
    $Var3 = Hex($Var2[1], 1) & $Var3
    WEnd
    Return $Var3
    Case 1
    $Var1 = StringSplit($Value, "")
    $Var2 = 0
    For $i = $Var1[0] To 1 Step -1
    $Var3 = _BigNum_Add($Var3, _BigNum_Mul(Dec($Var1[$i]), _BigNum_Potenz($Base, $Var2)))
    $Var2 = _BigNum_Add($Var2, 1)
    Next
    Return $Var3
    EndSwitch
    Return SetError(1, 0, 0)
    EndFunc ;==>_CalcToBase

    [/autoit] [autoit][/autoit] [autoit]

    Func _DivWithRest($a, $b)
    Local $Int = _BigNum_Div(String($a), String($b))
    Local $Return[2] = [$Int, _BigNum_Sub(String($a), _BigNum_Mul($Int, String($b)))]
    Return $Return
    EndFunc ;==>_DivWithRest

    [/autoit]
  • Klasse Proggi!
    Steig aber nicht durch den Quelltext durch^^
    Aber ist schon nützlich für mich! Wäre super wenn du das noch schaffst mit dem Anzeigen der Rechenschritte