1) Algorithme pour déterminer si l'année A est bissextile.
Si A n'est pas divisible par 4, l'année n'est pas bissextile.
Si A est divisible par 4, l'année est bissextile sauf si A est divisible
par 100 et pas par 400.
entier A
écrire "Introduisez l'année:"
lire A
si NOT (A mod 4=0) alors écrire "L'année ", A, "n'est pas bissextile."
sinon si NOT (A mod 100=0) alors écrire "L'année ", A, "est bissextile."
sinon si NOT (A mod 400=0) alors écrire "L'année ", A, "n'est pas bissextile."
sinon écrire "L'année ", A, "est bissextile."
fsi
fsi
fsi
PROGRAM Bissextile;
VAR A: WORD;
BEGIN
WRITELN('Année bissextile.');
WRITE('Introduisez l''année:');
READLN(A);
IF A MOD 4>0 THEN WRITELN('L''année ', A, ' n''est pas bissextile.')
ELSE IF A MOD 100>0 THEN WRITELN('L''année ', A, ' est bissextile.')
ELSE IF A MOD 400>0 THEN WRITELN('L''année ', A, ' n''est pas bissextile.')
ELSE WRITELN('L''année ', A, ' est bissextile.')
END.
entier A écrire "Introduisez l'année:" lire A si (A mod 4=0) et ((A mod 100>0) ou (A mod 400=0)) alors écrire "L'année ", A, "est bissextile." sinon écrire "L'année ", A, "n'est pas bissextile." fsi
PROGRAM Bissextile;
VAR A: WORD;
BEGIN
WRITELN('Année bissextile.');
WRITE('Introduisez l''année:');
READLN(A);
IF (A MOD 4=0) AND ((A MOD 100>0) OR (A MOD 400=0)) THEN WRITELN('L''année ', A, ' est bissextile.')
ELSE WRITELN('L''année ', A, ' n''est pas bissextile.')
END.
2) Algorithme pour déterminer le jour de la semaine correspondant à
une date (j/m/a).
Pour janvier et février, il faut augmenter m de 12 et diminuer a de 1.
Calculer s qui vaut la partie entière de a divisé par 100
JD = 1720996,5 - s + s \ 4 + [365,25*a] + [30,6001*(M+1)] + j
JD = JD - [JD/7]*7
JS = [JD] MOD 7
si JS = 0, le jour est mardi,
si JS = 1, le jour est mercredi,
....
si JS = 7, le jour est lundi.
entier j, m, a, s, JD, JS
écrire "Introduisez le jour (1-31)"
lire j
écrire "Introduisez le mois (1-12)"
lire m
écrire "Introduisez l'année (xxxx)"
lire a
si m<3 alors m <-- m + 12
a <-- a - 1
fsi
s <-- a \ 100
JD <-- 1720996,5 - s + s \ 4 + [365,25*a] + [30,6001*(M+1)] + j
JD <-- JD - [JD/7]*7
JS <-- [JD] mod 7
selon que
JS = 0 faire Dat <-- "mardi";
JS = 1 faire Dat <-- "mercredi";
JS = 2 faire Dat <-- "jeudi";
JS = 3 faire Dat <-- "vendredi";
JS = 4 faire Dat <-- "samedi";
JS = 5 faire Dat <-- "dimanche";
JS = 6 faire Dat <-- "lundi";
fselon
écrire "Le ", j, "/", m, "/", a, "est un ", Dat
PROGRAM Calendrier_Perpetuel;
VAR a,m,j,s,JS:WORD;
JD:REAL;
Dat:STRING;
BEGIN
WRITELN('Calendrier perpétuel.');
WRITE('Introduisez le jour (1-31)');
READLN(j);
WRITE('Introduisez le mois (1-12)');
READLN(m);
WRITE('Introduisez l''année (xxxx)');
READLN(a);
IF m<3 THEN BEGIN
DEC(a);
INC(m,12);
END;
s:=TRUNC(a/100);
JD:=1720996.5 - s + s DIV 4 + TRUNC(365.25*a) + TRUNC(30.6001*(M+1)) + j;
JD:=JD-TRUNC(JD/7)*7;
JS:=TRUNC(JD) MOD 7;
CASE JS OF
0: Dat:='mardi';
1: Dat:='mercredi';
2: Dat:='jeudi';
3: Dat:='vendredi';
4: Dat:='samedi';
5: Dat:='dimanche';
6: Dat:='lundi';
END;
WRITELN('Le ',j,'/',m,'/',a,' est un ',Dat);
END.
3) Algorithme pour déterminer la date du lundi de Pâques
pour l'année X.* appelons a le reste de la division de X par 19 * appelons b le résultat de la division entière de X par 100 * appelons c le reste de la division de X par 100 * appelons d le résultat de la division entière de b par 4 * appelons e le reste de la division de b par 4 * appelons f le résultat de la division entière de b+8 par 25 * appelons g le résultat de la division entière de b-f+1 par 3 * appelons h le reste de la division de 19a+b-d-g+15 par 30 * appelons i le résultat de la division entière de c par 4 * appelons k le reste de la division de c par 4 * appelons l le reste de la division de 32+2e+2i-h-k par 7 * appelons m le résultat de la division entière de a+11h+22l par 451 * appelons n le résultat de la division entière de h+l-7m+114 par 31 * appelons p le reste de la division de h+l-7m+114 par 31 * n est le numéro du mois et p+1 est le jour de Pâques
entier X, a, b, c, d, e, f, g, h, i, k, l, m, n, p écrire "Introduisez l'année:" lire X a <-- X mod 19 b <-- X \ 100 c <-- X mod 100 d <-- b \ 4 e <-- b mod 4 f <-- (b+8) \ 25 g <-- (b-f+1) \ 3 h <-- (19*a+b-d-g+15) mod 30 i <-- c \ 4 k <-- c mod 4 l <-- (32+2*e+2*i-h-k) mod 7 m <-- (a+11*h+22*l) \ 451 n <-- (h+l-7*m+114) \ 31 p <-- (h+l-7*m+114) mod 31 écrire "Le jour de Pâques est le", p+1, "-", n, "-", X
PROGRAM Paques;
VAR X, a, b, c, d, e, f, g, h, i, k, l, m, n, p: INTEGER;
BEGIN
WRITELN('Calcul de la date de Pâques.');
WRITE('Introduisez l''année:');
READLN(X);
a := X MOD 19;
b := X DIV 100;
c := X MOD 100;
d := b DIV 4;
e := b MOD 4;
f := (b+8) DIV 25;
g := (b-f+1) DIV 3;
h := (19*a+b-d-g+15) MOD 30;
i := c DIV 4;
k := c MOD 4;
l := (32+2*e+2*i-h-k) MOD 7;
m := (a+11*h+22*l) DIV 451;
n := (h+l-7*m+114) DIV 31;
p := (h+l-7*m+114) MOD 31;
WRITELN('Le jour de Pâques est le', p+1, '-', n, '-', X);
END.
4) Algorithme pour déterminer le jour de la semaine correspondant à
une date (j/m/a).Mémoriser dans A les 2 derniers chiffres de l'année Mémoriser dans B le résultat de la division entière de A par 4 Mémoriser dans C la valeur associée au mois dans la table ci-dessous Mémoriser dans D la valeur du jour de la date Mémoriser dans E le reste de la division entière de A + B + C + D par 7 Déterminer le jour de la semaine correspondant à E grâce à la table des jours
|
Table des mois |
|
Table des jours |
|
|
|
|
Dimanche=1 |
|
Janvier=1 (0 si bissextile) |
Juillet=0 |
|
Lundi=2 |
|
Février=4 (3 si bissextile) |
Août=3 |
|
Mardi=3 |
|
Mars=4 |
Septembre=6 |
|
Mercredi=4 |
|
Avril=0 |
Octobre=1 |
|
Jeudi=5 |
|
Mai=2 |
Novembre=4 |
|
Vendredi=6 |
|
Juin=5 |
Décembre=6 |
|
Samedi=0 |
PROGRAM Calendrier_Perpetuel;
VAR Annee,Mois,Jour,A,B,C,D,E:INTEGER;
Dat:STRING;
BEGIN
WRITE('Année:');READLN(Annee);
WRITE('Mois:');READLN(Mois);
WRITE('Jour:');READLN(Jour);
A:=Annee MOD 100;
B:=A DIV 4;
IF Mois IN [4,7] THEN C:=0
ELSE IF Mois=10 THEN C:=1
ELSE IF Mois=5 THEN C:=2
ELSE IF Mois=8 THEN C:=3
ELSE IF Mois IN [3,11] THEN C:=4
ELSE IF Mois=6 THEN C:=5
ELSE IF Mois IN [9,12] THEN C:=6
ELSE BEGIN
IF Mois=1 THEN C:=1
ELSE C:=4;
IF (Annee MOD 4=0) AND ((Annee MOD 100>0) OR (Annee MOD 400=0)) THEN C:=C-1
END;
D:=Jour;
E:=(A+B+C+D) MOD 7;
CASE E OF
0: Dat:='samedi';
1: Dat:='dimanche';
2: Dat:='lundi';
3: Dat:='mardi';
4: Dat:='mercredi';
5: Dat:='jeudi';
6: Dat:='vendredi';
END;
WRITELN('Le ',Jour,'/',Mois,'/',Annee,' est un ',Dat);
END.