Ppcm avec recursivité
Résolu/Fermé
AMOULA_info
Messages postés
3
Date d'inscription
lundi 19 novembre 2007
Statut
Membre
Dernière intervention
20 novembre 2007
-
20 nov. 2007 à 08:56
lido - 10 mars 2019 à 20:06
lido - 10 mars 2019 à 20:06
A voir également:
- Ppcm recursive
- PPCM - Forum Programmation
- Ppcm - Forum Programmation
- Fonction ppcm algorithme ✓ - Forum Programmation
- Ppcm en c - Forum C
- PGCD PPCM - Forum C
9 réponses
Utilisateur anonyme
22 mai 2009 à 16:16
22 mai 2009 à 16:16
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.
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.
AMOULA_info
Messages postés
3
Date d'inscription
lundi 19 novembre 2007
Statut
Membre
Dernière intervention
20 novembre 2007
9
20 nov. 2007 à 11:52
20 nov. 2007 à 11:52
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;
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;
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
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
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)
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)
salut Ouhiby
pour la fonction recursive ppcmrec2 je pense ( et je l'ai tester d'ailleur) qu'elle est fausse.
pour la fonction recursive ppcmrec2 je pense ( et je l'ai tester d'ailleur) qu'elle est fausse.
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
j' ai trouver plusieur solution
mais la quel la plus juste
svp
trés urgent!!!!!!!!!!!
mais la quel la plus juste
svp
trés urgent!!!!!!!!!!!
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
Etonnant le nombre d'algorithmes proposés qui supposent a >= b ;)
Testez-les avec ppcm(1, 53), voire ppcm(0, 22) ;))
Testez-les avec ppcm(1, 53), voire ppcm(0, 22) ;))
Utilisateur anonyme
28 juin 2013 à 20:05
28 juin 2013 à 20:05
Function ppcm (a,b:integer):integer;
begin
if a=b then ppcm:=a
else if a>b
then ppcm:=(ppcm(a-b,b)*a) div (a-b)
else ppcm:=(ppcm(a,b-a)*b) div (b-a);
end;
begin
if a=b then ppcm:=a
else if a>b
then ppcm:=(ppcm(a-b,b)*a) div (a-b)
else ppcm:=(ppcm(a,b-a)*b) div (b-a);
end;
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.
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.
Modifié par rouna10 le 16/11/2010 à 23:27
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;
16 nov. 2010 à 23:33
Il faut remplacé "ppcm:=( a div r)* ppcm(b,r);" par "ppcm:=( a div r)* ppcm(a,r);"
21 janv. 2012 à 19:37
25 mai 2018 à 11:30
10 mars 2019 à 20:06