Bonjour,
Tes principales erreurs étaient d'avoir déclarer ton type personne avec "dn:date", d'utiliser abusivement des "with" et enfin de promener des variables "d:date" inutiles.
Pour clarifier ton code j'ai rajouté une fonction intermédiaire qui determine si une date est supérieur à une autre, et j'ai fait une saisie d'identité avec une personne à chaque fois.
program SansNom;
type date=record
j:1..31;
m:1..12;
a:integer;
end;
personne=record
nom:string;
prenom:string;
d:date;
moyenne:real;
end;
procedure saisir(var p:personne);
begin
with p do
begin
writeln;
write('Nom : '); readln(nom);
write('Prenom : '); readln(prenom);
with d do
begin
writeln;
writeln('Date de naissance : ');
writeln;
write('Jour : '); readln(j);
write('Mois : '); readln(m);
write('Annee : '); readln(a);
writeln;
end;
end;
end;
function superieur(d1,d2:date):boolean; // le résultat est TRUE ssi d1>d2
begin
if d1.a<>d2.a then result:=d1.a>d2.a
else if d1.m<>d2.m then result:=d1.m>d2.m
else result:=d1.j>d2.j;
end;
procedure afficher(p1,p2:personne);
begin
write('La personne la plus jeune est : ');
if superieur(p1.d,p2.d) then writeln(p1.nom,' ',p1.prenom)
else writeln(p2.nom,' ',p2.prenom);
end;
var p1,p2:personne;
begin
writeln('Personne 1 '); saisir(p1);
writeln('Personne 2 '); saisir(p2);
afficher(p1,p2);
writeln; write('Fin du programme. Appuyer sur Entree'); readln;
end.
La confiance n'exclut pas le contrôle