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

  1. #1
    Membre du Club
    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
    Points : 66
    Points
    66
    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 du Club
    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
    Points : 66
    Points
    66
    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 éminent Avatar de BufferBob
    Profil pro
    responsable R&D vidage de truites
    Inscrit en
    Novembre 2010
    Messages
    3 035
    Détails du profil
    Informations personnelles :
    Localisation : France

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

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

  4. #4
    Membre du Club
    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
    Points : 66
    Points
    66
    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 du Club
    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
    Points : 66
    Points
    66
    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 éminent Avatar de BufferBob
    Profil pro
    responsable R&D vidage de truites
    Inscrit en
    Novembre 2010
    Messages
    3 035
    Détails du profil
    Informations personnelles :
    Localisation : France

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

    Informations forums :
    Inscription : Novembre 2010
    Messages : 3 035
    Points : 8 400
    Points
    8 400
    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 du Club
    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
    Points : 66
    Points
    66
    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 !

  8. #8
    Expert éminent sénior
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 689
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 689
    Points : 30 983
    Points
    30 983
    Billets dans le blog
    1
    Par défaut
    Bonjour
    Citation Envoyé par benjamin_malaussene Voir le message
    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 !
    Mouais. Rappelle-toi quand-même qu'une macro ne fait que remplacer un code par un autre !!!
    Surtout que je t'ai déjà dit que ce n'était pas primordial à la compréhension du C. En fait, je pense même que ça peut empêcher d'apprehender certaines notions donc théoriquement, ton prof devrait refuser jusqu'à ce que tu aies bien tout compris.

    Citation Envoyé par benjamin_malaussene Voir le message
    et que je n'ai pas mis les macros en majuscules
    Ce n'est qu'une convention. De même que les noms de variables, eux, doivent être mis en minuscules (char MOIS[10])
    Sinon (pour info et justesse), l'année 2200 fait bien partie du XXI° siècle, elle est bien divisible par 4 mais elle n'est pas bissextile (une année bissextile est divisible par 4 mais pas par 100 ; ou bien par 400 !!!)
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  9. #9
    Membre du Club
    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
    Points : 66
    Points
    66
    Par défaut
    Salut Svear, ok j'utiliserai pas les macros pour l'instant. Sinon je crois que le 21e siecle va de 2000 à 2099, à moins que j'ai mal compris, l'année 2200 est le début du 23e siècle ?

  10. #10
    Membre émérite
    Homme Profil pro
    sans emploi
    Inscrit en
    Janvier 2014
    Messages
    539
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : sans emploi
    Secteur : Conseil

    Informations forums :
    Inscription : Janvier 2014
    Messages : 539
    Points : 2 601
    Points
    2 601
    Par défaut
    Quand les calendriers chrétiens ont été inventés le zéro était encore inconnu en occident, tout comme les nombres négatifs d'ailleurs. Les années, pour parler technique, sont plus des ordinaux que des cardinaux. Ainsi l'an 1218 est la 1218ème année après la naissance du Christ. Il n'y a pas d'an 0. L'année qui précède l'an 1 est l'an 1 avant JC …
    Du coup le premier siècle commence en 1 et dure 100 années donc jusqu'en l'an 100, le deuxième siècle commence en 101 et fini en 200, etc …
    Le XXIème siècle a commencé en 2001 et finira en 2100, du coup le XXIIe commencera en 2101 pour finir en 2200.

  11. #11
    Membre du Club
    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
    Points : 66
    Points
    66
    Par défaut
    Ah ok dans mon sujet ils précisent que la date doit être antérieure au 1er janvier 2100, merci pour ces précisions.

+ 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