Autor Beitrag
24karatboy
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 110

Win XP
Delphi (Delphi Win32)
BeitragVerfasst: Mi 27.06.07 10:53 
ich habe einen rechner mit einem edit und die zahlen werden über buttons eingegeben. Wenn ich auf + drücke speichert er zwischen und wenn ich auf = drücke nimmt der das was zwischengespeichert ist und das was im edit steht und macht halt die operation die er soll.

Nun hab ich ein zweites edit eingebaut in der man die rechen operationen sehen kann z.b wenn jemand 12+5 gerechnet hat steht oben 12+5 und unten 17 so wenn ich jetzt aber wieder *3 drücke steht oben 12 + 5 * 3 und unten 51 und das ist ja eigentlich falsch weil eigentlich wäre ja 27 richtig.

Eventuell hat jemand da schonmal sowas in der richtung gemacht oder kann mir sagen wie ich das clever machen kann mit einklammern oder so.

danke

mfg thomas
JüTho
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2021
Erhaltene Danke: 6

Win XP Prof
C# 2.0 (#D für NET 2.0, dazu Firebird); früher Delphi 5 und Delphi 2005 Pro
BeitragVerfasst: Mi 27.06.07 11:05 
Suche einmal nach Math Parser; da bekommst Du eine Reihe von Diskussionen. Ich bin sicher, dass auch etwas für Dich dabei ist. Jürgen
24karatboy Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 110

Win XP
Delphi (Delphi Win32)
BeitragVerfasst: Mi 27.06.07 11:10 
ja aber den math parser will ich nicht unbedingt benutzen kann ja wohl nicht so schwer sein zu sagen wenn (x-y)*3 dann erstmal x-y und dann *3 oder ?
24karatboy Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 110

Win XP
Delphi (Delphi Win32)
BeitragVerfasst: Mi 27.06.07 13:32 
anscheinend scheint es doch ein wenig komplexer zu sein als ich dachte ...
JüTho
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2021
Erhaltene Danke: 6

Win XP Prof
C# 2.0 (#D für NET 2.0, dazu Firebird); früher Delphi 5 und Delphi 2005 Pro
BeitragVerfasst: Do 28.06.07 07:51 
user profile icon24karatboy hat folgendes geschrieben:
anscheinend scheint es doch ein wenig komplexer zu sein als ich dachte ...

Zumindest stecken eine Reihe von Problemen darin. Meine Empfehlung sollte bedeuten, dass in einem der anderen Beiträge Ideen genannt sein dürften, von denen Du Dich inspirieren lassen könntest.

Ich habe so etwas noch nie gemacht (ich würde vorhandene Lösungen vorziehen), würde aber etwa so vorgehen:
  1. Unzulässige Zeichen im Ausgangsstring entfernen: Leerzeichen, Buchstaben usw.
  2. Potenzen nicht durch **, sondern einheitlich durch ^ darstellen (Suchen und Ersetzen)
  3. Dezimaltrenner vereinheitlichen durch Punkt
  4. Erzeuge aus dem String ein String-Array mit der String.Split-Methode (Char[]), das alle Zahlen-Strings enthält.
  5. Erzeuge parallel ein Char-Array (mit String.IndexOf), das die Rechenzeichen nach jeder Zahl enthält.
  6. Erzeuge ein Zahlen-Array (double - mit der Gefahr von Rundungsfehlern - oder decimal) und trage zu jedem Zahlen-String durch TryParse den Zahlen-Wert ein.
  7. Suche im Zeichen-Array eine Potenz, berechne Zahl1 hoch Zahl2, trage das Ergebnis statt Zahl1 ein und lösche das Potenz-Zeichen sowie Zahl2. Wiederhole das für alle Potenzen.
  8. Bearbeite in gleicher Weise die Punkt-Rechnungen Multiplikation, Division und modulo.
  9. Bearbeite in gleicher Weise die Strich-Rechnungen Addition und Subtraktion.

Wenn ich von Array gesprochen habe, empfehle ich List<T>; dann sind die Standardmaßnahmen Add, Remove usw. schon vorbereitet.

Viel Erfolg! Jürgen