Szukaj…


Wprowadzenie

Standardowe pakiety Ady zapewniają wyjście wszystkich typów liczbowych. Format wyjściowy można dostosować na wiele sposobów.

Uwagi

Zwróć uwagę, że za każdym razem, gdy generyczny pakiet jest tworzony za pomocą typu numerycznego. Ponadto dla całej instancji należy ustawić zarówno wartości domyślne, jak i sposoby zastąpienia Width , powiedzmy, podczas wywoływania opcji Put pomocą tego parametru.

Drukuj liczby całkowite, obficie wykorzystując spację

Instancje Integer_IO mają zmienną ustawień Default_Width która będzie przyjmować liczbę znaków, które przyjmie każdy numer wyjściowy.

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;

Wynik

    -1000000
     -500000
           0
      500000

Drukuj liczby całkowite, używając podstawy 16 (szesnastkowy)

Zmienna ustawień Default_Base jest ustawiana na instancji Ada.Text_IO.Integer_IO ; ponadto Default_Width jest ustawiony tak, że dane wyjściowe nie mogą mieć wiodącej przestrzeni.

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;

Wynik

-16#F4240#
-16#7A120#
16#0#
16#7A120#

Wydrukuj dziesiętne stałe numery punktów, czyli pieniądze

Ada.Text_IO.Editing oferuje formatowanie dziesiętnych wartości stałych punktów za pomocą „ciągów obrazów”. Opisują one wyniki za pomocą „magicznych” znaków dla separatorów, znaków walutowych itp.

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;

Wynik

BANANA       |  CHF     1'919.40 
ORANGE       |  CHF    11'951.00 
PEAR         | (CHF     2'100.00)

Drukuj wiele elementów w jednym wierszu

Połącz instancje pakietów _IO , użyj właściwego z typem liczbowym.

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;

Wynik

BANANA       |    27420
ORANGE       |   140600
PEAR         |   -10000


Modified text is an extract of the original Stack Overflow Documentation
Licencjonowany na podstawie CC BY-SA 3.0
Nie związany z Stack Overflow