Edit:
Nouvelle solution plus rapide.

aaaa : entier pour l'année
mm : entier pour le mois
jj : entier pour le jour

année bissextile:
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
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
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
}
Fonctionnement:
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
}