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...
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.
E' corretta o vi è la presenza di errori?
#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.
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