11. Anlage
 
zurück
11.7.1.3 Text_IO.Complex_IO


Dieses Paket enthält Routinen, um komplexe Zahlen in (aus) Dateien zu schreiben (lesen), sowie komplexe Zahlen in (aus) Zeichenketten zu wandeln (berechnen).

Das generische Kindpaket "Text_IO.Complex_IO" wird wie folgt deklariert:

with Ada.Numerics.Generic_Complex_Types;
generic
   with package Complex_Types is new Ada.Numerics.Generic_Complex_Types (<>);
package Ada.Text_IO.Complex_IO is
   use Complex_Types;

   Default_Fore : Field := 2;
   Default_Aft : Field := Real'Digits - 1;
   Default_Exp : Field := 3;

   procedure Get ( File : in File_Type;
                   Item : out Complex;
                   Width : in Field := 0);
   procedure Get ( Item : out Complex; Width : in Field := 0);

   procedure Put ( File : in File_Type;
                   Item : in Complex;
                   Fore : in Field := Default_Fore;
                   Aft : in Field := Default_Aft;
                   Exp : in Field := Default_Exp);
   procedure Put ( Item : in Complex;
                   Fore : in Field := Default_Fore;
                   Aft : in Field := Default_Aft;
                   Exp : in Field := Default_Exp);

   procedure Get ( From : in String;
                   Item : out Complex;
                   Last : out Positive);
   procedure Put ( To : out String;
                   Item : in Complex;
                   Aft : in Field := Default_Aft;
                   Exp : in Field := Default_Exp);
end Ada.Text_IO.Complex_IO;

Die zur Verfügung gestellten Prozeduren lesen (schreiben) die geeignet getrennten Teile von komplexen Zahlen aus (in) Dateien oder lesen diese als Eingabe von der Tastatur bzw. schreiben diese auf den Bildschirm.

Die Bedeutung der Parameter zur Steuerung der Ausgabe, wie "Fore", "Aft" oder "Exp", werden in der Beschreibung zu "Text_IO" in Anlage A erklärt. Für eine Instanz des generischen Pakets "Complex_IO" können die voreingestellten Werte verändert werden.
Beispiel:

type real_type is new float;
package complex_types is new ada.numerics.generic_complex_types( real_type );
package complex_io is new ada.text_io.complex_io( complex_types );

-- Änderung der Voreinstellung der Vorkommastellen
complex_io.default_fore := 5;


Es gibt zwei Prozeduren "Put" zum Schreiben von komplexen Zahlen. Eine schreibt die komplexe Zahl auf den Bildschirm, die zweite in eine Datei und daher hat diese auch einen zusätzlichen Parameter, den Dateizeiger.
Beispiel:

procedure Put ( File : in File_Type;
                Item : in Complex;
                Fore : in Field := Default_Fore;
                Aft : in Field := Default_Aft;
                Exp : in Field := Default_Exp);
procedure Put ( Item : in Complex;
                Fore : in Field := Default_Fore;
                Aft : in Field := Default_Aft;
                Exp : in Field := Default_Exp);

Die Ausgabe enthält nicht nur zwei Gleitpunktzahlen, den reellen und imaginären Anteil der komplexen Zahl, sondern zusätzliche Zeichen, die diese beiden Zahlen separieren und als ein Zahlenpaar kennzeichnen. Die Ausgabe ist durch folgende nacheinander ausgeführten fünf Schritte charakterisiert:

1. Eine öffnende Klammer wird ausgegeben.
2. Der reelle Anteil der komplexen Zahl wird ausgegeben. Das Format des reelle Anteils entspricht dem Format, mit dem dieser Anteil als     Gleitpunktzahl durch eine Instanz von "Text_IO.Float_IO" zu "Complex_Types.Real" mittels "Put" ausgegeben würde unter     entsprechender Berücksichtigung der Parameter "Fore", "Aft" und "Exp".
3. Ein Komma wird ausgegeben.
4. Der imaginäre Anteil der komplexen Zahl wird ausgegeben. Das Format korrespondiert mit der Aussage zu "der reelle Anteil".
5. Eine schließende Klammer wird ausgegeben.

Beispiel:

   type real_type is new float;
   package complex_types is new ada.numerics.generic_complex_types( real_type );
   package complex_io is new ada.text_io.complex_io( complex_types );

   w : complex_types.complex := ( 0.5, 1.0 );
begin
   complex_io.put( item => w, aft => 5 );
   -- Erzeugt folgende Ausgabe: (-5.0000E-01, 1.00000E+00)
   -- Voreinstellung: Default_Fore : Field := 2;
   -- Default_Exp : Field := 3;

Es gibt zwei Prozeduren "Get" zum Lesen von komplexen Zahlen. Eine liest die komplexe Zahl als
Eingabe von der Tastatur, die zweite aus einer Datei und daher hat diese auch einen zusätzlichen
Parameter, den Dateizeiger. Beide können komplexe Zahlen lesen, wie sie mit "Put" erzeugt wurden. Dabei sind folgende Veränderungen ohne Einfluß:
  • Leerzeichen, Zeilen- oder Seitenumbrüche zwischen der öffnenden Klammer und dem reellen Anteil bzw. zwischen dem imaginären Anteil und der schließenden Klammer.
  • Bei fehlendem Komma muß mindestens ein Leerzeichen oder ein Zeilenumbruch den reellen Anteil vom imaginären Anteil trennen.
  • Bei fehlender öffnender Klammer wird auch keine schließende Klammer erwartet. Das Lesen wird nach dem imaginären Anteil beendet.
Beispiel:

procedure Get ( File : in File_Type;
                Item : out Complex;
                Width : in Field := 0);
procedure Get ( Item : out Complex;
                Width : in Field := 0);
Zwei Besonderheiten sind zu beachten, wenn der Parameter "Width" ungleich null ist:
  • Fehlt das trennende Komma, so müssen die beiden Anteile mindestens durch ein Leerzeichen getrennt sein.
  • Es werden genau "Width"-viele Zeichen gelesen oder bis zum Zeilenende, je nachdem, welche Bedingung zuerst eintrifft.
    Dabei werden Leerzeichen mitgezählt.
Die Ausnahme "Text_IO.Data_Error" wird beim Lesen ausgelöst, wenn entweder der reelle bzw. imaginäre Anteil nicht ein Untertyp von "Complex_Types.Real" ist oder die gelesene Zeichenkette nicht die (oben beschriebene) geforderte Syntax aufweist.

Es gibt zwei Prozeduren, um aus einer Zeichenkette eine komplexe Zahl zu lesen bzw. in eine zu schreiben.

Beispiel:

procedure Get ( from : in String;
                Item : out Complex;
                Last : out Positive );

procedure Put ( to : out String;
                Item : in Complex;
                Aft : in Field := Default_Aft;
                Exp : in Field := Default_Exp);


Der Parameter "Last" der Prozedur "Get" liefert den Index des letzten gelesenen Zeichens. Stimmt der reelle bzw. der imaginäre Anteil nicht mit einem Untertyp von "Complex_Types.Real" überein oder ist die Syntax der Zeichenkette nicht die, wie sie für "Put" auf eine Datei oben beschrieben wurde, so wird die Ausnahme "Text_IO.Data_Error" ausgelöst. Ist der durch den Parameter "to" der Prozedur "Put" reservierte Platz zu klein, um die komplexe Zahl samt den zusätzlichen Zeichen aufzunehmen, so wird die Ausnahme "Text_IO.Layout_Error" ausgelöst.

Dieses Kindpaket definiert keine Ausnahme, sondern verwendet geeignete aus "Text_IO", wie "Data_Error" (Prozeduren "Get") und "Layout_Error" (Prozedur "Put" für Zeichenketten).


 
zurück
 Index   Ada Tour - Dokumentation  
© 2003 Förderverein Ada Deutschland e.V.