Langage C: écrire un programme en C

Fermé
Nelson - 23 mars 2022 à 12:42
[Dal] Messages postés 6198 Date d'inscription mercredi 15 septembre 2004 Statut Contributeur Dernière intervention 13 décembre 2024 - 4 avril 2022 à 10:58
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
A voir également:

3 réponses

choubaka Messages postés 39407 Date d'inscription jeudi 4 avril 2002 Statut Modérateur Dernière intervention 9 décembre 2024 2 104
23 mars 2022 à 12:44
Bonjour
Il te suffit de mettre ton code ici et nous pourrons te corriger..
Utilise bien les balises pour poster le code.
Maintenant, il ne faut pas espérer que nous fassions tes devoirs à ta place.

https://www.commentcamarche.net/infos/25899-demander-de-l-aide-pour-vos-exercices-sur-ccm/
0
[Dal] Messages postés 6198 Date d'inscription mercredi 15 septembre 2004 Statut Contributeur Dernière intervention 13 décembre 2024 1 094
Modifié le 1 avril 2022 à 16:38
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
#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
[Dal] Messages postés 6198 Date d'inscription mercredi 15 septembre 2004 Statut Contributeur Dernière intervention 13 décembre 2024 1 094
Modifié le 4 avril 2022 à 11:20
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