Les Allergies
Alimentaires
Posez votre question Signaler

Ppcm avec recursivité [Résolu]

AMOULA_info 5Messages postés 19 novembre 2007Date d'inscription - Dernière réponse le 21 janv. 2012 à 19:37
Bonjour,
Bonjour, tout le monde
je veux bien savoir comment calculer le ppcm(a,b) avec la methode recursive en pascal sans l'ajout d'un autre parametre à l'entête de la fonction sachant que je connais la methode itérative avec deux façons:
1ere methode:
function ppcm(a,b: integer):integer;
var i :integer;
begin
i:=1;
if a*b = 0 then ppcm :=0 else
begin
while a*i mod b <> 0 do
i:=i+1;
ppcm:=a*i;
end;
end;
2ème methode:
function ppcm(a,b: integer):integer;
var max,min :integer;
begin
if a*b = 0 then ppcm :=0 else
begin
if a>b then begin max :=a; min:=b ; end
else begin max :=b; min :=a; end;
while max mod min <> 0 do
max := max +(a+b-min);
ppcm:=max;
end;
end;
merci pour votre aide
Lire la suite 

Ppcm avec recursivité »

16 réponses
Réponse
+6
moins plus
je vous présente la solution complète de tout le programme qui fait le calcul du ppcm de deux entiers a et b avec la méthode récursive en respectant les contraintes de la saisie de a et b:

program ppcm_rec;
uses wincrt;
var
a,b:word;

procedure saisir(var a,b:word);
begin
repeat
writeln('donner a: ');
readln(a);
writeln('donner b: ');
readln(b);
until ((a>b) and (a>0));
end;


function ppcm(a,b:word): longint;

var
r:integer;

begin
if (b = 0) then
ppcm := 0
else if (a mod b = 0) then
ppcm := a
else
begin
r:=a mod b;
ppcm:=( a div r)* ppcm(b,r);
end;
end;


begin
saisir(a,b);
writeln('le ppcm de ',a,' et ',b,' est ',ppcm(a,b));
end.
rouna10 - 16 nov. 2010 à 23:26
function ppcm(a,b:word): longint;

var
r:integer;

begin
if (b = 0) then
ppcm := 0
else if (a mod b = 0) then
ppcm := a
else
ppcm:=( a div (a mod b))* ppcm(a,a mod b);
end;
rouna10 - 16 nov. 2010 à 23:33
Si vous exécuter votre programme avec des entier a et b (par exemple a=23 et b=5) vous avez trouvé une fausse résultat.
Il faut remplacé "ppcm:=( a div r)* ppcm(b,r);" par "ppcm:=( a div r)* ppcm(a,r);"
rouna10 - 21 janv. 2012 à 19:37
ecrire ce mm algo sans utiliser ni fonction, ni procédure
Ajouter un commentaire
Réponse
+0
moins plus
merci pour vous tous , j'ai trouvé la solution moi même!!!

function ppcm(a,b:integer) : integer;
var r : integer;
begin



if a mod b = 0 then ppcm := a

else

begin
r:=a mod b;
ppcm:=( a div r)* ppcm(b,r);
end;

end;
amoula_info - 6 déc. 2007 à 11:17
merci pour votre interêt et surtout pour votre politesse mais il suffit d'ajouter un autre test au début pour resoudre ce probleme.
function ppcm(a,b:integer) : integer;
var r : integer;
begin


if b = 0 then ppcm := 0
else if a mod b = 0 then ppcm := a

else

begin
r:=a mod b;
ppcm:=( a div r)* ppcm(b,r);
end;

end;
mon vrai problème etait avec parametres faire le nouvel appel de la fonction.
et voilà comment j'ai trouvé la solution .
ppcm(a,b)* pgcd(a,b) = a*b {theoreme mathématique}
d'où pgcd(a,b ) = (a*b) / ppcm(a,b)
et puisque pgcd(a,b) = pgcd(b,r) {avec r = a mod b} et pgcd (b,r) = (b*r)/ ppcm(b,r) {} d'aprés le théoreme precdedent}
on peut conclure que (a*b) / ppcm(a,b) = (b*r) / ppcm(b,r) d'où ppcm(a,b) =( (a*b)/ (b*r))*ppcm(b,r)
= (a div r )*ppcm(b,r)
j'espère que j'etais bien claire
3loulou - 19 nov. 2008 à 06:40
MERCI BIEN DE VOTRE AIDE
fenni - 6 mai 2009 à 13:07
Voici une solution optimale :

Function ppcm (a, b, r : integer) : integer;
begin
if (r mod b)=0
then ppcm := r
else ppcm := ppcm (a, b, r+a) ;
end;
L’appel sera : Writeln ('PPCM = ', ppcm(a,b,a));
Ajouter un commentaire
Réponse
+0
moins plus
Function ppcmRec1 (a,b,i :integer):integer;
begin
if a * b = 0 then
ppcmR := 0
else
if a * i mod b = 0 then
ppcmR := a * i
else
ppcmR := ppcmR(a,b,i+1);
End;

Appeler X :=ppcmRec1(a,b,1)
Ajouter un commentaire
Réponse
+0
moins plus
Pardon j'ai commis des erreurs d'appel :)
Voici la solution complète InChaallah

Program testppcm ;
uses wincrt;


function ppcm1(a,b: integer):integer;
var i :integer;
begin
i:=1;
if a*b = 0 then
ppcm1 :=0
else
begin
while a*i mod b <> 0 do
i:=i+1;
ppcm1:=a*i;
end;
end;


Function ppcmRec1 (a,b,i :integer):integer;
begin
if a * b = 0 then
ppcmRec1 := 0
else
if a * i mod b = 0 then
ppcmRec1 := a * i
else
ppcmRec1 := ppcmRec1(a,b,i+1);
End;


function ppcm2(a,b: integer):integer;
var max,min :integer;
begin
if a*b = 0 then
ppcm2 :=0
else
begin
if a>b then
begin
max :=a;
min:=b ;
end
else
begin
max :=b;
min :=a;
end;
while max mod min <> 0 do
max := max +(a+b-min);
ppcm2:=max;
end;
end;

function ppcmRec2(a,b: integer):integer;
Var
max,min : integer;
Begin

if a*b = 0 then
ppcmRec2 :=0
else
begin
if a>b then
begin
max :=a;
min:=b ;
end
else
begin
max :=b;
min :=a;
end;
if max mod min = 0 then
ppcmRec2:=max
else
ppcmRec2 := ppcmRec2(max +(a+b-min),b);

end;


End;



Begin
{exemple d'aapel}
Writeln(ppcm1(15,3));
Writeln(ppcmRec1(3,15,1));
Writeln(ppcm2(4,12));
Writeln(ppcmRec2(23,42));

{
Résultat :
15
15
12
84
}
End.
Ajouter un commentaire
Réponse
+0
moins plus
salut Ouhiby
pour la fonction recursive ppcmrec2 je pense ( et je l'ai tester d'ailleur) qu'elle est fausse.
Ouhiby - 29 nov. 2007 à 20:27
Ah oui, j'ai pas pu la corrigé !!!
qu'est ce que vous en dites ?
Ajouter un commentaire
Réponse
+0
moins plus
j' ai trouver plusieur solution
mais la quel la plus juste
svp
trés urgent!!!!!!!!!!!
rouna10 - 16 nov. 2010 à 23:29
function ppcm(a,b:word): longint;

var
r:integer;

begin
if (b = 0) then
ppcm := 0
else if (a mod b = 0) then
ppcm := a
else
ppcm:=( a div (a mod b))* ppcm(a,a mod b);
end;

{ c'est la plus just}
Ajouter un commentaire
Réponse
+0
moins plus
salut, SVP j ve un programme qui permet de saisir et d'afficher le ppcm de deux nombre ( le ppcm doit etre sous la formes des entier avec ses exposon!!) compris!! svp i need it
Ajouter un commentaire
Ce document intitulé « ppcm avec recursivité » issu de CommentCaMarche (www.commentcamarche.net) est mis à disposition sous les termes de la licence Creative Commons. Vous pouvez copier, modifier des copies de cette page, dans les conditions fixées par la licence, tant que cette note apparaît clairement.
Dossier à la une
Passage au tout numérique : quel coût pour les particuliers ?