Autor |
Beitrag |
safak67
Hält's aus hier
Beiträge: 8
|
Verfasst: Fr 05.06.09 10:14
Ich soll für mein Taschenrechner ein Parser schreiben(programmieren). Ich habe aber keine Ahnung wie das geht, wenn mir jemand helfen könnte wäre das cool.. Ich bin noch ein Noob was programmieren angeht aber ich muss das machen. wenn einer vllt ein beispiel quelltext hat oder wäre das gut.. der rechner soll z.B 5+4*2+4-3 rechnen können.
|
|
jaenicke
Beiträge: 19276
Erhaltene Danke: 1741
W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: Fr 05.06.09 10:25
Zum Thema Parser gibt es ja schon einige Beiträge. Am besten ist es vermutlich, wenn du einfach erst einmal die Priorität der Rechenzeichen ignorierst. Dann kannst du einfach von vorne nach hinten zeichenweise durchgehen und bei einem Rechenzeichen die letzte Zahl entsprechend auslesen und verrechnen.
Das heißt, wenn du an den Operator kommst, nimmst du die Zahl davor und rechnest damit weiter.
Eins muss ich dazu aber doch noch sagen: Bevor das einen Sinn hat, solltest du deinen bisherigen Quelltext wirklich komplett verstanden haben. Sonst brauchst du gar nicht erst anfangen, dann wird das nur ein Herumraten.
Wenn dir da also etwas noch nicht klar sein sollte (und davon gehe ich nach deinen bisherigen Posts eigentlich sicher aus), dann frag in deinen Threads dazu erst einmal nach und wage dich dann an einen Parser...
|
|
zuma
Beiträge: 660
Erhaltene Danke: 21
Win XP, Win7, Win 8
D7 Enterprise, Delphi XE, Interbase (5 - XE)
|
Verfasst: Fr 05.06.09 10:31
gemeint ist bestimmt, das du die Eingabe '5+4*2+4-3', die du als String bekommst, zerlegst und die einzelnen Zeichen auswertest. Also, was ist eine Zahl, was ein Operator.
Dazu kannst du den String Zeichenweise abklappern und dir dann die Zahlen und die Operatoren daraus in lokalen Variablen merken. wenn du alles 'geparst' hast, brauchst du 'nur' noch mit den Zahlen zu rechnen.
Beispiele für einen Taschenrechner findest du hier sicher genug, wenn du mal die SuFu benutzt.
@Jaenicke: Sicher hast du recht, aber als noob muss er nicht sofort perfekten Code schreiben, eine 'tut erstmal'-Lösung wird ihm mehr helfen, evtl. Freude am Programmieren zu bekommen. Wenn er die erstmal hat, wird er sich auch von alleine tiefer in die Materie 'einwühlen'.
_________________ Ich habe nichts gegen Fremde. Aber diese Fremden sind nicht von hier! (Methusalix)
Warum sich Sorgen ums Leben machen? Keiner überlebts!
|
|
safak67
Hält's aus hier
Beiträge: 8
|
Verfasst: Fr 05.06.09 11:29
Hi also Beispiele für ein Taschenrechner habe gefunden, aber leider kein Beispiel von einem Parser. Also ich hab schon was zusammengebau aber der ist nicht ganz vollständig und fehlerhaft..
|
|
ffgorcky
Beiträge: 573
WIN XP/2000 & 7Prof (Familie:Win95,Win98)
|
Verfasst: Fr 05.06.09 18:34
Also ich denke, dass das Ganze für eine einfache, einzeilige Aufgabe doch in etwa so gehen müsste:
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37:
| function IsInt(Check: String): Boolean; begin try StrToInt(Check); Result := True; except Result := False; end; end;
function endwertLinearBerechnen(Rechenaufgabe:String):Integer; var momentaneZahl:string; ersterWert:bool; rechenArt, momentanerWert, vorherigerWert:Integer;begin ersterWert:=true; zahl1:=0; for i:=0 to Length(Rechenaufgabe)-1 do begin if isInt(Rechenaufgabe[i]) then if ersterWert then momentaneZahl:=momentaneZahl+Rechenaufgabe[i]; else begin vorherigerWert:=momentanerWert; momentanerWert:=StrToInt(momentaneZahl); momentaneZahl:=''; case Rechenaufgabe[i] of '/':rechenArt:=3 'x':rechenArt:=2 '+':rechenArt:=1 '-':rechenArt:=0 end; ersterWert:=false; end; end; end; |
Wobei da ja immer die Frage ist, ob Du linear rechnen willst oder Punkt-vor-Strichrechnung beachten möchtest, was mit meinem Ansatz so (noch?) nicht geht...
...und Kommas kennt der auch noch nicht!
Ist aber noch in Bearbeitung! - Muss nur jetzt erst mal essen gehen!
- oder hilft Dir das schon weiter?
Ach vergiss meine Möglichkeit hier am besten wieder ganz!
Ich steige da im Moment leider nach meinem Abendbrot selber schon nicht mehr durch!
- Was natürlich auch an meinem am 23.7.2006 (durch Motorradunfall) abhanden gekommenden Kurzzeitgedächtnis liegen kann!...
Zuletzt bearbeitet von ffgorcky am Fr 05.06.09 19:39, insgesamt 2-mal bearbeitet
|
|
alzaimar
Beiträge: 2889
Erhaltene Danke: 13
W2000, XP
D6E, BDS2006A, DevExpress
|
Verfasst: Fr 05.06.09 18:46
Ohne Punkt-Vor-Strich-Rechnung ist das doch sinnlos. Ein Parser, der die Grundrechenarten beherrscht, ist nicht trivial. Ich hätte mir sowas als Anfänger nicht zugetraut.
_________________ Na denn, dann. Bis dann, denn.
|
|
ffgorcky
Beiträge: 573
WIN XP/2000 & 7Prof (Familie:Win95,Win98)
|
Verfasst: Fr 05.06.09 19:54
Ich habe mir zwar das Thema 92686 noch nicht durchgelesen, aber der Titel klingt doch recht vielversprechend!
|
|
Tropby
Beiträge: 71
Erhaltene Danke: 4
Vista, Win XP, Win 89
Turbo Delphi Ex.
|
Verfasst: Fr 05.06.09 19:58
safak67 ist in beiden Themen der ersteller. Also denke ich, dass das andere Thema nicht die Lösung bietet.
EDIT:
Ich habe hier irgendwo einen Praser für soetwas liegen. Er ist zwar aus den anfängen meiner Programmierung aber er geht (so einiger maßen). Wenn ich den finde o.O dann kann ich den vielleicht nachher mal hochladen... Nur selber machen solltest du das ja schon ^^
_________________ Tropby
|
|
Jakob_Ullmann
Beiträge: 1747
Erhaltene Danke: 15
Win 7, *Ubuntu GNU/Linux*
*Anjuta* (C, C++, Python), Geany (Vala), Lazarus (Pascal), Eclipse (Java)
|
Verfasst: Fr 05.06.09 20:13
Ein Beispiel für nen Parser gibt's hier: delphi.zsg-rottenburg.de/parser.html. Ist auch alles schön erklärt. Ich bin mir allerdings nicht sicher, ob Rekursion für nen Anfänger das richtige Thema ist...
|
|
jaenicke
Beiträge: 19276
Erhaltene Danke: 1741
W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: Sa 06.06.09 00:27
Da das hier noch nicht verlinkt ist, hier gibts u.a. auch noch nen (langen) Crosspost zu dem Taschenrechner, da gehts mittlerweile um ein ähnliches Thema:
www.delphipraxis.net/topic159067.html
|
|
ffgorcky
Beiträge: 573
WIN XP/2000 & 7Prof (Familie:Win95,Win98)
|
Verfasst: Sa 06.06.09 09:08
Da wird wohl bei beiden safak67 der gleiche Ersteller sein.
Solch ein Name fiele mir zumindest nicht so schnell ein...
Es wäre also schön, wenn er auf das Thema als Crosspost verwiesen hätte!
|
|