La biblioteca degli smemorati

Fase Territoriale 2001

La vostra biblioteca rionale ha qualche problema nello stabilire da quanto tempo gli utenti tengono i libri.
Dovete aiutarli scrivendo un programma che, prese in input due date del 2001, stabilisca quanti giorni intercorrono tra le due date.

Dati in input

Il file input.txt è formato da una riga che contiene la data iniziale e la data finale del prestito.
Più precisamente, la riga contiene quattro interi: la prima coppia specifica la data iniziale, la seconda la data finale.
Ogni data è formata da due numeri, e cioè il giorno del mese e il numero del mese.

Dati in output

Il programma, dopo aver letto il file di input, deve stabilire quanti giorni intercorrono tra le due date, e scrivere il numero di giorni su un file di nome output.txt.

Più precisamente, il file output.txt deve contenere un’unica riga.
Su questa riga dovrà comparire il numero intero corrispondente ai giorni che intercorrono tra le due date in input.

Assunzioni

  1. Il file di input non contiene altri caratteri oltre a quelli precisati.
  2. Trenta giorni a novembre, con april, giugno e settembre; di ventotto ce n’è uno: tutti gli altri ne han trentuno.
  3. La seconda data non precede mai la prima.
  4. Il numero di giorni considerato non comprende quello iniziale: quindi, ad esempio, tra il 2 gennaio e il 2 gennaio intercorrono 0 giorni, tra il 30 gennaio e il 2 febbraio intercorrono tre giorni, e così via.
  5. Importante! Il programma non deve scrivere nulla sul video, e non deve interagire con l’utente. Deve solo leggere il file di input e scrivere il file di output.
  6. L’esecuzione del programma deve terminare entro 5 secondi.

Esempi

input.txt output.txt
1 2 3 2 3 0
2 30 1 2 2 3
3 1 5 2 7 62

La posizione 0 dell’array giorni contiene 0 in modo che gennaio corrisponda a 1, febbraio corrisponda a 2

#include       

int main()
{                  // 0   1   2   3   4   5   6   7   8   9  10  11  12
   int giorni[13] = { 0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };
   int g1, m1,
       g2, m2;
   
   FILE *fileIN = fopen("input.txt", "r");  
   fscanf(fileIN, "%d %d %d %d", &g1, &m1, &g2, &m2);
   fclose(fileIN);
       
   int distanza;
   
   if (m1==m2)
      distanza=g2-g1;
   else
   {
      distanza=(giorni[m1]-g1);    
      for(int i=m1+1; i <= m2-1; i++)  
           distanza += giorni[i];
      distanza += g2;                  
   }    
   
   FILE *fileOUT=fopen("output.txt", "w");
   fprintf(fileOUT, "%d", distanza);
   fclose(fileOUT);

   return 0;
}

/*
    www.valcon.it
	OII 2001 - Fase territoriale - LA BIBLIOTECA DEGLI SMEMORATI
*/

#include
#include
using namespace std;

int main()
{                  // 0   1   2   3   4   5   6   7   8   9  10  11  12
   int giorni[13] = { 0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };

   int g1, m1,
       g2, m2;
   
   ifstream in("input.txt");
   ofstream out("output.txt");
   
   in >> g1 >> m1 >> g2 >> m2;
   
   int distanza=-g1;
   for(int i=m1; i < m2; i++)
       distanza += giorni[i];
   distanza += g2;
     
   out << distanza;

   return 0;
}