AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Parser Kommarechnung

Ein Thema von Delphi-Narr · begonnen am 4. Sep 2010 · letzter Beitrag vom 5. Sep 2010
 
Namenloser

Registriert seit: 7. Jun 2006
Ort: Karlsruhe
3.724 Beiträge
 
FreePascal / Lazarus
 
#8

AW: Parser Kommarechnung

  Alt 4. Sep 2010, 20:17
Versuch mal, alzaimars Code nachzuvollziehen. Die Potenzen steigen in unserem Dezimalsystem von rechts nach links jeweils um eins an:
Code:
1. Stelle vor dem Komma: 10^0 = __1
2. Stelle vor dem Komma: 10^1 = _10
3. Stelle vor dem Komma: 10^2 = 100
(_ = Leerzeichen, aus irgendeinem Grund bleibt hier ja der Whitespace leider nicht mehr erhalten...)
usw...
D.h., man muss die Ziffer an der jeweilgen Position immer mit der jeiligen Zehner-Potenz, der Wertigkeit, multiplizieren, um den Wert zu erhalten. Deshalb funktioniert es bei von links nach rechts eingelesenen Ganzzahlen, einfach immer den alten Wert mit 10 zu multiplizieren und die aktuelle Ziffer zu addieren. So macht es auch der originale Algorithmus.

Hinter dem Komma ist es eben genau umgekehrt:
Code:
1. Stelle nach dem Komma: 10^-1 = 0.1
2. Stelle nach dem Komma: 10^-2 = 0.01
3. Stelle nach dem Komma: 10^-3 = 0.001
usw...
Hier braucht man allerdings eine zusätzliche Variable, die die Potenz speichert: Dafür ist bei Alzaimars Code die Variavble decimal zuständig, die für jede Ziffer nach dem Komma mit 10 multipliziert wird. Die neue Ziffer wird dann durch diesen Wert geteilt und zum vorigen Wert hinzuaddiert. Der Initialwert ist logischerweise 10, weil die erste Stelle nach dem Komma die Wertigkeit 1/10 hat (10^-1).

Dieser Wert wird initialisiert, sobald das erste mal ein Komma auftritt:
Delphi-Quellcode:
        '.': if decimal>0 then
               raise Exception.Create('invalid decimal')
            else
               decimal := 10;
Die Prüfung auf decimal>0 ist deshalb vorhanden, weil sonst mehrere Kommata pro zahl vorkommen dürften, was natürlich sinnlos wäre. Lange Rede kurz: Der Algorithmus geht von einem mit 0 initialisierten Wert aus.

Da hättest du mit ein paar Sekunden Analyse aber auch drauf kommen können...
  Mit Zitat antworten Zitat
 


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:21 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