Visualizzazione dei risultati da 1 a 10 su 10
  1. #1
    Utente di HTML.it
    Registrato dal
    Jan 2004
    Messaggi
    444

    Lavorare con le date

    Volevo scrivere una funzione in C++ che, ricevuto un numero di giorni trascorsi, ad esempio, dal 1 gennaio 1900, mi permetta di risalire alla data esatta. C'è un modo per farlo, possibilmente senza utilizzare funzioni standard del c ma utilizzando un algoritmo??? Grazie infinite in anticipo
    *********************************
    Andrea
    *********************************

  2. #2
    Utente di HTML.it L'avatar di MMarzia
    Registrato dal
    Mar 2001
    Messaggi
    1,781
    la prossima volata ricorda di specificare il linguaggio anche nel titolo, come da regolamento
    io sono festosamente cicciottello :: e. cartman

    t'amo senza sapere come, nè quando nè da dove,
    t'amo direttamente senza problemi nè orgoglio:
    così ti amo perchè non so amare altrimenti

  3. #3
    Utente di HTML.it
    Registrato dal
    Dec 2003
    Messaggi
    423
    con una cosa del genere puoi tirare fuori l'anno:

    codice:
    for (aa = 0; (gg>=365 && (aa+1)%4) || (gg>=366 && !(aa+1)%4); aa++)
    	{
    		if (aa%4) gg-=365;
    		else gg-=366;
    	}
    Ora pensa a come fare il resto.

  4. #4
    Utente di HTML.it
    Registrato dal
    Jan 2004
    Messaggi
    444
    interessante !!! Grazie mille
    *********************************
    Andrea
    *********************************

  5. #5
    Utente di HTML.it
    Registrato dal
    Dec 2003
    Messaggi
    423
    P.S. Scusa ma c'è un errore nel codice (ero di corsa). Diciamo che un codice valido potrebbe essere:
    codice:
    for (aa = 0; (gg>=365 && (aa%4)) || (gg>=366 && !(aa%4)); aa++)
    	{
    		if (aa%4) gg-=365;
    		else gg-=366;
    	}

  6. #6
    Utente di HTML.it
    Registrato dal
    Dec 2003
    Messaggi
    423
    Ho scritto un codice completo, ma leggilo solo se non riesci a cavartela in nessun modo da solo:





















































    codice:
    for (aa = 0; (gg>=365 && (aa%4)) || (gg>=366 && !(aa%4)); aa++)
    	{
    		if (aa%4) gg-=365;
    		else gg-=366;
    	}
    	
    	for (mm = 1; (mm==2 && ((gg>=28 && !(aa%4)) || (gg>=29 && !(aa%4))))
    				 || ((mm==4 || mm==6 || mm==10 || mm==11) && gg>=30) || gg>=31; mm++)
    	{
    		if (mm==2)
    		{
    			if (aa%4) gg-=29;
    			else gg-=28;
    		}
    		else if (mm==4 || mm==6 || mm==10 || mm==11) gg-=30;
    		else gg-=31;
    	}

  7. #7
    Utente di HTML.it
    Registrato dal
    Jan 2004
    Messaggi
    444
    ho provato a scrivere questa funzione, utilizzandoi frammenti che mi avete dato

    codice:
    void num2date (long ng, int *gg, int *mm, int *aa)
    {
      ng += 2;
    
      for (*aa = 0; ((ng >= 365 && (!(isBisS(*aa))))||(ng >= 366 && isBisS(*aa))); (*aa)++)
        if (isBisS(*aa))
          ng -= 366;
        else
          ng -= 365;
          
      for (*mm = 1;
            (( *mm == 2 && (( ng > 29 && isBisS (*aa))||(ng> 28 && !isBisS (*aa))))
            || (( *mm == 4 || *mm == 6 || *mm == 9 || *mm == 11) && ng > 30)
            || ng > 31);
            (*mm)++ )
                {
                  if (*mm == 2)
                    if (isBisS(*aa))
                      ng -= 29;
                    else
                      ng -= 28;
                  else
                    if (*mm == 4 || *mm == 6 || *mm == 9 || *mm == 11)
                      ng -= 30;
                    else
                      ng -= 31;
                }
               
      *gg = ng;
      return;
    }
    ng è il numero di giorni trascorsi dal 1 gennaio 0. (se si mette esattamente 1 gennaio 0 si ottiene il valore 0 e così via).

    Ora, non capisco xkè con alcune dati questo codice funzioni, mentre con altre, specialmente prima del 2000, venga spostata di vari giorni... questo problema mi sta facendo impazzire
    *********************************
    Andrea
    *********************************

  8. #8
    Utente di HTML.it
    Registrato dal
    Dec 2003
    Messaggi
    423
    A me così da valori esatti ...
    codice:
    void num2date (long ng, int *gg, int *mm, int *aa)
    {
      for (*aa = 0; ((ng >= 365 && (!(isBisS(*aa))))||(ng >= 366 && isBisS(*aa))); (*aa)++)
        if (isBisS(*aa))
          ng -= 366;
        else
          ng -= 365;
          
      for (*mm = 1;
            (( *mm == 2 && (( ng > 29 && isBisS (*aa))||(ng> 28 && !isBisS (*aa))))
            || (( *mm == 4 || *mm == 6 || *mm == 9 || *mm == 11) && ng > 30)
            || ng > 31);
            (*mm)++ )
                {
                  if (*mm == 2)
                    if (isBisS(*aa))
                      ng -= 29;
                    else
                      ng -= 28;
                  else
                    if (*mm == 4 || *mm == 6 || *mm == 9 || *mm == 11)
                      ng -= 30;
                    else
                      ng -= 31;
                }
               
      *gg = ng+1;
      return;
    }

  9. #9
    Utente di HTML.it
    Registrato dal
    Jan 2004
    Messaggi
    444
    a me x niente... forse sbaglio a calcolare il numero di giorni?
    *********************************
    Andrea
    *********************************

  10. #10
    Utente di HTML.it
    Registrato dal
    Dec 2003
    Messaggi
    423
    Mi sa di sì. Per esempio con questo sito ci si trova:
    http://www.ottiolu.net/tempo/terzo_millennio.php
    E anche calcolando ... Forse non conti i bisestili ?

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 © 2025 vBulletin Solutions, Inc. All rights reserved.