Affiche du jour par rapport à une date

Soyez le premier à donner votre avis sur cette source.

Snippet vu 14 282 fois - Téléchargée 31 fois

Contenu du snippet

Je devait faire un programme en JAVA qui donne le jour de la semaine par rapport à une date, mais j'ai préférée le faire en C.
C'est tout....!

Source / Exemple :


#include <stdlib.h>
#include <stdio.h>
#include <io.h>
#include <math.h>
#include <conio.h>
int toto;

// Acquisition d'une nombre
void nbr()
{
 char caract;
 char tab[99];
 int ptr=0;
 while (caract!='\r')
 {
	caract=getch();
	if (caract>='0' && caract <='9')
	{
	 tab[ptr]=caract;
	 ptr=ptr+1;
	 tab[ptr]='\0';
	 printf("%c",caract);
	}
	if (caract=='\b')
	{
	 if (ptr>0)
	 {
	  ptr=ptr-1;
	  printf("\b \b");
	 }
	}
 }// Fin du while (caract!='\r')
 toto=atoi(tab);
} // Fin du int nbr

void main()
{
/*Variable du main*/
int annee;							//Acquisitiondeladate
int mois;							//Acquisitiondumois
int jour;							//Acquisitiondujours
int mem_jour;
int mem_mois;
int mem_annee;
int jour_fixe=1;
int mois_fixe=1;
int annee_fixe=2006;
int nbr_jour=31;					//Nbrdejourdanslemois
int jour_semaine=7;					//Lejourdelasemaine
int err=0;
//clrscr();
printf("Saisir l annee = ");
nbr();
annee=toto;
printf("\n\rSaisir le mois = ");
nbr();
mois=toto;
printf("\n\rSaisir le jour = ");
nbr();
jour=toto;
mem_annee=annee;
mem_mois=mois;
mem_jour=jour;
printf("\n\rannee= %i / mois =%i / jour =%i",annee,mois,jour);

if(mois>12)err=1;
if(mois<1)err=1;
switch(mois)
{
				case 4:	nbr_jour=30;
							break;
				case 6:	nbr_jour=30;
							break;
				case 9:	nbr_jour=30;
							break;
				case 11:	nbr_jour=30;
							break;
				case 2:	if(annee%100==0)
							{
								if(annee%400==0)
								{
									nbr_jour=29;
								}//Finduif(annee%400==0)
								else
								{
								nbr_jour=28;
								}	
							}//Finduif(annee%100==0)
							else
							{
								if(annee%4==0)
								{
									nbr_jour=29;
								}//Finduif(annee%4==0)
								else
								{
								nbr_jour=28;
								}
						
							}//Finduelseif(annee%100==0)
							break;
				default:	nbr_jour=31;	
			}//Finduswitch(mois)
		if(jour<1) err=1;
		if(jour>nbr_jour) err=1;
		/*Calculdujour*/
		if(err==0)
		{
		while(jour!=jour_fixe)
		{
			if(jour<jour_fixe)
			{
				jour=jour+1;
				jour_semaine=jour_semaine+1;
			}
			if(jour>jour_fixe)
			{
				jour=jour-1;
				jour_semaine=jour_semaine+1;	
			}
		}
		while(mois!=mois_fixe)
		{
			if(mois<mois_fixe)mois=mois+1;
			if(mois>mois_fixe)mois=mois-1;
			nbr_jour=31;
			switch(mois)
			{
				case 4:	nbr_jour=30;
							break;
				case 6:	nbr_jour=30;
							break;
				case 9:	nbr_jour=30;
							break;
				case 11:	nbr_jour=30;
							break;
				case 02:	if(annee%100==0)
							{
								if(annee%400==0)
								{
									nbr_jour=29;
								}//Finduif(annee%400==0)
								else
								{
								nbr_jour=28;
								}	
							}//Finduif(annee%100==0)
							else
							{
								if(annee%4==0)
								{
									nbr_jour=29;
								}//Finduif(annee%4==0)
								else
								{
								nbr_jour=28;
								}
						
							}//Finduelseif(annee%100==0)
							break;
				default:	nbr_jour=31;	
			}//Finduswitch(mois)
			jour_semaine=jour_semaine+nbr_jour;	
		}
		while(annee!=annee_fixe)
		{

			nbr_jour=365;
			if(annee%100==0)
			{
				if(annee%400==0)
				{
					nbr_jour=366;
				}//Finduif(annee%400==0)
				else
				{
					nbr_jour=365;
				}
			}//Finduif(annee%100==0)
			else
			{
				if(annee%4==0)
				{
					nbr_jour=366;
				}//Finduif(annee%4==0)
				else
				{
					nbr_jour=365;
				}

			}//Finduelseif(annee%100==0)
			if(annee<annee_fixe)
			{
				annee=annee+1;
				jour_semaine=jour_semaine-nbr_jour;
			}
			if(annee>annee_fixe)
			{
				annee=annee-1;
				jour_semaine=jour_semaine+nbr_jour;
			}

		}
		//jour_semaine=jour_semaine-mem_mois;
		if(jour_semaine<0)
		{
			while(jour_semaine<=0)
			{
				jour_semaine=jour_semaine+7;
			}
		}
		else
		{
			while(jour_semaine>7)
			{
				jour_semaine=jour_semaine-7;
			}
		}
		printf("\n\rC est un ");
		if (jour_semaine==0) jour_semaine=7;
		if (jour_semaine==8) jour_semaine=1;
		switch(jour_semaine)
		{
			case 1:	printf("Lundi");
						break;
			case 2:	printf("Mardi");
						break;
			case 3:	printf("Mercredi");
						break;
			case 4:	printf("Jeudi");
						break;
			case 5:	printf("Vendredi");
						break;
	case 6:	printf("Samedi");
						break;
	case 7:	printf("Dimanche");
						break;

 }
}
else
{
 printf("\n\rDate incorrect");
}
getch();

}

A voir également

Ajouter un commentaire

Commentaires

cs_Pacifica
Messages postés
9
Date d'inscription
samedi 28 février 2004
Statut
Membre
Dernière intervention
24 février 2006

merci pour l'info. J'effectuerai plus de recherche la prochaine fois que je ferai du code.
tekila_bandita
Messages postés
248
Date d'inscription
mercredi 15 juin 2005
Statut
Membre
Dernière intervention
15 mars 2007
13
Cette source remplit parfaitement son objectif, ce qui fait déja donc pour le moment une note de 5/5, en revanche pour la clarté du code et la maintenance, elle mérite à peu près 0/1, ce qui fait donc une note totale de 5/6...
En revanche, pour ce qui est de ton algorithme, je pense que tu t'es bien cassé la tête pour un rien, ton code est gros pour peu de choses, et il est donc plus lent ! Je metrais donc un 2/4 pour l'algorithme juste parce que tu as vraiment du te cassé les "bonbons" pour l'ecrire...
Si tu veux, moi j'ai fait une source ayant exactement le meme but, en C aussi, mais avec une methode de calcul beaucoup plus courte, beaucoup plus efficace, et pouvant etre réutilisée dans d'autres calculs...
Va voir ma source, elle est dans la meme categorie que la tienne (Date/heure), et est juste en dessous de la tienne...
Voila, j'ai tout dis !
bonne continuation, et à l'avenir tache d'utiliser les formules que de gentils mathematiciens se sont encore plus compliqué la vie a trouver, afin de simplifier la notre...
cs_Joky
Messages postés
1787
Date d'inscription
lundi 22 novembre 2004
Statut
Membre
Dernière intervention
31 janvier 2009
2
Ah nan mais c'est parce que t'as pas compris le
//etc...
ça veut dire qu'après tu as juste à continuer pour les mois de 30 jours et de 28/29 jours
fin bref c'est ta source c'est vrai, c'est juste des lignes superflues que t'as écrit
cs_Pacifica
Messages postés
9
Date d'inscription
samedi 28 février 2004
Statut
Membre
Dernière intervention
24 février 2006

Tu testerai où le mois de février, et les mois de 30 jours ? Après le mois de 31 jours ?
Normalement du faites que j'initialise à 31 avant le switch(mois)
, je ne teste que les cas où j'ai pas 31 jours, et de plus je le remets dans le défaut du switch(mois) ???
Pour ma part, normal c'est mon code, lol, je préfére ma méthode...mais bon !
cs_Joky
Messages postés
1787
Date d'inscription
lundi 22 novembre 2004
Statut
Membre
Dernière intervention
31 janvier 2009
2
switch(mois)
{
case 1:
case 3:
case 5:
case 7:
case 8:
case 10:
case 12:
nb_Jour = 31;
break;

//etc...
}
c'est mieux j'trouve

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.