Exercice 2

On souhaite gérer l'affichage de l'arrivée d'une course cycliste sur un panneau spécialisé. Les coureurs sont représentés par leur numéro de dossard. Seuls les 12 premiers coureurs
apparaissent sur ce panneau.

Question 1

Enonçé

Construire un programme qui enregistre l'arrivée d'une course cycliste par lecture au clavier du numéro de dossard de chacun des 12 premiers coureurs pour la diffusion aux media et
l'affichage.
L'affichage du panneau sera réalisé selon le modèle suivant :

      PLACE     DOSSARD
      1                 163
      2                 42
      3                 14
      etc...

La première colonne est alignée sur la colonne 5, la seconde sur la colonne 12.
Note : la diffusion aux media fera l'objet d'une évolution future du programme.

Travail demandé
 

  1. Compléter la spécification du problème
  2. Construire l'algorithme par raffinements successifs
  3. Coder l'algorithme en Ada.

 

Solution

Algorithme

-- niveau 1
-- On suppose que les numéros de dossard sont lus selon l'ordre d'arrivée des coureurs
début
    Lecture et mémorisation des numéros de dossards;
    Affichage des numéros de dossards;
fin;

-- niveau 2.1
-- Lecture et mémorisation des numéros de dossards;
début
repeter 12  fois
     afficher la chaine "Tapez le numéro de dossard du coureur arrivé";
     afficher sa place d'arrivée;
     lire et mémoriser le numéro de dossard;
fin repéter;
fin;

-- niveau 2.2
-- Affichage des numéros de dossards;
début
    Afficher la première ligne ("PLACE  DOSSARD");
    Passer à la ligne;
    repeter 12  fois
        placer le curseur sur la colonne 5;
        afficher la place d'arrivée du coureur (sur 2 caractères);
        placer le curseur sur la colonne 12;
        afficher son numéro de dossard (sur 2 caractères);
        passer à la ligne;
    fin repéter;
fin;

code Ada

with Ada.Text_io;
with Ada.Integer_Text_io;
procedure arrivee is
    type Course is array(1..12) of Natural;
     tableau:Course;
begin
-- Lecture des numéros de dossards;
    for i in tableau'range loop
         Ada.Text_io.put("Tapez le numero du coureur arrivé ");
         Ada.Integer_Text_io.put(i,width=>2);
         Ada.Text_io.put("ème : ");
         Ada.Integer_Text_io.get(tableau(i));
    end loop;
--
-- Affichage du nouveau tableau d'arrivee
--
Ada.Text_io.put(" PLACE ");
Ada.Text_io.put("  DOSSARD ");
Ada.Text_io.new_line;
for i in tableau'first..11 loop
     Ada.Text_io.set_col(5);
     Ada.Integer_Text_io.put(i,width=>2);
     Ada.Text_io.set_col(12);
     Ada.Integer_Text_io.put(tableau(i),width=>2);
     Ada.Text_io.new_line;
end loop;
end arrivee;