Visualizzazione dei risultati da 1 a 3 su 3

Discussione: [c++]contare i giorni

  1. #1

    [c++]contare i giorni

    sto provando a fare un programma che conti i giorni tra due date....
    sono arrivato a questo punto
    codice:
    #include <iostream>  
    using namespace std;
    bool bisestile(int a);
     int bisinint(int a,int b);
     bool prima0(int gg,int mm, int aa,int gg1, int mm1, int aa1);
     int totgiorni(int gg,int mm,int aa);
     int main(){ 
    int gg,mm,aa;
     int gg1,mm1,aa1;
     int giornitot0,giornitot1;
     cout<<"Inserire due date per conoscere il numero di giorni tra di esse"<<endl;
     //l'inserimento delle date cin>>gg; cout<<"/"; 
    cin>>mm; cout<<"/"; cin>>aa; cout<<endl;
     cin>>gg1; cout<<"/"; cin>>mm1; cout<<"/"; cin>>aa1;
     //prima0(gg, mm, aa,gg1, mm1, aa1) cout<< "falla"<<totgiorni(gg,mm,aa); 
     return 0; 
    }
    /////////////////////////////////////// // 
    le funzioni 
    ///////////////////////////////////////
     //è un anno bisestile??? 
    bool bisestile(int a){     
    if((a % 4 == 0 && a % 100 != 0) || a % 400 == 0) return true;    
     else return false; } 
    //quanti anni bisestili ci sono in quell'intervallo 
    int bisinint(int a,int b){    
     int numbis=0;     
    if (a<b){while(a<b)    
    if (bisestile (a)==true) numbis=numbis+1;   
      else a++;        
     }        
     else if (a==b){            
     if (bisestile(a)==true) numbis=1;
                 else numbis=0;
    }               
    else if (a>b) {while(a>b)     
    if (bisestile (a)==true) numbis=numbis+1;
         else b++;  
           }  
    } 
     //quale delle due date è prima??? 
    bool prima0(int gg,int mm, int aa,int gg1, int mm1, int aa1){     
    if (aa1<aa) return true;     
    else if (aa1>aa) return false;     
    else if (aa1==aa) {         
    if (mm1<mm) return true;         
    else if (mm1>mm) return false;         
    else if (mm1==mm){             
    if (gg1<gg) return true;            
     else if (gg1>gg) return false;             
    else if (gg1==gg) cout<<"Mi dispiace ma le due date sono uguali"<<endl;         
    }     
    }
     }  
    //quanti giorni dall'anno 0??
     int totgiorni(int gg,int mm,int aa){ int giorninelmese; 
    if (mm==1) giorninelmese=31; 
    else if (mm==2) giorninelmese = 59; 
    else if (mm==3) giorninelmese = 90; 
    else if (mm==4) giorninelmese = 120; 
    else if (mm==5) giorninelmese = 151;
     else if (mm==6) giorninelmese = 181; 
    else if (mm==7) giorninelmese = 212;
     else if (mm==8) giorninelmese = 243; 
    else if (mm==9) giorninelmese = 273; 
    else if (mm==10) giorninelmese = 304; 
    else if (mm==11) giorninelmese = 334; 
    else if (mm==12) giorninelmese = 365;
     return gg + (giorninelmese-gg) + ((aa-bisinint(0,aa)*365)+bisinint(0,aa)*366); }
    dopo aver inserito le due date però si ferma mentre mi dovrebbe stampare i giorni dall'anno zero alla prima data in modo che dopo faccio la stessa cosa con la seconda data, li sottraggo e... il gioco è fatto !!
    qualche consiglio o magari se mi fate vedere qualche errore grossolano che non ho visto....
    grazie a tutti
    ciao

  2. #2
    Io userei gli strumenti messi a disposizione dalla libreria standard nell'header <ctime>: popola due strutture tm con le varie componenti di ciascuna data, convertile in time_t usando la funzione mktime, sottrai la più grande dalla più piccola, dividi il numero ottenuto per il numero di secondi presenti in un giorno (3600*24) ed otterrai i giorni di differenza tra le due date.
    Amaro C++, il gusto pieno dell'undefined behavior.

  3. #3

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.