Question 2

Enoncé

Modifier ce programme de manière à prendre en compte la possibilité de déclasser un coureur parmi les
12, connaissant son numéro de dossard (lu au clavier). Le programme modifiera le panneau d'affichage en conséquence. Il ne contient
plus que les numéros de dossard des 11 premiers coureurs.
 

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 dossard des 12 premiers coureurs;
    Lire le numéro de dossard du coureur déclassé;
    Réactualisation du tableau d'arrivée;
    Affichage du nouveau tableau d'arrivée;
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
-- Lire le numéro de dossard du coureur déclassé;
début
    Affichage de la chaine "Tapez le numéro de dossard du coureur déclassé";
    Lire ce numéro de dossard;
    Sauter une ligne;
fin;

-- niveau 2.3
-- Réactualisation du tableau d'arrivée;
début
    Recherche de la place du coureur déclassé;
    Décalage des coureurs arrivés derrière dans le tableau d'arrivée;
fin;

-- niveau 2.4
-- Affichage du nouveau tableau d'arrivée;
début
    Afficher la première ligne ("PLACE  DOSSARD");
    passer à la ligne;
    repeter 11 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;

-- niveau 2.3.1
-- Recherche de la place du coureur déclassé;
début
    le coureur courant est le premier du tableau;
    tant que le numéro de dossard du coureur déclassé est différent du numéro de dossard du coureur courant faire
         passer au coureur suivant dans le tableau;
    fin tant que;
fin;

-- niveau 2.3.2
-- Décalage des coureurs arrivés derrière dans le tableau d'arrivée;
début
    pour chaque coureur en partant du successeur du coureur déclassé jusqu'au 12ème faire
         décaler le coureur d'une place vers l'avant;
    fin pour;
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:=(others=>0);
    declasse:Natural:=0;
begin
--
-- Lecture et mémorisation des numéros de dossard des 12 premiers coureurs;
--
    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;
--
-- Lire le numéro de dossard du coureur déclassé;
--
Ada.Text_io.put("Tapez le numero du coureur déclassé ");
Ada.Integer_Text_io.get(declasse);
Ada.Text_io.new_line;
--
-- Réactualisation du tableau d'arrivée
--
  -- Recherche de la place du coureur déclassé;
  --
declare
      i:Integer range 1..12:=1;
begin
      loop
      exit when declasse=tableau(i);
            i:=i+1;
      end loop;
  --
  -- Décalage des coureurs arrivés derrière dans le tableau d'arrivée;
  --
        for j in  i+1..12 loop
            tableau(j-1):=tableau(j);
        end loop;
end;
--
-- 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;


Dernière modification le / Last modified : Tuesday March 07 2000 14:43:48