Il n'y a qu'une petite erreur : il faut sortir ce que j'ai mis en gras de la boucle

for d:=1 to (e div 2) do
car tu affiches également le nombre comme étant parfait si une somme intermédiaire...