Langage C: écrire un programme en C

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. Contributeur
    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
    1. #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. Contributeur
        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