Bonjour,
J'ai un dm à faire et je l'ai fait mais maintenant il faut le compiler et apparemment il y a des erreurs de "grammaire" (compilation sur free pascal) que je ne trouve pas, MERCI de m'aider:
Je vous dis l'énoncer malgré tout mais je ne cherche pas à améliorer mon programme c'est a dire le rendre plus court car je sais qu'on le peut et en plus ca serait long pour vous, juste ce qui entraine une erreur de compilation sur freePascal:
Le programme a réaliser doit dans un premier temps demander la saisie de la date
actuelle sous la forme de 3 valeurs entières correspondant au jour, au mois et à l’année. Le
programme doit vérifier que la saisie est correcte, c’est-à-dire que les valeurs correspondent
à un jour, un mois et une année réels. Il faut aussi que la date existe (par exemple que
ce ne soit pas le 31 d’un mois à 30 jours, ou qu’un 29 février soit bien dans une année
bisextile). On autorisera seulement la saisie d’années allant de 1900 à 2012.
Si la saisie n’est pas correcte le programme doit demander à l’utilisateur de saisir de
nouvelles valeurs pour le jour, le mois, l’année ou toute la date.
Une fois que la date actuelle a été correctement saisie, le programme demande la saisie
d’une nouvelle date qui représentera une date de naissance. Ici encore, il faut que cette
date soit valide, sinon le programme demandera de re-saisir certaines valeurs.
Enfin, une fois que ces 2 dates sont saisies, le programme doit calculer et afficher l’âge
(en années) de la personne dont la date de naissance a été saisie. Si elle n’est pas encore
née, le programme devra aussi le mentionner.
Code:program calcule_age; function estUneAnneeBissextile(annee : Integer)*: Boolean; begin if annee mod 4:=0 then estUneAnneeBissextile:=true else estUneAnneeBissextile:=false end; {estUneAnneeBissextile} function estUnMoisA31Jours(mois*: Integer)*: Boolean; begin case mois of 1,3,5,7,8,10,12*: estUnMoisA31Jours:=true else : estUnMoisA31Jours:=false end; {estUnMoisA31Jours} function estUneFausseDate(jour,mois,annee*: Integer) : Boolean; begin if not(estUnMoisA31Jours(mois)) and (jour:=31) then estUneFausseDate:=true; if mois:=2 and estUneAnneeBissextile(annee) and jour>29 then estUneFausseDate:=true; if mois:=2 and not(estUneAnneeBissextile(annee)) and jour>28 then estUneFausseDate:=true else estUneFausseDate:=false end; {estUneFausseDate} procedure saisieDate(S jour, mois, annee*: Integer); var bJour, bMois, bAnnee*: Boolean; begin bJour:=true; bMois:=true; bAnnee:=true; repeat repeat writeln('Entrez le jour*:') readln(jour) if (jour<1) or (jour>31) then bJour:=false writeln('Ce jour est invalide, recommencez svp') until bJour repeat writeln('Ce mois est invalide, recommencez svp') readln(mois) if(mois<1) ou (mois>12) then bMois:=false writeln('Ce mois est invalide, recommencez svp') until not(estUneFausseDate(jour,mois,annee)) end; {saisieDate} procedure saisie(S jourActuel, moisActuel, anneeActuelle, jourDeNaissance, moisDeNaissance, anneeDeNaissance*: Integer); begin writeln('Entrez la date actuelle'); sasieDate(jourActuel, moisActuel, anneeActuelle); writeln('Entrez votre date de naissance'); saisieDate(jourDeNaissance, moisDeNaissance,anneeDeNaissance); end; {saisie} function calculDeLAge(jourActuel, moisActuel, anneeActuelle, jourDeNaissance, moisDeNaissance, anneeDeNaissance*: Integer)*: Integer; begin if moisActuel>moisDeNaissance then calculDeLAge:=(anneeActuelle-anneeDeNaissance) else if moisActuel:=moisDeNaissance then if jourActuel>=jourDeNaissance then calculDeLAge:=(anneeActuelle-anneeDeNaissance) else calculDeLAge:=((anneeActuelle-anneeDeNaissance)-1) else calculDeLAge:=((anneeActuelle-anneeDeNaissance)-1) end; {calculDeLAge} function ageNegatif(age*: Integer)*: Boolean; begin if age<0 then ageNegatif:=true else ageNegatif:=false end; {ageNegatif} procedure affichageAge(age*: Integer); begin if ageNegatif(age) then writeln('Vous n"êtes pas encore né') else writeln('Vous avez',age,'ans') end; {affichageAge} procedure ageActuel(); var jourActuel, moisActuel, anneeActuelle, jourDeNaissance, moisDeNaissance, anneeDeNaissance*: Integer; begin saisie(jourActuel, moisActuel, anneeActuelle, jourDeNaissance, moisDeNaissance, anneeDeNaissance); affichageAge(calculDeLAge(jourActuel, anneeActuelle, jourDeNaissance, moisDeNaissance, anneeDeNaissance)); end. {ageActuel}
-----