Руководство по Ada 2012
G.1.3 Ввод-вывод комплексных чисел
Обобщенный пакет Text_IO.Complex_IO определяет процедуры для форматированного ввода-вывода значений комплексных чисел. Обобщенным фактическим параметром при инстанцировании Text_IO.Complex_IO является экземпляр Numerics.Generic_Complex_Types для некоторого подтипа с плавающей точкой. Исключениевые ситуации сообщаются путем поднятия соответствующего исключения, определенного в Text_IO.
Статическая семантика
Обобщенный пакет библиотек Text_IO.Complex_IO имеет следующее объявление:
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
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;
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);
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);
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);
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;
Пакет библиотек Complex_Text_IO определяет те же подпрограммы, что и Text_IO.Complex_IO, за исключением того, что предопределенный тип Float систематически заменяется на Real, а тип Numerics.Complex_Types.Complex — на Complex на всем протяжении. Аналогичным образом определены необобщенные эквиваленты Text_IO.Complex_IO, соответствующие каждому из других предопределенных типов с плавающей точкой, с именами Short_Complex_Text_IO, Long_Complex_Text_IO и т. д.
Семантика процедур Get и Put следующая:
procedure Get (File : in File_Type;
Item : out Complex;
Width : in Field := 0);
procedure Get (Item : out Complex;
Width : in Field := 0);
Item : out Complex;
Width : in Field := 0);
procedure Get (Item : out Complex;
Width : in Field := 0);
Последовательность ввода представляет собой пару, необязательно со знаком, вещественных литералов, представляющих действительную и мнимую составляющие комплексного значения. Эти компоненты имеют формат, определенный для соответствующей процедуры Get экземпляра Text_IO.Float_IO (см. A.10.9) для базового подтипа Complex_Types.Real. Пару компонентов можно разделить запятой или заключить в скобки, или и то, и другое. Пробелы разрешены перед каждым из компонентов и перед скобками и запятой, если они используются. Если значение параметра Width равно нулю, то
разделители строк и страниц также разрешены в этих местах;
компоненты должны быть разделены как минимум одним пробелом или разделителем строк, если запятая опущена; и
чтение прекращается при чтении правой скобки, если последовательность ввода включает левую скобку, или при чтении мнимого компонента в противном случае.
Если значение Width отлично от нуля, то
компоненты должны быть разделены как минимум одним пробелом, если запятая опущена; и
читаются ровно Width символов или символы (возможно, ни одного) до разделителя строк, в зависимости от того, что произойдет раньше (пробелы учитываются в подсчете).
Возвращает в параметре Item значение типа Complex, соответствующее последовательности ввода.
Исключение Text_IO.Data_Error поднимается, если последовательность ввода не имеет требуемого синтаксиса или если компоненты полученного значения комплексного числа не являются базовым подтипом Complex_Types.Real.
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);
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);
Выводит значение параметра Item в виде пары десятичных литералов, представляющих действительную и мнимую составляющие комплексного значения, используя синтаксис агрегата. Более конкретно,
выводит левую скобку;
выводит значение действительной составляющей параметра Item с форматом, определенным соответствующей процедурой Put экземпляра Text_IO.Float_IO для базового подтипа Complex_Types.Real, используя заданные значения Fore, Aft и Exp;
выводит запятую;
выводит значение мнимой составляющей параметра Item с форматом, определенным соответствующей процедурой Put экземпляра Text_IO.Float_IO для базового подтипа Complex_Types.Real, используя заданные значения Fore, Aft и Exp;
выводит правую скобку.
procedure Get (From : in String;
Item : out Complex;
Last : out Positive);
Item : out Complex;
Last : out Positive);
Читает комплексное значение с начала заданной строки, следуя тому же правилу, что и процедура Get, которая считывает комплексное значение из файла, но рассматривает конец строки как разделитель файла. Возвращает в параметре Item значение типа Complex, соответствующее последовательности ввода. Возвращает в Last значение индекса, такое что From(Last) — это последний прочитанный символ.
Исключение Text_IO.Data_Error поднимается, если последовательность ввода не имеет требуемого синтаксиса или если компоненты полученного значения комплексного числа не являются базовым подтипом Complex_Types.Real.
procedure Put (To : out String;
Item : in Complex;
Aft : in Field := Default_Aft;
Exp : in Field := Default_Exp);
Item : in Complex;
Aft : in Field := Default_Aft;
Exp : in Field := Default_Exp);
Выводит значение параметра Item в заданную строку в виде пары десятичных литералов, представляющих действительную и мнимую составляющие комплексного значения, используя синтаксис агрегата. Более конкретно,
левая скобка, действительная составляющая и запятая выравниваются слева в заданной строке, при этом действительная составляющая имеет формат, определенный процедурой Put (для вывода в файл) экземпляра Text_IO.Float_IO для базового подтипа Complex_Types.Real, используя значение нуля для Fore и заданные значения Aft и Exp;
мнимая составляющая и правая скобка выравниваются справа в заданной строке, при этом мнимая составляющая имеет формат, определенный процедурой Put (для вывода в файл) экземпляра Text_IO.Float_IO для базового подтипа Complex_Types.Real, используя значение Fore, которое полностью заполняет оставшуюся часть строки, вместе с заданными значениями Aft и Exp.
Исключение Text_IO.Layout_Error поднимается, если заданная строка слишком коротка для размещения форматированного вывода.
Реализационные разрешения
Другие исключения, объявленные (путем переименования) в Text_IO, могут быть подняты предшествующими процедурами в соответствующих обстоятельствах, как и для соответствующих процедур Text_IO.Float_IO.