Calcul de la date du lendemain

Voir le sujet précédent Voir le sujet suivant Aller en bas

Calcul de la date du lendemain

Message par medch le Sam 24 Nov - 1:35

*****************************************************
Ecrire un programme qui calcule la date du lendemain à partir d’une date quelconque saisie à
partir du clavier.
*****************************************************


#include
void main()
{
int j,mm,aaaa;

printf("donner le jour");
scanf("%d",&j);
printf("donner le mois");
scanf("%d",&mm);
printf("donner le annee");
scanf("%d",&
aaaa);

if ((j>28) &&(mm==02))
{ j=0;
mm=mm+1;
aaaa=aaaa;}
if ((j<31) && (mm<12))
{ j=j+1;
mm=mm;
aaaa=aaaa;
printf("la date est %d %d %d",j,mm,aaaa);}


else if ((j<31) && (mm>12))
{ j=j+1;
mm=1;
aaaa=aaaa;
printf("la date est %d %d %d",j,mm,aaaa);}


else if ((j>=31) && (mm<12))
{ j=1;
mm=mm+1;
aaaa=aaaa;
printf("la date est %d %d %d",j,mm,aaaa);}


else if ((j<31) && (mm<12))
{ j=j+1;
mm=mm;
aaaa=aaaa;
printf("la date est %d %d %d",j,mm,aaaa);}
else if ((j>=31)&&(mm>=12))
{ j=1;
mm=1;
aaaa=aaaa+1;
printf("la date est %d %d %d",j,mm,aaaa);}


}
avatar
medch
Entier Naturel
Entier Naturel

Nombre de messages : 16
Localisation : tunis
Réputation : 0
Points : 3704
Date d'inscription : 28/10/2007

Revenir en haut Aller en bas

Re: Calcul de la date du lendemain

Message par serenere le Sam 24 Nov - 11:44

Slt,

Pour repondre a ta question il faut d'abord savoir que pour obtenir la date du lendemain a partir d'une saisie au clavier il faut :

1- Verifier si les chiffre saisies correspondent a une date ou pas si non ton traitement apres n'aura aucun sens, cela peut se faire en ajoutant un bout de code apres la fin de la saisie qui verifie si j est compris entre 1 et 30 dans le cas ou m est
un mois qui contient 30 jours ....

Tu dois distinguer enfin 3 groupes de date :
- Les dates des mois qui finissent par 31
- Les dates des mois qui finissent par 30
- les dates du mois de Fevrier ( tu dois tester si l'année en question est bissextile )

Bon je te laisse le soin de revoir ton code et de me dire si c'est bon ou pas .

RMQ : if ((j<31) && (mm>12))
se test n'est verifier ke si m>12 c'est à dire 13 et plus ?????!!! comment ça se fait a se que je sache il y a seulement 12 mois lol .

J'attends ta reponse.

Bon travail
avatar
serenere
Entier Naturel
Entier Naturel

Féminin
Nombre de messages : 23
Age : 31
Localisation : Tunisie
Réputation : 0
Points : 3927
Date d'inscription : 19/03/2007

Feuille de personnage
Capacité linguistique:
1000/1000  (1000/1000)

Revenir en haut Aller en bas

Re: Calcul de la date du lendemain

Message par Napoléon le Sam 24 Nov - 12:58

Commentaires très pertinents de la part de serenere.

_________________
Nabil - tunis
خير الناس أنفعهم للناس
avatar
Napoléon
Admin
Admin

Masculin
Nombre de messages : 2934
Localisation : Tunisie
Réputation : 122
Points : 5340
Date d'inscription : 19/03/2007

Feuille de personnage
Capacité linguistique:
999/1000  (999/1000)

http://infomath.online-talk.net

Revenir en haut Aller en bas

Re: Calcul de la date du lendemain

Message par manianis le Sam 24 Nov - 20:12

Je te propose ce programme :

Code:
#include <iostream>

using namespace std;

int isLeapYear(int year)
{
  return ((year % 400 != 0 && year % 4 == 0) || year % 400);
}

int getDaysCount(int month, int year)
{
  if (month == 1 || month == 3 || month == 5 ||
      month == 7 || month == 8 || month == 10 ||
      month == 12)
    return 31;
  else if (month == 2)
  {
    return 28 + isLeapYear(year);
  }
  else  return 30;
}

void getDate(int* day, int* month, int* year)
{
  cout << "Entrer l'année : ";
  cin >> *year;

  do
  {
    cout << "Entrer le mois [1..12] : ";
    cin >> *month;
  } while (*month < 1 && *month > 12);

  int maxDays = getDaysCount(*month, *year);
  do
  {
    cout << "Entrer le jour  [1.." << maxDays << "] : ";
    cin >> *day;
  } while (*day < 1 && *day > maxDays);
}

void nextDay(int* day, int* month, int* year)
{
  int maxDays = getDaysCount(*month, *year);

  (*day)++;
  if (*day > maxDays)
  {
    *day = 1;
    (*month)++;

    if (*month > 12)
    {
      *month = 1;
      (*year)++;
    }
  }
}

int main()
{
    int day, month, year;

    getDate(&day, &month, &year);
    nextDay(&day, &month, &year);

    printf("%04d-%02d-%02d\n", year, month, day);

    return 0;
}

manianis
Nombre Réel
Nombre Réel

Masculin
Nombre de messages : 975
Localisation : Tunisie
Réputation : 4
Points : 3723
Date d'inscription : 11/10/2007

Feuille de personnage
Capacité linguistique:
999/1000  (999/1000)

http://manianis.sitesled.com/

Revenir en haut Aller en bas

Re: Calcul de la date du lendemain

Message par Napoléon le Sam 24 Nov - 20:34

medch
Essaie de bien choisir les titres des messages que tu postes.
Evite les phrases longues comme:

je me demande si ce programme marche ou nn ...

Mets plûtot
Calcul de la date du lendemain

un titre qui résume le contenu...

_________________
Nabil - tunis
خير الناس أنفعهم للناس
avatar
Napoléon
Admin
Admin

Masculin
Nombre de messages : 2934
Localisation : Tunisie
Réputation : 122
Points : 5340
Date d'inscription : 19/03/2007

Feuille de personnage
Capacité linguistique:
999/1000  (999/1000)

http://infomath.online-talk.net

Revenir en haut Aller en bas

Re: Calcul de la date du lendemain

Message par Napoléon le Sam 24 Nov - 20:37

medch:
La solution proposée par manianis est en C++, elle utilise des fonctions C.
Et d'après ce que je sais, vous n'avez pas encore étudié les fonctions...

tu peux adapter cette version pour écrire une solution sans Fonctions... OK?

_________________
Nabil - tunis
خير الناس أنفعهم للناس
avatar
Napoléon
Admin
Admin

Masculin
Nombre de messages : 2934
Localisation : Tunisie
Réputation : 122
Points : 5340
Date d'inscription : 19/03/2007

Feuille de personnage
Capacité linguistique:
999/1000  (999/1000)

http://infomath.online-talk.net

Revenir en haut Aller en bas

Re: Calcul de la date du lendemain

Message par Napoléon le Sam 24 Nov - 20:47

manianis:
ce qui me plait toujours dans vos programmes c'est qu'ils sont très élégants !!!

Juste quelques petites erreurs:
lorsqu'on met: 2000/2/28, le programme retourne 2000/3/1 alors que 2000 est une année bissextile, le lendemain c'est 2000/2/29.

Aussi, il manque un ptit contrôle sur le mois qui doit être entre 1 et 12. Smile

Encore une fois - merci pour l'effort !!!

_________________
Nabil - tunis
خير الناس أنفعهم للناس
avatar
Napoléon
Admin
Admin

Masculin
Nombre de messages : 2934
Localisation : Tunisie
Réputation : 122
Points : 5340
Date d'inscription : 19/03/2007

Feuille de personnage
Capacité linguistique:
999/1000  (999/1000)

http://infomath.online-talk.net

Revenir en haut Aller en bas

Re: Calcul de la date du lendemain

Message par suneddine le Sam 24 Nov - 22:32

je veux savoir comment tester une variable soit un entier ou non.
avatar
suneddine
Nombre Réel
Nombre Réel

Masculin
Nombre de messages : 730
Age : 32
Localisation : tunisie
Réputation : 5
Points : 3790
Date d'inscription : 11/11/2007

Feuille de personnage
Capacité linguistique:
995/1000  (995/1000)

Revenir en haut Aller en bas

Re: Calcul de la date du lendemain

Message par Napoléon le Sam 24 Nov - 23:21

mosa a écrit:je veux savoir comment tester une variable soit un entier ou non.

mosa:
Si c'est un autre sujet, poste-le séparément.
C'est pas difficile de vérifier si une variable contient un réel ou un entier.

_________________
Nabil - tunis
خير الناس أنفعهم للناس
avatar
Napoléon
Admin
Admin

Masculin
Nombre de messages : 2934
Localisation : Tunisie
Réputation : 122
Points : 5340
Date d'inscription : 19/03/2007

Feuille de personnage
Capacité linguistique:
999/1000  (999/1000)

http://infomath.online-talk.net

Revenir en haut Aller en bas

Re: Calcul de la date du lendemain

Message par manianis le Dim 25 Nov - 0:11

Admin a écrit:...
Juste quelques petites erreurs:
lorsqu'on met: 2000/2/28, le programme retourne 2000/3/1 alors que 2000 est une année bissextile, le lendemain c'est 2000/2/29.
Merci, oui en effet j'ai oublié d'écrire year % 400 == 0 :
Code:
int isLeapYear(int year)
{
  return ((year % 400 != 0 && year % 4 == 0) || year % 400 == 0);
}

Admin a écrit:
Aussi, il manque un ptit contrôle sur le mois qui doit être entre 1 et 12. Smile
Encore une fois - merci pour l'effort !!!

Non, le controle est déjà fait dans la fonction getDate. Je ne l'ai pas reproduit dans la fonction nextYear pour la simple raison que les erreurs peuvent provenir uniquement de la saisie de l'utilisateur (au moins dans ce programme).

manianis
Nombre Réel
Nombre Réel

Masculin
Nombre de messages : 975
Localisation : Tunisie
Réputation : 4
Points : 3723
Date d'inscription : 11/10/2007

Feuille de personnage
Capacité linguistique:
999/1000  (999/1000)

http://manianis.sitesled.com/

Revenir en haut Aller en bas

Re: Calcul de la date du lendemain

Message par suneddine le Dim 25 Nov - 0:15

Admin a écrit:
mosa a écrit:je veux savoir comment tester une variable soit un entier ou non.

mosa:
Si c'est un autre sujet, poste-le séparément.
C'est pas difficile de vérifier si une variable contient un réel ou un entier.
c'est pas un autre sujet mais on veux tester si l'année saisie est un entier
avatar
suneddine
Nombre Réel
Nombre Réel

Masculin
Nombre de messages : 730
Age : 32
Localisation : tunisie
Réputation : 5
Points : 3790
Date d'inscription : 11/11/2007

Feuille de personnage
Capacité linguistique:
995/1000  (995/1000)

Revenir en haut Aller en bas

Re: Calcul de la date du lendemain

Message par manianis le Dim 25 Nov - 0:22

A ce que je connais le C ne nécessite pas ce genre de test car le type est déterminé lors de la définition des variables :
Code:
int a;
float b;
a est un entier même si on fait :
Code:
a = sqrt(25); // le résultat sera un entier bien que le compilateur
  // puisse générer des avertissements (Warnings)

manianis
Nombre Réel
Nombre Réel

Masculin
Nombre de messages : 975
Localisation : Tunisie
Réputation : 4
Points : 3723
Date d'inscription : 11/10/2007

Feuille de personnage
Capacité linguistique:
999/1000  (999/1000)

http://manianis.sitesled.com/

Revenir en haut Aller en bas

Re: Calcul de la date du lendemain

Message par suneddine le Dim 25 Nov - 0:27

aaah, barakallah fik manianis
avatar
suneddine
Nombre Réel
Nombre Réel

Masculin
Nombre de messages : 730
Age : 32
Localisation : tunisie
Réputation : 5
Points : 3790
Date d'inscription : 11/11/2007

Feuille de personnage
Capacité linguistique:
995/1000  (995/1000)

Revenir en haut Aller en bas

Re: Calcul de la date du lendemain

Message par manianis le Dim 25 Nov - 0:30

mosa a écrit:aaah, barakallah fik manianis
fik aussi akhi, A votre service

manianis
Nombre Réel
Nombre Réel

Masculin
Nombre de messages : 975
Localisation : Tunisie
Réputation : 4
Points : 3723
Date d'inscription : 11/10/2007

Feuille de personnage
Capacité linguistique:
999/1000  (999/1000)

http://manianis.sitesled.com/

Revenir en haut Aller en bas

Re: Calcul de la date du lendemain

Message par Napoléon le Dim 25 Nov - 0:49

mosa a écrit:je veux savoir comment tester une variable soit un entier ou non.

il faut dire qu'il est aussi possible de tester si une valeur est entière ou avec virgule flottante... Je vais la poster comme nouveau sujet.

_________________
Nabil - tunis
خير الناس أنفعهم للناس
avatar
Napoléon
Admin
Admin

Masculin
Nombre de messages : 2934
Localisation : Tunisie
Réputation : 122
Points : 5340
Date d'inscription : 19/03/2007

Feuille de personnage
Capacité linguistique:
999/1000  (999/1000)

http://infomath.online-talk.net

Revenir en haut Aller en bas

Re: Calcul de la date du lendemain

Message par manianis le Dim 25 Nov - 1:05

Pour être précis Nabil vous parlez là de variables flottantes ?
Exemple :
5.0 est considérée comme valeur entière

manianis
Nombre Réel
Nombre Réel

Masculin
Nombre de messages : 975
Localisation : Tunisie
Réputation : 4
Points : 3723
Date d'inscription : 11/10/2007

Feuille de personnage
Capacité linguistique:
999/1000  (999/1000)

http://manianis.sitesled.com/

Revenir en haut Aller en bas

Re: Calcul de la date du lendemain

Message par Napoléon le Dim 25 Nov - 16:01

Une version SANS FONCTIONS du programme Calcul de la date du Lendemain

(Compilé et testé sous Visual Studio 6.0)
Code:
#include

void main()
{
    /********************* les variables *****************/
    int an1, mois1, jour1;
    int estBis;
    int maxJours;
    int an2, mois2, jour2;

    /********************* saisie de la date ***************/
    printf("SAISIE D'UNE DATE: \n\n");
    printf("\tANNEE = "); scanf("%i",&an1);
    printf("\tMOIS  = "); scanf("%i",&mois1);
    printf("\tJOUR  = "); scanf("%i",&jour1);

    /********************* contrôle de la date *********** */
    printf("\n");
    /* test sur Année */
    if (an1<=0)
    {
        printf("\t>> Erreur: Annee negative.\n");
        return;
    }
    /* test sur Mois */
    if (mois1<1 || mois1>12)
    {
        printf("\t>> Erreur: Mois invalide.\n");
        return;
    }
    /* test sur Jours du Mois */
    /* mois = 31 jours */
    if (mois1==1  || mois1==3 || mois1==5 || mois1==7 ||
mois1==8 || mois1==10 || mois1==12)
    {
        maxJours = 31;
        if (jour1<1 || jour1>31)
        {
            printf("\t>> Erreur: Jour invalide (mois de 31 jours).\n");
            return;
        };
    }
    /* mois = 28/29 jours */
    else
        if (mois1==2)
        {
            estBis = (an1%4==0 && an1%100!=0) || (an1%400==0);
            maxJours = 28+estBis;
            if (jour1<1 || jour1>maxJours)
            {
                printf("\t>> Erreur: Jour invalide (mois de %i jours).\n",maxJours);
                return;
            };
        }
        /* mois = 30 jours */
        else
        {
            maxJours = 30;
            if (jour1<1 || jour1>30)
            {
                printf("\t>> Erreur: Jour invalide (mois de 30 jours).\n");
                return;
            };
        }

    /********************* Calcul date Lendemain *********/
    an2 = an1;
    mois2 = mois1;
    jour2 = jour1;
   
    if (jour1 < maxJours)
        jour2 = 1 + jour1;
    else
    {
        jour2 = 1;
        mois2 = 1 + mois1;
        if (mois2 > 12)
        {
            mois2 = 1;
            an2 = 1 + an1;
        }
    }
   
    /********************* Affichage de la date Lendemain *****/
   
    printf("DATE DU LENDEMAIN \n\n");
    printf("\tANNEE = %i\n", an2);
    printf("\tMOIS  = %i\n", mois2);
    printf("\tJOUR  = %i\n", jour2);

}

_________________
Nabil - tunis
خير الناس أنفعهم للناس
avatar
Napoléon
Admin
Admin

Masculin
Nombre de messages : 2934
Localisation : Tunisie
Réputation : 122
Points : 5340
Date d'inscription : 19/03/2007

Feuille de personnage
Capacité linguistique:
999/1000  (999/1000)

http://infomath.online-talk.net

Revenir en haut Aller en bas

Re: Calcul de la date du lendemain

Message par informix le Dim 25 Nov - 22:56

nabiL: il est un peu long, mais je crois que c'est du à l'absence des fonctions!

Rectif: #include <stdio.h>

_________________
informix, Ecole d'ingénieurs
Les passions font vivre l'Homme; sa sagesse le fait seulement durer.
avatar
informix
Nombre Rationnel
Nombre Rationnel

Nombre de messages : 399
Réputation : 4
Points : 3994
Date d'inscription : 19/03/2007

Feuille de personnage
Capacité linguistique:
1000/1000  (1000/1000)

Revenir en haut Aller en bas

Re: Calcul de la date du lendemain

Message par manianis le Dim 25 Nov - 23:00

Trés bonne adapation. Félicitations, Nabil.

manianis
Nombre Réel
Nombre Réel

Masculin
Nombre de messages : 975
Localisation : Tunisie
Réputation : 4
Points : 3723
Date d'inscription : 11/10/2007

Feuille de personnage
Capacité linguistique:
999/1000  (999/1000)

http://manianis.sitesled.com/

Revenir en haut Aller en bas

Re: Calcul de la date du lendemain

Message par methodiX le Mar 27 Nov - 0:23

la version de manianis paraît plus élégante Smile
mais là, sans fonctions, on se sent étouffé Smile

_________________
Sami - Methodix, tunis
Le génie de Newton a consisté à dire que la lune tombe alors que tout le monde voit bien qu'elle ne tombe pas.
(Paul Valéry)
_____
Cliquer ici: Voir les nouveaux messages depuis votre dernière visite
Cliquer ici: Astuce: Utiliser l'outil "Recherche" du forum
avatar
methodiX
Admin
Admin

Masculin
Nombre de messages : 1260
Localisation : Le couloir de l'école polytechnique de Tunis
Réputation : 68
Points : 4722
Date d'inscription : 22/03/2007

Feuille de personnage
Capacité linguistique:
1000/1000  (1000/1000)

Revenir en haut Aller en bas

Re: Calcul de la date du lendemain

Message par Contenu sponsorisé


Contenu sponsorisé


Revenir en haut Aller en bas

Voir le sujet précédent Voir le sujet suivant Revenir en haut

- Sujets similaires

 
Permission de ce forum:
Vous ne pouvez pas répondre aux sujets dans ce forum