• Aucun résultat trouvé

Dates [dt01] - Utilitaires

N/A
N/A
Protected

Academic year: 2022

Partager "Dates [dt01] - Utilitaires"

Copied!
7
0
0

Texte intégral

(1)

Karine Zampieri, St´ ephane Rivi` ere

Unisciel algoprog Version 21 mai 2018

Table des mati` eres

1 Utilitaires Dates 2

1.1 Type DateJMA . . . 2

1.2 Proc´edure afficherDT (affichage d’une date) . . . 2

1.3 Fonction bissextile (test de bissextilit´e) . . . 2

1.4 Fonction dateEnChaine (date en chaˆıne) . . . 2

1.5 Fonction datumDT (validit´e d’une date) . . . 3

1.6 Fonction dernierJour (dernier jour d’un mois et ann´ee) . . . 3

1.7 Fonction gregorienneDT (test date gr´egorienne) . . . 4

1.8 Fonction jsemaineDT (jour de la semaine) . . . 4

1.9 Fonction njours (nombre de jours d’un mois et ann´ee) . . . 5

1.10 Fonction nomJSemaine (jour de semaine en toutes lettres) . . . 5

1.11 Fonction nomMois (nom d’un mois en toutes lettres) . . . 6

1.12 Fonction premierJSemaine (premier jour semaine) . . . 6

1.13 Proc´edure saisirDT (saisie d’une date) . . . 7

1.14 Proc´edure saisirGregDT (saisie d’une date) . . . 7

Java - Utilitaires Dates (TP)

Mots-Cl´es Dates et Heures

Requis Axiomatique imp´erative (sauf Fichiers)

Objectif

Ce module contient un ensemble d’utilitaires «Dates» sous forme de probl`emes exter- nalis´es.

1

(2)

1 Utilitaires Dates

1.1 Type DateJMA

D´efinissez le type DateJMA sous la forme d’un triplet d’entiers contenant : le num´ero de jour, le num´ero de mois et le mill´esime de l’ann´ee.

1.2 Proc´ edure afficherDT (affichage d’une date)

Ecrivez une proc´´ edure afficherDT(dt) qui affiche une DateJMA dt sous la forme (o`u [x]

d´esigne le contenu de x) : [jr]/[mm]/[an]

1.3 Fonction bissextile (test de bissextilit´ e)

D´efinition

Soit une ann´ee post´erieure `a 1582 (d´ebut du calendrier gr´egorien).

Elle est bissextilesi et seulement si son mill´esime est :

• Divisible par 4mais non divisible par 100.

• Ou divisible par 400.

Exemples

• 1986 : non (non divisible par 4)

• 1988 : oui (divisible par 4et non divisible par 100)

• 1900 : non (divisible par4 et par 100)

• 2000 : oui (divisible par 400)

Ecrivez une fonction´ bissextile(an) qui teste et renvoie Vrai si le mill´esime d’une ann´ee

an (entier sup´erieur `a 1582) est bissextile,Faux sinon.

1.4 Fonction dateEnChaine (date en chaˆıne)

Traduction dateEnChaine

Pour traduire un triplet d’entiers (jour, mois, ann´ee) en chaˆıne de caract`eres, une strat´egie consiste `a traduire le num´ero de jour j, le num´ero de mois m et l’ann´ee a en chaˆıne.

Exemples :

dateEnChaine(12,3,6) ==> "12/3/06"

dateEnChaine(12,3,2006) ==> "12/3/2006"

(3)

Ecrivez une fonction´ dateEnChaine(dt)qui calcule et renvoie la traduction sous forme d’une chaˆıne "[jr]/[mm]/[an]" (o`u [x] d´esigne le contenu de x) d’uneDateJMA dt.

Aide m´ethodologique

Distinguez le cas o`u l’ann´eeanest sup´erieure `a100 pour tenir compte du z´ero significatif dans les dizaines.

1.5 Fonction datumDT (validit´ e d’une date)

D´efinition

Un triplet d’entiers (j, m, a) est une date validesi :

• Le mill´esime de l’ann´eea est un entier positif.

• Le num´ero du mois m est compris entre 1 et12.

• Le num´ero du jour j est compris entre 1 et le nombre de jours du mois m de l’ann´eea.

Exemples

Les 30/4/1950 et 29/2/1996 sont des dates valides.

Mais ne sont pas valides :

• Le 29/2/1987 (le jour est sup´erieur au dernier jour du mois de l’ann´ee consid´er´ee)

• Le 25/13/2000 (le mois n’est pas un num´ero valide)

• Le 5/5/-2000 (l’ann´ee n’est pas positive)

Ecrivez une fonction´ datumDT(dt)qui teste et renvoieVraisi et seulement si uneDateJMA dt repr´esente une date valide, Fauxsinon.

1.6 Fonction dernierJour (dernier jour d’un mois et ann´ ee)

Propri´et´e

Pour les ann´ees post´erieures `a1582 (ann´ee du calendrier Gr´egorien) :

• Les mois num´eros 1, 3,5, 7, 8, 10et 12ont 31jours.

• Ceux de num´eros 4, 6,9 et11 en ont 30.

• Le mois num´ero 2 a 29jours si l’ann´ee est bissextile,28 dans le cas contraire.

(4)

Ecrivez une fonction´ dernierJour(mm,an) qui calcule et renvoie le dernier jour d’un num´ero de moismm (entier compris entre 1 et12) d’une ann´ee an(entier sup´erieur `a1582), selon l’algorithme suivant :

• Si le mois vaut2 : le dernier jour est 28(ou 29 si l’ann´ee est bissextile).

• Sinon si le mois est impair et ≤7 ou pair et >7 : le dernier jour est31.

• Sinon le dernier jour est30.

1.7 Fonction gregorienneDT (test date gr´ egorienne)

D´efinition

Gr´egoire XIII a impos´e sa r´eforme du calendrier Gr´egorien le jeudi 4 octobre 1582 qui fut alors suivi du vendredi 15 octobre 1582 (nous avons effectivement «saut´e» dix jours).

Ecrivez une fonction´ gregorienneDT(dt) qui teste et renvoieVrai si uneDateJMA dt est pos- t´erieure `a la r´eforme du calendrier du jeudi 4 octobre 1582,Faux sinon.

1.8 Fonction jsemaineDT (jour de la semaine)

Ce probl`eme d´etermine le num´ero du jour de la semaine (c.-`a-d. 0=dimanche, 1=lundi, etc.) d’une date (jour, mois, ann´ee).

D´efinition

La formule deZeller(´enonc´ee ci-apr`es) permet de calculer le jour de semaine d’une date du calendrier Gr´egorien1. Pour l’utiliser, il faut d´ecaler la date de deux mois. L’ann´ee de Zeller commence au mois de mars. Ainsi la date gr´egorienne 7/2/2010 doit ˆetre transform´ee en 7/12/2009 pour Zeller, et la date gr´egorienne 5/4/2010 en 5/2/2010 pourZeller.

Formule de Zeller

Soit d un jour de la semaine dans [0..6]avec d= 0 pour le dimanche.

Soient :

m : le num´ero du mois dans l’ann´ee deZeller

a : le num´ero de l’ann´ee de Zeller

j : le num´ero du jour dans le mois de Zeller

n=a mod 100 : le num´ero de l’ann´ee dans le si`ecle deZeller

s : le num´ero du si`ecle de Zeller

1. Le calendrier Gr´egorien fut adopt´e en France, Italie, Espagne et Portugal le 15/10/1582, en Pologne en 1587, en Grande-Bretagne en1753, au Japon en 1911, en Chine en 1917, en URSS et en Gr`ece en 1926.

(5)

La formule de Zellerest

d=f mod 7 avec

f =j+n+ 5s+n div4 +s div 4 + (13m−1)div 5

o`u l’op´erateur div d´esigne la division enti`ere et l’op´erateur mod le reste de la division enti`ere.

Remarque

Gr´egoire XIII a impos´e la r´eforme du calendrier le jeudi 4 octobre 1582 qui fut alors suivi du vendredi 15 octobre 1582. Avant ce changement, la formule de Zeller fonc- tionne en ajoutant 3 `af.

Ecrivez une fonction´ jsemaineDT(dt)qui calcule et renvoie le num´ero de jour de la semaine d’une DateJMA dten appliquant la formule de Zeller.

1.9 Fonction njours (nombre de jours d’un mois et ann´ ee)

Propri´et´e

Pour les ann´ees post´erieures `a1582 (ann´ee du calendrier Gr´egorien) :

• Les mois num´eros 4, 6,9 et11 ont30 jours.

• Le mois num´ero 2 a 29jours si l’ann´ee est bissextile,28 sinon.

• Sinon c’est 31jours pour tous les autres mois 1, 3, 5, 7, 8, 10et12.

Ecrivez une fonction´ njours(mm,an) qui calcule et renvoie le nombre de jours d’un num´ero de mois mm (entier compris entre1 (pour janvier) et 12(pour d´ecembre)) d’une ann´eean

(entier sup´erieur `a 1582).

Aide m´ethodologique Pr´ef´erez une structure Selon.

1.10 Fonction nomJSemaine (jour de semaine en toutes lettres)

Ecrivez une fonction´ nomJSemaine(jsem) qui calcule et renvoie le nom d’un num´ero de jour de semaine jsem en toutes lettres, dimanche ´etant le num´ero 0 et samedi le num´ero 6.

L’entier jsem est suppos´e compris dans [0..6].

(6)

1.11 Fonction nomMois (nom d’un mois en toutes lettres)

Ecrivez une fonction´ nomMois(mm) qui renvoie le nom d’un num´ero de mois mm en toutes lettres, janvier ´etant le num´ero 1 et d´ecembre le num´ero 12. L’entier mm est suppos´e compris dans[1..12].

1.12 Fonction premierJSemaine (premier jour semaine)

Ce probl`eme donne l’index du premier jour d’un mois et ann´ee donn´es (0 signifie Di- manche, 1 Lundi, etc.).

Propri´et´e

Le calcul du jour o`u tombe le1er janvier d’une ann´ee est donn´ee dans l’ouvrage«A Col- lection of Programming Problems and Techniques»,H.A. MaurerandM.R. Williams, Prentice-Hall 1972 :

(36 +y+y div 4−y div 100 +y div 400) mod NJOURSSEM avec y=annee−1et NJOURSSEM(= 7) le nombre de jours dans une semaine.

Ecrivez une fonction´ premierJSemJanvier(annee) qui calcule et renvoie le premier jour se- maine du 1er janvier d’une ann´eeannee (entier) donn´ee selon l’algorithme ci-dessus.

Connaissant l’index du premier jour d’une ann´eean, comment en calculer le premier jour d’un mois mm?

Aide simple

Admettons que Janvier commence un Mercredi en ann´eean, c.-`a-d. quepremierJSemJanvier(an)

renvoie 3(=MER). Pour calculer sa valeur en F´evrier, on additionne le nombre de jours du mois de Janvier (ici 31). Nous obtenons 34(= 3 + 31) et le reste de la division de 34 par

NJOURSSEM (ici 7) donne 6 ce qui fait que F´evrier commence un Samedi.

Ecrivez une fonction´ premierJSemaine(mois,annee) qui calcule et renvoie le premier jour semaine d’un mois mois (entier) et ann´eeannee (entier) donn´es.

(7)

1.13 Proc´ edure saisirDT (saisie d’une date)

Ecrivez une proc´´ edure saisirDT(dt) qui saisit une DateJMA dans dt. La date doit ˆetre demand´ee tant qu’elle n’est pas valide. Affichez l’invite :

jr/mm/an?

1.14 Proc´ edure saisirGregDT (saisie d’une date)

Ecrivez une proc´´ edure saisirGregDT(dt) qui saisit une DateJMA dans dt. La date doit ˆetre demand´ee tant qu’elle n’est pas une date gr´egorienne valide. Affichez les invites :

Millesime de l’annee?

Numero du mois?

Numero du jour?

Références

Documents relatifs

Volume d’émission : 13,3 milliards d’euros, en progression de +8,7% en données comparables En ligne avec l’objectif de croissance organique annuel compris entre +8 et +14%, le

Si votre enfant est absent cette journée-là, veuillez prendre rendez-vous avec SC photo afin de les prendre directement au studio... She decorated the wall which also becomes a

Comme pour le premier confinement l’atelier a dû fermer ses portes durant quatre semaines et Guy a été mis en chômage partiel à 100 %.. Ceci a entrainé l’annulation

Dans ce cadre, nous avons mis en place un point régulier avec Gandi tout les trois mois (vous aurez des nouvelles dans le récap’ du mois d’août).

INSPECTION D’ACADEMIE DE THIES-PHARES 2017-2018 Page 12 3e semaine d’avril 2018 EVALUATION AU NIVEAU DES CELLULES MIXTES (contenus enseignés). 1ere semaine de mai à la 3e

LES JOURS ET LES MOIS 1 Richard Anthony ; chanteur français.. måndag

LES JOURS ET LES MOIS 1 Richard Anthony ; chanteur françaisr.

( un nom féminin sing. commençant par une voyelle a ) 2- Tu aimes ton école .( un nom féminin sing.commençant par une voyelle é).. 3- Il écrit