Trouver les diviseurs entier d'un nombre entier

Soyez le premier à donner votre avis sur cette source.

Vue 14 153 fois - Téléchargée 439 fois

Description

Logi qui trouve les diviseurs d'un entier

Source / Exemple :


'zip

Codes Sources

A voir également

Ajouter un commentaire

Commentaires

cs_mehdibou
Messages postés
365
Date d'inscription
vendredi 24 mai 2002
Statut
Membre
Dernière intervention
18 octobre 2004
-
J'ai téléchargé ta source car j'en avais fait une semblable (je crois pas l'avoir mise sur vbfrance..).
Et voici quelques conseils, remarques, critiques, etc...:
- tu devrais aligner le texte à droite pour les nombres et limiter le nombre de caractères dans la textbox
- Ajoute Option Explicit et déclare toutes tes variables et types les (les fonctions aussi)
- dans Get_Resultat(), If res < Int(res) Then ne sera jamais exécuté car Int(res) est tjr <= à res : Int tronque mais n'arrondi pas !
- Utilise des ElseIf plutot que Exit Function et End If, c'est plus clair
- Get_Reste() => remplace la fonction par l'opérateur modulo : Dividende % Diviseur
- Trim(Mid(mot, v, 1)) <= Trim est inutile car tu prends un seul caractère de la chaine et ensuite tu le compare à "0"
- Utilise toujours des $ pour les fonctions qui retournent une chaine de caractère, c'est plus propre et plus rapide, exemple : Mid$(mot, v, 1))
- CorrigeMot() <= tu peux le remplacer par val()
- dans Try_for_diviser() : 2x Dividende = 0 ??
- je ne sais pas où tu es aller chercher Try_for_diviser() c'est vraiment compliqué ; tu aurais pu faire res=dividende/diviseur: if res=int(res) Then....
- tu utilise des Integer donc ton programme se limite à 32767, utilise plutot des Long pour aller un peu plus loin que 2milliards
- tu tests tous les nombres de 2 jusqu'au nombre, une méthode beaucoup plus rapide consiste à ne chercher que pour les nombres de 2 à la racine carrée du nombre (ça donne la 1ère moitié de la liste et pour la seconde, il faut prendre l'_inverse_)
- vide ta liste avant de la remplir à nouveau
- 1 et le nombre n'apparaissent pas, pourtant ils sont bien diviseurs du nombre
@+ et bonne continuation
NHenry
Messages postés
14565
Date d'inscription
vendredi 14 mars 2003
Statut
Modérateur
Dernière intervention
13 octobre 2019
136 -
Le type integer limite à 32767 mais long n'est qu'à 2 milliard et des poussière en variant ou currency on les dépasse de loin.
cs_mehdibou
Messages postés
365
Date d'inscription
vendredi 24 mai 2002
Statut
Membre
Dernière intervention
18 octobre 2004
-
Oui, j'avais essayé avec un currency. Cependant on ne pourra pas profiter de tous les chiffres (4 sont perdus derrières la virgule et la fonction Sqr() retourne un double dont le nombre de chiffres significatifs sera inférieur à celui du Currency donc donnera des résultats faux et si tu n'utilise pas la méthode avec Sqr(), ça sera tellement long que tu ne voudras même pas chercher les diviseurs d'un nombre aussi grand...).
Donc Currency augmente le nombre de chiffres, oui, mais il faut tout de même le limiter. Et si possible effectuer les opérations avec un Long si le nombre est <= 2147483647.
Chose bizarre : sur msdn dans la liste des types de données de visual basic, il y a un type Decimal, cependant je n'ai pas retrouvé ce type dans VB.. (même s'il y a bien la constante vbDecimal du enum vbVarType : (??)
NHenry
Messages postés
14565
Date d'inscription
vendredi 14 mars 2003
Statut
Modérateur
Dernière intervention
13 octobre 2019
136 -
Dans ce type de prog, je propose une procé dure qui dit à peu près :
sub SepPremier(byval NB as variant, byref TablResult() as variant) ' Dans VB6 cela permet d'avoir le type decimal.
redim TablResult(-1 to -1)
a=2
do while NB>0
if nb mod a=0 then
'procédure d'elargissement du tableau
TablResult(ubound(TablResult))=a
else
if a=2 then a=3 else a=a+2
end if
loop
End Sub

Voilà comment je concois la routine(Je n'ai pas encore télécharger ton prog).
les limites de -1 to -1 servent à dire que le tableau est vide, lbound est à 0 quand il y a au moins 1 donnée dans le tableau.

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.