Potenzenrechner bis 99 hoch 99

  • Hallo alle zusammen!

    Ich bin gerade dabei ein Programm zu erstellen, dass alle Potenzen bis 99 hoch 99 errechnen kann.

    Allerdings weiß ich nicht wie ich anfangen soll bzw. wie ich die einzelnen Knöpfe binden soll.

    Im Screen ist eine (sehr notdürftige) Skizze.

    Der Rechner sollte am Ende folgende Funktionen haben:

    - Zahlenfeld von 0-9

    - = Taste

    - Rücktaste

    - Clear(Ausschalt)-Taste

    - Hoch-Taste


    Ich hoffe auf eure Hilfe :thumbup:

    MfG Luwid

  • Hallo Luwid,

    Allerdings weiß ich nicht wie ich anfangen soll bzw. wie ich die einzelnen Knöpfe binden soll.

    wie wärs mal mit GUI erstellen?

    folgende Befehle sollten dir helfen

    [autoit]

    GUICreate
    GUICtrlCreateButton
    GUICtrlCreateInput

    [/autoit]


    schau dir am besten mal die deutsche Hilfedatei an (Download hier).
    Du kannst auch den Koda Form Designer benutzen, mit dem lässt es sich am Anfang leichter einfache Fenster "designen". Wenn du schon eine GUI hast, poste sie am Besten hier, dann können wir die auch besser helfen.

    mfG
    Developer30

    "Je mehr Käse, desto mehr Löcher; je mehr Löcher, desto weniger Käse. Ergo: Je mehr Käse, desto weniger Käse. 8| "
    "Programmers never die: they just GOSUB without RETURN"
    "I tried to change the world but I couldn't find the source code."

  • Hier der vollständige Code, den ich mir gerade für Dich ausgedacht habe:

    Spoiler anzeigen
    [autoit]

    #include-once
    #include <EditConstants.au3>
    #include <GUIConstants.au3>
    #include <GUIEdit.au3>

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

    Opt("GUIOnEventMode", 1)

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

    Global Const $ButtonBreite = 50, $ButtonHoehe = 50
    Global $x = 0, $String = "", $ArrayString

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

    HotKeySet("{BS}", "_Loeschen")
    HotKeySet("{ENTER}", "_IstGleich")
    HotKeySet("{^}", "_Hoch")
    For $i = 0 To 9
    HotKeySet($i, "_Ziffer")
    Next

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

    $Rechner = GUICreate("Rechner für Potenzen", 520, 250)
    GUISetFont(18)
    $TextAusgabe = _GUICtrlEdit_Create($Rechner, "", 10, 10 ,500, 100, BitOR($ES_READONLY, $ES_MULTILINE))
    $Ziffer0 = GUICtrlCreateButton("0", 10, 120, $ButtonBreite, $ButtonHoehe)
    GUICtrlSetOnEvent(-1, "_Ziffer")
    $Ziffer1 = GUICtrlCreateButton("1", 10+$ButtonBreite, 120, $ButtonBreite, $ButtonHoehe)
    GUICtrlSetOnEvent(-1, "_Ziffer")
    $Ziffer2 = GUICtrlCreateButton("2", 10+2*$ButtonBreite, 120, $ButtonBreite, $ButtonHoehe)
    GUICtrlSetOnEvent(-1, "_Ziffer")
    $Ziffer3 = GUICtrlCreateButton("3", 10+3*$ButtonBreite, 120, $ButtonBreite, $ButtonHoehe)
    GUICtrlSetOnEvent(-1, "_Ziffer")
    $Ziffer4 = GUICtrlCreateButton("4", 10+4*$ButtonBreite, 120, $ButtonBreite, $ButtonHoehe)
    GUICtrlSetOnEvent(-1, "_Ziffer")
    $Ziffer5 = GUICtrlCreateButton("5", 10+5*$ButtonBreite, 120, $ButtonBreite, $ButtonHoehe)
    GUICtrlSetOnEvent(-1, "_Ziffer")
    $Ziffer6 = GUICtrlCreateButton("6", 10+6*$ButtonBreite, 120, $ButtonBreite, $ButtonHoehe)
    GUICtrlSetOnEvent(-1, "_Ziffer")
    $Ziffer7 = GUICtrlCreateButton("7", 10+7*$ButtonBreite, 120, $ButtonBreite, $ButtonHoehe)
    GUICtrlSetOnEvent(-1, "_Ziffer")
    $Ziffer8 = GUICtrlCreateButton("8", 10+8*$ButtonBreite, 120, $ButtonBreite, $ButtonHoehe)
    GUICtrlSetOnEvent(-1, "_Ziffer")
    $Ziffer9 = GUICtrlCreateButton("9", 10+9*$ButtonBreite, 120, $ButtonBreite, $ButtonHoehe)
    GUICtrlSetOnEvent(-1, "_Ziffer")
    $Loeschen = GUICtrlCreateButton("Löschen", 10, 180, $ButtonBreite*2, $ButtonHoehe)
    GUICtrlSetOnEvent(-1, "_Loeschen")
    $Beenden = GUICtrlCreateButton("Beenden", 10+2*$ButtonBreite, 180, $ButtonBreite*2, $ButtonHoehe)
    GUICtrlSetOnEvent(-1, "_Beenden")
    GUICtrlSetBkColor(-1, 0xFF0000);rot hinterlegter Button
    $Hoch = GUICtrlCreateButton("^", 10+4*$ButtonBreite, 180, $ButtonBreite, $ButtonHoehe)
    GUICtrlSetOnEvent(-1, "_Hoch")
    $IstGleich = GUICtrlCreateButton("=", 10+5*$ButtonBreite, 180, $ButtonBreite, $ButtonHoehe)
    GUICtrlSetOnEvent(-1, "_IstGleich")
    $GanzenEditLoeschen = GUICtrlCreateButton("Zurücksetzen", 10+7*$ButtonBreite, 180, $ButtonBreite*3, $ButtonHoehe)
    GUICtrlSetOnEvent(-1, "_Zuruecksetzen")
    $Punkt = GUICtrlCreateButton(".", 10+6*$ButtonBreite, 180, $ButtonBreite, $ButtonHoehe)
    GUICtrlSetOnEvent(-1, "_Punkt")
    GUISetOnEvent($GUI_EVENT_CLOSE, "_Beenden")
    GUISetState(@SW_SHOW)

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

    Do
    Until GUIGetMsg() = $GUI_EVENT_CLOSE

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

    Func _Beenden ()
    Exit
    EndFunc

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

    Func _Ziffer ()
    Switch IsInt(_GUICtrlEdit_GetLineCount($TextAusgabe)/7)
    Case 1
    _GUICtrlEdit_SetText($TextAusgabe, "")
    $x = 0
    ContinueCase
    Case Else
    Switch @HotKeyPressed
    Case ""
    _GUICtrlEdit_InsertText($TextAusgabe, GUICtrlRead(@GUI_CtrlId))
    Case Else
    _GUICtrlEdit_InsertText($TextAusgabe, @HotKeyPressed)
    EndSwitch
    EndFunc

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

    Func _Loeschen ()
    _GUICtrlEdit_SetText($TextAusgabe, StringTrimRight(_GUICtrlEdit_GetText($TextAusgabe), 1))
    EndFunc

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

    Func _Hoch ()
    _GUICtrlEdit_InsertText($TextAusgabe, "^")
    EndFunc

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

    Func _IstGleich ()
    $x = $x+1
    $String = Execute(_GUICtrlEdit_GetLine($TextAusgabe, $x-1))
    Select
    Case StringInStr($String, "e") <> 0
    $ArrayString = StringSplit($String, "e")
    If StringInStr($ArrayString[2], "+") <> 0 Then $ArrayString[2] = StringTrimLeft($ArrayString[2] ,1)
    $String = $ArrayString[1]&"*10^"&$ArrayString[2]
    ContinueCase
    Case Else
    _GUICtrlEdit_AppendText($TextAusgabe, " = "&$String&@CRLF)
    EndSelect
    EndFunc

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

    Func _Zuruecksetzen ()
    _GUICtrlEdit_SetText($TextAusgabe, "")

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

    Func _Punkt ()
    _GUICtrlEdit_InsertText($TextAusgabe, ".")
    EndFunc
    EndFunc

    [/autoit]


    P. S.: Die Formatierung ist grauenhaft :rolleyes: ...

  • Mir hat das Script von Meistertogo schon einiges an Erleuchtung gebracht :D
    Mir ist dabei aber aufgefallen, dass es nur eine "Hülle" ist, da er noch keineswegs rechnen kann.
    Mein größtes Problem ist hingegen, die eigentliche Rechenfunktion zu erstellen; da ich so ein Projekt noch nie zuvor
    gemacht habe, habe ich keinerlei Ahnung wie man das nötige sciptet.

    Deshalb: Danke an Meistertogo für die tolle Starthilfe und weiterhin Suche nach Hilfe bei der Hauptaufgabe.
    Mfg Luwid

  • Um meine Hilfe kurz zu erklären:
    1. Ich habe das Script mit Absicht in einem Spoiler gepostet, damit Luwid es sich ansehen kann, wenn er eigene Entwürfe angefertigt hat.
    2. Man kann mit meinem mittlerweile editierten Rechner problemlos 99^99 rechnen (was man übrigens auch vor den Editierungen konnte).
    3. Mein Lösungsvorschlag beinhaltet eine Rechenfunktion.
    Mein Code beinhaltet Funktionen, die für AutoIt-Neueinsteiger schwer verständlich sein könnten. Deshalb war es nicht meine Absicht, Luwid das gesamte Script "vorzukauen", sondern vielmehr, ihm Ideen und Funktionen zu geben, mit denen er eigene Ansätze entwickeln kann. Ich wollte lediglich veranschaulichen, wie man das Problem hätte lösen können.

  • meistertogo Dafür danke ich dir auch; daduch kann ich schonmal einen Blick auf etwas schwierigere Scripts haben :)
    @Twodollarbillie Wie genau kann ich diese 99^99 in das Script so einbauen, dass das gewünschte Ergebnis kommt, wenn man z.B. 99^99 rechnet?

    Einmal editiert, zuletzt von Luwid (28. Juni 2011 um 21:21)

  • Ich bezweifle ,dass 99^99 so simpel gerechnet werden kann. Da kommt immerhin was mit 3.6 *10^197 raus. Wenn ich mich nicht irre, ist somit der Doubledatenwert überschritten.

    [align=center]Meine Werke mit der Irrlicht Engine
    AutoIt Picture Viewer Dreidimensionaler Bildbetrachter
    Mr Bubble 3D Neue Interpretation des Flashklassikers Bubble trouble

  • Schön, aber kannst du bitte Schriftart und Schriftgröße auf dem Standard lassen? Fixed Width (Courier New) in 14pt ist schlecht zu lesen.