• Aucun résultat trouvé

Lecture de nombres entiers ou réels

2.6 DIALOGUE PROGRAMME-UTILISATEUR 1 Motivation

2.6.2 Lecture de nombres entiers ou réels

DIALOGUE PROGRAMME-UTILISATEUR 43

quelques principes cités au paragraphe 2.6.1, le programme doit, dans l’ordre: • afficher un message clair à l’utilisateur pour lui indiquer ce qu’il doit faire; • attendre que l’utilisateur ait introduit la valeur;

• lire la valeur;

• vérifier la validité de la valeur obtenue (§ 6.3.5); • reprendre son exécution.

L’exemple 2.12 illustre l’utilisation des opérations d’entrées-sorties et réalise une ébauche de dialogue entre le programme et l’utilisateur. Il faut bien comprendre que ce dialogue obéit à un protocole fixé dans le programme et que l’utilisateur doit suivre.

Exemple 2.12 Ebauche de dialogue entre un programme et son utilisateur. with Ada.Text_IO;

with Ada.Integer_Text_IO; with Ada.Float_Text_IO;

-- Calcul du volume d'un mur de briques

procedure Ebauche_Dialogue is

-- Nombre de briques en longueur Longueur_Mur : Integer;

-- Nombre de briques en hauteur Hauteur_Mur : Integer;

-- Dimensions d'une brique Longueur_Brique : Float; Largeur_Brique : Float; Hauteur_Brique : Float; -- Volume du mur de briques Volume : Float; -- Autres declarations... ... begin -- Ebauche_Dialogue -- Presentation du programme... ...

-- Obtenir le nombre de briques formant le mur en longueur Ada.Text_IO.Put ( "Donnez le nombre de briques " );

Ada.Text_IO.Put ( "(longueur du mur): " ); Ada.Integer_Text_IO.Get ( Longueur_Mur );

-- Obtenir le nombre de briques formant le mur en hauteur Ada.Text_IO.Put ( "Donnez le nombre de briques " );

Ada.Text_IO.Put ( "(hauteur du mur): " ); Ada.Integer_Text_IO.Get ( Hauteur_Mur ); -- Obtenir les dimensions d'une brique

Ada.Text_IO.Put ( "Donnez les dimensions d'une brique. " ); Ada.Text_IO.Put ( "La longueur: " );

DIALOGUE PROGRAMME-UTILISATEUR 44

Ada.Float_Text_IO.Get ( Longueur_Brique ); Ada.Text_IO.Put ( "La largeur: " );

Ada.Float_Text_IO.Get ( Largeur_Brique ); Ada.Text_IO.Put ( "La hauteur: " );

Ada.Float_Text_IO.Get ( Hauteur_Brique ); -- Calcul du volume du mur

Volume := Longueur_Brique * Largeur_Brique * Hauteur_Brique * Float ( Longueur_Mur * Hauteur_Mur );

-- Montrer a l'utilisateur la valeur du volume du mur

Ada.Text_IO.Put ( " Le volume du mur de briques vaut : " ); Ada.Float_Text_IO.Put ( Volume );

Ada.Text_IO.New_Line; ...

end Ebauche_Dialogue;

Comment la lecture des dimensions d’une brique et du mur est-elle effectuée? L’exemple de la figure 2.3 va illustrer cette opération.

Figure 2.3 Lecture de valeurs données par l’utilisateur.

Après l’exécution de Ada.Float_Text_IO.Get(Longueur_Brique); la variable Longueur_Brique vaut 30.0, Largeur_Brique et Hauteur_Brique sont indéfinies.

Après l’exécution de Ada.Float_Text_IO.Get(Largeur_Brique); la variable Largeur_Brique vaut 20.0, Longueur_Brique garde sa valeur 30.0 et Hauteur_Brique est encore indéfinie.

Après l’exécution de Ada.Float_Text_IO.Get(Hauteur_Brique); la variable Hauteur_Brique vaut 15.5, Longueur_Brique et Largeur_Brique conservent leur valeur.

Les valeurs ont été lues par le programme en respectant l’ordre dans lequel elles

programme ce que l’utilisateur a donné

Ada.Float_Text_IO.Get(Longueur_Brique); Ada.Float_Text_IO.Get(Largeur_Brique); Ada.Float_Text_IO.Get(Hauteur_Brique);

DIALOGUE PROGRAMME-UTILISATEUR 45

ont été données par l’utilisateur. Par ailleurs, les nombres doivent être séparés par un (ou plusieurs) espace(s) ou par une (ou plusieurs) fin(s) de ligne. Finalement les espaces et les fins de lignes sont sautés (ignorés) lorsque le prochain nombre à lire est précédé de tels séparateurs.

Concernant l’écriture en Ada des instructions d’entrées-sorties, il faut remarquer la correspondance obligatoire entre le type de la variable et le nom du paquetage utilisé comme préfixe aux opérations Get et Put. Il serait en effet incorrect d’écrire l’une des instructions suivantes:

Ada.Float_Text_IO.Get (Longueur_Mur); Ada.Integer_Text_IO.Get (Longueur_Brique); Ada.Float_Text_IO.Put (Longueur_Mur); Ada.Integer_Text_IO.Put (Longueur_Brique); 2.6.3 Passage à la ligne lors de la lecture

Il existe des situations où il est nécessaire de sauter tout ce que l’utilisateur a tapé au clavier (§ 6.3.5 par exemple) jusqu’à la fin de la ligne. L’opération Skip_Line effectue cette tâche en lisant tous les caractères restants de la ligne et en les éliminant, y compris la fin de ligne (fig. 2.4).

Dans la pratique, l’utilisateur marque une fin de ligne en introduisant au clavier le caractère de contrôle de retour de chariot (§ 1.10.2).

Figure 2.4 Elimination de valeurs données par l’utilisateur.

Après l’exécution de Ada.Float_Text_IO.Get(Longueur_Brique); la variable Longueur_Brique vaut 30.0, Largeur_Brique et Hauteur_Brique sont indéfinies. Après l’exécution de l’instruction Ada.Text_IO.Skip_Line; le reste de la ligne a été sauté.

Après l’exécution de Ada.Float_Text_IO.Get(Largeur_Brique); la va- riable Largeur_Brique vaut 10.0, Longueur_Brique garde sa valeur 30.0 et

programme ce que l’utilisateur a donné

Ada.Float_Text_IO.Get(Longueur_Brique); Ada.Text_IO.Skip_Line; Ada.Float_Text_IO.Get(Largeur_Brique); 30.0 20.0 15.5 Ada.Text_IO.Skip_Line; Ada.Float_Text_IO.Get(Hauteur_Brique); 10.0 5.0 1.0

DIALOGUE PROGRAMME-UTILISATEUR 46

Hauteur_Brique est encore indéfinie. Après l’exécution de l’instruction Ada.Text_IO.Skip_Line; le reste de la ligne a été sauté.

Après l’exécution de Ada.Float_Text_IO.Get(Hauteur_Brique); la va- riable Hauteur_Brique vaut 5.0, Longueur_Brique et Largeur_Brique conservent leur valeur. Le nombre 1.0 subsiste pour une éventuelle future lecture. 2.6.4 Affichage de messages sur l’écran

Un programme bien conçu affiche toujours des messages à l’écran indiquant à l’utilisateur qu’il faut introduire une donnée, qu’une opération est terminée, etc. En Ada, ces messages sont en fait des constantes du type String (sect. 9.2) appelées chaînes de caractères et toujours écrites entre guillemets (exemple 2.13).

Exemple 2.13 Exemples de chaînes de caractères.

"ceci est une chaine de caracteres"

"Attention: si un guillemet doit etre place dans une chaine"

" de caracteres, il faut le dedoubler ainsi "" CQFD."

L’affichage d’un message sur l’écran, pour l’utilisateur, est maintenant facile:

Ada.Text_IO.Put ( "Donnez les dimensions d’une brique " );