Forum | | | | 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 |
| | | | |
| | Julian Schmidt | Versuchs mal per Settext! |
| | | | |
| | Gary12345 | Danke, daran habe ich wieder mal nicht gedacht. Sorry. Wird funken. Teste es jetzt mal o.O |
| | | | |
| | Gary12345 | | | | | |
| | Gary12345 | KompilierenMarkierenSeparieren $I MatheLeicht.inc
Window 0,0-600,400
WindowStyle 15
WindowTitle "Taschenrechner by Gary12345"
declare Ergebnis!
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&)
settext edit1&, gettext$(edit1&) + "+"
EndIf
If clicked(button2&)
settext edit1&, gettext$(edit1&) + "-"
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
Nächstes Problem:
Wollte jetzt das Ergebnis in float konvertieren (also mit @val()). Aber warum rechnet es nicht?
EDIT: Habe eine Vermutung: Kann es daran liegen, dass + kein floatwert sein kann? |
| | | | |
| | Julian Schmidt | Natürlich funktioniert das nicht. Val() konvertiert nur eine Zeichenkette zu einer Zahl. Du könntest das so lösen, das du eine Zählervariable erstelltst. Und jede Rechen- Operation direkt auf diese Variable ausführst. Beim drücken der Ergebnis-Taste kannst du dann die Variable ausgeben und zurücksetzten.
Alternativ wäre die Lösung mit einem Parser möglich. |
| | | | |
| | 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 ▲ |
| |
|
AntwortenThemenoptionen | 18.177 Betrachtungen |
ThemeninformationenDieses Thema hat 4 Teilnehmer: |