PROGRAMME 3 : Course
de SKI ( I )
Pendant une course de SKI, on a relevé après un
essai les temps mis par N concurrents. On désire, après avoir mis les informations sur
fichier, obtenir d'abord le tableau d'affichage des temps mis par les N concurrents,
puis le tableau d'affichage concernant uniquement les trois premiers. Les Données sur fichier ont la forme suivante : 1ère ligne : Nombre de concurrents sur 3 positions Col 1 à 4 : Numéro du concurrent Le tableau d'affichage aura la forme suivante : *----------*---------------*--------------* * * * * * Numero * Nom * Temps * * * *----*----*----* * * *-Mm-*-Ss-*-Cc-* *----------*---------------*----*----*----* * * * * * * * 234 * Hakim * 22* 33* 89* * * * * * * *----------*---------------*--------------* * * * * * * * 567 * Fairouz * 21* 56* 23* * * * * * * *----------*---------------*--------------* * * * * * * * Etc Ecrire l'algorithme et le Programme PASCAL correspondant. |
Le programme
PROGRAM Ski;
VAR
Mm, Ss, Cc : LONGINT;
M1, M2, S1, S2, C1, C2, C : CHAR;
T1, T2, T3, T : LONGINT;
I, J, N : INTEGER;
Num1, Num2, Num3, Num : STRING;
Nom1, Nom2, Nom3, Nom : STRING;
Fdon, Fsort : TEXT;
PROCEDURE Entete;
BEGIN
WRITELN(Fsort,'*----------*---------------*--------------*');
WRITELN(Fsort,'*
*
*
*');
WRITELN(Fsort,'* Numero *
Nom * Temps
*');
WRITELN(Fsort,'*
*
*----*----*----*');
WRITELN(Fsort,'*
*
*-Mm-*-Ss-*-Cc-*');
WRITELN(Fsort,'*----------*---------------*----*----*----*');
END;
PROCEDURE Ligne ( Num, Nom : STRING; Mm, Ss, Cc :
INTEGER);
BEGIN
WRITELN(Fsort,'*
*
*
* * *');
WRITELN(Fsort,'*',Num:10,'*', Nom:15,'*',
Mm:4,'*',Ss:4,'*',Cc:4,'*');
WRITELN(Fsort,'*
*
*
* * *');
WRITELN(Fsort,'*----------*---------------*--------------*');
END;
BEGIN
ASSIGN(Fdon,'D_ski.Pas');
ASSIGN(Fsort,'R_ski.Pas');
RESET(Fdon);
REWRITE(Fsort);
READLN(Fdon,N);
WRITELN(Fsort, 'Nombre de concurrents : ', N);
Entete;
T1:= 300000; T2:=300000; T3 := 300000;
Num1:=''; Num2:=''; Num3 := '';
Nom1:=''; Nom2:=''; Nom3 := '';
FOR I:=1 TO N DO
BEGIN
Num:='';
FOR J:=1 TO 4 DO
BEGIN READ(Fdon, C);Num := Num+C
END;
FOR J:=1 TO 7 DO READ(Fdon,C);
Nom:='';
FOR J:=1 TO 8 DO
BEGIN READ(Fdon, C);Nom := Nom+C
END;
FOR J:=1 TO 10 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;
Ligne( Num, Nom, Mm, Ss, Cc);
T:= (60*Mm + Ss)*100 + Cc;
{ C'est le temps exprimé en Cc }
IF T < T1
THEN
BEGIN
T3 := T2; num3 := Num2; nom3 := Nom2;
T2 := T1; num2 := Num1; nom2 := Nom1;
T1 := T; num1 := Num; nom1 := Nom;
END
ELSE
IF T < T2
THEN
BEGIN
T3 :=
T2;Num3 := Num2; nom3 := Nom2;
T2 := T;Num2 := Num; nom2 := Nom;
END
ELSE
IF T < T3
THEN
BEGIN
T3 := T; Num3 := Num; Nom3 := Nom
END
END;
{ Ecriture des trois premiers}
WRITELN(Fsort);
WRITELN(Fsort);
WRITELN(Fsort, 'Les trois premiers : ');
Entete;
Ss := T1 DIV 100;
Cc := T1 - 100*Ss;
Mm := Ss DIV 60;
Ss := Ss - 60*Mm;
Ligne(Num1, Nom1, Mm, Ss, Cc);
Ss := T2 DIV 100;
Cc := T2 - 100*Ss;
Mm := Ss DIV 60;
Ss := Ss - 60*Mm;
Ligne(Num2, Nom2, Mm, Ss, Cc);
Ss := T3 DIV 100;
Cc := T3 - 100*Ss;
Mm := Ss DIV 60;
Ss := Ss - 60*Mm;
Ligne(Num3, Nom3, Mm, Ss, Cc);
CLOSE(Fsort)
END.
Les données
Fichier D_ski.pas
4
234 Hakim
223389
567 Fairouz
215623
6789 Rachida
241267
12 Hakima
232299
Les résultats
Fichier R_ski.pas Nombre de concurrents : 4 *----------*---------------*--------------* * * * * * Numéro * Nom * Temps * * * *----*----*----* * * *-Mm-*-Ss-*-Cc-* *----------*---------------*----*----*----* * * * * * * * 234 * Hakim * 22* 33* 89* * * * * * * *----------*---------------*--------------* * * * * * * * 567 * Fairouz * 21* 56* 23* * * * * * * *----------*---------------*--------------* * * * * * * * 6789* Rachida * 24* 12* 67* * * * * * * *----------*---------------*--------------* * * * * * * * 12 * Hakima * 23* 22* 99* * * * * * * *----------*---------------*--------------*
Les trois premiers : *----------*---------------*--------------* * * * * * Numéro * Nom * Temps * * * *----*----*----* * * *-Mm-*-Ss-*-Cc-* *----------*---------------*----*----*----* * * * * * * * 567 * Fairouz * 21* 56* 23* * * * * * * *----------*---------------*--------------* * * * * * * * 234 * Hakim * 22* 33* 89* * * * * * * *----------*---------------*--------------* * * * * * * * 12 * Hakima * 23* 22* 99* * * * * * * *----------*---------------*--------------*