Correction du TP n°2
Ecrire un algorithme qui, à partir d'une date donnée sous la forme jour, mois, année, calcule la date du lendemain.
/* Auteur: Nicolas JANEY */
/* nicolas.janey@univ-fcomte.fr */
/* Fevrier 2005 */
import java.io.*;
public class DateLendemain {
static BufferedReader flux = new BufferedReader(new InputStreamReader(System.in));
/* Fonction de test si une annee est bissextile */
public static boolean estBissextile(int annee) {
boolean res = false;
if ( (annee%4) == 0 )
res = true;
if ( (annee%100) == 0 )
res = false;
if ( (annee%400) == 0 )
res = true;
return(res);
}
/* Fonction de calcul du nombre de jours */
/* d'un mois d'une annee */
public static int nombreJoursDuMois(int mois,int annee) {
switch (mois) {
/* Dans le cas des mois a 31 jours */
case 1 :
case 3 :
case 5 :
case 7 :
case 8 :
case 10 :
case 12 : return(31);
/* Dans le cas des mois a 30 jours */
case 4 :
case 6 :
case 9 :
case 11 : return(30);
/* Dans le cas du mois de fevrier */
case 2 : if ( estBissextile(annee) )
return(29);
else
return(28); }
/* 0 est retourne si numero de mois invalide */
return(0);
}
/* Fonction de calcul du jour du lendemain d'une date */
public static int calculJourLendemain(int jour,int mois,int annee) {
/* Deux alternatives, soit le numero de jour est plus petit */
/* que le nombre de jours du mois, soit il ne l'est pas */
if ( jour < nombreJoursDuMois(mois,annee) )
return(jour+1);
else
return(1);
}
/* Fonction de calcul du mois du lendemain d'une date */
public static int calculMoisLendemain(int jour,int mois,int annee) {
/* Deux alternatives, soit le numero de jour est egal */
/* au nombre de jours du mois, soit il ne l'est pas */
if ( jour == nombreJoursDuMois(mois,annee) )
/* Le numero de mois doit etre incremente de 1 -> */
/* Deux alternatives soit le numero de mois est egal a 12 */
/* soit il ne l'est pas */
if ( mois == 12 )
return(1);
else
return(mois+1);
else
return(mois);
}
/* Fonction de calcul de l'annee du lendemain d'une date*/
public static int calculAnneeLendemain(int jour,int mois,int annee) {
/* Deux alternatives, soit le numero de jour est egal a 31 */
/* et le numero de mois egale 12, soit ce n'est pas le cas */
if ( ( jour == 31 ) && ( mois == 12 ) )
return(annee+1);
else
return(annee);
}
/* Fonction principale */
public static void main(String [] args) throws IOException {
/* 3 variables pour stocker un jour, un mois et une annee */
int jour,mois,annee;
/* 3 variables pour stocker un jour, un mois et une annee */
int jourLendemain,moisLendemain,anneeLendemain;
/* Lecture clavier de la date originelle */
System.out.println("Jour?");
jour = Integer.valueOf(flux.readLine()).intValue();
System.out.println("Mois?");
mois = Integer.valueOf(flux.readLine()).intValue();
System.out.println("Annee?");
annee = Integer.valueOf(flux.readLine()).intValue();
/* Calcul du jour du lendemain */
jourLendemain = calculJourLendemain(jour,mois,annee);
/* Calcul du mois du lendemain */
moisLendemain = calculMoisLendemain(jour,mois,annee);
/* Calcul du annee du lendemain */
anneeLendemain = calculAnneeLendemain(jour,mois,annee);
/* Affichage final */
System.out.println(jourLendemain+"/"+moisLendemain+"/"+anneeLendemain);
}
}
Auteur: Nicolas JANEY
UFR Sciences et Techniques
Université de Besançon
16 Route de Gray, 25030 Besançon
nicolas.janey@univ-fcomte.fr