Deutsch
Forum

Beim Taschenrechner programmieren! Kapier da was nicht. Bzw. Kann Fehler nicht verstehen

 

Gary12345
Hallo,
KompilierenMarkierenSeparieren
Window 0,0-400,400

Proc Hauptprogramm

    declare wert%, wert2%, wert3%, wert4%, wert5%, wert6%, wert7%, wert8%, wert9%, wert10%
    var Button1& = CREATE("Button",%HWND,"1", 50, 50, 50, 50)
    var Button2& = CREATE("Button",%HWND,"2",50, 100, 50, 50)
    var Button3& = CREATE("Button",%HWND,"3",50,150,50,50)
    var Button4& = CREATE("Button",%HWND,"4",50,200,50,50)
    var Button5& = CREATE("Button",%HWND,"5",50,250,50,50)
    var Button6& = CREATE("Button",%HWND,"6",100,50,50,50)
    var Button7& = CREATE("Button",%HWND,"7",100,100,50,50)
    var Button8& = CREATE("Button",%HWND,"8",100,150,50,50)
    var Button9& = CREATE("Button",%HWND,"9",100,200,50,50)
    var Button10& = CREATE("Button",%HWND,"0",100,250,50,50)
    var Button11& = CREATE("Button",%HWND,"+",200,50,50,50)
    var Button12& = CREATE("Button",%HWND,"-",200,100,50,50)
    var Button13& = CREATE("Button",%HWND,":",200,150,50,50)
    var Button14& = CREATE("Button",%HWND,"*",200,200,50,50)
    var Button15& = CREATE("Button",%HWND,"=>",200,250,50,50)
    var ButtonClear& = CREATE("Button", %HWND, "TEST100", 250,100,100,100)

    While 1

        WaitInput

        If clicked(Button1&)

            wert% = 1
            Print wert%

        EndIf

        If clicked(Button2&)

            wert2% = 2
            print wert2%

        EndIf

        If clicked(Button3&)

            wert3% = 3
            print wert3%

        EndIf

        If clicked(Button4&)

            wert4% = 4
            print wert4%

        EndIf

        If clicked(Button5&)

            wert5% = 5
            print wert5%

        EndIf

        If clicked(Button6&)

            wert6% = 6
            print wert6%

        EndIf

        If clicked(Button7&)

            wert7% = 7
            print wert7%

        EndIf

        If clicked(Button8&)

            wert8% = 8
            print wert8%

        EndIf

        If clicked(Button9&)

            wert9% = 9
            print wert9%

        EndIf

        If clicked(Button10&)

            wert10% = 0
            print wert10%

        EndIf

        If clicked(Button11&)

            var Ergebnis$[wert1%,wert2%,wert3%,wert4%,wert5%,wert6%,wert7%,wert8%,wert9%,wert10%] = wert%+wert2%+wert3%+wert4%+wert5%+wert6%+wert7%+wert8%+wert9%+wert10%
            print Ergebnis$

        EndIf

        If clicked(ButtonClear&)

            cls

        EndIf

    EndWhile

EndProc

While 1

    WaitInput
    Hauptprogramm

EndWhile


Wie ich vorgegangen bin:

1. Habe überlegt, ob ich Buttons verwenden soll oder nur ein Editierfeld. Ich habe mich für die schwierigere Variante entschieden, nämlich die Buttons.
2. Das Hauptprogramm in eine Prozedur gestellt. Externe Funktionen werden in einem Extra-Proc behandelt.
3. Alle Buttons einen Wert zuweisen (natürlich integer) => wert% - wert10%
4. Falls Button "+" gedrückt wurde, alle Werte addieren. Zu guter letzt sie mit print darstellen lassen (Das Ergebnis natürlich)

Mein Problem:

1. Es addiert alles richtig, nur wenn ich das zweite mal addiert habe (also das zweite mal rechne ohne ClearUp) kommt eine Fehlermeldung, dass ich die Variable Ergebnis doppelt deklariert habe. Kann diesen Fehler nicht nachvollziehen.
2. Wenn ich nur einmal zwei Werte addiere und dann zu guter Letzt auf den Button100 klicke, kommt beim zweiten Rechnen auch eine Fehlermeldung. Das ist wiederum die gleiche wie in Problem1 beschrieben.
3. Ich kann nur Werte 0-9 darstellen. Keine Werte über 9. Warum? Warum hängt es immer eine Zahl drunter statt neben der Zahl? Kann ich auch nicht nachvollziehen.

Wie ihr mir helfen könntet

Ich will keinen Lösungscode. Ich will nur Hinweise auf die Ursache dieses Fehlers. Was ich genau falsch gemacht habe und noch weitere andere Sachen. Dazu würde ich das Problem nicht alles auf einmal machen, sondern alles Schritt für Schritt. Ich war es früher gewohnt einfach nur Codes zu bekommen, aber diesmal will ich wirklich lernen. Wenn ich was nicht verstehe, dann frag ich eben nach. Aber Hinweise statt der ganzen Lösung ist oft sinnvoller als man denkt.

Daher vielen Dank schon in vorraus!
 
XProfan X2
MfG
Gary12345
26.01.2013  
 




Dieter
Zornow
In einer Schleife sollte man keine Variable declarieren, deshalb kommt das.

Aber es sind noch mehr Fehler drin, Beim Start habe ich ein leeres Fenster, erst wenn ich klicke erscheinen die Buttons aber eine Reihe fehlt ganz. Ich habe mir den Code nicht weiter betrachtet nur nach der Variablen gesucht, da ich den Verdacht hatte, dass die in der Schleife declariert wird.
 
XProfan X2
Er ist ein Mann wie ein Baum. Sie nennen ihn Bonsai., Win 7 32 bit und Win 7 64 bit, mit XProfan X2
26.01.2013  
 




Gary12345
Super Problem1 und Problem2 sind gelöst.

Also neues Problem

Problem4:

Wenn man das startet, is erstmal ein leeres Fenster da.

Werde da mal rumschauen, was da los ist.
 
XProfan X2
MfG
Gary12345
26.01.2013  
 




Gary12345
Ich mach hier mal eine Problemsammlung:

Problem1:
Wenn man 1+1 rechnet kommt immer nur noch 1 raus, weil ich nur alle Werte addiert habe, aber nicht berücksichtigt habe, das man auch mehrmals gleiche Werte eingeben kann.
z.B. 1+1+1=1
2+2+2=2
3+3+3=3
Problem2:
Wenn man zwei verschiedene Zahlen miteinander addiert und das Ergebnis mit der gleichen Zahl addiert, bleibt das Ergebnis gleich.
z.B. 2+7=9+7=9
3+6=9+6=9
Mit den Button Test100 geht das aber dann wieder.
Problem3:
Man kann keine 11 eingeben. Denn es schreibt die Zahlen immer untereinander und nicht nebeneinander.

Ich vermute, dass Problem1 und Problem2 aus mathematischen Gründen nicht stimmen. Daher versuch ich das selber zu lösen. Ich teile euch mit, wenn ich es nicht schaffe. Ich geb euch den aktuellen Code. Wenn doch was am Code falsch ist, teilt ihr es doch bitte mir mit
KompilierenMarkierenSeparieren
Window 0,0-400,400
declare wert%, wert2%, wert3%, wert4%, wert5%, wert6%, wert7%, wert8%, wert9%, wert10%
declare Ergebnis$
declare button1&, button2&, button3&, button4&, button5&, button6&, button7&, button8&, button9&, button10&, button11&, button12&, button13&, button14&
declare button15&, buttonclear&

Proc Hauptprogramm

    Button1& = CREATE("Button",%HWND,"1", 50, 50, 50, 50)
    Button2& = CREATE("Button",%HWND,"2",50, 100, 50, 50)
    Button3& = CREATE("Button",%HWND,"3",50,150,50,50)
    Button4& = CREATE("Button",%HWND,"4",50,200,50,50)
    Button5& = CREATE("Button",%HWND,"5",50,250,50,50)
    Button6& = CREATE("Button",%HWND,"6",100,50,50,50)
    Button7& = CREATE("Button",%HWND,"7",100,100,50,50)
    Button8& = CREATE("Button",%HWND,"8",100,150,50,50)
    Button9& = CREATE("Button",%HWND,"9",100,200,50,50)
    Button10& = CREATE("Button",%HWND,"0",100,250,50,50)
    Button11& = CREATE("Button",%HWND,"+",200,50,50,50)
    Button12& = CREATE("Button",%HWND,"-",200,100,50,50)
    Button13& = CREATE("Button",%HWND,":",200,150,50,50)
    Button14& = CREATE("Button",%HWND,"*",200,200,50,50)
    Button15& = CREATE("Button",%HWND,"=>",200,250,50,50)
    ButtonClear& = CREATE("Button", %HWND, "TEST100", 250,100,100,100)

EndProc

Hauptprogramm

While 1

    WaitInput

    If clicked(Button1&)

        wert% = 1
        Print wert%

    EndIf

    If clicked(Button2&)

        wert2% = 2
        print wert2%

    EndIf

    If clicked(Button3&)

        wert3% = 3
        print wert3%

    EndIf

    If clicked(Button4&)

        wert4% = 4
        print wert4%

    EndIf

    If clicked(Button5&)

        wert5% = 5
        print wert5%

    EndIf

    If clicked(Button6&)

        wert6% = 6
        print wert6%

    EndIf

    If clicked(Button7&)

        wert7% = 7
        print wert7%

    EndIf

    If clicked(Button8&)

        wert8% = 8
        print wert8%

    EndIf

    If clicked(Button9&)

        wert9% = 9
        print wert9%

    EndIf

    If clicked(Button10&)

        wert10% = 0
        print wert10%

    EndIf

    If clicked(Button11&)

        Ergebnis$ = str$(wert%+wert2%+wert3%+wert4%+wert5%+wert6%+wert7%+wert8%+wert9%+wert10%)
        print Ergebnis$

    EndIf

    If clicked(ButtonClear&)

        cls

    EndIf

EndWhile

 
MfG
Gary12345
26.01.2013  
 




Gary12345
Komme einfach nicht drauf.

Ich müsste die Variable wert% vervielfachen, das auch andere Zahlen ausser nur 1,2,3,4,5,6,7,8,9 rauskommen.

Man müsste abfragen, ob die Buttons mehrfach gedrückt worden sind, oder nicht?

Kann mir jemand nur TIPPS geben, bitte keine Lösungen. (Also zu Problem1)

Danke
 
MfG
Gary12345
26.01.2013  
 



Es gibt viele Ansätze einen einfachen Taschenrechner umzusetzen.
Da Du Dich in Bezug auf die Ressourcen Deines Computers quasi im
Schlaraffenland befindest, kannst Du es Dir sehr leicht machen.

Mach doch erstmal, dass wenn man einen Button klickt, dass das entsprechende
Zeichen zu einem String hinzugefügt wird.

Quasi druck auf 5: formel$=formel$+"5"
Quasi druck auf +: formel$=formel$+"+"
Quasi druck auf 9: formel$=formel$+"9"

Beim Istgleichzeichen muss dann nur noch formel$ ausgerechnet werden,
dafür gibt es die Funktion eval( ... ( [...]  ).

Ach ja, eval gibts ja noch nicht -

dann einfach: [...] 
 
26.01.2013  
 




Gary12345
Ich bin ehrlich:

Von dem Code da kapier ich reingarnichts und will ich auch nicht anwenden. Gibt es eine andere Möglichkeit das zu lösen. Über input wärs ja viel leichter. Da müsste man das input nur in einen string packen und die dann adieren. Das schaut aber nicht so schön aus.
 
XProfan X2
MfG
Gary12345
26.01.2013  
 



Wie geschrieben gibt es ja viele Lösungswege. Hast Du eine andere Idee?
 
26.01.2013  
 




Gary12345
Ich kenn zwei Lösungswege:

1. Per Editierfeld zu machen (Input,editfeld,etc.)
2. Oder per Buttons...

Welche gibt es noch?
 
XProfan X2
MfG
Gary12345
26.01.2013  
 



Deinen Lösungswegen kann ich nicht so richtig entnehmen was genau sie
alles lösen sollen.

Das eine ist die Anzeige/ Oberfläche quasi UI -
das andere ist das Ausrechnen.

Mein Tip war ja:

Mach doch erstmal, dass wenn man einen Button klickt, dass das entsprechende
Zeichen zu einem String hinzugefügt wird.

Quasi druck auf 5: formel$=formel$+"5"
Quasi druck auf +: formel$=formel$+"+"
Quasi druck auf 9: formel$=formel$+"9"


Zudem lassen sich:

1. Per Editierfeld zu machen (Input,editfeld,etc.)
2. Oder per Buttons...

auch kombinieren sodass man mit den Buttons "nur" ein Edit befüllt man aber das
Edit auch direkt editieren kann.
 
26.01.2013  
 




Gary12345
Vll kann ich Dir es jetzt etwas erläutern:

Wenn Du meinem Code in XPROFAN eingibst und ausführst, merkst Du , dass er alle Zahlen untereinander schreibt und nicht nebeneinander. Das andere Problem war, dass wenn ich 1+1=1 ergibt, da der Code nicht zwei gleiche Werte addieren kann. Das letzte Problem ist, dass wen ich 6+2=8+2=8 ergibt, und da habe ich keinen Plan warum.

Zuerst würde ich das erste Problem lösen.



Mach doch erstmal, dass wenn man einen Button klickt, dass das entsprechende
Zeichen zu einem String hinzugefügt wird.

Quasi druck auf 5: formel$=formel$+"5"
Quasi druck auf +: formel$=formel$+"+"
Quasi druck auf 9: formel$=formel$+"9"


ich weiß nicht, was ich unter formel$ verstehen soll.
 
XProfan X2
MfG
Gary12345
26.01.2013  
 




Gary12345


Zudem lassen sich:

1. Per Editierfeld zu machen (Input,editfeld,etc.)
2. Oder per Buttons...

auch kombinieren sodass man mit den Buttons "nur" ein Edit befüllt man aber das
Edit auch direkt editieren kann.


Das wäre auch eine sehr optionale Lösung. Aber antworte doch bitte auf den oberen Post
 
XProfan X2
MfG
Gary12345
26.01.2013  
 




Antworten


Thementitel, max. 100 Zeichen.
 

Systemprofile:

Kein Systemprofil angelegt. [anlegen]

XProfan:

 Beitrag  Schrift  Smilies  ▼ 

Bitte anmelden um einen Beitrag zu verfassen.
 

Themenoptionen

24.211 Betrachtungen

Unbenanntvor 0 min.
ecki29.12.2023
MrZebulon05.08.2018
rawerra30.12.2016
Peter Max Müller30.10.2014
Mehr...

Themeninformationen



Admins  |  AGB  |  Anwendungen  |  Autoren  |  Chat  |  Datenschutz  |  Download  |  Eingangshalle  |  Hilfe  |  Händlerportal  |  Impressum  |  Mart  |  Schnittstellen  |  SDK  |  Services  |  Spiele  |  Suche  |  Support

Ein Projekt aller XProfaner, die es gibt!


Mein XProfan
Private Nachrichten
Eigenes Ablageforum
Themen-Merkliste
Eigene Beiträge
Eigene Themen
Zwischenablage
Abmelden
 Deutsch English Français Español Italia
Übersetzungen

Datenschutz


Wir verwenden Cookies nur als Session-Cookies wegen der technischen Notwendigkeit und bei uns gibt es keine Cookies von Drittanbietern.

Wenn du hier auf unsere Webseite klickst oder navigierst, stimmst du unserer Erfassung von Informationen in unseren Cookies auf XProfan.Net zu.

Weitere Informationen zu unseren Cookies und dazu, wie du die Kontrolle darüber behältst, findest du in unserer nachfolgenden Datenschutzerklärung.


einverstandenDatenschutzerklärung
Ich möchte keinen Cookie