Au faite le programme doit exécuter les trois tâches suivante:
1 pour une date donnée (jj/mm/aaaa) determiner le jour (lundi, mardi,... , dimanche)
2 pour une année donnée determiner la date de la fete de paques
3 pour un nombre de jour donnée (>0) determiner la date (jour/mois/année).on prend comme point de départ le 1er janvier 1960.
Sur le site j'ai qu'un programme qui determine le jour pour une année ,un mois et une date donné.
Comment pourrai-je ajouter un programme qui permet de determiner la date de la fête de pâque.
voici le code source permettant de determiner le jour.
#include <stdio.h>
#include <conio.h>
void erreurs (void);
int cherche_jour (int jour, int _code_mois);
int cherche_mois (int mois_n, int bisextile, int _code_annee);
int cherche_annee (int annee, int avant);
void erreurs ()
{
puts ("<<< DATE NON VALIDE >>>");
}
int cherche_jour (int jour, int _code_mois)
{
int tab_jour[5][7] = {{1,2,3,4,5,6,7},{8,9,10,11,12,13,14},{15,16,17,18,19,20,21},
{22,23,24,25,26,27,28},{29,30,31,0,0,0,0}},
tab_code_jour[7][7] = {{5,6,0,1,2,3,4},{6,0,1,2,3,4,5},{0,1,2,3,4,5,6},
{1,2,3,4,5,6,0},{2,3,4,5,6,0,1},{3,4,5,6,0,1,2},{4,5,6,0,1,2,3}},
ligne, colonne;
ligne = colonne = 0;
while (tab_jour[ligne][colonne] != jour)
{
if (colonne == 6) { colonne = 0; ligne ++; }
else colonne ++;
}
ligne = _code_mois;
return (tab_code_jour[ligne][colonne]);
}
int cherche_mois (int mois_n, int bisextile, int _code_annee)
{
int //tab_mois1[3][7] = {{5,7,3,6,9,4,10},{0,2,11,0,12,7,0},{0,0,0,0,0,1,0}},
tab_mois1[3][7] = {{5,2,3,6,9,1,10},{0,8,11,0,12,7,0},{0,0,0,0,0,4,0}},
//tab_mois0[3][7] = {{5,7,2,6,9,4,1},{0,0,3,0,12,7,10},{0,0,0,11,0,0,0}},
tab_mois0[3][7] = {{5,8,2,6,9,4,1},{0,0,3,0,12,7,10},{0,0,11,0,0,0,0}},
tab_code_mois[7][7] = {{1,2,3,4,5,6,0},{2,3,4,5,6,0,1},{3,4,5,6,0,1,2},
{4,5,6,0,1,2,3},{5,6,0,1,2,3,4},{6,0,1,2,3,4,5},{0,1,2,3,4,5,6}},
ligne, colonne;
ligne = colonne = 0;
if (bisextile == 1)
while (tab_mois1[ligne][colonne] != mois_n)
{
if (colonne == 6) { colonne = 0; ligne ++; }
else colonne ++;
}
else
while (tab_mois0[ligne][colonne] != mois_n)
{
if (colonne == 6) { colonne = 0; ligne ++; }
else colonne ++;
}
ligne = _code_annee;
return (tab_code_mois[ligne][colonne]);
}
int cherche_annee (int annee, int avant)
{
int tab_centaines[7][5] = { {0,7,14,17,21},{1,8,-1,-1,-1},{2,9,-1,18,22},
{3,10,-1,-1,-1},{4,11,-1,19,23},{5,12,16,20,24},{26,13,-1,-1,-1}},
tab_dizaines[18][7] = {{0,1,2,3,-1,4,5},{6,7,-1,8,9,10,11},
{-1,12,13,14,15,-1,16},{17,18,19,-1,20,21,22},
{23,-1,24,25,26,27,-1},{28,29,30,31,-1,32,33},
{34,35,-1,36,37,38,39},{-1,40,41,42,43,-1,44},
{45,46,47,-1,48,49,50},{51,-1,52,53,54,55,-1},
{56,57,58,59,-1,60,61},{62,63,-1,64,65,66,67},
{-1,68,69,70,71,-1,72},{73,74,75,-1,76,77,78},
{79,-1,80,81,82,83,-1},{84,85,86,87,-1,88,89},
{90,91,-1,92,93,94,95},{-1,96,97,98,99,-1,-1}},
tab_code_annee[7][7] = {{6,0,1,2,3,4,5},{5,6,0,1,2,3,4},{4,5,6,0,1,2,3},{3,4,5,6,0,1,2},
{2,3,4,5,6,0,1},{1,2,3,4,5,6,0},{0,1,2,3,4,5,6}},
ligne, colonne, centdiz;
ligne = colonne = 0;
centdiz = 0; // variable travaillant avec les tableaux des centaines et
// des dizaines. Variable prenant en 1er les 2 chiffres des
// centaines puis en 2nd les dizaines de l'annee recherchee
if (avant == 1) tab_centaines[1][2] = 15;
else tab_centaines[4][2] = 15;
centdiz = annee / 100;
while (tab_centaines[ligne][colonne] != centdiz)
{
if (colonne == 4) { colonne = 0; ligne ++; }
else colonne ++;
}
avant = ligne;
ligne = colonne = 0;
centdiz = annee % 100;
while (tab_dizaines[ligne][colonne] != centdiz)
{
if (colonne == 6) { colonne = 0; ligne ++; }
else colonne ++;
}
ligne = avant;
return (tab_code_annee[ligne][colonne]);
}
void affiche_resultat (int code_jour, int jour_n, int mois_n, int annee)
{
// initialise les tableaux de mois et de jours
char *mois[12] = {"janvier","fevrier","mars","avril","mai","juin","juillet",
"aout","septembre","octobre","novembre","decembre"},
*jour[7] = {"lundi","mardi","mercredi","jeudi","vendredi","samedi",
"dimanche"};
printf ("%s %d %s %d", jour[code_jour], jour_n, mois[mois_n -1], annee);
}
main ()
{
char choix = ' ';
int jour_n, mois_n, annee, bisextile, avant, validite, code_jour,
code_mois, code_annee;
long controle;
jour_n = mois_n = annee = 0; // initialise les variables de date a 0
controle = avant = -1 ; // Test la date pour savoir si elle est avant
// le 4.10.1582 ou apres le 15.10.1582
bisextile = 0; // Test l'annee, pour savoir si elle est bisextile ou non
validite = 0; // Test la validité de la date saisie par l'utilisateur
code_jour = code_mois = code_annee = 0; // Initialise les variables
// permettant de definir le jour precis d'une date
puts ("\n\t\t\tBienvenue sur le calendrier perpetuel.\n\n Vous allez "
"enfin connaitre le jour correspondant a la date que vous saisirez."
"\n\n\n\tAttention a l'annee que vous entrerez, ce calendrier perpetuel\n"
"\t prend en compte une echelle allant de l'an 0 a l'an 2499\n\n\n\n");
while (1)
{
do
{
printf ("\nEntrez la date (jj/mm/aaaa): ");
scanf ("%d/%d/%d",&jour_n, &mois_n, &annee);
// Test de la bisextilité de l'année
if ( (annee % 100 == 0 && annee % 400 == 0) || (annee % 100 != 0 && annee % 4 == 0) )
bisextile = 1 ;
else
bisextile = 0 ;
// Test de la validité de la date entrée par l'utilisateur
if ( (jour_n < 1 || jour_n > 31) || (mois_n < 1 || mois_n > 12) ||
(annee < 0 || annee >= 2500) ||
(jour_n > 30 && (mois_n == 4 || mois_n == 6 ||
mois_n == 9 || mois_n == 11)) ||
(mois_n == 2 && (jour_n > 29 || (bisextile == 0 && jour_n > 28))) )
{
validite = 1; // DATE NON VALIDE
erreurs ();
}
else validite = 0; // Date Valide
} while (validite);
controle = (annee * 10000) + (mois_n * 100) + jour_n ; // sonde de contrôle
printf ("controle = %u\n", controle);
// contrôle de changement de calendrier
if (controle <= 15821004) avant = 1;
if (controle > 15821015) avant = 0;
if (controle > 15821004 && controle <= 15821015)
puts ("Desole! Le jour est impossible a determiner pour cette date.");
else
{
code_annee = cherche_annee (annee, avant);
code_mois = cherche_mois (mois_n, bisextile, code_annee);
code_jour = cherche_jour (jour_n, code_mois);
affiche_resultat (code_jour, jour_n, mois_n, annee);
}
puts ("\n\n\t\tS: Saisir une nouvelle date\n\t\tQ: Quitter l'application");
printf ("\n\t\t\tVotre Choix........: ");
choix = getche ();
if (choix == 'S' || choix == 's') puts (" "); // printf ("\nla touche tapee est S ou s, normalement: %c\n", choix);
else break; // { printf ("\nla touche tapee est: %c\n", choix); break; }
}
printf ("\n\n\tAppuyer sur une touche pour quitter........");
getch ();
}
Merci
Badramus