Forum | | | | - Seite 1 - |
| Gary12345 | Hallo,
simpler Code, simple Frage:
$I MatheLeicht.inc
Window 0,0-600,400
WindowStyle 15
WindowTitle "Taschenrechner by Gary12345"
declare edittext$
var edit1& = CREATE("Edit",%HWND,edittext$,10,10,550,30)
var button1& = CREATE("Button",%HWND,"+",20,50,100,50)
var button2& = CREATE("Button",%HWND,"-",150,50,100,50)
var button3& = CREATE("Button",%HWND,":",280,50,100,50)
var button4& = CREATE("Button",%HWND,"X",410,50,100,50)
var button5& = CREATE("Button",%HWND,"Wurzel",20, 120,100,50)
var button6& = CREATE("Button",%HWND,"ADreieck",150,120,100,50)
var button7& = CREATE("Button",%HWND,"AQuadrat",280,120,100,50)
var button8& = CREATE("Button",%HWND,"ARechteck",410,120,100,50)
var button9& = CREATE("Button",%HWND,"AKreis",20,190,100,50)
var button10& = CREATE("Button",%HWND,"ATrapez",150,190,100,50)
var button11& = CREATE("Button",%HWND,"AParallelogr.",280,190,100,50)
var button12& = CREATE("Button",%HWND,"VKegel",410,190,100,50)
While 1
WaitInput
IF clicked(Button1&)
edittext$ = "+"
EndIf
EndWhile
Wie gesagt, ich gehe Schritt für Schritt vor und bitte euch nicht um den richtigen Code, sondern um Hinweise (z.B. in welchem Part der hilfe ich nachlesen solle,etc.)
Problem1:
Hilfe in XPROFAN zu Edit:
N : LongInt - Handle des übergeordneten Fensters
S : String - Vorgabetext
X1,Y1 : Integer - Linke obere Ecke des Eingabefeldes
X2,Y2 : Integer - Größe des Eingabefeldes (Sonderfunktion; siehe Text)
Nun habe ich diese Zeile: edittext$ = "+" Dieser String ist der Vorgabetext S. Warum fügt es nicht bei Klick eines Buttons eine "+" hinzu?
Servus |
| | | | |
| | | | | - Seite 1 - |
| Gary12345 | Werde mich morgen da mal informieren. Bin heute zu müde dafür. |
| | | | |
| | Gary12345 | Was ein Parser ist, weiß ich jetzt. Was eine Zählevariable ist , kann ich nur etwas vermuten. Also Du willst, dass ich den Text von edit in eine extra Variable abspeichere, diese dann nach float umwandle und dann rechnet? Verstehe das nicht so.
Servus! |
| | | | |
| | Julian Schmidt | In der Hilfe findest du ein einfaches Beispiel zu einem Taschenrechner ohne Parser. Die Grundidee dabei ist, das du eine leere Variable erstellt, und jede Operation auf die ausführst und dann das Ergebnis ausgibst. Beispiel: Du hast einen Taschenrechner mit Buttons von Zahlen 0-9 und +, -, *, /, Clear. Am Anfang ist die Variable Ans! gleich 0. Sobald du auf den Button "+" drückst. Wird dieser Operator in einer weiteren Variable gespeichert. Sobald du nun auf einen Zahl klickst, wird Ans! mit dem gespeicherten Operator und der gedrückten Zahl erweitert und !Ans als Ergebnis ausgegeben.
Die Grundüberlegung bei einem Parser ist, dass man die komplizierteste Formel in Bestandteile (substr) zerleget, die nach dem Schema "Variable Operator Variable" aufgebaut sind. Man geht dabei Rückwärts vor und sucht nach der am tiefsten verschachtelten Rechenoperation nach den Regeln der Mathematik. Sprich Klammer vor Potenz vor Punkt vor Strich. Dieser Vorgang wird solange wiederholt bis keine Operatoren mehr zufinden sind. Hier ein Beispiel: 8*2+(7-4) 16+(7-4) 16+3 19
Hier ein Beispiel [...] |
| | | | |
| | Jörg Sellmeyer | Ich würde dir auch empfehlen, dich erstmal auf die Grundrechenarten zu beschränken und nur einfache Rechenoperation auszugeben, bis du das Prinzip beim Programmieren so halbwegs verstanden hast. 10 Button mit den Ziffern von 0-9 sind schnell erstellt. Dann noch 4 für die Operanden und einer für =. Du kannst zB jeden Buttonkick eingabe in einer Liste speichern und beim Klick auf den Ergebnisbutton, die Liste abarbeiten.
Die Eingabe per Button von 72 + 8 - 4 ergibt dann eine Liste von: "72" "+" "8" "-" "4"
Wenn der Ergebnisbutton gedrückt wird wandelst du das dann in eine Rechenoperation um.+ Das Gleiche machst du dann mit Multiplikation und Division.
Wenn das funktioniert, kannst du dich auch an einfache Kombinationsaufgaben ranwagen. zB 8 * 12 + 7 Hier musst du dann die ganze Liste erstmal durcharbeiten, um die Rechenregeln anzuwenden. Du "parst" also die Liste.
Als nächstes kannst du dann noch Klammern einbauen. Da wird das Parsen schon etwas aufwendiger. Julians Beispiel benötigt übrigens noch keine Klammern, da es mit den Rechenregeln automatich funktioniert:
Erst so, sind Klammern nötig und es gibt natürlich ein anderes Ergebnis:
In dem Fall würde ich mit einer Gridlist arbeiten und die Klammernblocks in die nächste Spalte setzen:
Spalte 1 | Spalte 2 | Spalte 3 | 8 | * | ( | | 2 | | + | | 7 | ) | - | 4
|
Da brauchst du dann nur auf jede Spalte deine Parserprozedur anwenden und erhälst jeweils korrekte Ergebnisse. Aber immer einen Schritt nach dem anderen. Erstmal die simplen Grundrechenarten.
[OFFTOPIC]puh - ist das ein Umstand mit der Tabelle aber jetzt hab ich es zumindest geschnallt... Leider funktioniert bei mir der "Vorschau"-Button nicht. Geht das anderen auch so oder ist das ein lokales Problem bei mir?[/OFFTOPIC] |
| | | Windows XP SP2 XProfan X4... und hier mal was ganz anderes als Profan ... | 02.02.2013 ▲ |
| |
| | | Der Vorschau Btn. geht bei mir sogar hier grad ausm Bett aufm Handy gg.
Zeigt Vorschau überm Editor - bisl hochscrollen, benötigt JS.
|
| | | | |
| | Jörg Sellmeyer | Ich hab JS aktiviert und trotzdem keine Vorschau |
| | | Windows XP SP2 XProfan X4... und hier mal was ganz anderes als Profan ... | 02.02.2013 ▲ |
| |
| | | | - Seite 2 - |
| | Gary12345 |
$I MatheLeicht.inc
Window 0,0-600,400
WindowStyle 15
WindowTitle "Taschenrechner by Gary12345"
declare Ergebnis!,Liste&
Liste& = CREATE("List",1)
var edit1& = CREATE("Edit",%HWND,"",10,10,550,30)
var button1& = CREATE("Button",%HWND,"+",20,50,100,50)
var button2& = CREATE("Button",%HWND,"-",150,50,100,50)
var button3& = CREATE("Button",%HWND,":",280,50,100,50)
var button4& = CREATE("Button",%HWND,"X",410,50,100,50)
var button5& = CREATE("Button",%HWND,"Wurzel",20, 120,100,50)
var button6& = CREATE("Button",%HWND,"ADreieck",150,120,100,50)
var button7& = CREATE("Button",%HWND,"AQuadrat",280,120,100,50)
var button8& = CREATE("Button",%HWND,"ARechteck",410,120,100,50)
var button9& = CREATE("Button",%HWND,"AKreis",20,190,100,50)
var button10& = CREATE("Button",%HWND,"ATrapez",150,190,100,50)
var button11& = CREATE("Button",%HWND,"AParallelogr.",280,190,100,50)
var button12& = CREATE("Button",%HWND,"VKegel",410,190,100,50)
var buttonGo& = CREATE("Button",%HWND,"Rechnen",210,250,100,50)
While 1
WaitInput
IF clicked(button1&)
AddString(Liste&,gettext$(edit1&))
AddString(Liste&,"+")
EndIf
If clicked(button2&)
AddString(Liste&,gettext$(edit1&))
AddString(Liste&,"-")
EndIf
If clicked(button3&)
settext edit1&, gettext$(edit1&) + "/"
EndIf
If clicked(button4&)
settext edit1&, gettext$(edit1&) + "*"
EndIf
If clicked(buttonGo&)
Ergebnis! = val(gettext$(edit1&))
print Ergebnis!
EndIf
EndWhile
Also stellt ihr euch das so vor? (Noch nicht fertig, will aber sehen, ob das stimmt) |
| | | | |
| | Jörg Sellmeyer | Nicht ganz. Bei jedem Klick nur ein Zeichen derListe hinzufügen: Beim Klick auf eine Zahl wird eine Zahl eingefügt. Wenn noch eine Zahl kommt, wird sie in der selben Zeile angehängt, sodass auch größere Zahlen eingeeben werden können. Wnn ein anderes Zeichen kommt, wird das in eine neue Zeile gesetzt und die nächste Zahl wieder in eine neu Zeile usw. |
| | | Windows XP SP2 XProfan X4... und hier mal was ganz anderes als Profan ... | 02.02.2013 ▲ |
| |
| | Gary12345 | Ja vollkommen recht. Wer nicht lesen kann, ist klar im Nachteil. Das hat sich bei mir wieder mal bewiesen |
| | | | |
| | Gary12345 | Es geht ja VIEL leichter. Da steht ja in der Hilfe ein simpler Code. Da bräuchte keinen Parser oder sonstiges Zeugstel. Das wäre zumidnestens das Leichteste. Bzw. erst Roland fragen |
| | | | |
| | Jörg Sellmeyer | Du solltest wirklich mal anfangen, dir die Antworten, die du erhältst, auch mal durchzulesen:
Julian Schmidt
In der Hilfe findest du ein einfaches Beispiel zu einem Taschenrechner ohne Parser.
[OFFTOPIC]Erstaunlicherweise funktioniert die Vorschau jetzt auch wieder...[/OFFTOPIC] |
| | | Windows XP SP2 XProfan X4... und hier mal was ganz anderes als Profan ... | 02.02.2013 ▲ |
| |
| | Gary12345 | Echt? Habe ich wohl überlesen o.O Sorry. Naja ich war auch etwas auf Dein Posting fixiert und habe das von Julian Schmidt schnell überflogen.
Trotzdem Danke!
Gerry |
| | | | |
|
AntwortenThemenoptionen | 18.199 Betrachtungen |
ThemeninformationenDieses Thema hat 4 Teilnehmer: |