Ricerca…


introduzione

I pacchetti standard di Ada forniscono l'output di tutti i tipi numerici. Il formato di output può essere regolato in molti modi.

Osservazioni

Nota come ogni volta che un pacchetto generico viene istanziato con un tipo numerico. Inoltre, ci sono entrambi i valori di default da impostare per l'intera istanza, e anche i modi per sovrascrivere la Width , ad esempio, quando si chiama Put con questo parametro.

Stampa interi, generosamente usando lo spazio

Le istanze di Integer_IO hanno una variabile di impostazione Default_Width che prende il numero di caratteri che ciascun numero di uscita impiega.

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;

Risultato

    -1000000
     -500000
           0
      500000

Stampa numeri interi, utilizzando la base 16 (esadecimale)

Una variabile di impostazioni Default_Base è impostata Ada.Text_IO.Integer_IO di Ada.Text_IO.Integer_IO ; inoltre, Default_Width è impostato in modo che l'output non possa avere spazio iniziale.

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;

Risultato

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

Stampa numeri decimali a virgola fissa, ovvero denaro

Ada.Text_IO.Editing offre la formattazione di valori decimali a virgola fissa usando "stringhe di immagini". Questi descrivono l'output usando caratteri "magici" per separatori, segni di valuta, ecc.

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;

Risultato

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

Stampa più elementi su un'unica riga

Combina le istanze dei pacchetti _IO , usa quella giusta con il suo tipo numerico.

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;

Risultato

BANANA       |    27420
ORANGE       |   140600
PEAR         |   -10000


Modified text is an extract of the original Stack Overflow Documentation
Autorizzato sotto CC BY-SA 3.0
Non affiliato con Stack Overflow