IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

 C Discussion :

Affichage d'une date sous la forme JJ mois 20YY


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Lycéen
    Inscrit en
    Avril 2014
    Messages
    123
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : Avril 2014
    Messages : 123
    Par défaut Affichage d'une date sous la forme JJ mois 20YY
    Bonjour je dois écrire un programme qui à partir d'un nombre JJMMYY représentant une date du 21e siècle affiche la date sous la forme JJ mois 20YY (le mois est en toutes lettres). Je n'ai pas le droit d'utiliser les tableaux. Est-ce que vous pouvez me dire si je peux améliorer mon code, mis à part que je n'ai pas fait deux fonctions différentes (saisie et traitement), et que je n'ai pas mis les macros en majuscules ? Merci !

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
     
    #include <stdio.h>
    #include <string.h>
    typedef char bool;
    #define true 1
    #define false 0
     
    int main()
    {
        int date,jour,mois,annee,lus,ok;
        char MOIS[10];
        char c;
     
        printf("Saisir une date du 21e siecle JJMMYY : ");
        ok=scanf("%d%n",&date,&lus);
        c=(getchar() == '\n') ?0 :1;
        while(getchar()!='\n');
        jour=date/10000;
        mois=(date/100)%100;
        annee=date%100;
     
        if(jour==31) //test mois courts (sauf février)
        {
            if(mois==4||mois==6||mois==9||mois==11)
            {
                flag=false;
                printf("Veuillez entrer une date qui existe.\n");
            }
        }
        if(mois==2) //test mois février
        {
            if(jour>29||(jour==29&&(annee%4)!=0))
            {
                flag=false;
                printf("Veuillez entrer une date qui existe (l'annee n'est pas bissextile).\n");
            }
        }
     
        if(lus==6 && ok==1 && c==0 && date>=010100 && jour!=0 && mois!=0 && jour<=31 && mois<=12)
        {
     
            switch(mois)
            {
                case 1 : strcpy(MOIS,"Janvier");
                        break;
     
                case 2 : strcpy(MOIS,"Fevrier");
                        break;
     
                case 3 : strcpy(MOIS,"Mars");
                        break;
     
                case 4 : strcpy(MOIS,"Avril");
                        break;
     
                case 5 : strcpy(MOIS,"Mai");
                        break;
     
                case 6 : strcpy(MOIS,"Juin");
                        break;
     
                case 7 : strcpy(MOIS,"Juillet");
                        break;
     
                case 8 : strcpy(MOIS,"Aout");
                        break;
     
                case 9 : strcpy(MOIS,"Septembre");
                        break;
     
                case 10 : strcpy(MOIS,"Octobre");
                        break;
     
                case 11 : strcpy(MOIS,"Novembre");
                        break;
     
                case 12 : strcpy(MOIS,"Decembre");
                        break;
            }
            printf("%02d %s 20%02d",jour,MOIS,annee);
        }
        else
            printf("La date n'est pas valide.");
     
        return 0;
    }

  2. #2
    Membre confirmé
    Homme Profil pro
    Lycéen
    Inscrit en
    Avril 2014
    Messages
    123
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : Avril 2014
    Messages : 123
    Par défaut
    J'avais oublié de déclarer et de traiter le flag.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
     
    #include <stdio.h>
    #include <string.h>
    typedef char bool;
    #define true 1
    #define false 0
     
    int main()
    {
        int date,jour,mois,annee,lus,ok;
        char MOIS[10];
        char c;
        bool flag=true;
     
        printf("Saisir une date du 21e siecle JJMMYY : ");
        ok=scanf("%d%n",&date,&lus);
        c=(getchar() == '\n') ?0 :1;
        jour=date/10000;
        mois=(date/100)%100;
        annee=date%100;
     
        if(jour==31) //test mois courts (sauf février)
        {
            if(mois==4||mois==6||mois==9||mois==11)
            {
                flag=false;
                printf("Veuillez entrer une date qui existe.\n");
            }
        }
        if(mois==2) //test mois février
        {
            if(jour>29||(jour==29&&(annee%4)!=0))
            {
                flag=false;
                printf("Veuillez entrer une date qui existe (l'annee n'est pas bissextile).\n");
            }
        }
     
        if(lus==6 && ok==1 && c==0 && date>=010100 && jour!=0 && mois!=0 && jour<=31 && mois<=12 && flag==true)
        {
     
            switch(mois)
            {
                case 1 : strcpy(MOIS,"Janvier");
                        break;
     
                case 2 : strcpy(MOIS,"Fevrier");
                        break;
     
                case 3 : strcpy(MOIS,"Mars");
                        break;
     
                case 4 : strcpy(MOIS,"Avril");
                        break;
     
                case 5 : strcpy(MOIS,"Mai");
                        break;
     
                case 6 : strcpy(MOIS,"Juin");
                        break;
     
                case 7 : strcpy(MOIS,"Juillet");
                        break;
     
                case 8 : strcpy(MOIS,"Aout");
                        break;
     
                case 9 : strcpy(MOIS,"Septembre");
                        break;
     
                case 10 : strcpy(MOIS,"Octobre");
                        break;
     
                case 11 : strcpy(MOIS,"Novembre");
                        break;
     
                case 12 : strcpy(MOIS,"Decembre");
                        break;
            }
            printf("%02d %s 20%02d",jour,MOIS,annee);
        }
        else
            printf("La date n'est pas valide.");
     
        return 0;
    }

  3. #3
    Expert confirmé Avatar de BufferBob
    Profil pro
    responsable R&D vidage de truites
    Inscrit en
    Novembre 2010
    Messages
    3 041
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : responsable R&D vidage de truites

    Informations forums :
    Inscription : Novembre 2010
    Messages : 3 041
    Par défaut
    Citation Envoyé par benjamin_malaussene Voir le message
    Je n'ai pas le droit d'utiliser les tableaux.

  4. #4
    Membre confirmé
    Homme Profil pro
    Lycéen
    Inscrit en
    Avril 2014
    Messages
    123
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : Avril 2014
    Messages : 123
    Par défaut
    Ah oui pour les chaines de caractères c'est obligé, du coup je vais faire une 2e solution avec les tableaux.

  5. #5
    Membre confirmé
    Homme Profil pro
    Lycéen
    Inscrit en
    Avril 2014
    Messages
    123
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : Avril 2014
    Messages : 123
    Par défaut
    Voilà ma solution avec les tableaux, et puis j'avais oublié de vider le buffer aussi.

    #include <stdio.h>
    #include <string.h>
    typedef char bool;
    #define true 1
    #define false 0

    int main()
    {
    int date,jour,mois,annee,lus,ok;
    char MOIS[10];
    char buffer[1024];
    char c;
    bool flag=true;
    char * m[] = {"janvier", "fevrier", "mars", "avril", "mai", "juin",
    "juillet", "aout", "septembre", "octobre", "novembre", "decembre"};

    printf("Saisir une date du 21e siecle JJMMYY : ");
    ok=scanf("%d%n",&date,&lus);
    c=(getchar() == '\n') ?0 :1;
    fgets(buffer,1024,stdin);
    jour=date/10000;
    mois=(date/100)%100;
    annee=date%100;

    if(jour==31) //test mois courts (sauf février)
    {
    if(mois==4||mois==6||mois==9||mois==11)
    {
    flag=false;
    printf("Veuillez entrer une date qui existe.\n");
    }
    }
    if(mois==2) //test mois février
    {
    if(jour>29||(jour==29&&(annee%4)!=0))
    {
    flag=false;
    printf("Veuillez entrer une date qui existe (l'annee n'est pas bissextile).\n");
    }
    }

    if(lus==6 && ok==1 && c==0 && date>=010100 && jour!=0 && mois!=0 && jour<=31 && mois<=12 && flag==true)
    {

    strcpy(MOIS,m[mois-1]);
    printf("%02d %s 20%02d",jour,MOIS,annee);
    }
    else
    printf("La date n'est pas valide.");

    return 0;
    }

  6. #6
    Expert confirmé Avatar de BufferBob
    Profil pro
    responsable R&D vidage de truites
    Inscrit en
    Novembre 2010
    Messages
    3 041
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : responsable R&D vidage de truites

    Informations forums :
    Inscription : Novembre 2010
    Messages : 3 041
    Par défaut
    t'as oublié les balises [code][/code] dans ton précédent post ^^

    je te propose, sans tableau et moyennant deux macros essentiellement pour la lisibilité :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    #include <stdio.h>
     
    #define QUITTE(x) { \
       printf (x"\n"); \
       return -1; \
    }
     
    #define CHECKNDISPLAY(x, y) { \
       if (jour < 1 || jour > y) QUITTE("c'est un jour qui n'existe pas") \
       else { \
          printf("Le %d %s %d\n", jour, x, annee); \
          break; \
       } \
    }
     
    int main(void) {
       int date, jour, mois, annee, lus, ok, max_jours_fevrier;
     
       /* saisie de la date et "decoupage" en jour/mois/annee */
       printf("Saisir une date du 21e siecle JJMMYY : ");
       ok = scanf("%d%n", &date, &lus);
       jour = date / 10000;
       mois = (date / 100) % 100;
       annee = 2000 + (date % 100);
     
       /* validation de la date/du timestamp */
       if (lus != 6 || ok != 1 || date < 0) QUITTE("saisie invalide")
       if (annee < 2001) QUITTE("une date du 21e siecle on a dit")
       if (mois < 1 || mois > 12) QUITTE("c'est quel mois ca ??")
     
       /* on determine juste le nombre de jours pour le mois de fevrier (annees bisextiles) */
       if ((annee % 4) == 0) max_jours_fevrier = 29; else max_jours_fevrier = 28;
     
       /* et on affiche dans la foulee, le chek sur le jour est inclu */
       switch (mois) {
          case 1 : CHECKNDISPLAY("Janvier", 31)
          case 2 : CHECKNDISPLAY("Fevrier", max_jours_fevrier)
          case 3 : CHECKNDISPLAY("Mars", 31)
          case 4 : CHECKNDISPLAY("Avril", 30)
          case 5 : CHECKNDISPLAY("Mai", 31)
          case 6 : CHECKNDISPLAY("Juin", 30)
          case 7 : CHECKNDISPLAY("Juillet", 31)
          case 8 : CHECKNDISPLAY("Aout", 31)
          case 9 : CHECKNDISPLAY("Septembre", 30)
          case 10 : CHECKNDISPLAY("Octobre", 31)
          case 11 : CHECKNDISPLAY("Novembre", 30)
          case 12 : CHECKNDISPLAY("Decembre", 31)
       }
     
       return 0;
    }

  7. #7
    Membre confirmé
    Homme Profil pro
    Lycéen
    Inscrit en
    Avril 2014
    Messages
    123
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : Avril 2014
    Messages : 123
    Par défaut
    Salut BufferBob, merci, c'est génial en fait les macros, je demanderai à mon prof si j'ai le droit de les utiliser. Pour passer des variables en paramètres comme des chaines de caractères c'est beaucoup plus simple que des fonctions car on n'a même pas besoin de les déclarer !

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 1
    Dernier message: 08/10/2009, 21h58
  2. [MySQL] Affichage d'une table sous forme d'un tableau via PHP
    Par CYCLOPE91440 dans le forum PHP & Base de données
    Réponses: 4
    Dernier message: 16/01/2007, 19h25
  3. Réponses: 10
    Dernier message: 12/07/2006, 11h42
  4. Réponses: 5
    Dernier message: 08/03/2006, 15h22
  5. [JDBC] Requête avec une date sous la forme dd/MM/yyyy
    Par sylviefrfr dans le forum JDBC
    Réponses: 6
    Dernier message: 12/11/2005, 09h35

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo