![]() |
Re: Taschenrechner - String durchsuchen
Liste der Anhänge anzeigen (Anzahl: 1)
Ah ich verzweifel grade wieder...
Bin jetzt soweit dass ich bei dem * angelangt bin. Aber irgendwie komm ich nicht weiter... der Taschenrechner soll ja dann halt abwarten was nach dem * eingegeben wird weil das ja vor dem + gerechnet werden muss.. Vielleicht hat ja einer Zeit und Lust mal rüberzugucken. Danke schonmal :) Tobias |
Re: Taschenrechner - String durchsuchen
"ganz einfach"
- du zerlegst den String erstmal in seine Einzelteile (Zahlen und Operatoren) - dann löst du nach und nach die Operatoren auf (also natürlich zuerst die * und danach erst die + ) - zum Auflösen jeweils "Zahl Operator Zahl" suchen dieses ausrechnen und gegen das Ergebnis austauschen |
Re: Taschenrechner - String durchsuchen
Dazu müsst ich ja das ganze meines wissens nach in nen Array schreiben (bei PHP zumindest).. leider haben wir noch nicht gelernt wie wir das mit Delphi machen in der Schule, sondern verändern nur die Eigenschaften von Labels und so..
|
Re: Taschenrechner - String durchsuchen
Du brauchst nicht unbedingt ein Array.
Eine TStringList ist da eh einfacher zu verwalten. Wie du den String zerlegst hast du ja schon. Nun brauchst du einfach nur den String zerlegen und erstmal in eine Stringliste einfügen (.Add). |
Re: Taschenrechner - String durchsuchen
also wenn ich zB
5+2-4*2+5 habe dann such ich also zuerst mit pos() nach dem * und müsste dann ja ne 6 zurückerhalten. aber woher weiß ich wieweit ich vor und zurückgehen muss? |
Re: Taschenrechner - String durchsuchen
Liste der Anhänge anzeigen (Anzahl: 1)
So ich hab mal fast den Ganzen Taschenrechner umgeschrieben :coder:
Weil sei mir net böse aber mit deinem Prinzip klappt das so nicht (soll net böse gemeint sein sondern nur eine feststellung :zwinker: ) Hab auch ein paar Kommentare dazugeschrieben. Ich schätze mal so müsstest du es hinbekommen ihn zu vervollständigen Hab jetzt als Beispiel mit +,-,* und / und mit Kommas auch getestet. Er errechnet es mir richtig. Hoffe du verstehst wie das Prinzip von mir ist. |
Re: Taschenrechner - String durchsuchen
Woah, um ehrlich zu sein seh ich da garnicht durch mit der Liste und so, denke das ist auch noch zu hoch für das Niveau wie wir den Taschenrechner machen sollen, weil wir haben ja mit Delphi grade erst angefangen.
Danke schonmal für die Hilfe, aber so kann ich das denk ich schlecht machen, weil wir ja soweit noch nicht sind =/ Muss ich wohl weiter mit meinem rumprobieren EDIT://
Delphi-Quellcode:
Habe jetzt das Problem dass wenn er im neo.caption nen '-' drin zu stehen hat, er irgendwas rechnet, aber nicht das was er soll... z.B. bei 5+5+5+5+5-6*3*(an der stelle bekommt er 126 raus und nicht 7 wie er eigentlich sollte).
if neo.caption = '*'
then begin ne.caption := floattostr(strtofloat(ne.caption)*strtofloat(display.text)); display.text := '0'; neo.caption := '*'; end else begin if nz1.caption = '' then begin nz1.Caption := display.text; no1.caption := '*'; display.text := '0'; end else begin nz2.caption := display.text; no2.caption := '*'; punkt.caption := floattostr(strtofloat(nz1.caption)*strtofloat(nz2.caption)); if neo.caption = '+' then begin ne.caption := floattostr(strtofloat(ne.caption)+strtofloat(punkt.caption)); nz1.caption := ''; nz2.caption := ''; no1.caption := ''; no2.caption := ''; neo.caption := '*'; end; if neo.caption = '-' then begin ne.caption := floattostr(strtofloat(ne.caption)-strtofloat(punkt.caption)); nz1.caption := ''; nz2.caption := ''; no1.caption := ''; no2.caption := ''; neo.caption := '*'; end; if neo.caption = '*' then begin ne.caption := floattostr(strtofloat(ne.caption)*strtofloat(punkt.caption)); nz1.caption := ''; nz2.caption := ''; no1.caption := ''; no2.caption := ''; neo.caption := '*'; end end end end; Find meinen Fehler aber nicht :( |
Re: Taschenrechner - String durchsuchen
Aso.....ups... :mrgreen:
Okay. Also ich hab durchgeschaut und ein Taschenrechner hört sich leicht an, aber in dem Umfang find ich ist es sehr sehr schwer mit einfachen Dingen wie Labeln. Ansteller meiner Liste kannste auch ein Memo benutzen und dan per Lines machen. Ist das gleiche Prinzip. Nur musste das die Codezeilen mit Assigned und Create von der Liste rausnehemn, da es sonst zu Fehlern kommt. :zwinker: Und nur mit If-Anweisungen oder so (weis net ob ihr while-Schleifen schon habt) wird es noch schwerer meiner Meinung nach. Aber IndexOf gibt es auch bei Memo.Lines :zwinker: Ist genau das gleiche. Meiner Meinung nach geht es ohne eine Schleife überhaupt nicht. Da man erstens, das stimmt mit einer Liste arbeiten muss und zweitens jeden Eintrag druchgehen muss und mit einer for..to..do Schleife wird es glaub ich auch schlecht funktionieren. Meiner Meinung nach kannst du dir ja das mal aufheben..vieleicht verstehst du dan später was ich gemacht hab und hilft dir dan später bei anderen Projekten :mrgreen: :zwinker: EDIT: Du warst schneller, ändert aber im Prinzip nichts an meine Antwort :mrgreen: |
Re: Taschenrechner - String durchsuchen
Vielleicht kannst du aber den Fehler in meinem Code finden :P
Also If-Schleifen sind die einzigen die wir bisher hatten. While und for schleifen kenn ich aber aus PHP und die werden denk ich in Delphi nicht groß anders sein. IndexOf sagt mir jetzt garnichts... Mit Memos haben wir auch noch nicht gearbeitet. |
Re: Taschenrechner - String durchsuchen
Noch ein Hinweis: Im Gegensatz zu PHP beginnt in Delphi die Zeichenzählung in einem String nicht mit 0, sondern mit 1. :zwinker:
Die Lösung, das ganze rekursiv zu machen, ist auf gar keinen Fall optimal, aber am einfachsten. Ich verweise mal hierauf: ![]() Und auch in Delphi kannst du ein einzelnes Zeichen mit s[i] auslesen, aber wie gesagt, Zählung beginnt bei 1. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 00:33 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz