Aide programme pascal a resoudre

punisher338 Messages postés 2 Statut Membre -  
KX Messages postés 19031 Statut Modérateur -
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. punisher338 Messages postés 2 Statut Membre
     
    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.
    0
  2. KX Messages postés 19031 Statut Modérateur 3 020
     
    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.
    0