Delphi-PRAXiS
Seite 3 von 4     123 4      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Taschenrechner - String durchsuchen (https://www.delphipraxis.net/148363-taschenrechner-string-durchsuchen.html)

Speedi2000 1. Mär 2010 15:17

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

himitsu 1. Mär 2010 15:22

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

Speedi2000 1. Mär 2010 16:28

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..

himitsu 1. Mär 2010 16:40

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).

Speedi2000 1. Mär 2010 16:48

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?

NickelM 1. Mär 2010 17:18

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.

Speedi2000 1. Mär 2010 17:28

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:
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;
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).

Find meinen Fehler aber nicht :(

NickelM 1. Mär 2010 17:42

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:

Speedi2000 1. Mär 2010 17:44

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.

Jakob Ullmann 1. Mär 2010 17:45

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: http://delphi.zsg-rottenburg.de/parser.html

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.
Seite 3 von 4     123 4      

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