Questo sito utilizza cookies solo per scopi di autenticazione sul sito e nient'altro. Nessuna informazione personale viene tracciata. Leggi l'informativa sui cookies.
Username: Password: oppure
C/C++ - differenza tra date
Forum - C/C++ - differenza tra date

Pagine: [ 1 2 3 ] Precedente | Prossimo
Avatar
ken (Normal User)
Newbie


Messaggi: 17
Iscritto: 24/10/2006

Segnala al moderatore
Postato alle 20:04
Martedì, 24/10/2006
Ciao a tutti avrei un piccolo problema.Dovrei fare un programma in c++ che calcoli la differenza in giorni tra 2 date scritte così:gg/mm/aa. Non posso usare librerie come time.h. Devo usare necessariamente la Classe Date.Inoltre bisogna valutare se l'anno è bisestile. Su questo sito ho trovato un programma simile ma purtroppo è scritto in c. Vi sarei grato se mi poteste aiutare.
Grazie

PM Quote
Avatar
netarrow (Admin)
Guru^2


Messaggi: 2502
Iscritto: 12/05/2004

Segnala al moderatore
Postato alle 18:14
Domenica, 29/10/2006
Il mio countday usa un algoritmo che si può utilizzare in qualsiasi linguaggio, se poi è C++ puoi copiare la funzione getDay come sta e funziona, non capisco dove trovi l'intoppo.
Se deve essere letta in formato gg/mm/aaaa basta che leggi una stringa(usando C++ puoi usare la classe string che rende tutto facile) e la splitti dividendo aa mm e aaaa dagli /, controlli che siano dati validi(es. il mese non sia 47) e usi quell'algoritmo.

Ultima modifica effettuata da netarrow il 29/10/2006 alle 18:15
PM Quote
Avatar
ken (Normal User)
Newbie


Messaggi: 17
Iscritto: 24/10/2006

Segnala al moderatore
Postato alle 13:12
Lunedì, 30/10/2006
Grazie per la risposta. Il problema è che non sono molto bravo di c++.Lo sto imparando.Devo creare una class data e quando modifico la funzione: long getDay(Data data) in
long data::getDay() {Data data;.....} non me la prende. Dovrei anche fare un main molto piccolo, dove richiamo solo le funzioni ma non riesco. Mi dà sempre errore nella funzione getDay. In realtà il programma che devo fare è un pò più complicato, infatti deve prendere le date da un file .txt e scrivere la differenza in giorni su un altro file, ma per ora mi basta solo mettere in ordine il programma countday creando un file di intestazione .h un file .cpp che contenga le funzioni e un main piccolo che mi richiami le funzioni. Se mi puoi aiutare ti ringrazio molto. Ciao

PM Quote
Avatar
netarrow (Admin)
Guru^2


Messaggi: 2502
Iscritto: 12/05/2004

Segnala al moderatore
Postato alle 22:08
Lunedì, 30/10/2006
postami quello che hai scritto e cercherò di correggere.
Scrivimi anche gli errori che da a te in modo dettagliato.

ciao

PM Quote
Avatar
ken (Normal User)
Newbie


Messaggi: 17
Iscritto: 24/10/2006

Segnala al moderatore
Postato alle 21:07
Martedì, 31/10/2006
Ecco il codice, ma sono sicuro che ci siano parecchi errori:
Codice sorgente - presumibilmente C++

  1. class Data
  2. {
  3. public:
  4.   void scrivi_data();
  5.   void differenza_data();
  6.   long getDay();
  7.   long anno;
  8.   long mese;
  9.   long giorno;
  10. };
  11.  
  12.  
  13.  
  14. #include <iostream>
  15. #include "countday.h"
  16. using namespace std;
  17.  
  18. long Data::getDay()
  19. {
  20.    Data data;
  21.    long a, b, giorni_passati;
  22.    if(data.mese < 3)
  23.    {
  24.       data.anno -= 1;
  25.       data.mese += 12;
  26.    }
  27.  
  28.    a = (long) (data.anno / 100);
  29.    b = 2 - a + ( (long) (a / 4));
  30.  
  31.    giorni_passati = (long) (365.25*(data.anno + 4716)) + (30.6001*(data.mese + 1)) + data.giorno + b -  1524;
  32.  
  33.   return giorni_passati;
  34. }
  35.  
  36. void Data::scrivi_data()
  37. {
  38.   Data arrivo, partenza;
  39.   cout<<"Data di partenza: \n\n";
  40.  
  41.   cout<<"Inserire anno: ";
  42.   cin>>partenza.anno;
  43.   cout<<"Inserire mese: ";
  44.   cin>>partenza.mese;
  45.   cout<<"Inserire giorno: ";
  46.   cin>>partenza.giorno;
  47.  
  48.  
  49.   cout<<"Data di arrivo: \n\n";
  50.  
  51.   cout<<"Inserire anno: ";
  52.   cin>>arrivo.anno;
  53.   cout<<"Inserire mese: ";
  54.   cin>>arrivo.mese;
  55.   cout<<"Inserire giorno: ";
  56.   cin>>arrivo.giorno;
  57.  
  58. }
  59.  
  60. void Data:: differenza_data()
  61. {
  62.   Data arrivo, partenza;
  63.   signed long differenza;
  64.  
  65.   differenza = getDay(arrivo) - getDay(partenza);
  66.  
  67.   if(differenza == 0)
  68.   {
  69.     cout<<"La data e' la stessa"<<endl;
  70.   }
  71.        
  72.   /*
  73.    Facciamo controlli sul risultato per adattare il testo da stampare.
  74.   */
  75.   cout<<"\n"<<(abs(differenza) == 1 ? differenza < 0 ?
  76.   "E' passato":"Manca": differenza < 0 ? "Sono passati":"Mancano")<<" "<<abs(differenza)<<" "<<
  77.   (abs(differenza) == 1 ? "giorno":"giorni");
  78. }
  79.  
  80. int main(int argc, char *argv[])
  81. {
  82.   int escape;
  83.   Data d;
  84.   d.scrivi_data();
  85.   d.differenza_data();
  86.  
  87.   cin>>escape;
  88.  }



Gli errori che mi dà sono:
1) error C2660: 'Data::getDay': la funzione non accetta 1 argomenti;
2) error C2660: 'Data::getDay': la funzione non accetta 1 argomenti.

Gli errori me li segna su:  differenza = getDay(arrivo) - getDay(partenza);

Come posso modificarlo? Grazie mille

Ultima modifica effettuata da ken il 01/11/2006 alle 11:28
PM Quote
Avatar
netarrow (Admin)
Guru^2


Messaggi: 2502
Iscritto: 12/05/2004

Segnala al moderatore
Postato alle 13:21
Mercoledì, 01/11/2006
Ho dovuto modificare radicalmente l'impostazione del progetto perchè oltre che non funzionare sia come compilazione(per errori di sintassi) non andava a runtime per errori logici(ricreavi certe volte gli oggetti perdendo i valori precedenti ad esempio) e cmq l'impostazione è un ibrido fra strutturata e oop che non sta molto bene, ti posto come ho sistemato io:

Codice sorgente - presumibilmente C++

  1. class Data
  2. {
  3. public:
  4.   void scrivi_data();
  5.   void differenza_data(Data);
  6.   long getDay();
  7. private:
  8.   long anno;
  9.   long mese;
  10.   long giorno;
  11. };
  12.  
  13. #include <iostream>
  14.  
  15. using namespace std;
  16.  
  17. long Data::getDay()
  18. {
  19. long a, b, giorni_passati;
  20. if(this->mese < 3)
  21. {
  22. this->anno -= 1;
  23. this->mese += 12;
  24. }
  25.  
  26. a = (long) (this->anno / 100);
  27. b = 2 - a + ( (long) (a / 4));
  28.  
  29. giorni_passati = (long)( (365.25*(this->anno + 4716)) + (30.6001*(this->mese + 1)) + this->giorno + b - 1524);
  30.  
  31. return giorni_passati;
  32. }
  33.  
  34. void Data::scrivi_data()
  35. {
  36.  
  37. cout<<"Inserire anno: ";
  38. cin>>this->anno;
  39. cout<<"Inserire mese: ";
  40. cin>>this->mese;
  41. cout<<"Inserire giorno: ";
  42. cin>>this->giorno;
  43.  
  44. }
  45.  
  46. void Data:: differenza_data(Data partenza)
  47. {
  48.  signed long differenza;
  49.  
  50. differenza = (long) (this->getDay() - partenza.getDay());
  51.  
  52. if(differenza == 0)
  53. {
  54. cout<<"La data e' la stessa"<<endl;
  55. }
  56.  
  57. /*
  58. Facciamo controlli sul risultato per adattare il testo da stampare.
  59. */
  60. cout<<"\n"<<(abs(differenza) == 1 ? differenza < 0 ?
  61. "E' passato":"Manca": differenza < 0 ? "Sono passati":"Mancano")<<" "<<abs(differenza)<<" "<<
  62. (abs(differenza) == 1 ? "giorno":"giorni");
  63. }
  64.  
  65. int main(int argc, char *argv[])
  66. {
  67. int escape;
  68. Data partenza, arrivo;
  69. cout<<"\nData di partenza: \n\n";
  70. partenza.scrivi_data();
  71. cout<<"\nData di arrivo: \n\n";
  72. arrivo.scrivi_data();
  73. arrivo.differenza_data(partenza);
  74.  
  75. cout << endl  << "Inserire un tasto per uscire ";
  76. cin>>escape;
  77. }



ciao :k:

PM Quote
Avatar
ken (Normal User)
Newbie


Messaggi: 17
Iscritto: 24/10/2006

Segnala al moderatore
Postato alle 20:40
Mercoledì, 01/11/2006
Grazie mille. Devo dire che avevo fatto molta confusione....pensa che alla fine ero riuscito a farlo partire ponendo la funzione getDay come friend...Se ti posso disturbare ancora una volta vorrei chiederti se va bene il programma completo che ho fatto, ma se non ti dispiace vorrei mandartelo per email. Ancora grazie!!

PM Quote
Avatar
netarrow (Admin)
Guru^2


Messaggi: 2502
Iscritto: 12/05/2004

Segnala al moderatore
Postato alle 19:07
Venerdì, 03/11/2006
posta sul forum per piacere, così la nostra discussione è disponibile alla collettività :k:

PM Quote
Avatar
ken (Normal User)
Newbie


Messaggi: 17
Iscritto: 24/10/2006

Segnala al moderatore
Postato alle 22:23
Venerdì, 03/11/2006
Lo farei volentieri ma questo è un programma che devo consegnare fra pochi giorni e, sono sincero, non vorrei che me lo copiassero...;)
Fra una settimana lo posso mettere tranquillamente qui sul forum. Comunque il problema è che ho fatto un while immenso, dove legge il file e fa la differenza tra le date, ma è troppo lungo e non sta bene...inoltre mi dà errore di debug anche se alla fine parte.
Il while è del tipo:

Codice sorgente - presumibilmente Delphi

  1. .
  2. .
  3. .
  4. string s;
  5. while (getline(in,s))
  6. {
  7.        
  8.        
  9.         string giorno1(s,...); 
  10.         string mese1(s,...);
  11.         .
  12.          .
  13.          .
  14.   partenza.giorno=conversioneInt(giorno1);
  15.          .
  16.          .
  17.          .
  18.  
  19.  differenza = ......
  20. out<<....
  21. .
  22. .
  23. .



Nel programma dovrei cercare di non inserire oggetti Data (tipo Data partenza) all'interno delle funzioni, ma lo dovrei fare nel main, sempre cercando di non farlo troppo lungo...uff...
Comunque il codice intero ho provato a mandartelo per email tramite questo sito. Non so se l'hai ricevuto. Grazie per la pazienza..
Ciao


PM Quote
Pagine: [ 1 2 3 ] Precedente | Prossimo