Calendrier perpétuel en c.

Contenu du snippet

c'est mon tout premier programme écrit en C qui calcul le jour d'une date donnée, j'ai choisi arbitrairement une date 'pivot' qui est le 01/01/2003, le programme calcule le nb de jour exact entre le 01/01/2003 et la date rentrée et calcul le modulo 7 pour donner le jour de la semaine, c'est sur ke ce n'est pas une nouveauté mais ca peut surement servir à des débutants. merci de laisser un commentaire ;-)

Source / Exemple :


#include <stdio.h>
#include <stdlib.h>

int ansup (int an)
{
	int an_bis, an_nbis;
	an_bis = an_nbis = 0;

	while (an >= 2003)
	 {
	 	if ( an%4==0 && an%100!=0 || an%400==0 )
			an_bis+=1;
		else
			an_nbis+=1;
		an--;
	}

  		return(an_bis * 366  + an_nbis * 365);  // c'est le nb de jours entre le 01/01/2003 et le 01/01 de l'année rentrée
}

int aninf (int an)
{
	int an_bis, an_nbis;
	an_bis = an_nbis = 0;

	while (an < 2003)
	{
		if (an%4 == 0 && an%100 !=0 || an%400 == 0)
			an_bis+=1;
		else
			an_nbis+=1;
		an++;
	}
 	return(an_bis * 366 + an_nbis * 365); // c'est le nb de jours entre le 01/01 de l'année rentrée et le 01/01/2003
}

int nb_jr (int mois, int an) //calcul du nb de jrs passés en fonction de l'année (bissextile ou non) et du mois rentrées
{
	int bissextile[13] = {0,31,29,31,30,31,30,31,31,30,31,30,31};
	int n_bissextile[13] = {0,31,28,31,30,31,30,31,31,30,31,30,31};
	int som = 0;

	if ( an%4==0 && an%100!=0 || an%400==0 )
	{
		while (mois>0)
		{
			som = som + bissextile[mois-1];
			mois--;
		}
	}
	else
	{
		while (mois>0)
		{
			som = som + n_bissextile[mois-1];
			mois--;
		}
	}
	return som;
}

int main ()
{
	int ans, ms, jr, jrs;
	char *jouri[7] = {"mardi", "lundi", "dimanche", "samedi", "vendredi", "jeudi", "mercredi"};
	char *jours[7] = {"mardi", "mercredi", "jeudi", "vendredi", "samedi", "dimanche", "lundi"};

 	printf("rentrer une année :");
	scanf("%d",&ans);
	printf("rentrer un mois :");
	scanf("%d",&ms);
	printf("rentrer un jour :");
	scanf("%d",&jr);

	if(ans < 2003)   //si l'année saisie est inf à 2003
	{
  		printf("\nLe jour demandé (%d/%d/%d) est un %s.\n\n", jr, ms, ans, jouri[(aninf (ans) - nb_jr (ms, ans) - jr)%7]);

	}
	else if (ans >= 2003) //si l'année saisie est sup ou égale à 2003
	{
		if ( ans%4==0 && ans%100!=0 || ans%400==0 )
			jrs = 366 - nb_jr (ms, ans);
		else
			jrs = 365 - nb_jr (ms, ans); //jrs est le nb de jrs restant de l'année rentrée

    printf("\nLe jour demandé (%d/%d/%d) est un %s.\n\n", jr, ms, ans, jours[(ansup (ans) - jrs + jr)%7]);

	}
	return 0;
}

Conclusion :


compilateur utilisé gcc sous linux mandrake 9.2

A voir également

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.