Edit:
Nouvelle solution plus rapide.
aaaa : entier pour l'année
mm : entier pour le mois
jj : entier pour le jour
année bissextile:
Maintenant, le code pour connaitre la date un nombre X de jours après (X peut être négatif).
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 si (mm =2) et (((aaaa mod 4=0) et (aaaa mod 100!=0)) ou aaaa mod 400=0) dire "L'année est bissextile" finsi
Fonctionnement:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47 fonction calcul_date(entier aaaa, entier mm, entier jj, entier X) { //aaaa : ans //mm : mois //jj : jours //X : nombres d'itérations //On convertit la date donnée en nb de jours depuis le jour 0 de l'an 0 entier tabmois[] <- {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31} si (aaaa mod 4=0 et aaaa mod 100!=0) ou aaaa mod 400=0 tabmois[1] = 29 finsi entier jourDeb <- 0 //Somme des ans et jours jourDeb <- entier(aaaa/400) * 146097 + entier((aaaa mod 400)/100) * 36524 + entier((aaaa mod 100) / 4) * 1461 + (aaaa mod 4) * 365 + jj //Somme des mois: peut se résumer en une ligne en formule math. avec signe somme pour i = 0, tant que i < mm, faire i++ jourDeb <- jourDeb + tab finpour //On ajoute le nombre de jour, positif ou négatif jourDeb <- jourDeb + X //On convertit en calendrier standard //Nombre d'années aaaa <- entier(jourDeb/146097) * 400 + entier((jourDeb mod 146097)/36524) * 100 + entier(((jourDeb mod 146097) mod 36524)/ 1461) * 4 + entier((((jourDeb mod 146097) mod 36524) mod 1461) mod 365) //nombre de jour dans mm et jj jj <- entier((((jourDeb mod 146097) mod 36524) mod 1461) mod 365) //On acheve jj et mm. On vérifie d'abord la bissextilité si (aaaa mod 4=0 et aaaa mod 100!=0) ou aaaa mod 400=0 tabmois[1] = 29 sinon tabmois[1] = 28 finsi pour i = 0, tant que jj > tabMois[i], faire i++ mm++ jj <- jj - tabmois[i] finpour }
Convertit la date en nombre de jours depuis le Jour 0, ajoute ou retrait le nombre de jours voulu, convertit le nombre de jours en date (d'après l'idée de souviron34).
Sans commentaires:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30 fonction calcul_date(entier aaaa, entier mm, entier jj, entier X) { entier tabmois[] <- {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31} si (aaaa mod 4=0 et aaaa mod 100!=0) ou aaaa mod 400=0 tabmois[1] = 29 entier jourDeb <- 0 jourDeb <- entier(aaaa/400) * 146097 + entier((aaaa mod 400)/100) * 36524 + entier((aaaa mod 100) / 4) * 1461 + (aaaa mod 4) * 365 + jj pour i = 0, tant que i < mm, faire i++ jourDeb <- jourDeb + tab jourDeb <- jourDeb + X aaaa <- entier(jourDeb/146097) * 400 + entier((jourDeb mod 146097)/36524) * 100 + entier(((jourDeb mod 146097) mod 36524)/ 1461) * 4 + entier((((jourDeb mod 146097) mod 36524) mod 1461) mod 365) jj <- entier((((jourDeb mod 146097) mod 36524) mod 1461) mod 365) si (aaaa mod 4=0 et aaaa mod 100!=0) ou aaaa mod 400=0 tabmois[1] = 29 sinon tabmois[1] = 28 pour i = 0, tant que jj > tabMois[i], faire i++ mm++ jj <- jj - tabmois[i] finpour }
Partager