AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Sonstige Fragen zu Delphi Delphi Matheparser: Schleifenproblem bei Kommata
Thema durchsuchen
Ansicht
Themen-Optionen

Matheparser: Schleifenproblem bei Kommata

Ein Thema von Nils_13 · begonnen am 30. Jul 2007 · letzter Beitrag vom 30. Jul 2007
Antwort Antwort
Nils_13

Registriert seit: 15. Nov 2004
2.647 Beiträge
 
#1

Matheparser: Schleifenproblem bei Kommata

  Alt 30. Jul 2007, 08:48
Hi,

mein kleiner Matheparser macht mir beim Komma Ärger: Bei der Rechnung 1,5*2.3 verwandelt er
1
,
5
zu zu 1,5. Allerdings geschieht dies nicht bei 2.3. Warum ? Mir ist nur aufgefallen, dass ich die Arraygröße verändere und die Schleife deshalb vlt. schon früher zu Ende ist, aber falls das überhaupt Auswirkungen hat, wie könnte man dann das Problem lösen ?

Delphi-Quellcode:
function Split(s : String) : TDynTokArray; // Ein Array für die Klasse TToken, spielt allerdings keine großartige Rolle hierbei; Split teilt, wie der Name schon sagt, alles in Tokens auf. Dennoch muss eine Kommazahl in einem Eintrag statt in 3 Einträgen stehen.
begin
  ...
  for i := 0 to High(Result) do
  begin
    if (Result[i].Val = ',') or (Result[i].Val = '.') then // der Punkt wird hier abgefragt, also ist hier nicht die Fehlerquelle
    begin
      Result[i-1].Val := Result[i-1].Val + Result[i].Val + Result[i+1].Val; // Zusammensetzen
      for j := i to High(Result) do // der Rest im Array verschoben werden
        Result[j] := Result[j+1];
      SetLength(Result, High(Result)); // der unnötige Rest, welcher sogar noch Fehler verursachen würde, wird gelöscht
    end;
  end;
  ...
end;
  Mit Zitat antworten Zitat
Benutzerbild von sirius
sirius

Registriert seit: 3. Jan 2007
Ort: Dresden
3.443 Beiträge
 
Delphi 7 Enterprise
 
#2

Re: Matheparser: Schleifenproblem bei Kommata

  Alt 30. Jul 2007, 08:58
Den . <-- , Fehler sehe ich hier auch nicht.

Aber :
1. Musst du das Array nicht um 2 Plätze verschieben?
2. Was passiert wenn ich den Ausdruck ".5*10" eingebe?
Dieser Beitrag ist für Jugendliche unter 18 Jahren nicht geeignet.
  Mit Zitat antworten Zitat
Christian Seehase
(Co-Admin)

Registriert seit: 29. Mai 2002
Ort: Hamburg
11.105 Beiträge
 
Delphi 11 Alexandria
 
#3

Re: Matheparser: Schleifenproblem bei Kommata

  Alt 30. Jul 2007, 10:24
Moin Nils,

Zitat von Nils_13:
wie könnte man dann das Problem lösen ?
Indem Du die Routine umbaust, mit der Du Deine Token erkennst

Üblicherweise wird ein Token möglichst lang erzeugt, dass heisst:
Solange für einen erkannten möglichen Tokentyp Zeichen folgen, gehören die mit zum aktuellen Token.
Beispiel: Bezeichner.
Wenn für diese die Regel gilt:
Sie müssen mit _ oder Buchstabe anfangen, und dürfen ansonsten _, Buchstaben oder Ziffern enthalten, so müsste man beim Erkennen eines _ oder Buchstaben anschliessend alle Zeichen als Tokenattribut übernehmen, bis ein Zeichen ungleich _, Buchstabe, Ziffer auftritt.

Ein ähnliches Vorgehen gilt dann auch bei Zahlen.
(Annahmen:
Eine Zahl muss mit einer Ziffer beginnen oder enden, obwohl auch ein . bzw. , am Anfang oder Ende denkbar wäre.
Es werden keine Exponenten verwendet)

Man trifft auf eine Ziffer:
Jetzt wird solange durchgegangen, wie man eine Ziffer, ein . oder ein , findet.
Bei . oder , normalisiert man dass jetzt auf, z.B., .
Anschliessend geht man durch, bis man auf ein Zeichen ungleich Ziffer stösst.

Solche Sachen werden oft mit Hilfe von Bei Google suchenZustandsautomaten (bzw. DEA = Bei Google suchenDeterminierender Endlicher Automat) gelöst.
Klingt komplizierter als es ist.
Tschüss Chris
Die drei Feinde des Programmierers: Sonne, Frischluft und dieses unerträgliche Gebrüll der Vögel.
Der Klügere gibt solange nach bis er der Dumme ist
  Mit Zitat antworten Zitat
Reinhard Kern

Registriert seit: 22. Okt 2006
772 Beiträge
 
#4

Re: Matheparser: Schleifenproblem bei Kommata

  Alt 30. Jul 2007, 18:48
Zitat von Nils_13:
Hi,

mein kleiner Matheparser macht mir beim Komma Ärger: Bei der Rechnung 1,5*2.3 verwandelt er
...
[/delphi]
Hallo, schon die Aufgabenstellung ist inkorrekt: entweder heisst es 1,5 * 2,3 (hier) oder 1.5 * 2.3 (anderswo), üblicherweise richtet sich das nach den Ländereinstellungen. Wenn du das nicht in der korrekten Weise, sondern schlampig lösen willst, musst du zuerst Komma durch Punkt ersetzen.

Gruss Reinhard
  Mit Zitat antworten Zitat
pdug

Registriert seit: 18. Jul 2006
3 Beiträge
 
#5

Re: Matheparser: Schleifenproblem bei Kommata

  Alt 30. Jul 2007, 19:27
Hi.

schließe mich Reinhard und Christian an..

Nichts trennen, was zusammen gehört und nichts "rückwärts lesen" wie hier:
Delphi-Quellcode:
  for j := i to High(Result) do // der Rest im Array verschoben werden
        Result[j] := Result[j+1];
Guck mal hier in den Scanner:
http://wiki.delphigl.com/index.php/T...prachen_Teil_1

Und so machten es damals die Profis: http://www.246.dk/pascals.html
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 05:39 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz