Correction du TP n°2

Exercice 1

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);
  }
}

DateLendemain.java

Auteur: Nicolas JANEY
UFR Sciences et Techniques
Université de Besançon
16 Route de Gray, 25030 Besançon
nicolas.janey@univ-fcomte.fr