ada
Вывод чисел
Поиск…
Вступление
Стандартные пакеты Ada обеспечивают вывод всех числовых типов. Формат вывода можно настроить разными способами.
замечания
Обратите внимание, как каждый раз, когда общий пакет создается с помощью числового типа. Кроме того, для всего экземпляра установлены оба значения по умолчанию, а также способы переопределения Width , например, при вызове Put с этим параметром.
Печатать целые числа, щедро используя пространство
Экземпляры Integer_IO имеют переменную настроек Default_Width которая Integer_IO содержать количество символов, каждое из которых будет выводиться.
with Ada.Text_IO; use Ada.Text_IO;
procedure Print_Integer is
subtype Count is Integer range -1_000_000 .. 1_000_000;
package Count_IO is new Integer_IO (Count);
X : Count;
begin
Count_IO.Default_Width := 12;
X := Count'First;
while X < Count'Last loop
Count_IO.Put (X);
Count_IO.Put (X + 1);
New_Line;
X := X + 500_000;
end loop;
end Print_Integer;
Результат
-1000000
-500000
0
500000
Цели печати, используя базу 16 (шестнадцатеричный)
Переменная настроек Default_Base устанавливается в экземпляре Ada.Text_IO.Integer_IO ; Кроме того, Default_Width устанавливается так, что вывод не может иметь ведущее пространство.
with Ada.Text_IO; use Ada.Text_IO;
procedure Print_Hex is
subtype Count is Integer range -1_000_000 .. 1_000_000;
package Count_IO is new Integer_IO (Count);
X : Count;
begin
Count_IO.Default_Width := 1;
Count_IO.Default_Base := 16;
X := Count'First;
while X < Count'Last loop
Count_IO.Put (X);
New_Line;
X := X + 500_000;
end loop;
end Print_Hex;
Результат
-16#F4240#
-16#7A120#
16#0#
16#7A120#
Печать десятичных чисел с фиксированной точкой, иначе
Ada.Text_IO.Editing предлагает форматирование десятичных значений фиксированной точки с использованием «строк изображения». Они описывают вывод с использованием «магических» символов для разделителей, знаков валюты и т. Д.
with Ada.Text_IO.Editing; use Ada.Text_IO;
procedure Print_Value is
Max_Count : constant := 1_000_000;
type Fruit is (Banana, Orange, Pear);
subtype Count is Integer range -Max_Count .. +Max_Count;
type Money is delta 0.001 digits 10;
package Fruit_IO is new Enumeration_IO (Fruit);
package Money_IO is new Editing.Decimal_Output
(Money,
Default_Currency => "CHF",
Default_Separator => ''');
Inventory : constant array (Fruit) of Count :=
(Banana => +27_420,
Orange => +140_600,
Pear => -10_000);
Price_List : constant array (Fruit) of Money :=
(Banana => 0.07,
Orange => 0.085,
Pear => 0.21);
Format : constant Editing.Picture :=
Editing.To_Picture ("<###BZ_ZZZ_ZZ9.99>");
begin
Fruit_IO.Default_Width := 12;
for F in Inventory'Range loop
Fruit_IO.Put (F);
Put (" | ");
Money_IO.Put (Item => Inventory (F) * Price_List (F),
Pic => Format);
New_Line;
end loop;
end Print_Value;
Результат
BANANA | CHF 1'919.40
ORANGE | CHF 11'951.00
PEAR | (CHF 2'100.00)
Печать нескольких элементов на одной линии
Объедините экземпляры пакетов _IO , используйте правильный номер с его числовым типом.
with Ada.Text_IO; use Ada.Text_IO;
procedure Print_Inventory is
type Fruit is (Banana, Orange, Pear);
subtype Count is Integer range -1_000_000 .. 1_000_000;
package Fruit_IO is new Enumeration_IO (Fruit);
package Count_IO is new Integer_IO (Count);
Inventory : constant array (Fruit) of Count :=
(Banana => 27_420,
Orange => 140_600,
Pear => -10_000);
begin
Fruit_IO.Default_Width := 12;
for F in Inventory'Range loop
Fruit_IO.Put (F);
Put (" | ");
Count_IO.Put (Inventory (F));
New_Line;
end loop;
end Print_Inventory;
Результат
BANANA | 27420
ORANGE | 140600
PEAR | -10000