Recherche…


Introduction

Les packages standard d'Ada permettent de générer tous les types numériques. Le format de sortie peut être ajusté de plusieurs manières.

Remarques

Notez comment chaque fois qu'un package générique est instancié avec un type numérique. En outre, il est possible de définir les deux valeurs par défaut pour l’instance entière et de modifier la Width , par exemple, lors de l’appel à Put avec ce paramètre.

Imprimer des entiers, en utilisant généreusement l'espace

Les instances de Integer_IO ont une variable de paramètres Default_Width dont le nombre de caractères que prendra chaque numéro de sortie.

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;

Résultat

    -1000000
     -500000
           0
      500000

Impression d'entiers à l'aide de la base 16 (hexadécimal)

Une variable de paramètres Default_Base est définie sur l'instance d' Ada.Text_IO.Integer_IO ; De plus, Default_Width est défini pour que la sortie ne puisse pas avoir d'espace de début.

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;

Résultat

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

Imprimer des nombres décimaux fixes, alias Money

Ada.Text_IO.Editing offre la mise en forme de valeurs décimales à l'aide de «chaînes d'images». Celles-ci décrivent la sortie en utilisant des caractères «magiques» pour les séparateurs, les signes monétaires, etc.

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;

Résultat

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

Imprimer plusieurs éléments sur une seule ligne

Combinez les instances des packages _IO , utilisez la bonne avec son type numérique.

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;

Résultat

BANANA       |    27420
ORANGE       |   140600
PEAR         |   -10000


Modified text is an extract of the original Stack Overflow Documentation
Sous licence CC BY-SA 3.0
Non affilié à Stack Overflow