Calendrier perpétuel

Soyez le premier à donner votre avis sur cette source.

Snippet vu 20 332 fois - Téléchargée 28 fois

Contenu du snippet

Donne le jour correspondant à une date, depuis 1583 (première année où le calendrier actuel avait été mis en place).

Source / Exemple :


#include <iostream.h>
void main (void)
{
	char Tmois[12][10]={"Janvier","fevrier", "mars", "avril","mai","juin","juillet","aout","septembre","octobre","novembre","decembre"};
	char LibJour[7][9]={"samedi","dimanche","lundi","mardi","mercredi","jeudi","vendredi"};
	int NbJour[12]={31,28,31,30,31,30,31,31,30,31,30,31};
	int NumJour;
	int NumMois;
	int Annee;
	int Jref=1;
	int A=0;
	int Mref=0;
	int Aref=1583;
	cout<<"Entrez le jour\n";
	cin>>NumJour;
	NumJour--;
	cout<<"Entrez le mois\n";
	cin>>NumMois;
	NumMois--;
	cout<<"Entrez l'annee\n";
	cin>>Annee;
	while(Annee>Aref)
	{
		if(Aref%4==0)
		{
			NbJour[1]=29;
			A++;
			if(Aref%100==0)
			{
				NbJour[1]=28;
				A--;
				if(Aref%400==0)
				{
					NbJour[1]=29;
					A++;
				};
			};
		};
		Aref++;
		A++;
	};
	if (Annee<Aref)
	{
		A=A+1;
	};
	
	while(NumMois>Mref)
	{
		A=(NbJour[Mref]+A)%7;
		Mref++;
	};
	if (Mref>1)
	{
		A=A+6;
	};

		A=(NumJour+A)%7;
		cout<<"C'est un "<<LibJour[A]<<" "<<NumJour+1<<" "<<Tmois[Mref]<<" "<<Aref;
		cin>>Jref;
};

Conclusion :


Le programme n'étant pas sécurisé, il est fortement déconseillé de rentrer une date qui n'existe pas !!!

A voir également

Ajouter un commentaire

Commentaires

cs_max12
Messages postés
1496
Date d'inscription
dimanche 19 novembre 2000
Statut
Modérateur
Dernière intervention
7 juillet 2014
-
Hum ça peut servir :)
le_duche
Messages postés
164
Date d'inscription
lundi 13 juin 2005
Statut
Membre
Dernière intervention
26 février 2009
-
Je vais etre assez critique, mais bon...

1)
Déjà j'aurais mis
string Tmois[12] = {...};
string LigJour[7] = {...};

2)
Puis ton comptage des années bissextiles est un peu pourri. Ceci serait beaucoup mieux:

par du premier janvier 1601 pour compter le nombre de jours.
puis tu as:
NbrBiss = (Annee-1601)/4-(Annee-1601)/100+(Annee-1601)/400/*-(Annee-1601)/3000*/;
ce qui te donne le nombre d'années bissextiles précédant l'année en cours.
et donc le nombre de jours précédant le 1er janvier de l'annee en cours (depuis 1601) est (Annee-1601)*365+NbrBiss
auquel tu ajoute le nombre de jours passés depuis le début de l'année.
Et la dessus (imaginons que la variable soit "Total") tu fais un beau modulo:
Jour = Total%7;

Immagine un peu que tu doives inclure cette fonction à un programme qui doit calculer des jours pour 100000 dates futuriste (autour de l'an 50000)
et bien tu vas passer à peu près 5000000000 fois dans ta boucle, et ca risque de prendre du temps...

3) tu as remarqué que j'ai rajouté un "3000" dans le calcul des bissextiles, c'est pas très important, mais j'ai vu ca au cour d'astro... ca ne fait qu'améliorer la précision...
BruNews
Messages postés
21054
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
7 novembre 2014
13 -
string Tmois[12] = {...};
en quoi c'est mieux ???
le_duche
Messages postés
164
Date d'inscription
lundi 13 juin 2005
Statut
Membre
Dernière intervention
26 février 2009
-
C'est plus lisible, et ca exploite moins de RAM (meme si dans ce cas ci on s'en fout..., autant prendre les bonnes habitudes!)
BruNews
Messages postés
21054
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
7 novembre 2014
13 -
Dans un prog Win par exemple c'est le contraire, rien que le code nécessaire à la gestion de 'string' apporte quasi 8 Ko inutiles.

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.