Last active
August 21, 2017 07:54
-
-
Save HorlogeSkynet/0fa1fad5a432c2415a74 to your computer and use it in GitHub Desktop.
Count the numbers of days between a date in the past and today
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#include <stdio.h> | |
#include <time.h> | |
#define NBJOURSANNEE 365 | |
#define NBJOURSANNEEBIS 366 | |
#define NBMOISANNEE 12 | |
#define NBJOURSMOIS30 30 | |
#define NBJOURSMOIS31 31 | |
#define NBJOURSJANVIER 31 | |
#define NBJOURSMOIFEB 28 | |
#define NBJOURSMOIFEBBIS 29 | |
#define NBJOURSMARS 31 | |
#define NBJOURSAVRIL 30 | |
#define NBJOURSMAI 31 | |
#define NBJOURSJUIN 30 | |
#define NBJOURSJUILLET 31 | |
#define NBJOURSAOUT 31 | |
#define NBJOURSSEPTEMPBRE 30 | |
#define NBJOURSOCTOBRE 31 | |
#define NBJOURSNOVEMBRE 30 | |
#define NBJOURSDECEMBRE 31 | |
#define JANVIER 1 | |
#define FEVRIER 2 | |
#define MARS 3 | |
#define AVRIL 4 | |
#define MAI 5 | |
#define JUIN 6 | |
#define JUILLET 7 | |
#define AOUT 8 | |
#define SEPTEMBRE 9 | |
#define OCTOBRE 10 | |
#define NOVEMBRE 11 | |
#define DECEMBRE 12 | |
#define true 1 | |
#define false 0 | |
_Bool bissextile(int annee) | |
{ | |
if(((annee % 4 == 0) && (annee % 100 != 0)) || annee % 400 == 0) | |
{ | |
return true; | |
} | |
else | |
{ | |
return false; | |
} | |
} | |
//1ère Partie (Bloc Année saisie) | |
void nombreJoursBloc1(unsigned long int *ptr_nombreJours, unsigned int jour, unsigned int mois, unsigned int annee) //Nombre de Jours jusqu'à la fin du mois + jusqu'au 31/12 | |
{ | |
switch(mois) | |
{ | |
case JANVIER: | |
*ptr_nombreJours += (NBJOURSJANVIER - jour); | |
break; | |
case FEVRIER: | |
if(bissextile(annee)) | |
{ | |
*ptr_nombreJours += (NBJOURSMOIFEBBIS - jour); | |
} | |
else | |
{ | |
*ptr_nombreJours += (NBJOURSMOIFEB - jour); | |
} | |
break; | |
case MARS: | |
*ptr_nombreJours += (NBJOURSMARS - jour); | |
break; | |
case AVRIL: | |
*ptr_nombreJours += (NBJOURSAVRIL - jour); | |
break; | |
case MAI: | |
*ptr_nombreJours += (NBJOURSMAI - jour); | |
break; | |
case JUIN: | |
*ptr_nombreJours += (NBJOURSJUIN - jour); | |
break; | |
case JUILLET: | |
*ptr_nombreJours += (NBJOURSJUILLET - jour); | |
break; | |
case AOUT: | |
*ptr_nombreJours += (NBJOURSAOUT - jour); | |
break; | |
case SEPTEMBRE: | |
*ptr_nombreJours += (NBJOURSSEPTEMPBRE - jour); | |
break; | |
case OCTOBRE: | |
*ptr_nombreJours += (NBJOURSOCTOBRE - jour); | |
break; | |
case NOVEMBRE: | |
*ptr_nombreJours += (NBJOURSNOVEMBRE - jour); | |
break; | |
case DECEMBRE: | |
*ptr_nombreJours += (NBJOURSDECEMBRE - jour); | |
break; | |
default: | |
break; | |
} | |
short int i; | |
for(i = mois + 1; i <= NBMOISANNEE; i++) | |
{ | |
switch(i) | |
{ | |
case JANVIER: | |
//Inutile | |
break; | |
case FEVRIER: | |
if(bissextile(annee)) | |
{ | |
*ptr_nombreJours += NBJOURSMOIFEBBIS; | |
} | |
else | |
{ | |
*ptr_nombreJours += NBJOURSMOIFEB; | |
} | |
break; | |
case MARS: | |
*ptr_nombreJours += NBJOURSMARS; | |
break; | |
case AVRIL: | |
*ptr_nombreJours += NBJOURSAVRIL; | |
break; | |
case MAI: | |
*ptr_nombreJours += NBJOURSMAI; | |
break; | |
case JUIN: | |
*ptr_nombreJours += NBJOURSJUIN; | |
break; | |
case JUILLET: | |
*ptr_nombreJours += NBJOURSJUILLET; | |
break; | |
case AOUT: | |
*ptr_nombreJours += NBJOURSAOUT; | |
break; | |
case SEPTEMBRE: | |
*ptr_nombreJours += NBJOURSSEPTEMPBRE; | |
break; | |
case OCTOBRE: | |
*ptr_nombreJours += NBJOURSOCTOBRE; | |
break; | |
case NOVEMBRE: | |
*ptr_nombreJours += NBJOURSNOVEMBRE; | |
break; | |
case DECEMBRE: | |
*ptr_nombreJours += NBJOURSDECEMBRE; | |
break; | |
default: | |
break; | |
} | |
} | |
} | |
//2ème Partie (Bloc nombre d'Années) | |
void nombreJoursBloc2(unsigned long int *ptr_nombreJours, unsigned int annee, unsigned int anneeActuelle) //Nombre de Jours entre (annee + 1) et (anneeActuelle - 1) | |
{ | |
unsigned short int i; | |
for(i = annee + 1; i < anneeActuelle; i++) | |
{ | |
if(bissextile(i)) | |
{ | |
*ptr_nombreJours += NBJOURSANNEEBIS; | |
} | |
else | |
{ | |
*ptr_nombreJours += NBJOURSANNEE; | |
} | |
} | |
} | |
//3ème Partie (Bloc Année actuelle) | |
void nombreJoursBloc3(unsigned long int *ptr_nombreJours, unsigned int jourActuel, unsigned int moisActuel, unsigned int anneeActuelle) //Nombre de Jours du 01/01 à la Date Actuelle | |
{ | |
*ptr_nombreJours += jourActuel; | |
unsigned short int i; | |
for(i = JANVIER; i < moisActuel; i++) | |
{ | |
switch(i) | |
{ | |
case JANVIER: | |
*ptr_nombreJours += NBJOURSJANVIER; | |
break; | |
case FEVRIER: | |
if(bissextile(anneeActuelle)) | |
{ | |
*ptr_nombreJours += NBJOURSMOIFEBBIS; | |
} | |
else | |
{ | |
*ptr_nombreJours += NBJOURSMOIFEB; | |
} | |
break; | |
case MARS: | |
*ptr_nombreJours += NBJOURSMARS; | |
break; | |
case AVRIL: | |
*ptr_nombreJours += NBJOURSAVRIL; | |
break; | |
case MAI: | |
*ptr_nombreJours += NBJOURSMAI; | |
break; | |
case JUIN: | |
*ptr_nombreJours += NBJOURSJUIN; | |
break; | |
case JUILLET: | |
*ptr_nombreJours += NBJOURSJUILLET; | |
break; | |
case AOUT: | |
*ptr_nombreJours += NBJOURSAOUT; | |
break; | |
case SEPTEMBRE: | |
*ptr_nombreJours += NBJOURSSEPTEMPBRE; | |
break; | |
case OCTOBRE: | |
*ptr_nombreJours += NBJOURSOCTOBRE; | |
break; | |
case NOVEMBRE: | |
*ptr_nombreJours += NBJOURSNOVEMBRE; | |
break; | |
case DECEMBRE: | |
//Inutile | |
break; | |
default: | |
break; | |
} | |
} | |
} | |
//4ème Partie (Bloc Année actuelle) | |
void nombreJoursBloc4(unsigned long int *ptr_nombreJours, unsigned int jour, unsigned int mois, unsigned int annee, unsigned int jourActuel, unsigned int moisActuel) //Nombre de Jours entre les deux Dates | |
{ | |
if(mois == moisActuel) | |
{ | |
*ptr_nombreJours += (jourActuel - jour); | |
} | |
else | |
{ | |
*ptr_nombreJours += jourActuel; | |
switch(mois) | |
{ | |
case JANVIER: | |
*ptr_nombreJours += (NBJOURSJANVIER - jour); | |
break; | |
case FEVRIER: | |
if(bissextile(annee)) | |
{ | |
*ptr_nombreJours += (NBJOURSMOIFEBBIS - jour); | |
} | |
else | |
{ | |
*ptr_nombreJours += (NBJOURSMOIFEB - jour); | |
} | |
break; | |
case MARS: | |
*ptr_nombreJours += (NBJOURSMARS - jour); | |
break; | |
case AVRIL: | |
*ptr_nombreJours += (NBJOURSAVRIL - jour); | |
break; | |
case MAI: | |
*ptr_nombreJours += (NBJOURSMAI - jour); | |
break; | |
case JUIN: | |
*ptr_nombreJours += (NBJOURSJUIN - jour); | |
break; | |
case JUILLET: | |
*ptr_nombreJours += (NBJOURSJUILLET - jour); | |
break; | |
case AOUT: | |
*ptr_nombreJours += (NBJOURSAOUT - jour); | |
break; | |
case SEPTEMBRE: | |
*ptr_nombreJours += (NBJOURSSEPTEMPBRE - jour); | |
break; | |
case OCTOBRE: | |
*ptr_nombreJours += (NBJOURSOCTOBRE - jour); | |
break; | |
case NOVEMBRE: | |
*ptr_nombreJours += (NBJOURSNOVEMBRE - jour); | |
break; | |
case DECEMBRE: | |
*ptr_nombreJours += (NBJOURSDECEMBRE - jour); | |
break; | |
default: | |
break; | |
} | |
unsigned short int i; | |
for(i = mois + 1; i < moisActuel; i++) | |
{ | |
switch(i) | |
{ | |
case JANVIER: | |
*ptr_nombreJours += NBJOURSJANVIER; | |
break; | |
case FEVRIER: | |
if(bissextile(annee)) | |
{ | |
*ptr_nombreJours += NBJOURSMOIFEBBIS; | |
} | |
else | |
{ | |
*ptr_nombreJours += NBJOURSMOIFEB; | |
} | |
break; | |
case MARS: | |
*ptr_nombreJours += NBJOURSMARS; | |
break; | |
case AVRIL: | |
*ptr_nombreJours += NBJOURSAVRIL; | |
break; | |
case MAI: | |
*ptr_nombreJours += NBJOURSMAI; | |
break; | |
case JUIN: | |
*ptr_nombreJours += NBJOURSJUIN; | |
break; | |
case JUILLET: | |
*ptr_nombreJours += NBJOURSJUILLET; | |
break; | |
case AOUT: | |
*ptr_nombreJours += NBJOURSAOUT; | |
break; | |
case SEPTEMBRE: | |
*ptr_nombreJours += NBJOURSSEPTEMPBRE; | |
break; | |
case OCTOBRE: | |
*ptr_nombreJours += NBJOURSOCTOBRE; | |
break; | |
case NOVEMBRE: | |
*ptr_nombreJours += NBJOURSNOVEMBRE; | |
break; | |
case DECEMBRE: | |
//Inutile | |
break; | |
default: | |
break; | |
} | |
} | |
} | |
} | |
int main(int argc, char *argv[]) | |
{ | |
time_t secondes; | |
struct tm actual; | |
time(&secondes); | |
actual = *localtime(&secondes); | |
unsigned int anneeActuelle = actual.tm_year + 1900, moisActuel = actual.tm_mon + 1, jourActuel = actual.tm_mday; | |
printf("\n\n\nDate Actuelle: %d/%d/%d.\n", jourActuel, moisActuel, anneeActuelle); | |
printf("Date Choisie ?\n\n"); | |
unsigned int jour = 0, mois = 0, annee = 0; | |
unsigned long int nombreJours = 0; | |
printf("\nSaisir une Annee comprise entre 1 et %u !", anneeActuelle); | |
do | |
{ | |
printf("\nAnnee: "); | |
scanf("%u", &annee); | |
} while(annee > anneeActuelle || annee == 0); //Pas d'année dans le futur et l'année 0 n'a pas existé | |
printf("\nSaisir un Mois compris entre 1 et %d, et non dans le futur !", NBMOISANNEE); | |
do | |
{ | |
printf("\nMois: "); | |
scanf("%u", &mois); | |
} while(mois > NBMOISANNEE || (annee == anneeActuelle && mois > moisActuel)); //Pas de mois dans le futur par rapport à l'année actuelle, ni mois inférieur à Janvier, ni mois supérieur à Décembre | |
printf("\nSaisir un Jour compris entre 1 et 28 / 29 / 30 / 31 et non dans le futur !"); | |
do | |
{ | |
printf("\nJour: "); | |
scanf("%u", &jour); | |
} while((jour > NBJOURSMOIS31 && (mois == JANVIER || mois == MARS || mois == MAI || mois == JUILLET || mois == AOUT || mois == OCTOBRE || mois == DECEMBRE)) || (jour > NBJOURSMOIS30 && (mois == AVRIL || mois == JUIN || mois == SEPTEMBRE || mois == NOVEMBRE)) || ((mois == FEVRIER && ((jour > NBJOURSMOIFEB && !bissextile(annee)) || ((jour > NBJOURSMOIFEBBIS) && bissextile(annee)))) || (annee == anneeActuelle && mois == moisActuel && jour > jourActuel))); | |
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// | |
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// | |
if(annee != anneeActuelle) | |
{ | |
nombreJoursBloc1(&nombreJours, jour, mois, annee); | |
nombreJoursBloc2(&nombreJours, annee, anneeActuelle); | |
nombreJoursBloc3(&nombreJours, jourActuel, moisActuel, anneeActuelle); | |
} | |
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// | |
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// | |
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// | |
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// | |
else | |
{ | |
nombreJoursBloc4(&nombreJours, jour, mois, annee, jourActuel, moisActuel); | |
} | |
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// | |
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// | |
if(nombreJours > 1) | |
{ | |
printf("\n\nIl y a %ld jours depuis le %u/%u/%u Riri' :) \n\n\n", nombreJours, jour, mois, annee); | |
} | |
else | |
{ | |
printf("\n\nIl y a %ld jour depuis le %u/%u/%u Riri' :) \n\n\n", nombreJours, jour, mois, annee); | |
} | |
return 0; | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment