Aide programme pascal a resoudre

Bonjour
écrire en pascal un programme qui permet de determiner les nombres parfaits entre deux entiers m et n donnés par avance telque 2˂m˂n
exemple : un nombre est dit parfait si la somme de ses diviseurs autre que lui est egale a lui meme par exemple (6=1+2+3) donc 6 est parfait
et merci d'avance de votre aide.
Configuration: Windows Vista Internet Explorer 7.0

3 réponses

  1. Modérateur
    Salut,

    Il est très important de décomposer ton code en fonctions et procédures si tu veux arriver à quelque chose de facilement corrigible et donc d'arriver plus facilement à un programme correct.
    program punisher338;
    
    function EstParfait(n:integer):boolean;
    var i,s:integer;
    begin
         s:=0;
         for i:=1 to (n div 2) do
             if (n mod i)=0 then s:=s+i;
         result:= (n=s);
    end;
    
    procedure AfficherNbParfait(min,max:integer);
    var i:integer;
    begin
         for i:=min to max do
             if EstParfait(i) then writeln(i);
    end;
    
    var a,b:integer;
    begin
    writeln('Affichage des nombres premiers compris entre a et b.');
    writeln;
    write('a = '); readln(a);
    write('b = '); readln(b);
    writeln;
    AfficherNbParfait(a,b);
    
    writeln; write('Fin du programme. Appuyer sur Entree'); readln;
    end.
    1. program parfait;
      uses wincrt;
      var

      begin
      writeln('enter un entier m');
      readln(m);
      writeln('entrer un entier n');
      readln(n);
      repeat
      writeln ('entrer un entier p');
      readln(p);
      until (p˂m) and (n˂p);
      somme:=0;
      for i:=1 to ( p div 2 ) do
      if p mod 2 = 0 then somme:=somme+i;
      if p=somme then writeln('l''entier est parfait ');
      else writeln('l''entier est parfait');
      end.
      ou ol existe une autre solution pour affichier tous les entiers parfaits
      on procede de la maniere suivante

      begin
      writeln('entrer un entier m');
      readln(m);
      writeln('entrer un entier n');
      readln(n);
      for i:=m to n do
      somme:=0;
      for j:= 1 to ( i div 2) do
      if i mod j = 0 then somme:=somme+j;
      if i=somme then writeln(i,' ');
      end.