cs_Delphiprog
Messages postés4297Date d'inscriptionsamedi 19 janvier 2002StatutMembreDernière intervention 9 janvier 2013
-
18 févr. 2002 à 23:20
pierrotk10d
Messages postés110Date d'inscriptionmardi 13 novembre 2007StatutMembreDernière intervention 2 février 2024
-
5 mars 2009 à 21:24
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.
pierrotk10d
Messages postés110Date d'inscriptionmardi 13 novembre 2007StatutMembreDernière intervention 2 février 20243 5 mars 2009 à 21:24
Sachant que le PPCM de deux nombres est égalau produit de ces deux nombres divisé par le PGCD de ces deux meme nombres
PPCM de a,b = ((axb)Div (PGCD(a,b))).
Pour le calcul du PGCD voir sur le forum il y a une fonction récursive qui fait ça très bien la voici :
Function Pgcd(a,b:Integer): Integer;
// Calcul du Pgcd
Begin
If b = 0 then
Result := a
else
Result := Pgcd(b, a Mod b);
end;
cs_Delphiprog
Messages postés4297Date d'inscriptionsamedi 19 janvier 2002StatutMembreDernière intervention 9 janvier 201332 13 déc. 2003 à 16:01
Autrement, je me suis amusé à réaliser un test comparatif des performances entre le méthode de LoOnEy et la mienne.
Y a pas photo, la méthode de LoOnEy est au moins deux fois plus rapide.
Félicitations à LoOnEy !
cs_Delphiprog
Messages postés4297Date d'inscriptionsamedi 19 janvier 2002StatutMembreDernière intervention 9 janvier 201332 13 déc. 2003 à 15:45
Bien vu LoOnEy !
En réalité, il faut lire :
function PPCM(const a, b : integer):integer;
var i,j : integer;
begin
result:= -1; //not found
for i:=1 to 20 do
for j:=1 to 20 do
if (a * i) = (b * j) then
begin
Result:= a * i;
exit; // <== c'est toute la différence
end;
end;
Un court instant de distraction !
cs_LoOnEy
Messages postés10Date d'inscriptiondimanche 21 septembre 2003StatutMembreDernière intervention 6 juillet 2009 13 déc. 2003 à 15:06
euh je c pa si j'ai mal compris mais je crois ke Delphiprog a fait une petite erreur car son prog ne sort pa de la boucle sur la première réponse trouvé...
ce ki fait k'il renvoi toujours le dernier resultat et donc pas le plus 'PETIT' commun multiple.....
function ppcm(i,j:integer):integer;
var
min:integer;
begin
if (i>j) then
begin
min:=j;
j:=i;
i:=min;
end;
min:=i;
while((min mod i) <> 0) or ((min mod j)<>0) do
inc(min);
result:=min;
end;
Alors ke la en 3 variables ca renvoi un résultat ki me semble plus korrect... :o)
à moins ke je me trompe... :o(
cs_Delphiprog
Messages postés4297Date d'inscriptionsamedi 19 janvier 2002StatutMembreDernière intervention 9 janvier 201332 18 févr. 2002 à 23:22
function PPCM(a, b : integer):integer;
var i,j : integer;
begin
result:= -1; //not found
for i:=1 to 20 do
for j:=1 to 20 do
if (a * i) = (b * j) then
begin
Result:= a * i
end;
end;
NB : pas d'utilisation de tableau (seulement 4 variables entières)
NB 2 : function réutilisable depuis n'importe quelle unité d'un projet.
utilisation :
if PPCM(15, 18) <> -1 then
//Résultat trouvé...
Qu'en penses-tu ?
cs_Delphiprog
Messages postés4297Date d'inscriptionsamedi 19 janvier 2002StatutMembreDernière intervention 9 janvier 201332 18 févr. 2002 à 23:20
function PPCM(a, b : integer):integer;
var i,j : integer;
begin
result:= -1; //not found
for i:=1 to 20 do
for j:=1 to 20 do
if (a * i) = (b * j) then
begin
Result:= a * i
end;
end;
NB : pas d'utilisation de tableau (seulement 4 variables entières)
NB 2 : function réutilisable depuis n'importe quelle unité d'un projet.
utilisation :
if PPCM(15, 18) <> -1 then
//Résultat trouvé...
Qu'en penses-tu ?
5 mars 2009 à 21:24
PPCM de a,b = ((axb)Div (PGCD(a,b))).
Pour le calcul du PGCD voir sur le forum il y a une fonction récursive qui fait ça très bien la voici :
Function Pgcd(a,b:Integer): Integer;
// Calcul du Pgcd
Begin
If b = 0 then
Result := a
else
Result := Pgcd(b, a Mod b);
end;
13 déc. 2003 à 16:01
Y a pas photo, la méthode de LoOnEy est au moins deux fois plus rapide.
Félicitations à LoOnEy !
13 déc. 2003 à 15:45
En réalité, il faut lire :
function PPCM(const a, b : integer):integer;
var i,j : integer;
begin
result:= -1; //not found
for i:=1 to 20 do
for j:=1 to 20 do
if (a * i) = (b * j) then
begin
Result:= a * i;
exit; // <== c'est toute la différence
end;
end;
Un court instant de distraction !
13 déc. 2003 à 15:06
ce ki fait k'il renvoi toujours le dernier resultat et donc pas le plus 'PETIT' commun multiple.....
function ppcm(i,j:integer):integer;
var
min:integer;
begin
if (i>j) then
begin
min:=j;
j:=i;
i:=min;
end;
min:=i;
while((min mod i) <> 0) or ((min mod j)<>0) do
inc(min);
result:=min;
end;
Alors ke la en 3 variables ca renvoi un résultat ki me semble plus korrect... :o)
à moins ke je me trompe... :o(
18 févr. 2002 à 23:22
var i,j : integer;
begin
result:= -1; //not found
for i:=1 to 20 do
for j:=1 to 20 do
if (a * i) = (b * j) then
begin
Result:= a * i
end;
end;
NB : pas d'utilisation de tableau (seulement 4 variables entières)
NB 2 : function réutilisable depuis n'importe quelle unité d'un projet.
utilisation :
if PPCM(15, 18) <> -1 then
//Résultat trouvé...
Qu'en penses-tu ?
18 févr. 2002 à 23:20
var i,j : integer;
begin
result:= -1; //not found
for i:=1 to 20 do
for j:=1 to 20 do
if (a * i) = (b * j) then
begin
Result:= a * i
end;
end;
NB : pas d'utilisation de tableau (seulement 4 variables entières)
NB 2 : function réutilisable depuis n'importe quelle unité d'un projet.
utilisation :
if PPCM(15, 18) <> -1 then
//Résultat trouvé...
Qu'en penses-tu ?