Visualizzazione dei risultati da 1 a 6 su 6

Discussione: [C] anno bisestile

  1. #1
    Utente di HTML.it
    Registrato dal
    Sep 2006
    Messaggi
    383

    anno bisestile

    Ciao,
    e' daun po di tempo che dovevo scrivere questo semplice programma, ma non conoscendolo,ho voluto prima documentarmi bene sull'argomento.

    Il titolo e' semplice,ma con una precisazione.
    Si' viene chiesto un numero che rappresenta un anno qualsiasi del calendario,in modo che il programma dica se cade come bisestile o meno.
    Ma ho voluto,progettandolo,far si che venga riconosciuto l'anno se 'storicamente' bisestile,piu o meno.

    Ho aggiunto quella parola per un motivo ben preciso.
    Ora non stando a perdere tempo sulle ragioni di questa regola del calendario,si distinguono due periodi storici:

    -prima del 1582 era in vigore il calendario giuliano,il quale stabiliva che un anno era bisestile ogni 4 anni a partire da una data stabilita.

    -nel 1582 entra in vigore il calendario gregoriano, che conferma la regola di prima,ma che esclude gli anni centenari, a meno che essi non siano divisibili per 400 come il 1200,1600,2000 ecc..

    Ora nel programma vorrei implementare questa situazione.
    Mentre una soluzione l'ho trovata se applicassi sempre il gregoriano, e ancora piu facilmente il calendario giuliano, ancora non ho risolto per quanto riguarda la possibilita'
    di applicare entrambe le cose.

    Mostro quanto ho scritto in forma di codice (incompleto):

    #include <stdio.h>

    main()
    {
    int anno;
    printf("\nInserisci un anno del calendario da analizzare: ");
    scanf("%d",&anno);
    if (anno>0)
    if (anno<1582)
    else ((anno % 4 == 0 && anno % 100 != 0) || anno % 400 == 0)

  2. #2
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,464
    Il codice e' incompleto ma anche la tua domanda ... detto cio', qual e' la richiesta?
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  3. #3
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,304

    Moderazione

    Il linguaggio va specificato anche nel titolo.

    Aggiungo io.


    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

  4. #4
    Utente di HTML.it L'avatar di sotoli
    Registrato dal
    Mar 2008
    Messaggi
    150
    Potresti provare una funzione del genere che ritorna -1 se l'anno in questione è < 0, ritorna 0 se l'anno non è bisestile e 1 se è bisestile. Dovrebbe funzionare.

    codice:
    int bisestile(int a)
    {
         if(a >= 0)
         {
             if(a < 1582)
                 return (a % 4) ? 0 : 1;
             else
                 return ((a % 400) ? ((a % 100) ? ((a % 4) ? 0 : 1) : 0) : 1);
         }
         return -1;
    }

  5. #5
    Utente di HTML.it
    Registrato dal
    Sep 2006
    Messaggi
    383
    Sotoli,e' un ottima idea!

    Pero' faccio notare un mio dubbio:in quelle espressioni condizionali(sopratutto la seconda) mi sembra che gli 0 sono al posto degli 1 e viceversa.

    0 vuol dire falso e 1 vero , e' cosi'?

    Off-topic: anch'io sono ariete

  6. #6
    a me sembra che vada benissimo, se vuoi puoi modificarlo, ma solo per maggior chiarezza del codice, così (ma è uguale)
    codice:
    typedef int BOOL
    #define TRUE 1
    #define FALSE 0
    
    BOOL isLeap ( int anno )
    {
         int a = anno;
         if ( a >= 0 )
         {
             if(a < 1582)
                 return (a % 4) ? FALSE : TRUE ;
             else
                 return ((a % 400) ? ((a % 100) ? ((a % 4) ? FALSE : TRUE) : FALSE) : TRUE);
         }
         return -1;
    }

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.