Exercice 1
Ecrire l'agorithme de la fonction qui permet de calculer l'âge en années d'une personne, connaissant sa date de naissance et la date courante. Les dates sont représentées sous la forme de variables composites de 3 entiers.
fonction calculerAge (datenaiss : Date, dateauj : Date) : entier
début
si dateauj.mois > datenaiss.mois alors
age <- dateauj.annee - datenaiss.annee
sinon
si dateauj.mois < datenaiss.mois alors
age <- dateauj.annee - datenaiss.annee - 1
sinon si dateauj.jour => datenaiss.jour alors
age <- dateauj.annee - datenaiss.annee
sinon
age <- dateauj.annee - datenaiss.annee -1
fsi
fsi
fsi
retourne age
fin
Exercice 2
Question1
Ecrire l'algorithme de la fonction qui, à partir d'une date donnée, donne la date du lendemain. Les dates sont représentées sous la forme de variables composites de 3 entiers.
Rappel : Le mois de février a 28 ou 29 jours selon que l'année est bissextile ou non. Une année est bissextile si elle est divisible par 4. Toutefois, les années séculaires ne sont pas bissextiles, sauf celles dont les deux premiers chiffres sont divisibles par 4, comme 1600, 2000, 2400.
fonction calculerDateLendemain (dj.date) : Date
début
si dj.annee mod 100 = 0 alors
bissextile <- (dj.annee mod 400 = 0)
sinon bissextile <- (dj annee mod 4 = 0)
fsi
finmois <- (dj.jour = 30) et ((dj.mois = 4) ou (dj.mois = 6) ou (dj.mois = 9) ou (dj.mois = 11)) ou (dj.jour = 31) ou ((dj.mois = 2) et (dj.jou r= 29)) ou ((dj.mois = 2) et (dj.jour = 28) et non bissextile)
si finmois alors
si dj.mois = 12 alors
dl <- (1,1, dj.annee + 1)
sinon dl <- (1, dj.mois + 1, dj.annee)
fsi
sinon
dl <- (dj.jour + 1, dj.mois, dj.annee)
fsi
retourne dl
fin
Lexique :
Date = / jour : entier, mois : entier, annee : entier \
dj : Date
dl : Date
Question2
Même question en définissant et en utilisant un tableau, qui, à chaque mois, associe le nombre de jours de ce mois.
fonction calculerDateLendemain (dj.date) : Date
début
si dj.annee mod 100 = 0 alors
bissextile <- (dj.annee mod 400 = 0)
sinon bissextile <- (dj annee mod 4 = 0)
fsi
si bissextile alors
tabfinmois <- [31, 29, 31, 30, 31, 31, 30, 31, 30, 31]
sinon tabfinmois <- [31, 28, 31, 30, 31, 31, 30, 31, 30, 31]
fsi
finmois <- (dj.jour = tabfinmois[dj.mois])
si finmois alors
si dj.mois = 12 alors
dl <- (1,1, dj.annee + 1)
sinon dl <- (1, dj.mois + 1, dj.annee)
fsi
sinon
dl <- (dj.jour + 1, dj.mois, dj.annee)
fsi
retourne dl
fin
Lexique :
tabfinmois : tableau entier [1..12]
Date = / jour : entier, mois : entier, annee : entier \
dj : Date
dl : Date
Exercice 3
Soit un tableau de type Tabnaiss associant à chaque étudiant ses nom, prénom et date de naissance.
Tabnaiss = tableau Etudiant[1..nbétudiants]
Etudiant = / nom : chaîne, prénom : chaîne, datenaiss : Date \
Date = / jour : entier, mois : entier, année : entier \
Question 1
Ecrire l'agorithme de la fonction qui permet d'imprimer les noms et prénoms des étudiants ayant leur anniversaire à un jour et un mois donnés.
fonction anniversaire (nbétudiants : entier, t : tabnaiss, jourch : entier, moisch : entier)
début
pour i de 1 à nbétudiants faire
si t[i].datenaiss.jour = jourch et t[i].datenaiss.mois = moisch alors
écrire (t[i].nom, t[i].prénom)
fsi
fpour
fin
Question 2
Ecrire l'algorithme de la fonction qui permet de calculer le nombre d'étudiants ayant plus d'un âge donné (en nombre d'années, aged), à une date donnée (datecourante).
fonction nbEtudiantAge (nbEtudiant entier, t : tabnaiss, aged : entier, datecourante = Date) : entier
début
compteur <- 0
pour i de 1 à nbEtudiant faire
si calculerAge (datecourante, t[i].datenaiss) => aged alors
compteur <- compteur + 1
fsi
fpour
retourne compteur
fin
jeudi 1 novembre 2007
Inscription à :
Publier les commentaires (Atom)
Aucun commentaire:
Enregistrer un commentaire