PROGRAMME 8 : Course de ski (II)
On désire contrôler par ordinateur l'affichage
d'une course de ski. Ecrire l'algorithme et le programme Pascal qui après chaque arrivée
d'un concurrent affiche le classement partiel sous la forme :<---10----> <------20-----------><-4-> <----14------> ***************************************************** *Classement* Nom Du Concurrent *Pays* Temps * * * * * * * * * * Mn Sec Ct * ***************************************************** * * * * * * 1 * ? ? ? * ? * ? ? ? * * * * * * ***************************************************** * * * * * Remarques : 1) A chaque arrivée, il faudra insérer le concurrent à la place correspondante au classement fait sur le temps de parcours. 2) description des données : Pays BB nom et prénom BBMnScCs 3) L'affichage se fera sur imprimante suivant le format ci-dessus. Chaque tableau sera imprimé au milieu d'une page du listing. 4 Le jeu d'essai comportera 10 concurrents, on n'oubliera pas de traiter les ex-aequos. |
Le programme
PROGRAM Ski1;
TYPE Typ = RECORD
Nom , Pays : STRING;
Temps : INTEGER
END;
VAR Mm, Ss, Cc : INTEGER;
Trouv : BOOLEAN;
T, I, J, K, N, Nbr : INTEGER;
Pays, Nom : STRING;
Fdon, Fsort : TEXT;
Tab : ARRAY[1..10] OF Typ;
PROCEDURE Entete;
BEGIN
WRITELN(Fsort);
WRITELN(Fsort);
WRITELN(Fsort,'*****************************************************');
WRITELN(Fsort,'*Classement* Nom Du Concurrent *Pays*
Temps *');
WRITELN(Fsort,'*
*
* *
*');
WRITELN(Fsort,'*
*
* * Mn Sec Ct *');
WRITELN(Fsort,'*****************************************************');
END;
PROCEDURE Ligne ( Rang : INTEGER; Pays,Nom : STRING; Mm,
Ss, Cc : INTEGER);
BEGIN
WRITELN(Fsort,'*
*
* *
*');
WRITELN(Fsort,'* ',Rang:4,'*':4, Nom:15,'*',
Pays:4,'*',Mm:4,' ',
Ss:4,' ',Cc:4,'*');
WRITELN(Fsort,'*
*
* *
*');
WRITELN(Fsort,'*****************************************************');
END;
PROCEDURE Lire(VAR Pays,Nom : STRING; VAR Mm, Ss, Cc :INTEGER);
VAR J : INTEGER;
M1, M2, S1, S2, C1, C2, C : CHAR;
BEGIN
Pays:='';FOR J:=1 TO 4 DO BEGIN READ(Fdon, C);Pays:= Pays+C
END;
FOR J:=1 TO 2 DO READ(Fdon,C);
Nom:='';FOR J:=1 TO 20 DO BEGIN READ(Fdon, C);Nom := Nom+C
END;
FOR J:=1 TO 2 DO READ(Fdon, C);
READ(Fdon,M1);READ(Fdon,M2);
Mm := (ORD(M2)-48) + (ORD(M1)-48)*10;
READ(Fdon,S1);READ(Fdon,S2);
Ss := ORD(S2)-48 + (ORD(S1)-48)*10;
READ(Fdon,C1);READLN(Fdon,C2);
Cc := ORD(C2)-48 + (ORD(C1)-48)*10;
END;
{Initialisation}
BEGIN
ASSIGN(Fdon,'D_ski1.Pas');
ASSIGN(Fsort,'R_ski1.Pas');
RESET(Fdon);
REWRITE(Fsort);
READLN(Fdon,N);
WRITELN(Fsort, 'Nombre de concurrents : ', N);
Nbr := 0;
FOR I:=1 TO N DO
BEGIN
Lire(Pays, Nom, Mm, Ss, Cc);
T := (60*Mm + Ss)*100 + Cc;
J:= 1; Trouv := FALSE;
WHILE ( J <= Nbr) AND (NOT Trouv) DO
IF Tab(.J.).Temps >= T
THEN Trouv
:= TRUE
ELSE J := J
+ 1;
IF Trouv
THEN
FOR K:=Nbr DOWNTO J DO
Tab(.K+1.) := Tab(.K.);
Tab(.J.).Temps := T;
Tab(.J.).Nom := Nom;
Tab(.J.).Pays := Pays;
Nbr := Nbr + 1;
WRITELN(Fsort);
WRITELN(Fsort, ' >>> Classement
après le concurrent ', I);
WRITELN(Fsort);
Entete;
FOR K := 1 TO Nbr DO
BEGIN
T :=
Tab(.K.).Temps;
Ss := T DIV 100;
Cc := T - 100*Ss;
Mm := Ss DIV 60;
Ss := Ss - 60*Mm;
Nom :=
Tab(.K.).Nom;
Pays :=
Tab(.K.).Pays;
Ligne(K, Pays,
Nom, Mm, Ss, Cc)
END
END;
CLOSE(Fsort)
END.
Les données
Contenu du fichier D_Ski1.Pas
4
ALGE Hakima
014579
GERM Rachida
025480
URSS Hakim
015987
BRES Fairouz
013410
Les résultats
Contenu du fichier R_Ski1.Pas
Nombre de concurrents : 4
>>> Classement après le concurrent 1 ***************************************************** *Classement* Nom Du Concurrent *Pays* Temps * * * * * * * * * * Mn Sec Ct * ***************************************************** * * * * * * 1 * Hakima *ALGE* 1 45 79* * * * * * *****************************************************
>>> Classement après le concurrent 2 ***************************************************** *Classement* Nom Du Concurrent *Pays* Temps * * * * * * * * * * Mn Sec Ct * ***************************************************** * * * * * * 1 * Hakima *ALGE* 1 45 79* * * * * * ***************************************************** * * * * * * 2 * Rachida *GERM* 2 54 80* * * * * * *****************************************************
>>> Classement après le concurrent 3
***************************************************** *Classement* Nom Du Concurrent *Pays* Temps * * * * * * * * * * Mn Sec Ct * ***************************************************** * * * * * * 1 * Hakima *ALGE* 1 45 79* * * * * * ***************************************************** * * * * * * 2 * Hakim *URSS* 1 59 87* * * * * * ***************************************************** * * * * * * 3 * Rachida *GERM* 2 54 80* * * * * * *****************************************************
>>> Classement après le concurrent 4
***************************************************** *Classement* Nom Du Concurrent *Pays* Temps * * * * * * * * * * Mn Sec Ct * ***************************************************** * * * * * * 1 * Fairouz *BRES* 1 34 10* * * * * * ***************************************************** * * * * * * 2 * Hakima *ALGE* 1 45 79* * * * * * ***************************************************** * * * * * * 3 * Hakim *URSS* 1 59 87* * * * * * ***************************************************** * * * * * * 4 * Rachida *GERM* 2 54 80* * * * * * *****************************************************