Langage C: écrire un programme en C

Nelson -  
[Dal] Messages postés 6122 Date d'inscription   Statut Contributeur Dernière intervention   -
Bonjour, à tous. Désolé du dérangement, j'aimerais s'il vous plaît avoir la correction en C de l'exercice suivant :
"Ecrire un algorithme qui demande un numéro de jour, de mois et d'année à l'utilisateur et renvoie s'il s'agit ou non d'une date valide."
J'ai essayé de faire la structure algorithmique et ensuite l'écrire en langage C mais, il ne se compile pas donc je suis totalement perdu. Serait-il possible d'avoir une correction d'ici demain, je vous en prie.
Merci d'avance à tous.

Configuration: Windows / Chrome 99.0.4844.74

3 réponses

  1. [Dal] Messages postés 6122 Date d'inscription   Statut Contributeur Dernière intervention   1 108
     
    Quand j'ai un problème pas évident à résoudre, j'essaye de le décomposer en problèmes plus simples à résoudre, me permettant d'arriver au but.

    If y a deux choses "difficiles" : déterminer le nombre de jours pour un mois et gérer le cas particulier des années bissextiles pour le mois de février. Pour les mois, un simple test de bornage de 1 à 12 suffit. Pour les années, si tu n'as pas d'exigences particulières, tu pourrais te contenter de ne rien vérifier, à moins que veuilles vérifier que la date fournie est bien une date à partir du 15 octobre 1582 (ton programme se base sur la répartition des douze mois du calendrier grégorien).

    Alors, une façon de faire pourrait être :
    • de commencer par écrire une fonction
      int is_leap_year(int year);
      qui retourne 0 (faux) si l'année n'est pas bissextile et 1 ou toute autre valeur (vrai) si elle l'est
    • une fois que cette fonction est testée, et au point, en second lieu, faire une fonction
      int days_in_month(int month, int year);
      qui retourne le nombre de jours dans un mois donné, cette fonction utilisant
      is_leap_year()
      pour traiter le cas du mois de février
    • une fois que cette fonction est au point, écrire une fonction
      int is_valid_date(int day, int month, int year);
      et tester cette fonction devient facile
    0
  2. jaouadi
     
    #include <stdio.h>
    
    int main()
    {
    int j,m,a,bissextile=0,date_valide=0;
    printf("saisir le jour: ");
    scanf("%d",&j);
    printf("saisir le mois: ");
    scanf("%d",&m);
    printf("saisir l'annee: ");
    scanf("%d",&a);
    
    if ((a %400 == 0)||((a%4==0)&&(a%100)))
        bissextile=1;
    if ((((m==1)||(m==3)||(m==5)||(m==7)||(m==8)||(m==10)||(m==12))&&((j>0)&&(j<=31)))||(((m==4)||(m==6)||(m==9)||(m==11))&&((j>0)&&(j<=30)))||((bissextile)&&(m==2)&&((j>0)&&(j<=28)))||((bissextile==0)&&(m==2)&&((j>0)&&(j<=27))))
        date_valide=1;
    
    if (date_valide)
        printf("la date %d/%d/%d est une date valide.",j,m,a);
    else
        printf("la date %d/%d/%d n'est pas une date valide.",j,m,a);
    return 0;
    }
    0
    1. [Dal] Messages postés 6122 Date d'inscription   Statut Contributeur Dernière intervention   1 108
       
      Bonjour jaouadi,

      Il y a, au moins, deux erreurs dans ta ligne 15, qui est très longue et difficile à lire.

      Si le mois est février, ce mois peut avoir 29 jours les années bissextiles et 28 jours les années non bissextiles.

      La date 28-02-2021 est une date valide, mais ton code indique le contraire.
      La date 29-02-2024 est une date valide, mais ton code indique le contraire.

      Dal
      0