PCPT
Messages postés13272Date d'inscriptionlundi 13 décembre 2004StatutMembreDernière intervention 3 février 201847 6 janv. 2008 à 17:09
salut,
avec le nombre de sources existante c'est une aberration de voir un tel code
de plus tu dis nombre signé mais as-tu seulement essayé avec un nombre négatif?!
Function ConvertBase10ToBase2(ByVal Value As Long) As String
Dim lQuotien As Long, lRest As Long
' valeur positive
ConvertBase10ToBase2 = vbNullString
Value = Abs(Value)
' crée la chaîne
Do
lQuotien = Value \ 2
lRest = Value - (lQuotien * 2)
ConvertBase10ToBase2 = CStr(lRest) & ConvertBase10ToBase2
Value = lQuotien
Loop Until lQuotien = 0
End Function
pas besoin de plus :)
us_30
Messages postés2065Date d'inscriptionlundi 11 avril 2005StatutMembreDernière intervention14 mars 201610 6 janv. 2008 à 16:53
Bonjour,
Micropic, je pense que tu pousses un peu... Windob a fait un commentaire plutôt très constructif pour tu t'améliores. Ensuite, c'est à toi de voir et d'améliorer la source dans la mesure de tes moyens. Sur le forum, sans nul doute, on te renverrait voir le réglement, pour ne pas dire dans tes cordes... J'ajoute qu'un tout petit peu d'effort, te permettrais déjà te trouver de nombreuses sources plus ou moins identiques traitant du sujet. Si tu analyses un peu les codes proposés, tu auras donc des exemples à te mettre sous la dent, qui t'éviterais d'écrire en présentation : "Il y a un petit bug, à vous de proposer des solutions."... car tu trouveras surement le moyen d'éviter le bug, sur un code simple... ET pour clore, même si je vais devenir plus royaliste que le roi, dire sur un ton aussi directe "à vous de proposer des solutions", ne donne pas envie. Ce n'est pas aux personnes qui viennent voir ta source, de corriger ton code ! mais à toi. Une formulation plus courtoise aurait été bienvenue...
Amicalement,
Us.
micropic
Messages postés2Date d'inscriptionlundi 19 juillet 2004StatutMembreDernière intervention 6 janvier 2008 6 janv. 2008 à 16:17
Merci pour ce gentil commentaire...
J'attends plutôt des exemples constructifs...
Fabian.
cs_windob
Messages postés225Date d'inscriptiondimanche 19 octobre 2003StatutMembreDernière intervention25 août 2008 6 janv. 2008 à 11:54
Aie Aie Aie, J'ai meme pas envie de testert quand je vois le code ...
Premiere remarque, une fonction qui utilise 16 arguments pour 16 bits !!
Dans ce cas la, au lieu de passer les elements du tableau de resultats un par un, pourquoi ne pas passer tout le tableau en un seul argument !
Ensuite, meme remarque pour la structure conditionnelle : Utiliser un If ... ElseIF ... 15 fois pour tester chaque bit un par un !! Il faudrait mieux faire une boucle sur les elements de l'unique tableau passé en parametre (remarque précédente) et tester a chaque fois.
Pour finir, en général pour une conversion Int -> Binary, on ne compare pas le nombre aux puissances de 2 successives car c'est un peu lourd et plus logique que mathématique (donc globalement moins rapide), on utilise plutot une division par 2 avec reste.
6 janv. 2008 à 17:09
avec le nombre de sources existante c'est une aberration de voir un tel code
de plus tu dis nombre signé mais as-tu seulement essayé avec un nombre négatif?!
voici une manière d'optimiser un peu....
MsgBox Format$(ConvertBase10ToBase2(666), "0000000000000000")
Function ConvertBase10ToBase2(ByVal Value As Long) As String
Dim lQuotien As Long, lRest As Long
' valeur positive
ConvertBase10ToBase2 = vbNullString
Value = Abs(Value)
' crée la chaîne
Do
lQuotien = Value \ 2
lRest = Value - (lQuotien * 2)
ConvertBase10ToBase2 = CStr(lRest) & ConvertBase10ToBase2
Value = lQuotien
Loop Until lQuotien = 0
End Function
pas besoin de plus :)
6 janv. 2008 à 16:53
Micropic, je pense que tu pousses un peu... Windob a fait un commentaire plutôt très constructif pour tu t'améliores. Ensuite, c'est à toi de voir et d'améliorer la source dans la mesure de tes moyens. Sur le forum, sans nul doute, on te renverrait voir le réglement, pour ne pas dire dans tes cordes... J'ajoute qu'un tout petit peu d'effort, te permettrais déjà te trouver de nombreuses sources plus ou moins identiques traitant du sujet. Si tu analyses un peu les codes proposés, tu auras donc des exemples à te mettre sous la dent, qui t'éviterais d'écrire en présentation : "Il y a un petit bug, à vous de proposer des solutions."... car tu trouveras surement le moyen d'éviter le bug, sur un code simple... ET pour clore, même si je vais devenir plus royaliste que le roi, dire sur un ton aussi directe "à vous de proposer des solutions", ne donne pas envie. Ce n'est pas aux personnes qui viennent voir ta source, de corriger ton code ! mais à toi. Une formulation plus courtoise aurait été bienvenue...
Amicalement,
Us.
6 janv. 2008 à 16:17
J'attends plutôt des exemples constructifs...
Fabian.
6 janv. 2008 à 11:54
Premiere remarque, une fonction qui utilise 16 arguments pour 16 bits !!
Dans ce cas la, au lieu de passer les elements du tableau de resultats un par un, pourquoi ne pas passer tout le tableau en un seul argument !
Ensuite, meme remarque pour la structure conditionnelle : Utiliser un If ... ElseIF ... 15 fois pour tester chaque bit un par un !! Il faudrait mieux faire une boucle sur les elements de l'unique tableau passé en parametre (remarque précédente) et tester a chaque fois.
Pour finir, en général pour une conversion Int -> Binary, on ne compare pas le nombre aux puissances de 2 successives car c'est un peu lourd et plus logique que mathématique (donc globalement moins rapide), on utilise plutot une division par 2 avec reste.