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
#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 Version: 3.3.0.0
Author: myName
Script Function:
Template AutoIt script.
#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>
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)|"
$Form1 = GUICreate("Zahlensystem Umrechner", 594, 500)
GUISetOnEvent($GUI_EVENT_CLOSE, "Close")
$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)
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
Func ComboChange()
_StatusBar("Bitte warten...")
_ComboRead()
_StatusBar("Fertig")
EndFunc ;==>ComboChange
Func Close()
Exit
EndFunc ;==>Close
Func _StatusBar($Msg)
_GUICtrlStatusBar_SetText($StatusBar, " " & $Msg, 0)
EndFunc ;==>_StatusBar
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
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
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