Forum INFOMATH
Vous souhaitez réagir à ce message ? Créez un compte en quelques clics ou connectez-vous pour continuer.
-39%
Le deal à ne pas rater :
Ordinateur portable ASUS Chromebook Vibe CX34 Flip
399 € 649 €
Voir le deal

Calcul de la date du lendemain

+3
Napoléon
serenere
medch
7 participants

Aller en bas

Calcul de la date du lendemain Empty Calcul de la date du lendemain

Message par medch 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);}


}
medch
medch
Entier Naturel
Entier Naturel

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

Revenir en haut Aller en bas

Calcul de la date du lendemain Empty Re: Calcul de la date du lendemain

Message par serenere 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
serenere
serenere
Entier Naturel
Entier Naturel

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

Feuille de personnage
Capacité linguistique:
Calcul de la date du lendemain Left_bar_bleue1000/1000Calcul de la date du lendemain Empty_bar_bleue  (1000/1000)

Revenir en haut Aller en bas

Calcul de la date du lendemain Empty Re: Calcul de la date du lendemain

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

Commentaires très pertinents de la part de serenere.
Napoléon
Napoléon
Admin
Admin

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

Feuille de personnage
Capacité linguistique:
Calcul de la date du lendemain Left_bar_bleue999/1000Calcul de la date du lendemain Empty_bar_bleue  (999/1000)

https://infomath.1fr1.net

Revenir en haut Aller en bas

Calcul de la date du lendemain Empty Re: Calcul de la date du lendemain

Message par manianis 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 : 6045
Date d'inscription : 11/10/2007

Feuille de personnage
Capacité linguistique:
Calcul de la date du lendemain Left_bar_bleue999/1000Calcul de la date du lendemain Empty_bar_bleue  (999/1000)

http://manianis.sitesled.com/

Revenir en haut Aller en bas

Calcul de la date du lendemain Empty Re: Calcul de la date du lendemain

Message par Napoléon 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...
Napoléon
Napoléon
Admin
Admin

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

Feuille de personnage
Capacité linguistique:
Calcul de la date du lendemain Left_bar_bleue999/1000Calcul de la date du lendemain Empty_bar_bleue  (999/1000)

https://infomath.1fr1.net

Revenir en haut Aller en bas

Calcul de la date du lendemain Empty Re: Calcul de la date du lendemain

Message par Napoléon 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?
Napoléon
Napoléon
Admin
Admin

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

Feuille de personnage
Capacité linguistique:
Calcul de la date du lendemain Left_bar_bleue999/1000Calcul de la date du lendemain Empty_bar_bleue  (999/1000)

https://infomath.1fr1.net

Revenir en haut Aller en bas

Calcul de la date du lendemain Empty Re: Calcul de la date du lendemain

Message par Napoléon 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 !!!
Napoléon
Napoléon
Admin
Admin

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

Feuille de personnage
Capacité linguistique:
Calcul de la date du lendemain Left_bar_bleue999/1000Calcul de la date du lendemain Empty_bar_bleue  (999/1000)

https://infomath.1fr1.net

Revenir en haut Aller en bas

Calcul de la date du lendemain Empty Re: Calcul de la date du lendemain

Message par suneddine Sam 24 Nov - 22:32

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

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

Feuille de personnage
Capacité linguistique:
Calcul de la date du lendemain Left_bar_bleue995/1000Calcul de la date du lendemain Empty_bar_bleue  (995/1000)

Revenir en haut Aller en bas

Calcul de la date du lendemain Empty Re: Calcul de la date du lendemain

Message par Napoléon 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.
Napoléon
Napoléon
Admin
Admin

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

Feuille de personnage
Capacité linguistique:
Calcul de la date du lendemain Left_bar_bleue999/1000Calcul de la date du lendemain Empty_bar_bleue  (999/1000)

https://infomath.1fr1.net

Revenir en haut Aller en bas

Calcul de la date du lendemain Empty Re: Calcul de la date du lendemain

Message par manianis 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 : 6045
Date d'inscription : 11/10/2007

Feuille de personnage
Capacité linguistique:
Calcul de la date du lendemain Left_bar_bleue999/1000Calcul de la date du lendemain Empty_bar_bleue  (999/1000)

http://manianis.sitesled.com/

Revenir en haut Aller en bas

Calcul de la date du lendemain Empty Re: Calcul de la date du lendemain

Message par suneddine 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
suneddine
suneddine
Nombre Réel
Nombre Réel

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

Feuille de personnage
Capacité linguistique:
Calcul de la date du lendemain Left_bar_bleue995/1000Calcul de la date du lendemain Empty_bar_bleue  (995/1000)

Revenir en haut Aller en bas

Calcul de la date du lendemain Empty Re: Calcul de la date du lendemain

Message par manianis 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 : 6045
Date d'inscription : 11/10/2007

Feuille de personnage
Capacité linguistique:
Calcul de la date du lendemain Left_bar_bleue999/1000Calcul de la date du lendemain Empty_bar_bleue  (999/1000)

http://manianis.sitesled.com/

Revenir en haut Aller en bas

Calcul de la date du lendemain Empty Re: Calcul de la date du lendemain

Message par suneddine Dim 25 Nov - 0:27

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

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

Feuille de personnage
Capacité linguistique:
Calcul de la date du lendemain Left_bar_bleue995/1000Calcul de la date du lendemain Empty_bar_bleue  (995/1000)

Revenir en haut Aller en bas

Calcul de la date du lendemain Empty Re: Calcul de la date du lendemain

Message par manianis 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 : 6045
Date d'inscription : 11/10/2007

Feuille de personnage
Capacité linguistique:
Calcul de la date du lendemain Left_bar_bleue999/1000Calcul de la date du lendemain Empty_bar_bleue  (999/1000)

http://manianis.sitesled.com/

Revenir en haut Aller en bas

Calcul de la date du lendemain Empty Re: Calcul de la date du lendemain

Message par Napoléon 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.
Napoléon
Napoléon
Admin
Admin

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

Feuille de personnage
Capacité linguistique:
Calcul de la date du lendemain Left_bar_bleue999/1000Calcul de la date du lendemain Empty_bar_bleue  (999/1000)

https://infomath.1fr1.net

Revenir en haut Aller en bas

Calcul de la date du lendemain Empty Re: Calcul de la date du lendemain

Message par manianis 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 : 6045
Date d'inscription : 11/10/2007

Feuille de personnage
Capacité linguistique:
Calcul de la date du lendemain Left_bar_bleue999/1000Calcul de la date du lendemain Empty_bar_bleue  (999/1000)

http://manianis.sitesled.com/

Revenir en haut Aller en bas

Calcul de la date du lendemain Empty Re: Calcul de la date du lendemain

Message par Napoléon 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);

}
Napoléon
Napoléon
Admin
Admin

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

Feuille de personnage
Capacité linguistique:
Calcul de la date du lendemain Left_bar_bleue999/1000Calcul de la date du lendemain Empty_bar_bleue  (999/1000)

https://infomath.1fr1.net

Revenir en haut Aller en bas

Calcul de la date du lendemain Empty Re: Calcul de la date du lendemain

Message par informix 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
informix
Nombre Rationnel
Nombre Rationnel

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

Feuille de personnage
Capacité linguistique:
Calcul de la date du lendemain Left_bar_bleue1000/1000Calcul de la date du lendemain Empty_bar_bleue  (1000/1000)

Revenir en haut Aller en bas

Calcul de la date du lendemain Empty Re: Calcul de la date du lendemain

Message par manianis 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 : 6045
Date d'inscription : 11/10/2007

Feuille de personnage
Capacité linguistique:
Calcul de la date du lendemain Left_bar_bleue999/1000Calcul de la date du lendemain Empty_bar_bleue  (999/1000)

http://manianis.sitesled.com/

Revenir en haut Aller en bas

Calcul de la date du lendemain Empty Re: Calcul de la date du lendemain

Message par methodiX Mar 27 Nov - 0:23

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

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

Feuille de personnage
Capacité linguistique:
Calcul de la date du lendemain Left_bar_bleue1000/1000Calcul de la date du lendemain Empty_bar_bleue  (1000/1000)

Revenir en haut Aller en bas

Calcul de la date du lendemain Empty Re: Calcul de la date du lendemain

Message par Contenu sponsorisé


Contenu sponsorisé


Revenir en haut Aller en bas

Revenir en haut

- Sujets similaires

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