structure date { jour, mois, annee: entier } fonction testDates(E d1,d2: date): entier { si (d1. annee < d2. annee) alors retourner 1 sinon si (d1. annee > d2. annee) alors retourner -1 sinon si (d1. mois < d2. mois) alors retourner 1 // sinon : égalité des années sinon si (d1. mois > d2. mois) alors retourner -1 sinon si (d1. jour < d2. jour) alors retourner 1 // sinon : égalité des mois sinon si (d1. jour > d2. jour) alors retourner -1 sinon retourner 0 // sinon : égalité des jours } procédure afficheDatesOrdre(E vd: tableau de date, E taille: entier) { variable tmp, min : date ind_min,i,j : entier Pour j allant de 0 à taille - 2 { min <-- vd[j] // on dit que c'est elle la plus petite date ind_min <-- j Pour i allant de j+1 à taille-1 { Si (testDates(min,vd[i])=-1) alors // On verifie s'il n'y a pas une date plus petite { min <-- vd[i] ind_min <-- i } } // A la fin de cette boucle on sait que dans min, il y a la date la plus petite de la partie explorée [j, ... , taille-1] Si ((ind_min)!=j) alors // ici on fait une permutatio { tmp <-- vd[j] vd[j]<--vd[ind_min] vd[ind_min]<--tmp } } Pour i allant de 0 à taille-1 { Afficher(vd[i].jour,"/",vd[i].mois,"/",vd[i].annee) } } // Pour rappel (à la fin du spectacle) fonction alea() : entier // [0,+infini[ a : entier a <-- alea() mod 2016 Algorithme Principal { constanste entier TAILLE <-- 10 variable td : tableau de TAILLE date // date td[TAILLE] en C++ i,nbj : entier // Génération aléatoire (c'est très beau à visiter) des dates Pour i allant de 0 à TAILLE - 1 { td[i].annee <-- alea() mod 2016 td[i].mois <-- 1 + alea() mod 12 Selon (td[i].mois) { 1,3,5,7,8,10,12: nbj<--31 4,6,9,11: nbj <-- 30 2: Si (td[i].annee mod 4 = 0) alors nbj <-- 29 sinon nbj <-- 28 } td[i].jour <-- 1 + alea() mod nbj } afficheDatesOrdre(td,TAILLE) }