Un horaire est défini par 3 entiers HH, MM, SS
Exemple 9H 45M 30S
1.Concevoir une classe THeure et définir un constructeur avec 3 paramètres entiers (h, m s)
Effectuer un contrôle de validité des paramètres
Const NBMaxSec = 60 ;
Const NBMaxMin = 60 ;
Const NBMaxHeure = 24 ;
Type THeure = class
Heure : [0..NBMaxHeure-1] ;
Minute : [0..NBMaxMin-1] ;
Seconde : [0..NBMaxSec-1] ;
Constructeur THeure.Create(h,m,s :entier)
debut
si h >=0 et h < NBMaxHeure et m>=0 et m< NBMaxMin et s>=0 et s< NBMaxSec
alors debut
Heure := h ;
Minute := m ;
Seconde := s ;
fin
sinon self := nil;
fin
2.Ecrire une méthode AjouteSeconde (s : entier) qui ajoute s secondes à la date
Procedure AjouteSeconde (s : entier
Debut
seconde := (seconde + s) mod NBMaxSec ;
minute := (minute + s div NBMaxSec) mod NbMaxMin ;
heure := (heure + (minute + s div NBMaxSec) div NbMaxMin) mod NBMaxHeure ;
Fin
On considère les dates du calendrier grégorien.
3.Connaissez-vous d'autres calendriers ?
Calendrier julien, hébraique, arabe, républicain
Quelles sont les différences avec le calendrier grégorien ?
Calendrier julien : différence d'une dizaine de jours du à la réforme du pape Grégoire VII au XVIème siècle
Calendrier républicain : 10 mois, des semaines de 10 jours
4. Une date est définie par 6 entiers ANNEE, MOIS, JOUR, HH, MM, SS
Exemple : 2001 / 09 / 30 14H 35M 28S
Ecrire une date sous la forme AAAAMMJJHHMMSS présente un intérêt. Lequel ?
Il est très facile de trier des dates sous cette forme : l'ordre (alphabétique) de cette forme est l'ordre chronologique
5. Concevoir une classe TDate, utilisant la classe THeure et définir un constructeur avec les 6 paramètres définis 4
On considère que l'on dispose d'une procédure NBJoursMois(mois, année : entier) :entier qui donne le nombre de jours pour le mois d'une année donnée
Effectuer un contrôle de validité des paramètres
Const NBMaxJour = 31 ;
Const NBMaxMois = 12;
Type TDate = class
Jour : [1..NBMaxJour] ;
Mois : [1..NBMaxMois] ;
Année : entier ;
Fin ;
Constructeur TDate.Create(j,mo,a,h,mi,s :entier)
debut
Heure := THeure.Create(h,mi,s) ;
si heure<> nil
et jour >=1
et jour <=NBJoursMois(mo,a) et mo>=1 et mo<= NBMaxMois
alors debut
Jour := j ;
Mois := mo ;
Annee := a ;
fin
sinon self := nil ;
fin
6. Ecrire une méthode qui retourne vrai si l'année est bissextile
Une année bissextile se présente toutes les années divisibles par 400 (400, 800, 1200..., 2000) ou toutes les années divisibles par 4 mais pas divisibles par 100. Ainsi, 1996 est une année bissextile parce qu'elle est divisible par 4 mais pas divisible par 100. L'année 2000 est bissextile parce qu'elle est divisible par 400, mais 1900 n'était pas bissextile
Function Tdate.Bissextile : booleen
Debut
Bissextile := (Annee MOD 400=0) OR ((Annee MOD 4=0) AND (Annee MOD 100<>0));
Fin
7. Ecrire une méthode ajoute une date à une autre date
Function TDate.Ajoute(d : TDate)
Debut
Heure.Seconde := Heure.Seconde + d.Heure.Seconde
Si Heure.Seconde>= NBMaxSec alors
Debut
Heure.Seconde := Heure.Seconde- NBMaxSec ;
Heure.Minute := Heure.Minute+1 ;
Fin
Heure.Minute := Heure.Minute + d.Heure.Minute
Si Heure.Minute>= NBMaxMinute alors
Debut
Heure.Minute := Heure.Minute - NBMaxSec ;
Heure.Heure := Heure.Heure + 1 ;
Fin
Heure.Heure := Heure.Heure + d.Heure.Heure
Si Heure.Heure >= NBMaxHeure alors
Debut
Heure.heure := Heure.Heure - NBMaxHeure ;
jour := jour + 1 ;
Fin
Jour := jour+d.jour
Si jour > NBJoursMois(Mois,Annee) alors
Debut
Jour := Jour - NBJoursMois(Mois,Annee);
mois := mois+1 ;
Fin
Mois := mois + d.mois
Si mois > NBMaxMois alors
Debut
Mois := mois - NBMaxMois
annee := annee + 1 ;
Fin ;
Annee := annee+ d.annee
Fin
8. Ecrire le destructeur de la classe Tdate
Destructeur TDate.Free ;
Debut
Heure.Free ;
Inherited ;
Fin