§3 Zahleneingabe



« Textorientierte Zahlendarstellungen

Zu Zeiten der textorientierten Ein- und Ausgabe diente der Computer häufig zur Berechnung numerischer Probleme. Da die wissenschaftliche Darstellung von Zahlen jedoch auch auf vertikaler "Positionierung" von Ziffern beruht, war man gezwungen, eine textorientierte Notation von Zahlen zu "erfinden".
Im folgenden soll als Beispiel die Eingabe von "REAL"-Zahlen in PASCAL dienen.

« REAL-Zahlen in PASCAL

Eine REAL-Zahl hat einen ganzzahligen Teil, einen Nachkommateil und evtl. eine Zehnerpotenzdarstellung. Beispiele:
1.507E2 := 1,5 · 102
-0.007 := -0,007
-9,9999e-3 := -9,9999·10-3
3E-7 := 3·10-7
+5 := 5
Nicht erlaubt sind folgende Konstrukte: +.5 Fehlender ganzzahliger Teil.

« Ein Automat dazu

Der folgende Automat berücksichtigt alle oben angegebenen Prinzipien:

S und S' sind die Startzustände. G steht für Ganzzahl, N für Nachkomma und E für Exponent. Der Doppeltumrandete Zustand Z wird erreicht, wenn die entsprechende Eingabe akzeptiert wurde.
Die Eingabe von Zeichen, die im aktuellen Zustand nicht als Übergang vorhanden sind, führen zu einem Fehler.
Die entsprechende Tabelle:
 SS'GG'NEE'E''
0..9GGGNNE''E''E''
+,-S'FehlerFehlerFehlerFehlerE'FehlerFehler
e,EFehlerFehlerFehlerFehlerEFehlerFehlerFehler
Ret,SpcFehlerFehlerZFehlerZFehlerFehlerZ

« Umsetzung in Pascal

Eine Möglichkeit, einen Automat in PASCAL zu codieren ist die verschachtelte Auswahl in einer Schleife:

repeat

  c := GetKey;

  case state of

    0 : case c of

          '0'..'9' : state := 1

          '+','-'  : state := 2

          else       state := -2

        end;

    1 : case c of

        end;

    2 : case c of

        end;

  end;

  Writeln( 'Zustand ', state );

until state < 0;