Programmatione en C

cs_badramus Messages postés 15 Date d'inscription samedi 6 mai 2006 Statut Membre Dernière intervention 15 mai 2006 - 9 mai 2006 à 13:13
cs_magma Messages postés 198 Date d'inscription vendredi 4 avril 2003 Statut Membre Dernière intervention 18 mars 2011 - 10 mai 2006 à 14:58
bonjour tout le monde j'aimerais que vous m'aidez pour un projet à rendre le 15 mai
le projet presenté ci dessous
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.
je compte sur la communauté merci

Badramus

23 réponses

cs_badramus Messages postés 15 Date d'inscription samedi 6 mai 2006 Statut Membre Dernière intervention 15 mai 2006
10 mai 2006 à 11:09
Bonjour YOYO

voici ce que je voudrai que fasse mon programme
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

Badramus
0
yoyo269 Messages postés 1403 Date d'inscription lundi 23 février 2004 Statut Membre Dernière intervention 11 janvier 2009 2
10 mai 2006 à 11:13
Mais je sais que c'est ce que tu veux faire. Ca sert à rien de faire 50000 copier-coller.
Ce que je veux savoir c'est ce qu'il ne fonctionne pas ? (compilation, mauvais résultat affiché, plantage du programme en cours d'exécution,...)

YOYO, @+.

"L'intelligence c'est comme un parachute, quand on en n'a pas...on s'écrase !"
0
cs_magma Messages postés 198 Date d'inscription vendredi 4 avril 2003 Statut Membre Dernière intervention 18 mars 2011
10 mai 2006 à 14:58
Un exemple, à vérifier...

#include <stdio.h>


#define ANNEE_MIN 1600 //Doit etre > 1582 (Calendrier Gregorien)
#define ANNEE_MAX 9999 //Doit etre < ????


//_____________________________________________________________________________
//
// Retourne 1 si l'annee est bissextile, sinon 0
//_____________________________________________________________________________
//
int Bissextile(int annee)
{
return((annee % 4 == 0 && annee % 100 != 0) || annee % 400 == 0);
}


//_____________________________________________________________________________
//
// Retourne 1 si la date est valide, sinon 0
//_____________________________________________________________________________
//
int DateValide(int jour, int mois, int annee)
{
int nj[] = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};


if(mois < 1 || mois > 12)
return 0;

if(annee < ANNEE_MIN || annee > ANNEE_MAX)
return 0;

if (jour < 1 || jour > (nj[mois - 1] + (mois == 2 && Bissextile(annee))))
return 0;
else
return 1;
}


//_____________________________________________________________________________
//
// Retourne le jour du 1er Janvier de l'annee [0 == Dimanche ... 6 == Samedi]
//_____________________________________________________________________________
//
int PremierJanvier(int annee)
{
return ((annee / 100) * 5 +
(annee / 100) / 4 +
(annee % 100) +
(annee % 100) / 4 +
(Bissextile(annee) ? 6 : 0)) % 7;
}


//_____________________________________________________________________________
//
// Retourne le numero du jour dans l'annee (Quantieme) [1 ... 366]
//_____________________________________________________________________________
//
int Quantieme(int jour, int mois, int annee)
{
if(mois == 1)
return jour;

if(mois == 2)
return jour + 31;

return jour + (int)((((float)mois) * 30.6) - 32.3) + (Bissextile(annee)?1:0);
}


//_____________________________________________________________________________
//
// Retourne le jour de la semaine [0 == Dimanche ... 6 == Samedi]
//_____________________________________________________________________________
//
int JourSemaine(int jour, int mois, int annee)
{
return (PremierJanvier(annee) + Quantieme(jour, mois, annee) - 1) % 7;
}


//_____________________________________________________________________________
//
// Retourne le quantieme du dimanche de Paques
//_____________________________________________________________________________
//
int Paques(int annee)
{
int a = annee % 19;
int b = annee /100;
int c = annee % 100;
int d = b / 4;
int e = b % 4;
int f = (b + 8) / 25;
int g = (b + 1 - f) / 3;
int h = (15 + 19 * a + b - d - g) % 30;
int i = (32 + 2 * (e + (c / 4)) - h - (c % 4)) % 7;
int j = (a + 11 * h + 22 * i) / 451;


return Quantieme(21, 3, annee) + h + i - 7 * j + 1;
}



//_____________________________________________________________________________
//
// Conversion d'une date en jour julien
//_____________________________________________________________________________
//
long DateJourJulien(int jour, int mois, int annee)
{
return (long)((1461 * (annee + 4800 + (mois - 14) / 12)) / 4 +
(367 * (mois - 2 - 12 * ((mois - 14) / 12))) / 12 -
(3 * ((annee + 4900 + (mois - 14) / 12) / 100)) / 4 +
jour - 32075);
}


//_____________________________________________________________________________
//
// Conversion d'un jour julien en date
//_____________________________________________________________________________
//
int JourJulienDate(long jourjulien, int *jour, int *mois, int *annee)
{
long a, b, c, d;


if(jourjulien < DateJourJulien( 1, 1, ANNEE_MIN) ||
jourjulien > DateJourJulien(31, 12, ANNEE_MAX)) return 0;

a = jourjulien + 68569;
b = ( 4 * a ) / 146097;
a = a - ( 146097 * b + 3 ) / 4;
c = ( 4000 * ( a + 1 ) ) / 1461001;
a = a - ( 1461 * c ) / 4 + 31;
d = ( 80 * a ) / 2447;
*jour = (int)(a - ( 2447 * d ) / 80);
*mois = (int)(d + 2 - ( 12 * (d / 11) ));
*annee = (int)(100 * ( b - 49 ) + (d / 11) + c);

return 1;
}


//_____________________________________________________________________________
//
// Conversion d'un quantieme en jour et mois
//_____________________________________________________________________________
//
int QuantiemeDate(int quantieme, int annee, int *jour, int *mois)
{
long jj = DateJourJulien(1, 1, annee) + (long)quantieme - 1L;
return JourJulienDate(jj, jour, mois, &annee);
}


//_____________________________________________________________________________
//
int main(void)
{
char *tj[] = {"Dimanche",
"Lundi",
"Mardi",
"Mercredi",
"Jeudi",
"Vendredi",
"Samedi" };

int j, m, a, n;


printf("\nEntrez une date (Du 01/01/%d au 31/12/%d)", ANNEE_MIN, ANNEE_MAX);
printf("\n[JJ/MM/AAAA]: ");
scanf("%d/%d/%d", &j, &m, &a);
if(!DateValide(j, m, a))
{
printf("\nLa date %02d/%02d/%d n'est pas une date valide !\n", j, m, a);
printf("\nTapez une touche pour quitter..."); getch(); return 1;
}
printf("\nLe %02d/%02d/%d est un %s", j, m, a, tj[JourSemaine(j, m, a)]);
printf("\nL'annee %d %s bissextile", a, Bissextile(a) ? "est" : "n'est pas");
QuantiemeDate(Paques(a), a, &j, &m);
printf("\nPaques pour l'annee %d est le %02d/%02d", a, j, m);
QuantiemeDate(Paques(a) + 39, a, &j, &m);
printf("\nL'Ascension pour l'annee %d est le %02d/%02d", a, j, m);
QuantiemeDate(Paques(a) + 49, a, &j, &m);
printf("\nLa pentecote pour l'annee %d est le %02d/%02d\n", a, j, m);

printf("\nEntrez un nombre: ");
scanf("%ld", &n);
if(!JourJulienDate(DateJourJulien(1, 1, 1960) + n, &j, &m, &a))
{
printf("\nNombre trop grand !\n");
printf("\nTapez une touche pour quitter..."); getch(); return 1;
}
printf("\nLe 01/01/1960 plus %ld jour%s", n, n > 1 ? "s " : " ");
printf("correspond au %s %02d/%02d/%d\n", tj[JourSemaine(j, m, a)], j, m, a);

printf("\nTapez une touche pour quitter..."); getch(); return 0;
}
// Fin
0
Rejoignez-nous