begin process at 2010 02 09 19:49:59
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

Date / Heure

 > COMMENT SAVOIR QUEL JOUR ÉTAIT-ON À UNE TELLE DATE?

COMMENT SAVOIR QUEL JOUR ÉTAIT-ON À UNE TELLE DATE?


 Information sur la source

Note :
9,5 / 10 - par 2 personnes
9,50 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10
Catégorie :Date / Heure Classé sous :jour, date, trouver, chercher, semaine Niveau :Débutant Date de création :17/02/2006 Vu :23 834

Auteur : tekila_bandita

Ecrire un message privé
Commentaire sur cette source (3)
Ajouter un commentaire et/ou une note

 Description

Ceci un simple code ( débutant ) -en mode console- pour savoir quel jour somme nous en fonction d'une certaine date.
Ce programme s'utilise soit en ligne de commande soit en mode "progressif" ( je sais pas comment on dis... )
Pour utiliser en mode commande la syntaxe est :
emplacement_de_l'exe <int jour> <int mois> <long int annee>

voilou !

Source

  • #include <stdio.h>
  • #include <stdlib.h>
  • //Ces deux macros sont utilisés pour faire un calcul, ce calcul est expliqué en bas.
  • #define f(annee, mois) ( ((mois) <= 2) ? ((annee) - 1) : (annee) )
  • #define g(mois) ( ((mois) <= 2) ? ((mois) + 13) : ((mois) + 1) )
  • //Définition de la structure date contenant trois membres : le jour, le mois, et l'annee.
  • struct date
  • {
  • int jour;
  • int mois;
  • long int annee;
  • };
  • //Tableaux de pointeur vers char servant à l'affichage des jours.
  • const char *daysOfWeek[] = { "dimanche", "lundi", "mardi", "mercredi", "jeudi", "vendredi", "samedi" };
  • //Ce calcul est plus ou moins expliqué en bas, ainsi que la raison pour laquelle
  • //Deuxmacros sont utilisés au lieu d'une seule.
  • #define myCalculOfDay(d) (1461 * f(d.annee, d.mois) / 4 + 153 * g(d.mois) / 5 + d.jour)
  • #define myWhatDay(d_) ( (myCalculOfDay(d_) - 621049) % 7 )
  • //Fonction affichant le jour. Cette fonction ne prend aucun argument car elle
  • //est utiliséé si l'utilisateu n'utilie pas le programme en ligne de commande.
  • void whatday( void )
  • {
  • struct date entry;
  • printf("\nEntrez votre date ( jj/mm/aaaa ) : ");
  • scanf("%2i/%2i/%4li", &(entry.jour), &(entry.mois), &(entry.annee));
  • printf("\n\nLe %2i/%2i/%4li est un %s.\n\n", entry.jour, entry.mois, entry.annee,
  • daysOfWeek[myWhatDay(entry)]);
  • exit(EXIT_SUCCESS);
  • }
  • //Voici la meme fonction que celle d'au dessus, mais avec un argument de type structure date
  • //Cette structure a pour caleur les trois arguments de la ligne de commande.
  • void whatday2( struct date d_ )
  • {
  • printf("\n\nLe %2i/%2i/%4li est un %s.\n\n", d_.jour, d_.mois, d_.annee,
  • daysOfWeek[myWhatDay(d_)]); //Affichage du jour grace au tableau
  • exit(EXIT_SUCCESS);
  • }
  • //Fonction main, gerant "l'interface" du programme.
  • int main (int argc, char *argv[])
  • {
  • //Si l'utilisateur n'utilise pas le programme en ligne de commande, argc a pour valeur 1.
  • if (argc == 1)
  • whatday(); //Lancement de la fonction whatday
  • //Si l'utilisateur utilise le programme en mode ligne de commande correctement ( c'est à dire 3 arguments ) argc a pour valeur 4
  • else if (argc == 4)
  • {
  • //Definition de la structure entry. Conversion des arguments de type char de la ligne de commande vers le type approprié
  • // ( atoi -> char vers int - atol -> char vers long int )
  • struct date entry = { entry.jour = atoi(argv[1]), entry.mois = atoi(argv[2]), entry.annee = atol(argv[3]) };
  • whatday2( entry ); //Lancement de la fonction whatday2 avec comme argument la structure prédéfini
  • }
  • //Dans les autres cas ( l'utilisateur a taper des arguments de ligne de commande, mais pas le bon nombre)
  • else
  • {
  • //Affichage d'un message d'erreur approprié
  • printf("\n\nErreur, nombre d'arguments incorrect !\n\nFormat 1 : whatday <jj> <mm> <aaaa>\n");
  • printf("Format 2 : whatday\n\n");
  • //Exit du programme avec une valeur d'erreur
  • exit(EXIT_FAILURE);
  • }
  • //Retour d'une valeur d'erreur
  • return EXIT_FAILURE;
  • //Cette valeur ne sera jamais utilisée car le programme quittera toujours avant.
  • }
  • /********** END *********/
#include <stdio.h>
#include <stdlib.h>

//Ces deux macros sont utilisés pour faire un calcul, ce calcul est expliqué en bas.
#define f(annee, mois) ( ((mois) <= 2) ? ((annee) - 1) : (annee) )
#define g(mois) ( ((mois) <= 2) ? ((mois) + 13) : ((mois) + 1) )

//Définition de la structure date contenant trois membres : le jour, le mois, et l'annee.
struct date
{
    int jour;
    int mois;
    long int annee;
};

//Tableaux de pointeur vers char servant à l'affichage des jours.
const char *daysOfWeek[] = { "dimanche", "lundi", "mardi", "mercredi", "jeudi", "vendredi", "samedi" };

//Ce calcul est plus ou moins expliqué en bas, ainsi que la raison pour laquelle
//Deuxmacros sont utilisés au lieu d'une seule.
#define myCalculOfDay(d) (1461 * f(d.annee, d.mois) / 4 + 153 * g(d.mois) / 5 + d.jour)
#define myWhatDay(d_) ( (myCalculOfDay(d_) - 621049) % 7 )

//Fonction affichant le jour. Cette fonction ne prend aucun argument car elle
//est utiliséé si l'utilisateu n'utilie pas le programme en ligne de commande.
void whatday( void )
{
    struct date entry;
    printf("\nEntrez votre date ( jj/mm/aaaa ) : ");
    scanf("%2i/%2i/%4li", &(entry.jour), &(entry.mois), &(entry.annee));
    printf("\n\nLe %2i/%2i/%4li est un %s.\n\n", entry.jour, entry.mois, entry.annee,
daysOfWeek[myWhatDay(entry)]);
    exit(EXIT_SUCCESS);
}

//Voici la meme fonction que celle d'au dessus, mais avec un argument de type structure date
//Cette structure a pour caleur les trois arguments de la ligne de commande.
void whatday2( struct date d_ )
{
    printf("\n\nLe %2i/%2i/%4li est un %s.\n\n", d_.jour, d_.mois, d_.annee,
daysOfWeek[myWhatDay(d_)]);                                                   //Affichage du jour grace au tableau
    exit(EXIT_SUCCESS);
}

//Fonction main, gerant "l'interface" du programme.
int main (int argc, char *argv[])
{
//Si l'utilisateur n'utilise pas le programme en ligne de commande, argc a pour valeur 1.
if (argc == 1)
     whatday();                                  //Lancement de la fonction whatday
//Si l'utilisateur utilise le programme en mode ligne de commande correctement ( c'est à dire 3 arguments ) argc a pour valeur 4
else if (argc == 4)
{
     //Definition de la structure entry. Conversion des arguments de type char de la ligne de commande vers le type approprié
     // ( atoi -> char vers int          -           atol -> char vers long int )
     struct date entry = { entry.jour = atoi(argv[1]), entry.mois = atoi(argv[2]), entry.annee = atol(argv[3]) };
     whatday2( entry );                            //Lancement de la fonction whatday2 avec comme argument la structure prédéfini
}
//Dans les autres cas ( l'utilisateur a taper des arguments de ligne de commande, mais pas le bon nombre)
else
{
    //Affichage d'un message d'erreur approprié
     printf("\n\nErreur, nombre d'arguments incorrect !\n\nFormat 1 :  whatday <jj> <mm> <aaaa>\n");
     printf("Format 2 : whatday\n\n");
     //Exit du programme avec une valeur d'erreur
     exit(EXIT_FAILURE);
}

//Retour d'une valeur d'erreur
return EXIT_FAILURE;
//Cette valeur ne sera jamais utilisée car le programme quittera toujours avant.
}

/**********                            END                                *********/

 Conclusion

Voila!

Explication du calcul :
Il existe une formule pour calculer le nombre de jours séparant deux dates. Il sagit de calculer N pour chacune des deux dates et d'en calculer ensuite la différence. N se calcul de la maniere suivante :

N = 1461 * f(annee, mois) / 4 + 153 * g(mois) / 5 + jour

                   où :
f(annee, mois) renvoie annee - 1 si mois est inferieur ou egale a 2, sinon, renvoie annee.
et
g(mois)        renvoie mois + 13 si mois est infereur ou egale a 2, sinon, renvoie mois + 1.


Si on prend la valeur N d'une date calculé comme ci dessus, qu'on lui soustrait 621 049 et qu'on garde le modulo 7 ( reste de la division de ce nombre par 7 ) on obtient une valeur comprise entre 0 et 6. Cette valeur correspond au jour de la semaine ( 1 -> lundi, donc 0 -> dimanche ).

Si j'ai donc ecris le calcul en deux macros, c'est pour pouvoir l'extraire plus facilement pour calculer la difference entre deux dates...
Maintenant que vous savez faire, vous pouvez vous aussi le faire.

PS : Cette formule a été trouvé dans un ouvrage sur le C intitulé "programmation en language C", de Stephen KOCHAN.

MERCI !


 Sources de la même categorie

Source avec Zip CLASSE MOMENT V2.0 par le_duche
CALCUL DATE DE PAQUES (DATE MOBILE) par steph12358
Source avec une capture VACCATION (AVEC FONCTION) CONSOLERIE, REMIX GCC par sebman
Source avec Zip Source avec une capture AFFICHER ET DIRE L'HEURE (REPONSE FORUM) par ndubien
Source avec Zip Source avec une capture ARRÊT AUTOMATIQUE DE WINDOWS. par patarotalexandre

 Sources en rapport avec celle ci

Source avec Zip Source avec une capture CALENDRIER (WIN64) par BruNews
JOUR A PARTIR D'UNE DATE MM/JJ/YYYY par elkasimi2007
Source avec Zip Source avec une capture DELAMBRE par ralebole
AFFICHE DU JOUR PAR RAPPORT À UNE DATE par Pacifica
CALENDRIER PERPÉTUEL par blassiou083

Commentaires et avis

Commentaire de Kmleon le 18/02/2006 14:17:19

Dans un script, j'avais justement besoin de ce genre de formule. Donc merci beaucoup.
Par contre, je ne comprend rien à la formule :-/ Si quelqu'un a petite explication ....

Commentaire de Joky le 18/02/2006 15:12:04

Moi je fais comme ça :

int Julien(int Day, int Month, int Year)
{
    int J;
    J = 367*Year-7*(Year+(Month+9)/12)/4-3*((Year+(Month-9)/7)/100+1)/4+275*Month/9+Day+1721029;
    J++;
    return J;
}

int FindDay(char* MyDate)
{
char *Day[] = {"Dimanche", "Lundi", "Mardi", "Mercredi", "Jeudi", "Vendredi", "Samedi"};
int J = Julien(MyDate->Day, MyDate->Month, MyDate->Year);

strcpy(MyDate, Day[J%7]);
return J%7;
}

Commentaire de tekila_bandita le 24/02/2006 13:04:21

Eh bien en faite, si on s'y attarde un peu je pense que l'on pourrait reussir a simplifier la formule, mais moi je l'ai trouver en tant qu'exercice d'application dans mon livre sur le C, alors je l'ai appliqué...
Dans l'exercice, il montre une formule que si on l'applique à deux dates et que l'on effectue la différence des resultats obtenus, alors on obtient, d'une maniere simple, le nombre de jours d'ecart entre ces deux dates...
Dans un exercice juste en dessous, il nous dise que si l'on reprend le resultat de ce calcul appliqué à une date, qu'on lui soustrait 621049 et qu'on garde le reste de ce resultat divisé par 7, on obtient un chiffre compris entre 0 et 6 indiquant le jour de la semaine (Le lundi étant le premier jour de la semaine, il se voit donc affecter la valeur 1, donc dimanche et 0 vu qu'il n'y a pas de valeur 7...)...

Je ne peus pas plus vous expliqué, mais si un jour je m'attarde sur cette formule, alors je vous ferait part des details du calcul...
En tout cas, merci pour vos notes ! :D ;)

 Ajouter un commentaire


Discussions en rapport avec ce code source dans le forum

création de fichier [ par freeze ] Salut à tous,je voudrais créer un fichier qui reprendrai la date du jourPar exemple 0110022.zip pour un fichier zip du 01/10/2002En fait je voudrais é Connaitre le numéro de semaine pour une date donnée [ par diouck ] SalutJe sais qu'en VB il est possible de connaitre le numéro de semaine d'une date donnée avec la fonction suivante :"NumWeek.Text = DatePart("ww", Da compiler en c++ avec la date [ par Ganaga ] Bonjour, Je cherche un moyen de compiler un programme en c++ qui inclu la date du jour en dur. &#199;a permettrai d'indiquer dans un fichier ex&#233; calendrier [ par chinois57 ] bjr tt le monde mon prof de math ma demander de faire un calendier perpituel en C mais je coince un peu bcp "please help me" ma source est :#include & programmatione en C [ par badramus ] bonjour tout le monde j'aimerais que vous m'aidez pour un projet &#224; rendre le 15 mai&nbsp;le projet present&#233; ci dessous1&nbsp; pour une date donner la date avec le jour et mois et annee [ par abdokayane ] bjr svp je cherche une applaication avec langage c qui permet de donner le date avec le jour le mois et l annee lorsq je veux ajouter des jours par ex trouver l'algorithme [ par freyge ] k-will salut j'ai un petit souci je veux realiser un programme apres avoir donnée la date il vous donne le jour par exemple: donnez la date: 21 08 20 Chercher code source socket [ par Booster ] Bonsoir à tous,Dans le but d'un projet j'aimerais trouver le code source des sockets en gros je ne cherche pas le code machine, mais plutôt un code so Pseudo-code [ par Caine10 ] Coucou, j'ai un petit soucis avec l'éxercice  suivant... j'ai grand besoin d'aide ^_^"L'utilisateur encode en une seule fois une date sous la forme AA SQL et date ! [ par Nixeus ] Bonjour à tous !Le programme que je développe doit comptabiliser des passages ( carte magnétiques) chaque jour ( afin d'en faire des statistiques)Voic


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Février 2010
LMMJVSD
1234567
891011121314
15161718192021
22232425262728

Consulter la suite du CalendriCode

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,296 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales