/* File: datasuN1.c */
/* Time-stamp: "2001-04-02 11:39:02 calvanes" */
/* Scopo: parametri passati per indirizzo */

/* Legge giorno, mese ed anno di una data, un intero n, e determina la data
   di n giorni dopo.
   La data finale deve essere del XX secolo.
*/

#include <stdio.h>


int giorniDelMese(int mm, int aa)
  /* Calcola il numero dei giorni del mese. */
{
  int giorni;

  switch (mm) {
  case 1: case 3: case 5: case 7: case 8: case 10: case 12:
    giorni = 31;
    break;
  case 4: case 6: case 9: case 11:
    giorni = 30;
    break;
  case 2:
    if (aa % 4 == 0 && aa != 1900)
      giorni = 29;
    else
      giorni = 28;
    break;
  }
  return giorni;
}  /* giorniDelMese */


void avanzaUnGiorno(int *giorno, int *mese, int *anno)
{
  if (*giorno == giorniDelMese(*mese, *anno)) {
    *giorno = 1;
    if (*mese == 12) {
      *mese = 1;
      (*anno)++;
    }
    else
      (*mese)++;
  }
  else
    (*giorno)++;
}  /* avanzaUnGiorno */


int main(void)
{
  int g, m, a;         /* rappresentano la data */
  int quanti_dopo;     /* numero di giorni di cui avanzare */
  int i;               /* indice per il ciclo */

  /* lettura della data */
  printf("Data (giorno, mese, anno) ? ");
  scanf("%d%d%d", &g, &m, &a);
  printf("Quanti giorni dopo ? ");
  scanf("%d", &quanti_dopo);

  printf("%d giorni successivi al %d/%d/%d e` ", quanti_dopo, g, m, a);

  for (i = 1; i <= quanti_dopo; i++)
    avanzaUnGiorno(&g, &m, &a);

  /* stampa la data aggiornata */
  printf("%d/%d/%d\n", g, m, a);

  return 0;
}  /* main */