us_30
Messages postés2065Date d'inscriptionlundi 11 avril 2005StatutMembreDernière intervention14 mars 2016
-
7 mai 2005 à 23:24
us_30
Messages postés2065Date d'inscriptionlundi 11 avril 2005StatutMembreDernière intervention14 mars 2016
-
8 mai 2005 à 18:34
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.
us_30
Messages postés2065Date d'inscriptionlundi 11 avril 2005StatutMembreDernière intervention14 mars 201610 8 mai 2005 à 18:34
Oui, bien sur... (j'ai juste signalé une alternative à "Replace" puisque je ne dispose pas de cette fonction, éventuellement pour d'autres lecteurs qui serait dans mon cas de figure...)
...Enfin, maintenant pour moi, l'intérêt c'est de comprendre pourquoi ton algorithme est le plus rapide...
Bonne programmation....
Us.
MaX_62
Messages postés879Date d'inscriptionvendredi 22 octobre 2004StatutMembreDernière intervention29 juin 2007 8 mai 2005 à 18:25
Salut,
Effectivement, le fonctionnement de ton code est a peu près similaire au mien, j'avais pas regardé ce code.
Je vais laisser quand même la fonction replace, plus claire a mon gout :)
Merci pour tes encouragements
MaX_62
us_30
Messages postés2065Date d'inscriptionlundi 11 avril 2005StatutMembreDernière intervention14 mars 201610 8 mai 2005 à 18:16
Salut,
Oui, maintenant j'ai bien saisi son fonctionnement... que je dois de qualifier d'asticieux... Bon, je dois aussi dire que votre algorithme est dans son principe parfaitement identique à celui que j'ai déposé (http://www.vbfrance.com/code.aspx?ID=31149)... Néanmoins, le votre est plus rapide dans certain cas particulier où l'on choisit un nombre premier trés grand... Ce qui m'étonne d'ailleurs... mais bon... c'est comme ça... (est-ce dû à l'emploi de While...Wend plutôt que Do...loop ?)
JE l'ai regardé de trés près, sans trouvé de défaut... J'ai juste remarqué la répétition : "D Mod A = 0" mais sans trouvé qlq chose de mieux...
{
Extrait :
If D Mod A 0 Or D Mod X 0 Then
'On assigne le diviseur de D a la variable L
L IIf(D Mod A 0, A, X)
}
IL me semble donc, trés bien... ET comme on dirait dans les chiffres et les lettres : PAS MIEUX !
Toute de même une p'tite remarque, (pour d'autres lecteurs)... Dans mon cas, je l'ai testé avec VBA dans Excel 97... et la fonction "Replace" n'existe pas... J'ai donc contourné le problème en modifiant les lignes :
B = B & Chr(32) & L & IIf(I > 1, Chr(94) & Trim(I), "")
en :
B = B & L & IIf(I > 1, "^" & Trim(I), "") & "*"
Puis,
FPremier = Replace(Trim(IIf(D > 1, B & Chr(32) & Trim
(D), B)), Chr(32), Chr(42))
en :
If Len(B) > 0 Then FPremier Left(B, Len(B) - 1) & IIf(D > 1, "*" & D, "") Else FPremier D
Voilà ! mes félicitations...
A+
Us.
Saros
Messages postés921Date d'inscriptionvendredi 20 décembre 2002StatutMembreDernière intervention23 septembre 2010 8 mai 2005 à 15:24
Dis... des noms de variables du style A, X, O, N, etc etc c'est pas très parlant, ça aide pas trop à la compréhension justement...
MaX_62
Messages postés879Date d'inscriptionvendredi 22 octobre 2004StatutMembreDernière intervention29 juin 2007 8 mai 2005 à 07:01
Merci pour le 'if', je vais mettre a jour et commenter le code pour qu'il soit plus compréhensible.
us_30
Messages postés2065Date d'inscriptionlundi 11 avril 2005StatutMembreDernière intervention14 mars 201610 7 mai 2005 à 23:24
Salut,
J'ai beau essayé de décortiquer l'algorithme, je ne vois pas comment il marche ? Peux-tu expliquer... Je suis trés intéréssé...
Pour l'instant, je n'ai pas vraiment vu d'amélioration, surtout faute de compréhension du fonctionnement...
Juste un détail, le code :
If D <= 1 Then
FPremier = "Error"
Exit Function
End If
8 mai 2005 à 18:34
...Enfin, maintenant pour moi, l'intérêt c'est de comprendre pourquoi ton algorithme est le plus rapide...
Bonne programmation....
Us.
8 mai 2005 à 18:25
Effectivement, le fonctionnement de ton code est a peu près similaire au mien, j'avais pas regardé ce code.
Je vais laisser quand même la fonction replace, plus claire a mon gout :)
Merci pour tes encouragements
MaX_62
8 mai 2005 à 18:16
Oui, maintenant j'ai bien saisi son fonctionnement... que je dois de qualifier d'asticieux... Bon, je dois aussi dire que votre algorithme est dans son principe parfaitement identique à celui que j'ai déposé (http://www.vbfrance.com/code.aspx?ID=31149)... Néanmoins, le votre est plus rapide dans certain cas particulier où l'on choisit un nombre premier trés grand... Ce qui m'étonne d'ailleurs... mais bon... c'est comme ça... (est-ce dû à l'emploi de While...Wend plutôt que Do...loop ?)
JE l'ai regardé de trés près, sans trouvé de défaut... J'ai juste remarqué la répétition : "D Mod A = 0" mais sans trouvé qlq chose de mieux...
{
Extrait :
If D Mod A 0 Or D Mod X 0 Then
'On assigne le diviseur de D a la variable L
L IIf(D Mod A 0, A, X)
}
IL me semble donc, trés bien... ET comme on dirait dans les chiffres et les lettres : PAS MIEUX !
Toute de même une p'tite remarque, (pour d'autres lecteurs)... Dans mon cas, je l'ai testé avec VBA dans Excel 97... et la fonction "Replace" n'existe pas... J'ai donc contourné le problème en modifiant les lignes :
B = B & Chr(32) & L & IIf(I > 1, Chr(94) & Trim(I), "")
en :
B = B & L & IIf(I > 1, "^" & Trim(I), "") & "*"
Puis,
FPremier = Replace(Trim(IIf(D > 1, B & Chr(32) & Trim
(D), B)), Chr(32), Chr(42))
en :
If Len(B) > 0 Then FPremier Left(B, Len(B) - 1) & IIf(D > 1, "*" & D, "") Else FPremier D
Voilà ! mes félicitations...
A+
Us.
8 mai 2005 à 15:24
8 mai 2005 à 07:01
7 mai 2005 à 23:24
J'ai beau essayé de décortiquer l'algorithme, je ne vois pas comment il marche ? Peux-tu expliquer... Je suis trés intéréssé...
Pour l'instant, je n'ai pas vraiment vu d'amélioration, surtout faute de compréhension du fonctionnement...
Juste un détail, le code :
If D <= 1 Then
FPremier = "Error"
Exit Function
End If
pourrait être remplacé par :
If D <1 Then FPremier D: Exit Function
c'est plus sympa que "erreur"...
A+
Us.