Ceci est juste un test de calcul approfondi de dates avec gestion des erreurs et des années bissextiles. Je m'assure que les valeurs saisies sont bien entieres. je fais les calculs necesaires et j'affiche la date du lendemain.
Ceci est juste la premiere version. Merci de me conseiller des ameliorations
Source / Exemple :
#include<stdio.h>
#include<dos.h>
#include<stdlib.h>
#include<string.h>
#include<conio.h>
#define true 32000
#define false -31000
int jour,mois,annee,maxday,c;
char j[10],m[10],a[10];
int convertitEntier(char nb); //fonction convertissant une chaine de caractere en entier
int estJour(int day); //fonction verifiant qu un entier est un jour valide
int estMois(int month); //fonction verifiant qu un entier est un mois valide
int estAnnee(int year); //fonction verifiant qu un entier est une annee valide
int estDateValide(int day,int month,int year); //fonction verifiant que 3 entier forme une date valide
void dateSuivante(int day,int month,int year); //fonction calculant la date du lendemain d'un jour
void lecture(void); //fonction permettant la lecture des donnees en entree
void animation();
//*****************************************************************************************
int convertitEntier(char *nb)
{
char str[25];
double num;
int sig = 5; /* significant digits */
if(strlen(nb)==0)
{
puts("La valeur saisie n' est pas entiere.\n");
return false;
}
else
{
gcvt(atoi(nb), sig, str);
if(strlen(nb) != strlen(str))
{
puts("La valeur saisie n'est pas entiere.\n");
return false;
}
else
{ //printf("\nla valeur convertie est %d",atoi(nb));
return (atoi(nb));
}
}
}
//******************************************************************************
int estJour(int day)
{
if((day<1)||(day>31))
{
puts("\nLes jours vont du 1er au 31 en general. Recommencer svp");
return false;
}
else
{
//printf("\nla valeur du jour est %d",day);
return (day);
}
}
//******************************************************************************
int estMois(int month)
{
if((month<1)||(month>12))
{
puts("\nLes mois vont du 1er au 12. Recommencer svp");
return false;
}
else
{
//printf("\nla valeur du mois est %d",month);
return (month);
}
}
//*******************************************************************************
int estAnnee(int year)
{
if((year<1980)||(year>2050))
{
puts("\nLes annees varient entre 1980 et 2050. Recommencer svp");
return false;
}
else
{
//printf("\nla valeur annuelle est %d",year);
return (year);
}
}
//*******************************************************************************
int estDateValide(int day,int month,int year)
{
if((month == 4) || (month == 6) || (month == 9) || (month == 11))
maxday=30;
else
{
if((month == 1) || (month == 3) || (month == 5) || (month == 7) || (month == 8) || (month == 11) || (month == 12))
maxday=31;
else
maxday=27;
}
if(year % 4 == 0)
if(month == 2)
maxday=28;
if((day > maxday))
return (false);
else
return (true);
}
//**********************************************************************************
void dateSuivante(int day,int month,int year)
{
int d,m,y;
d=day;
m=month;
y=year;
if(day < maxday)
day+=1;
else
{
day=1;
if(month < 12)
month+=1;
else
{
month=1;
year+=1;
}
}
printf("\nle lendemain du %d-%d-%d est le %d-%d-%d",d,m,y,day,month,year);
}
//********************************************************************************************
void lecture(void)
{
do
{
clrscr();
puts("Ce programme affiche la date du lendemain d'un jour.\n");
printf("\nTaper les information requises : ");
flushall();
printf("\nJour : ");
gets(j);
flushall();
printf("Mois : ");
gets(m);
flushall();
printf("Annee : ");
gets(a);
flushall();
if(((jour = convertitEntier(j)) == false )| ((mois = convertitEntier(m)) == false ) | ((annee = convertitEntier(a)) == false ))
printf("\n precision 1 '%d-%d-%d' ",jour,mois,annee);
else
{
if((( estJour(jour)) == false) || (( estMois(mois)) == false) || (( estAnnee(annee)) == false))
printf("\nLes bornes sont les suivantes en general : \n 1<jour<31\n 1<mois<12\n 1980<annee<2050");
else
{
if(estDateValide(jour,mois,annee) == false)
printf("\n '%d-%d-%d' n'est pas une date valide. Recommencer svp",jour,mois,annee);
else
dateSuivante(jour,mois,annee);
}
}
puts("\n\n\n Echap pour arreter, sinon n'importe quelle touche.");
}while((c=getch()) != 27);
animation();
}
void animation()
{
for(int i=0;i<75;i++)
{
gotoxy(i,wherey());
delline();
printf("Sniper.");
delay(30);
}
delay(500);
}
//*******************************************************************************
int main()
{
clrscr();
lecture();
return 0;
}
Conclusion :
Apres appreciations de votre part, merci de me faire part de vos ameliorations
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.