Appunti per Scuola e Università
Umanistiche
Appunti e tesine di tutte le materie per gli studenti delle scuole medie riguardanti le materie umanistiche: dall'italiano alla storia riguardanti le materie umanistiche: dall'italiano alla storia 
Scientifiche
Appunti, analisi, compresione per le scuole medie suddivisi per materie scientifiche, per ognuna troverai appunti, dispense, esercitazioni, tesi e riassunti in download.
Tecniche
Gli appunti, le tesine e riassunti di tecnica amministrativa, ingegneria tecnico, costruzione. Tutti gli appunti di AppuntiMania.com gratis!
Appunti
informatica
C Computer Database Internet Java
Linux unix Reti


AppuntiMania.com » Informatica » Appunti di c » C come cesare

C come cesare




Visite: 504Gradito: [ Picolo appunti ]
Leggi anche appunti:

Operatori logici su bit


Operatori logici su bit Gli operatori logici su bit consentono di porre in relazione

Due file sono il medesimo file?


Due file sono il medesimo file? La domanda è formulata in modo fuorviante. Il

Allocazione dinamica della memoria


Allocazione dinamica della memoria Quando è dichiarata una variabile, il compilatore



Scarica gratis C come cesare

C come Cesare

Il Cesare in questione è proprio Caio Giulio Cesare, il noto imperatore romano al quale si deve la riforma del calendario, effettuata nell'anno 46 a.C., volta, tra l'altro, al perfezionamento della tecnica di calcolo degli anni bisestili. Dal nome dell'imperatore deriva l'appellativo 'numero giuliano', indicante l'integral (vedere pag. 12) ottenibile applicando una formula nota a giorno, mese ed anno di una qualsiasi data: esso esprime il numero di giorni trascorsi da una origine nota (che si colloca più o meno intorno al 5000 a.C.) alla data medesima.



La funzione date2jul() consente di calcolare il numero giuliano corrispondente alla data voluta; va osservato che l'anno può essere qualsiasi intero maggiore o uguale a 0: date2jul() si occupa di ricondurlo ad un valore 'accettabile' sommandovi una costante esprimente il secolo, come descritto nel commento in testa al listato.

/*****************************************************************

    Barninga_Z! - 1994

    long cdecl date2jul(int day,int month,int year);

    int day;     giorno della data da convertire (1-31).

    int month;   mese della data da convertire (1-12).

    int year;    anno della data da convertire.   Può  essere

                 espresso   con  qualsiasi  numero  di cifre.

    RESTITUISCE  Il numero giuliano corrispondente alla data

                 specificata. Attenzione: se il valore fornito

                 come anno è minore di 100 viene sommato 1900 al

                 valore, perciò 2 = 1902 e 94 = 1994. Per

                 esprimere 2002 bisogna quindi fornire il valore

                 reale. Se il valore fornito è compreso tra 100 e

                 999 la  funzione somma 2000 al valore, perciò

                 995 = 2955. Quindi 1995 deve essere 95 o 1995.

    Compilato con Borland C++ 3.1

    bcc -O -d -c -mx date2jul.c

    dove -mx può essere -mt -ms -mc -mm -ml -mh

*****************************************************************/

long cdecl date2jul(int day,int month,int year)

    else

    ctmp = (ytmp/100);

    dtmp = ytmp-(100*ctmp);

    return((146097L*ctmp)/4L+(1461L*dtmp)/4L+(153L*mtmp+2)/5L+1721119L+(long)day);

}

La formula applicata, di natura strettamente tecnica, non necessita commenti; ne deriva inoltre una funzione C del tutto banale. Il numero giuliano corrispondente alla data è restituito come long e può essere validamente utilizzato, ad esempio, nel calcolo dei giorni intercorsi tra due date: essi sono infatti pari alla differenza tra i due numeri giuliani.

La funzione jul2date() effettua l'operazione inversa a quella di date2jul(): essa infatti calcola la data corrispondente a un numero giuliano.

/*****************************************************************

    Barninga_Z! - 1994

    int cdecl jul2date(long jul,int *day,int *month,int *year);

    long jul;    il numero giuliano da convertire.

    int *day;    puntatore   al   giorno    della   data   da

                 convertire (conterrà 1-31).

    int *month;  puntatore al mese della data  da  convertire

                 (conterrà 1-12).

    int *year;   puntatore all'anno della data da convertire.

                 Vedere anche il valore restituito.

    RESTITUISCE  Il secolo  corrispondente  alla  data  espressa

                 dal numero giuliano (19 per 1900, e così via).

                 Attenzione:  l'anno  è  sempre  calcolato

                 sottraendovi il secolo, pertanto  occorre

                 controllare il valore restituito dalla funzione

                 per determinare la data  in  modo  completo (se

                 *year vale 82 e la  funzione  restituisce  19,

                 allora l'anno è 1982; se la funzione restituisce

                 20,  allora l'anno è 2082).

    Compilato con Borland C++ 3.1

    bcc -O -d -c -mx jul2date.c

    dove -mx può essere -mt -ms -mc -mm -ml -mh




*****************************************************************/

int cdecl jul2date(long jul,int *day,int *month,int *year)

    cent = (*year)/100;

    (*year) -= (cent*100);

    return(cent);

}

Anche la jul2date() utilizza una formula tecnica, che non richiede alcun commento. Più interessante è sottolineare che la funzione richiede quali parametri, oltre al numero giuliano da convertire, anche i puntatori alle variabili in cui memorizzare giorno, mese e anno della data calcolata: ciò si rende necessario in quanto le funzioni C possono restituire un solo valore (vedere pag. 89). Si noti, inoltre, che l'anno memorizzato all'indirizzo year è sempre un numero compreso tra 099 (estremi inclusi): infatti il secolo è restituito dalla funzione (incrementato di uno), cosicché l'anno espresso in 4 cifre può essere calcolato, dopo la chiamata a jul2date(), sommando il valore memorizzato all'indirizzo year al valore restituito moltiplicato per 1000. Il secolo corrispondente alla data è ottenibile sottraendo 1 al valore restituito.

Presentiamo ancora una funzione che, pur non operando sui numeri giuliani, risulta utile nell'effettuazione di calcoli sulle date: la isleapyear() consente di determinare se un anno è bisestile.

/*****************************************************************

    Barninga_Z! - 1994

    int cdecl isleapyear(int year);

    int year;  anno sul quale effettuare il controllo. Può essere

               espresso  con  qualsiasi  numero  di cifre.

    RESTITUISCE   0    l'anno non è bisestile.

                  1    l'anno è bisestile.

                  Attenzione: se il valore fornito come anno è

                  < 100  viene sommato 1900 al valore stesso,

                  perciò 2 = 1902 e 94 = 1994. Per esprimere 2002

                  bisogna quindi fornire il valore reale. Se il

                  valore fornito è compreso tra 100 e 999 la

                  funzione somma 2000 al valore, così 995 = 2955.

                  Quindi il 1995 va indicato come 95 o 1995.

    Compilato con Borland C++ 3.1

    bcc -O -d -c -mx isleapyr.c

    dove -mx può essere -mt -ms -mc -mm -ml -mh

*****************************************************************/

#include 'dates.h'

int cdecl isleapyear(int year)

La isleapyear() adotta le medesime convenzioni di date2jul() circa il formato del parametro year.

Di seguito presentiamo un semplice programma adatto a collaudare le funzioni sin qui descritte (i listati di queste non compaiono nel programma):

/*******************************************************************

    JULTEST.C - Barninga Z! - 1994

    Programma di prova per funzioni calcolo date.

    Compilato con Borland C++ 3.1

    bcc jultest.c

*******************************************************************/

#include <stdio.h>

#include <stdlib.h>

long cdecl date2jul(iny day,int month,int year);

int cdecl isleapyear(int year);

int cdecl jul2date(long jul,int *day,int *month,iny *year);

int main(int argc,char **argv)

;

    switch(argc)

    return(0);

}

Il programma può essere invocato con uno oppure quattro parametri numerici sulla riga di comando: nel primo caso esso assume che il parametro rappresenti un numero giuliano da convertire in data; nel secondo caso i tre argomenti sono interpretati come giorno, mese e, rispettivamente, anno esprimenti una data da convertire in numero giuliano.

Scarica gratis C come cesare
Appunti su:







Accedi al tuo account
Scarica 100% gratis e Invia appunti, tesine, riassunti

Registrati ora Password dimenticata?
  • Appunti superiori
  • In questa sezione troverai sunti esame, dispense, appunti universitari, esercitazioni e tesi, suddivisi per le principali facoltà.
  • Università
  • Appunti, dispense, esercitazioni, riassunti direttamente dalla tua aula Universitaria
  • all'Informatica
  • Introduzione all'Informatica, Information and Comunication Tecnology, componenti del computer, software, hardware ...