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 :

Calendrien grégorien ! programme qui affiche le jour pour une date donnée


Sujet :

C

  1. #1
    Membre du Club
    Homme Profil pro
    Inscrit en
    Novembre 2011
    Messages
    90
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Novembre 2011
    Messages : 90
    Points : 47
    Points
    47
    Par défaut Calendrien grégorien ! programme qui affiche le jour pour une date donnée
    Bonjour à tous,
    voilà quelque temps que je bosse sur mon devoir qui me demande d'écrire un programme qui affiche le jour d'une date saisie par l'utilisateur.
    Alors là, j'ai réussi à écrire un petit truc qui fonctionne, mais avec énormément d'imperfections.
    J'ai utilisé la documentation du site "http://www.univ-rouen.fr/LMRS/Vulgar...rier/jour.html" pour écrire mon programme.
    Le truc qui me plais pas, est que le programme calcul quand même si la date saisie est fausse
    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<stdlib.h>
    int main()
    {
        /*Déclaration des variables*/
        int j,jsauv,c,m,msauv,a,asauv,abi;
     
     
        //Saisie de la date par l'utilisateur
        printf("Veuillez saisir la date : le jour(jj), le mois(mm) et l'année(aaaa)\n");
     
     
     
        printf("\nVeuillez saisir le jour : ");
        scanf("%d",&j);
        while((j<1)||(j>31))
        jsauv=j;
        printf("\nVeuillez saisir le mois : ");
        scanf("%d",&m);
        while((m<1)||(m>12))
        msauv=m;
        printf("\nVeuillez saisir l'année : ");
        scanf("%d",&a);
        asauv=a;
        if(a%4==0||a%400==0)
        {
            printf("\n%d est une annee bissextile, Attention le mois de Février comporte 29 jours\n",asauv);
            abi=1;
        }
    		else
    		{
    			if(a%100 != 0)
    				printf("\n%d n'est pas une annee bissextile, Attention le mois de Février comporte 28 jours\n",asauv);
    				abi=0;
    		}
    		if((abi==1)&&(j>29))
     
            printf("\n ERREUR, cette date n'existe pas");
     
            else
            {
                if((abi=0)&&(j>28))
                printf("\n ERREUR, cette date n'existe pas");
     
            }
     
     
     
     
     
        c=(14-m)/12;
        a=a-c;
        m=m+12*c-2;
        //j = ( jour + a + a/4 - a/100 + a/400 + 31m/12 ) mod 7
     
        j=(j+a+a/4-a/100+a/400+((31*m)/12))%7;
        switch(j)
        {
            case 0:
            printf("le %d/%d/%d est un Dimanche",jsauv,msauv,asauv);
            break;
            case 1:
            printf("le %d/%d/%d est un Lundi",jsauv,msauv,asauv);
            break;
            case 2:
            printf("le %d/%d/%d est un Mardi",jsauv,msauv,asauv);
            break;
            case 3:
            printf("le %d/%d/%d est un Mercredi",jsauv,msauv,asauv);
            break;
            case 4:
            printf("le %d/%d/%d est un Jeudi",jsauv,msauv,asauv);
            break;
            case 5:
            printf("le %d/%d/%d est un Vendredi",jsauv,msauv,asauv);
            break;
            case 6:
            printf("le %d/%d/%d est un Samedi",jsauv,msauv,asauv);
            break;
     
        }
     
     
     
    }
    En gros j'aimerai épurer ce programme, et qu'il affiche juste le nécessaire, et aussi qu'il demande de ressaisir lorsqu'une donnée saisie est fausse.
    l'instruction "while" est-elle bien appropriée. Si c'est l'instruction appropriée, quelle est la syntaxe correct pour que ça redemande la saisie si l'entrée saisie est fausse.
    Et aussi il affiche n'importe quoi ! jsauv et msauv ont une valeur complètement loufoque?

    MERCI de l'aide que vous m'apporterez.

  2. #2
    Membre expérimenté Avatar de edgarjacobs
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2011
    Messages
    625
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mai 2011
    Messages : 625
    Points : 1 562
    Points
    1 562
    Par défaut
    Bonsoir,

    Quelques rapides remarques:

    1) Le calendrier grégorien n'a été utilisé qu'à partir de 15 octobre 1582, il faudrait donc que la date fournie par l'utilisateur soit >= à celle-la, sinon tout calcul effectué sera faux.

    2) Lors de l'entrée des variables, si l'utilisateur donne, par exemple, un jour >31 ou <1, ton programme va boucler sur l'assignation jsauv=j ! Ceci est valable aussi pour le mois et l'année. Faire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    do scanf("%d",&j);
    while((j<1)||(j>31));
    serait plus approprié.

    3) Tu ne vérifies pas dans ton programme que, pour le mois donné par l'utilisateur, le nombre de jours ne soit pas dépassé. Exemple: 31 jour pour avril. Il faudrait peut-être que tu déclares un tableau nombreDeJourParMois[12] et que tu fasses ce test.

    4) Même si tu détectes une erreur et que tu l'affiches, ton programme calcule un jour...

    Voilà déjà un petit aperçu.

    Cordialement,

    Edgar.
    On écrit "J'ai tort" ; "tord" est la conjugaison du verbre "tordre" à la 3ème personne de l'indicatif présent

  3. #3
    Membre du Club
    Homme Profil pro
    Inscrit en
    Novembre 2011
    Messages
    90
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Novembre 2011
    Messages : 90
    Points : 47
    Points
    47
    Par défaut
    Cool Merci Edgarjacobs, voilà déjà des pistes pour améliorer ce programme, y'a du boulot encore. Merci

  4. #4
    Membre confirmé

    Profil pro
    Inscrit en
    Août 2007
    Messages
    178
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 178
    Points : 451
    Points
    451
    Par défaut
    Ca, ça n'a pas trop de sens si a%400==0 est vrai, je vois mal comment a%4==0 pourrait être faux.
    De même dans le cas où cette condition est fausse tu teste si a%100 != 0 alors que ça ne peut être que vrai puisque un nombre divisible par cent est forcément divisible par 4.

    Petit rappel de la règle : bissextile si (a%4==0 && a%100 != 0) || a%400==0

  5. #5
    Membre du Club
    Homme Profil pro
    Inscrit en
    Novembre 2011
    Messages
    90
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Novembre 2011
    Messages : 90
    Points : 47
    Points
    47
    Par défaut
    Pourquoi y bug comme ça mon programme:
    déjà je comprend pas pourquoi l'instruction while ne fonctionne pas comme il faut. Ai-je commis une erreur dans la syntaxe ? Ensuite Quelle instruction existe pour renvoyer à la saisie d'une valeur si une erreur a été commise. Enfin pouvez m'aider à mettre les instructions dans un ordre peut être plus logique pour l'enchaînement des instructions. j'avais pensé à d'abord saisir l'année afin de déterminer si l'année est bissextile ou pas et donc inclure une condition supplémentaire si le jour saisie est le 28 ou 29 Février?

    Merci de votre aide , et passez tous une bonne soirée.
    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
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    #include<stdio.h>
    #include<stdlib.h>
    int main()
    {
        /*Déclaration des variables*/
        int j,jsauv,c,m,msauv,a,asauv,abi;
     
     
        //Saisie de la date par l'utilisateur
        //15 octobre 1582
        printf("Veuillez saisir la date : le jour(jj), le mois(mm) et l'année(aaaa)\n");
     
     
        printf("\nVeuillez saisir le jour : ");
        scanf("%d",&j);
        while((j<1)||(j>31));
     
     
     
        printf("\nVeuillez saisir le mois : ");
        scanf("%d",&m);
        switch(m)
        {
            case 1:printf("Janvier 31 jours");
            break;
            case 2:printf("Février 28 jours ou 29 (si année bisextile) ");
            break;
            case 3:printf("Mars 31 jours");
            break;
            case 4:printf("Avril 30 jours");
            break;
            case 5:printf("Mai 31 jours");
            break;
            case 6:printf("Juin 30 jours");
            break;
            case 7:printf("Juillet 31 jours");
            break;
            case 8:printf("Août 31 jours");
            break;
            case 9:printf("Septembre 30 jours");
            break;
            case 10:printf("Octobre 31 jours");
            break;
            case 11:printf("Novembre 30 jours");
            break;
            case 12:printf("Décembre 31 jours");
            break;
        }
        while((m<1)||(m>12));
     
        printf("\nVeuillez saisir l'année : ");
        scanf("%d",&a);
     
        if((a%4==0 && a%100 != 0) || a%400==0)
        {
            printf("\n%d est une annee bissextile, Attention le mois de Février comporte 29 jours\n",asauv);
            abi=1;
        }
    		else
    		{
    			if(a%100 != 0)
    				printf("\n%d n'est pas une annee bissextile, Attention le mois de Février comporte 28 jours\n",asauv);
    				abi=0;
    		}
    		if((abi==1)&&(j>29)||(j<1))
     
            printf("\n ERREUR, cette date n'existe pas");
     
            else
            {
                if((abi=0)&&(j>28)||(j<1))
                printf("\n ERREUR, cette date n'existe pas");
     
            }
     
     
     
     
        jsauv=j;msauv=m;asauv=a;
        c=(14-m)/12;
        a=a-c;
        m=m+12*c-2;
        //j = ( jour + a + a/4 - a/100 + a/400 + 31m/12 ) mod 7
     
        j=(j+a+a/4-a/100+a/400+((31*m)/12))%7;
        switch(j)
        {
            case 0:
            printf("le %d/%d/%d est un Dimanche",jsauv,msauv,asauv);
            break;
            case 1:
            printf("le %d/%d/%d est un Lundi",jsauv,msauv,asauv);
            break;
            case 2:
            printf("le %d/%d/%d est un Mardi",jsauv,msauv,asauv);
            break;
            case 3:
            printf("le %d/%d/%d est un Mercredi",jsauv,msauv,asauv);
            break;
            case 4:
            printf("le %d/%d/%d est un Jeudi",jsauv,msauv,asauv);
            break;
            case 5:
            printf("le %d/%d/%d est un Vendredi",jsauv,msauv,asauv);
            break;
            case 6:
            printf("le %d/%d/%d est un Samedi",jsauv,msauv,asauv);
            break;
     
        }
     
     
     
    }

  6. #6
    Membre expérimenté Avatar de edgarjacobs
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2011
    Messages
    625
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mai 2011
    Messages : 625
    Points : 1 562
    Points
    1 562
    Par défaut
    Pourquoi ne demandes-tu pas à l'utilisateur d'entrer une date sous forme d'un string (genre jj/mm/aaaa), que tu analyseras ensuite à ton aise? Tu pourras alors commencer par vérifier si l'année est bissextile ou non, pour ajuster le nombre de jours du mois de février, et ensuite tu pourras vérifier que le nombre de jours entré sois >0 et <=au nombre de jours du mois.

    Exemple:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    début: entrée de la date
    si année<1582 -> erreur, on recommence au début
    si année bissextile, jour[février]=29 sinon jour[février]=28
    m=mois entré
    si m<1 ou m>12 -> erreur, on recommence au début
    si année=1582 et m<10 -> erreur, on recommence au début
    j=jour entré
    si j<1 ou j>jour[m] -> erreur, on recommence au début
    si année=1582 et m=10 et j<15 -> erreur, on recommence au début
    Tout est ok, on peut procéder au calcul du jour de la semaine
    Cela te permettra aussi d'afficher un message d'erreur pour chaque type de faute.

    Pour ce qui est du while, as-tu lu ma première réponse?
    On écrit "J'ai tort" ; "tord" est la conjugaison du verbre "tordre" à la 3ème personne de l'indicatif présent

  7. #7
    Membre confirmé

    Profil pro
    Inscrit en
    Août 2007
    Messages
    178
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 178
    Points : 451
    Points
    451
    Par défaut
    Citation Envoyé par sk8trasher Voir le message
    Pourquoi y bug comme ça mon programme:
    déjà je comprend pas pourquoi l'instruction while ne fonctionne pas comme il faut. Ai-je commis une erreur dans la syntaxe ?
    Non, la syntaxe est parfaite
    tu lui dit de rien faire et il ne fait rien mais comme tu lui dit de ne rien faire tant que la valeur de "j" n'est pas entre 1 et 31 et que tu ne modifie pas la valeur de "j", il ne fait rien éternellement (enfin jusqu'à ce que tu l'arrêtes)

    Citation Envoyé par sk8trasher Voir le message
    Ensuite Quelle instruction existe pour renvoyer à la saisie d'une valeur si une erreur a été commise.
    Il n'y a pas vraiment d'instruction toute faite, mais c'est pas bien compliqué à faire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
        while((j<1)||(j>31))
        {
          printf("\nSaisie impossible, veuillez resaisir le jour : ");
          scanf("%d",&j);
        }
    Citation Envoyé par sk8trasher Voir le message
    Enfin pouvez m'aider à mettre les instructions dans un ordre peut être plus logique pour l'enchaînement des instructions. j'avais pensé à d'abord saisir l'année afin de déterminer si l'année est bissextile ou pas et donc inclure une condition supplémentaire si le jour saisie est le 28 ou 29 Février?
    C'est sûr qu'avertir l'utilisateur du nombre de jours dans un mois alors qu'il a déjà tapé le jour du mois ça na pas grand intéret.
    Le post d'edgarjacobs devrait te fournir une bonne base de travail à ce sujet.

    Pour finir un petit conseil pour faire joli : évite de multiplier les "switch", par exemple si tu déclares
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    const char* nomjour[]={"Dimanche","Lundi","Mardi","Mercredi","Jeudi","Vendredi","Samedi"};
    le dernier "switch" peut être remplacé par :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    printf("\nle %d/%d/%d est un %s",jsauv,msauv,asauv,nomjour[j]);

  8. #8
    Membre du Club
    Homme Profil pro
    Inscrit en
    Novembre 2011
    Messages
    90
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Novembre 2011
    Messages : 90
    Points : 47
    Points
    47
    Par défaut
    Bon voilà je pense que ce petit programme est fonctionnel.
    Voici la source:
    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
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    #include<stdio.h>
    #include<stdlib.h>
    int main()
    {
        /*Déclaration des variables*/
        int j,jsv,nbj,c,m,msv,a,asv,abi;
        const char* nomjour[]={"Dimanche","Lundi","Mardi","Mercredi","Jeudi","Vendredi","Samedi"};
     
     
        //Saisie de la date par l'utilisateur
        //15 octobre 1582
        do
        {
            printf("\nVeuillez saisir l'année : "
                   "\nAttention le calendrien grégorien commence le 15 octobre 1582\n");
            scanf("%d",&a);
            asv=a;
        }while(a<1582);
         if((a%4==0 && a%100 != 0) || a%400==0)
        {
            printf("\n%d est une annee bissextile",a);
            abi=1;
        }
        else
        {
    		if(a%100 != 0)
    		printf("\n%d n'est pas une annee bissextile",a);
    		abi=0;
    	}
     
        do
        {
            printf("\nVeuillez saisir le mois : ");
            scanf("%d",&m);
            msv=m;
            if(abi==1)
            printf("\n%d est une annee bissextile, Attention le mois de Février comporte 29 jours\n",a);
            else
            printf("\n%d n'est pas une annee bissextile, Attention le mois de Février comporte 28 jours\n",a);
            switch(m)
            {
                case 1:printf("Janvier 31 jours");
                nbj=31;
                break;
                case 2:printf("Février 28 jours ou 29 (si année bisextile) ");
                break;
                case 3:printf("Mars 31 jours");
                nbj=31;
                break;
                case 4:printf("Avril 30 jours");
                nbj=30;
                break;
                case 5:printf("Mai 31 jours");
                nbj=31;
                break;
                case 6:printf("Juin 30 jours");
                nbj=30;
                break;
                case 7:printf("Juillet 31 jours");
                nbj=31;
                break;
                case 8:printf("Août 31 jours");
                nbj=31;
                break;
                case 9:printf("Septembre 30 jours");
                nbj=30;
                break;
                case 10:printf("Octobre 31 jours");
                nbj=31;
                break;
                case 11:printf("Novembre 30 jours");
                nbj=30;
                break;
                case 12:printf("Décembre 31 jours");
                nbj=31;
                break;
            }
            }while((m<1)||(m>12));
     
        do
        {
            printf("\nVeuillez saisir le jour : ");
            scanf("%d",&j);
            jsv=j;
        }while((j<1)||(j>31));
     
        if((m==2)&&(abi==1)&&(j>29))
        {
          printf("\nSaisie impossible, veuillez resaisir le jour : ");
          scanf("%d",&j);
        }
     
        if((m==2)&&(abi==0)&&(j>28))
        {
          printf("\nSaisie impossible, veuillez resaisir le jour : ");
          scanf("%d",&j);jsv=j;
        }
        if((m!=2)&&(nbj==31)&&(j>31))
       {
          printf("\nSaisie impossible, veuillez resaisir le jour : ");
          scanf("%d",&j);jsv=j;
        }
        if((m!=2)&&(nbj==30)&&(j>30))
        {
          printf("\nSaisie impossible, veuillez resaisir le jour : ");
          scanf("%d",&j);jsv=j;
        }
        while((j<1)||(j>31))
        {
          printf("\nSaisie impossible, veuillez resaisir le jour : ");
          scanf("%d",&j);jsv=j;
        }
     
     
        if((m==2)&&(abi==1)&&(j>29))
       {
          printf("\nSaisie impossible, veuillez resaisir le jour : ");
          scanf("%d",&j);jsv=j;
        }
        if((m==2)&&(abi==0)&&(j>28))
       {
          printf("\nSaisie impossible, veuillez resaisir le jour : ");
          scanf("%d",&j);jsv=j;
        }
     
     
     
     
     
        c=(14-m)/12;
        a=a-c;
        m=m+12*c-2;
        //j = ( jour + a + a/4 - a/100 + a/400 + 31m/12 ) mod 7
     
        j=(j+a+a/4-a/100+a/400+((31*m)/12))%7;
     
        printf("\nle %d/%d/%d est un %s",jsv,msv,asv,nomjour[j]);
     
     
     
     
     
         return 0;
     
    }
    Il me semble en revanche que ma série de condition Si est un peu lourde.
    Merci dans tous les cas pour vos précieux conseil.

  9. #9
    Membre éclairé
    Avatar de Elijha
    Homme Profil pro
    Ingénieur développement matériel électronique
    Inscrit en
    Avril 2003
    Messages
    314
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur développement matériel électronique
    Secteur : Bâtiment Travaux Publics

    Informations forums :
    Inscription : Avril 2003
    Messages : 314
    Points : 742
    Points
    742
    Par défaut
    Bonjour,

    Est-ce qu'il ne serait pas plus "rapide" de faire une saisie de date en entière, et ensuite de vérifier et indiquer les erreurs ?
    Exemple :
    "12/05/2012" --> "12" ok, "05" ok, "2012" ok
    "30/02/2012" --> "30" ok, "02" non car doit être <= à 29 jours
    - Le switch(m) pourrait être simplifié/remplacé par un tableau à 2 dimensions avec abi comme index d'année bissextile (ou pas) et m le numéro du mois.
    - De plus cela simplifiera le test du nombre de jours dans le mois saisi
    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
    const char *nomMois[12] = { "Janvier", ....., "Décembre" } ;    // Tu remplis la suite ;o)
    const int nbJoursMois[2][12] = 
    {
        { 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 },    // Pas bissextile
        { 31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 }     // Année bissextile
    } ;
     
     
    // Saisi du numéro de mois
    do {
        // Ta saisie clavier (Attention a tester le retour de scanf, erreur si tu saisies une lettre). Voir ABSOLUMENT le man scanf.
    } while(m<1 || m>12) ;
     
    // ATTENTION, le numéro du mois doit commencer par ZERO avec l'utilisation d'un tableau
    m-- ;  // Décrémente de 1 le numéro du mois ! Le mois va donc de 0 à 11 !
     
    // Attribution du nombre de jours du mois saisi
    nbj = nbJoursMois[abi][m] ;
    // Affichage
    printf("Le mois de %s compte %d jours de l'année %d.\n", nomMois[m], nbj, a) ;
    ...
    ...
    ...
    // Si le numéro du jour n'est pas valable par rapport à l'année abi et au mois m, recommencer la saisie du jour.
    if(j>nbJoursMois[abi][m]) {    /* ou (j>nbj) */
        printf("Erreur de saisie du numéro de jour. Le mois %s comporte seulement %d jours de l'année %d.\n", nomMois[m], nbJoursMois[abi][m], a) ;
    }
    Bonne continuation.
    - Une réponse vous a été utile ? Remerciez son auteur en cliquant le pouce vert !
    - Travailler dur n'a jamais tué personne, mais pourquoi prendre le risque (Edgar Bergen)

Discussions similaires

  1. [Turbo Pascal] Programme qui affiche le jour à partir d'une date
    Par rafikadel dans le forum Turbo Pascal
    Réponses: 22
    Dernier message: 27/03/2020, 19h33
  2. jour de la semaine pour une date donnée
    Par laurentSc dans le forum Langage
    Réponses: 2
    Dernier message: 17/03/2012, 23h58
  3. Réponses: 2
    Dernier message: 20/01/2009, 13h31
  4. fonction qui retourne le jour d'une date
    Par yucf_miagiste dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 24/08/2007, 08h41
  5. Réponses: 3
    Dernier message: 18/10/2005, 15h34

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