Oppure

Loading
17/01/07 18:58
Mark
Ho il seguente problema: dovrei calcolare la differenza, in giorni, tra due date, anche a distanza di parecchi anni.

Ci provo da oggi pomeriggio, ma non sono arrivato a nessun risultato.

Sul forum ho trovato una soluzione riportata al seguente link: pierotofy.it/pages/extras/forum/2/9854-differenza_tra_date/,
La soluzione non fa al caso mio perchè non ho ancora studiato la maggior parte delle cose riportate in quel codice sorgente.

Come posso fare? E' possibile trovare un metodo più semplice che utilizzi i fondamenti basilari del linguaggio? Dovrei utilizzare soltanto le strutture di selezione, i cicli e gli array; per il resto vago nelle tenebre.

Grazie per chi risponderà al mio HELP!!!
Ultima modifica effettuata da Mark 17/01/07 19:09
aaa
17/01/07 19:47
Reese
Beh, se la data è una stringa (array di caratteri), allora devi solo estrarre gli interi che rappresentano giorno, mese ed anno, e poi effettuare delle differenze con riporti, partendo dalla differenza tra gli interi che rappresentano i giorni.
aaa
18/01/07 20:07
Mark
Grazie per avermi risposto indicandomi una possibile soluzione, ma non sono ancora in grado di fare quello che mi hai detto.

Nel frattempo ho lavorato sodo e sto ottenendo buoni risultati; a breve posterò il sorgente...
aaa
21/01/07 9:35
Mark
Questa è la soluzione a cui sono arrivato dopo diversi tentativi.

#include <cstdlib>
#include <iostream>

using namespace std;

int main(int argc, char *argv[])
{
    int data1[3], data2[3], ggmese[]={31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30,31};
    int gtrascorsi, somma=0, diffanni, gganni, ggfineanno, gginizioanno, fsomma=0, isomma=0;
    //INPUT DATA POSTERIORE
    cout << "Inserire la data posteriore" << endl; 
    cout << "Giorno: ";
    cin >> data1[0];
    cout << "Mese: ";
    cin >> data1[1];
    cout << "Anno: ";
    cin >> data1[2];
    //INPUT DATA ANTERIORE
    cout << "\nInserire la data anteriore" << endl; 
    cout << "Giorno: ";
    cin >> data2[0];
    cout << "Mese: ";
    cin >> data2[1];
    cout << "Anno: ";
    cin >> data2[2];
    //INIZIO BLOCCO1: VERIFICA DATA CON DIFF. ANNI = 0
    if (data1[2]-data2[2] == 0) //BLOCCO DIFFERENZA ANNI = 0
    {
       if (data1[1]-data2[1] == 0){ //BLOCCO DIFFERENZA MESI = 0
           gtrascorsi = data1[0]-data2[0];}
        
       else 
       if (data1[1]-data2[1] == 1){ //BLOCCO DIFFERENZA MESI = 1
           gtrascorsi = ggmese[data2[1]-1]-data2[0]+data1[0];}
    
       else
       if (data1[1]-data2[1] > 1){  //BLOCCO DIFFERENZA MESI > 1
           for (int a=data2[1]; a < data1[1]-1; a++){
           somma+=ggmese[a];}
           }
            gtrascorsi = somma+(ggmese[data2[1]-1]-data2[0]+data1[0]);
    }   
    //FINE BLOCCO1. - INIZIO BLOCCO2: VERIFICA DATA CON DIFF. ANNI = 1
    else if (data1[2]-data2[2] == 1) 
    {
       ggfineanno=ggmese[data2[1]-1]-data2[0]; 
       for (int a=data2[1]; a <= 11; a++){
           fsomma+=ggmese[a];
           }
       gginizioanno=data1[0]; 
       for (int a=data1[1]-2; a >= 0 ; a--){
           isomma+=ggmese[a];
           }
       gtrascorsi = ggfineanno +  gginizioanno + fsomma + isomma;
    }
    //FINE BLOCCO2. - INIZIO BLOCCO3: VERIFICA DATA CON DIFF. ANNI > 1
    else if (data1[2]-data2[2] > 1) 
    {
       gganni=(data1[2]-data2[2]-1)*365; 
       
       ggfineanno=ggmese[data2[1]-1]-data2[0]; 
       for (int a=data2[1]; a <= 11; a++){
           fsomma+=ggmese[a];
           }
       gginizioanno=data1[0]; 
       for (int a=data1[1]-2; a >= 0 ; a--){
           isomma+=ggmese[a];
           }
       gtrascorsi = ggfineanno +  gginizioanno + fsomma + isomma + gganni;
    }
    
    cout << "\nSono trascorsi " << gtrascorsi << " giorni" << endl;    
    
    system("PAUSE");
    return EXIT_SUCCESS;
}


E' corretta o vi è la presenza di errori?
aaa
21/01/07 13:32
netarrow
ti consiglio di usare l'algoritmo usato nel programma che hai linkato e in questo(dove ci sono magari meno fronzoli ed è più immediato da capire):

pierotofy.it/pages/sorgenti/browse/15726/1684/

E' più efficace e più immediato da implementare.
Ultima modifica effettuata da netarrow 21/01/07 13:33
aaa