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.