B - 3 Informatique (Programmation)

B-3-1 Q :Que fait cette procédure ?
Cette procédure est en Delphi, variante de Pascal, mais son code est très proche du Basic.

procedure Calculer (v1,v2,v3,v4,v5,v6,v7 : Integer; var r1 : Int64);

const t1 : array [1..12] of Integer = (31,28,31,30,31,30,31,31,30,31,30,31);

t2 : array [1..12] of Integer = (31,29,31,30,31,30,31,31,30,31,30,31);

var l1 : Integer;

function f(a : Integer): Boolean;

var l1 : Boolean;

begin

 if a mod 100 = 0 then

  l1 := (a div 100) mod 4 = 0

 else

  l1 := a mod 4 = 0;

 f := l1;

end; { f }

begin

 r1 := 86400 - v1 - 60 * (v2 + 60 * v3);

 if f(v6) then

  r1 := r1 + 86400 * (t2[v5] - v4)

 else

  r1 := r1 + 86400 * (t1[v5] - v4);

 if (v5 = 1) and f(v6) then

  r1 := r1 + 28944000

 else

 for l1 := v5 + 1 to 12 do

  r1 := r1 + 86400 * t1[l1];

 for l1 := v6 + 1 to v7 do

  if f(l1) then r1 := r1 + 31622400

  else r1 := r1 + 31536000;

end; { calculer }

 

Allez, c'est l'affaire de quelques instants !

Attention, la précision sera un élément très important pour la correction.

Réponse : Cette procédure calcule, à la seconde près, le nombre de secondes restant à courir entre l'instant défini par les six paramètres :
(laSeconde, laMinute, lHeure, leJour, leMois, lAnnee) soit (v1, ..., v6) et la fin de l'année définie par le septième paramètre
DerAnnee soit v7.
Le résultat est retourné par le huitième paramètre (variable) LeTotal soit r1.
La fonction f dit si l'année courante est bissextile.

Référence : challenge 2000...

Retour au sommaire

(ref : page 15)

11.06.2001