NUMBER CONVERTER : CONVERTISSEUR DE NOMBRE DE BASE EN BASE

OneHacker Messages postés 1447 Date d'inscription jeudi 2 novembre 2000 Statut Membre Dernière intervention 23 septembre 2007 - 13 août 2005 à 15:25
OneHacker Messages postés 1447 Date d'inscription jeudi 2 novembre 2000 Statut Membre Dernière intervention 23 septembre 2007 - 16 juil. 2007 à 22:09
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.

https://codes-sources.commentcamarche.net/source/33225-number-converter-convertisseur-de-nombre-de-base-en-base

OneHacker Messages postés 1447 Date d'inscription jeudi 2 novembre 2000 Statut Membre Dernière intervention 23 septembre 2007 2
16 juil. 2007 à 22:09
Euh je suis de retour j'avais fini la fonction PGCD et d'autres fonctions pour ma calculatrice malheureusement j'ai perdu tout mes projets ! Faut que je recode tout ! SNIF !
psycho81 Messages postés 84 Date d'inscription mardi 4 mai 2004 Statut Membre Dernière intervention 17 février 2008
5 juil. 2007 à 11:59
Je ne me souviens plus exactement de la commande mais c'est un truc du genre

15 DIV 7 (retranscri 15 \ 7 il me semble) renvoi 2 (c'est la division entière)
15 MOD 7 renvoi 1 (le reste de la division)
OneHacker Messages postés 1447 Date d'inscription jeudi 2 novembre 2000 Statut Membre Dernière intervention 23 septembre 2007 2
27 juin 2007 à 13:24
D'accord, mais ca fait des années que j'ai déjà fait le code sur mon ancienne calc faut que je retransmette.

Sinon ma claculatrice avance donc bientot je combienerai ça avec ma calculatrice.

J'ai créer un topic sondage dessus mais personne n'y réponds :/

Et elle marche comment la fonction modulo car j'ia beau regarder sur des sites de maths ou Wkikpédia et aucune explication sans formules mathématiques HyperComplexe et incomphréensibles à mon niveau.
psycho81 Messages postés 84 Date d'inscription mardi 4 mai 2004 Statut Membre Dernière intervention 17 février 2008
27 juin 2007 à 12:29
Normalement, seule les bases 2 8 10 16 sont en natif.

Pour d'autres bases, il te faudra utiliser le DIV et Modulo et faire toi même ton propre systèe ^^

Bonne prog
OneHacker Messages postés 1447 Date d'inscription jeudi 2 novembre 2000 Statut Membre Dernière intervention 23 septembre 2007 2
11 juin 2007 à 22:51
Maintenant que je programme en VB.Net 2005
Je vais essayer de faire un calculatrice avancé et essayer de faire des fonctons déjà faites comme PGCD() en essyant d'accepter jusqu'à 3 ou 4 nombres. Sinon je vais essayer de faire un résolveur d'équations(je sais que ca existe sur certaine calculatrice casio).

Voilà donc je vais essayer de faire un moteur, et un module pour créer c'est script de maths et faire des MAJ automatique ou MAJ scripts automatiques. Voilà voilà.

Par contre est-ce que vous savez comment appeler un fichier source l'initialisation du programme ?
OneHacker Messages postés 1447 Date d'inscription jeudi 2 novembre 2000 Statut Membre Dernière intervention 23 septembre 2007 2
21 nov. 2006 à 16:54
Oui en effet ! Merci, et c'est normal que je peux pas convertir avec d'autres bases que 2,8,10,16 ?
psycho81 Messages postés 84 Date d'inscription mardi 4 mai 2004 Statut Membre Dernière intervention 17 février 2008
20 nov. 2006 à 10:48
je pense qu'au niveau performance tu as du trouver une nette amélioration avec cette méthode, qui est native
OneHacker Messages postés 1447 Date d'inscription jeudi 2 novembre 2000 Statut Membre Dernière intervention 23 septembre 2007 2
18 nov. 2006 à 10:26
Maintenant que je suis sur autre ordi depuis la commande existe mais sur le même VS2003 que j'avait avant ca n'existait pas ! Enfin merci !

Redman
OneHacker Messages postés 1447 Date d'inscription jeudi 2 novembre 2000 Statut Membre Dernière intervention 23 septembre 2007 2
22 févr. 2006 à 11:32
J'ai du mal a comprendre cette DOC mais je vais je vais m'exerecer dessus, je t'en dirait des nouvelles .

Redman
psycho81 Messages postés 84 Date d'inscription mardi 4 mai 2004 Statut Membre Dernière intervention 17 février 2008
22 févr. 2006 à 07:59
Gratte un peu la doc, le code que je t'ai filé marche, foi de psycho81 :)

C'est de ce type le shéma System.Convert.ToString(ValeurEntière, Base). C'est à dire que tu peux faire des conversions octales, binaires décimales, bref ce que tu veux.

Tu es allé voir la doc MSDN ?
OneHacker Messages postés 1447 Date d'inscription jeudi 2 novembre 2000 Statut Membre Dernière intervention 23 septembre 2007 2
20 févr. 2006 à 01:01
J'ai re-essayé mais ca ne marche pas je peux faire par contre :

Convert.ToString([String], [Byte])

Redman
psycho81 Messages postés 84 Date d'inscription mardi 4 mai 2004 Statut Membre Dernière intervention 17 février 2008
5 déc. 2005 à 10:49
OneHacker

Si tu bosses bien avec le framework .NET, la commande existe. Voici la doc sur MSDN : http://msdn.microsoft.com/library/FRE/cpguide/html/cpconcustomizingformatstrings.asp

et voici un exemple concret :

Dim tmpstr as string = System.Convert.ToString(EntierValeur, 2)

tmpstr = new System.String("0",32-tmpstr.length) & tmpstr ' 32 étant le nombre de bits représenté.

Bonne prog
OneHacker Messages postés 1447 Date d'inscription jeudi 2 novembre 2000 Statut Membre Dernière intervention 23 septembre 2007 2
2 déc. 2005 à 23:52
J'ai essayé mais la commande dont tuparles n'existe pas !
psycho81 Messages postés 84 Date d'inscription mardi 4 mai 2004 Statut Membre Dernière intervention 17 février 2008
21 nov. 2005 à 09:08
Pour une meilleure représentation j'utilise souvent d'ailleurs cet algo

Dim tmpstr as string = Convert.ToString(EntierValeur, 2)

tmpstr = new string("0",32-tmpstr.length) & tmpstr ' 32 étant le nombre de bits représenté
psycho81 Messages postés 84 Date d'inscription mardi 4 mai 2004 Statut Membre Dernière intervention 17 février 2008
21 nov. 2005 à 09:05
OneHacker,

Overloads Public Shared Function ToString(Long, Integer) As String


çà renvoi un Sring ...
OneHacker Messages postés 1447 Date d'inscription jeudi 2 novembre 2000 Statut Membre Dernière intervention 23 septembre 2007 2
20 nov. 2005 à 16:00
oui mais c'est pas un long mais un string que je veux !
Utilisateur anonyme
20 nov. 2005 à 11:26
Si, la fonction marche très bien même

De msdn:
Convertit la valeur d'un entier signé 64 bits en sa représentation String équivalente dans une base spécifiée.
Overloads Public Shared Function ToString(Long, Integer) As String


Convert.ToString(2005, 2) retourne bien "11111010101"
OneHacker Messages postés 1447 Date d'inscription jeudi 2 novembre 2000 Statut Membre Dernière intervention 23 septembre 2007 2
19 nov. 2005 à 23:35
C bien cherhché sauf que la fonction Convert.ToString(MonEntier, 2) n'existe pas car il n'y aucune de ces procédrues acceptant comme argument un integer(ici 2).

et fouillant Covert, je n'ai trouvé aucune possibilité de convertir !
psycho81 Messages postés 84 Date d'inscription mardi 4 mai 2004 Statut Membre Dernière intervention 17 février 2008
7 nov. 2005 à 11:41
Bonjour,
Je suis peut-être hors-sujet mais ...
Convert.ToString(MonEntier, 2) c'est pas plus rapide ?
OneHacker Messages postés 1447 Date d'inscription jeudi 2 novembre 2000 Statut Membre Dernière intervention 23 septembre 2007 2
3 sept. 2005 à 11:53
Ouaip, ça fais un moment que je réponds pas car j'étais en vacances, et j'avais des problèmes de connexion internet !
cs_cladx Messages postés 30 Date d'inscription jeudi 4 novembre 2004 Statut Membre Dernière intervention 1 septembre 2005
1 sept. 2005 à 19:26
et bien bonne chance alors
OneHacker Messages postés 1447 Date d'inscription jeudi 2 novembre 2000 Statut Membre Dernière intervention 23 septembre 2007 2
16 août 2005 à 13:12
Merci benouille, je vous le dit mais en ce moment j'avais l'idée de créer une "calculatrice scientifique avec fonction"

Exemple sur la calculatrice tu tapes PGCD(5,8) ou même PGCD(4,2,8,6,7) et ça te donne le résultat par pour les conversions de base et pleins d'autres choses !
cs_Benouille Messages postés 215 Date d'inscription jeudi 24 octobre 2002 Statut Membre Dernière intervention 7 septembre 2007
16 août 2005 à 11:18
nickel, t'as plus qu'a te lancer dans la conception d'une calculatrice ;)

++
(9/10)
OneHacker Messages postés 1447 Date d'inscription jeudi 2 novembre 2000 Statut Membre Dernière intervention 23 septembre 2007 2
15 août 2005 à 15:42
Ca y est ! Merci je comprend comment on fait des fonctions integer en tableaux maintenant ! Merciiiiiii !

Bonne continuation !
Utilisateur anonyme
15 août 2005 à 15:40
Ta fonction MakeHeaders dois retourné un integer
If faut qu'elle retourne un tableau de integer:
Private Function makeheaders(Optional ByVal nbheaders As Integer = 9) As Integer()
Attention de bien mettre les paranthèse après "as integer"
OneHacker Messages postés 1447 Date d'inscription jeudi 2 novembre 2000 Statut Membre Dernière intervention 23 septembre 2007 2
15 août 2005 à 15:35
Ce n'est pas une erreur de debugging mais une erreur pendant la tape.

L'erreur see situe dans les premières ligne

Private Function BinaryConvertion(ByVal nbaconvertir As Integer) As String
Dim headers() As Integer = ici l'erreur-> MakeHeaders(nbaconvertir)

Erreur affichée : Une valeur de type 'Integer' ne peut pas être convertie en 'Tableau 1-dimensionnel de Integer'

Voilà !
Utilisateur anonyme
15 août 2005 à 15:24
Alors quelle est l'erreur qu'il te dit ?
OneHacker Messages postés 1447 Date d'inscription jeudi 2 novembre 2000 Statut Membre Dernière intervention 23 septembre 2007 2
15 août 2005 à 15:15
Je verifie, non
Private Function MakeHeaders(ByVal nbaconvertir As Integer) As Integer

..

End Function

donc ce n'est pas l'erreur que tu dis.
Utilisateur anonyme
15 août 2005 à 12:47
Si ta fonction est function makeheaders() as integer et que quand tu l'appelle avec dim headers() as integer = makeheaders(nbaconvertir), il y à 'nbaconvertir' qui est un argument en trop
dim headers() as integer = makeheaders()
OneHacker Messages postés 1447 Date d'inscription jeudi 2 novembre 2000 Statut Membre Dernière intervention 23 septembre 2007 2
15 août 2005 à 12:18
Encore une erreur ! je fais la function makeheaders() as integer... vide et pourtant quand je fais dim headers() as integer = makeheaders(nbaconvertir) il me fait une erreur ! sans l'executer.
OneHacker Messages postés 1447 Date d'inscription jeudi 2 novembre 2000 Statut Membre Dernière intervention 23 septembre 2007 2
15 août 2005 à 11:54
Oui mais normal, j'ai pas mis la fonction headers, mais dans le code elle y est. D'accord pour l'erreur je l'arrangerai.
Utilisateur anonyme
15 août 2005 à 11:52
J'ai aussi remarquer une petite erreur:
Il faut boucler de (headers.Length - 1) à 1 sinon ça rajoute un 1 à la fin de chaque mot.
Utilisateur anonyme
15 août 2005 à 11:48
Le problème, c'est dans ta fonction makeheaders
Elle ne retourne rien, donc c'est comme si elle ne servait à rien.
Private Function MakeHeaders(Optional ByVal NbHeaders As Integer = 9) As Integer()
...
Return Headers
End Function

Et dans ta fonction BinaryConvertion, l'erreur était que headers est toujours vide.
La fonction MakeHeaders servant à le remplir ne marchait pas donc évidemment ...

Dim headers() As Integer = makeheaders(10)

Voilà, tu peux corriger et remettre ta version

Bon Coding
OneHacker Messages postés 1447 Date d'inscription jeudi 2 novembre 2000 Statut Membre Dernière intervention 23 septembre 2007 2
15 août 2005 à 11:03
D'accord, le seul problème que j'ai dans ma fonction, c'est que je dois utilisé deux boucle en même temps(l'une dans l'autre) sachant que l'une vérifie le reste, et l'autre va du grand header(ex: 256) au plus petit(1), et j'e=ai essayer mais chaque fois ca me fait des erreurs, exemple :

function ...

dim nb as integer = nbaconvertir

for i as integer = headers.length - 1 to 0 step -1

if nbaconvertir => headers(i) then
nbaconvertir= nbaconvertir - headers(i)
headers(i) = 1
else
headers(i) = 0
endif
next

dim result as string = ""

for i as integer = headers.length - 1 to 0 step -1
result += headers(i).tostring()
next

return result

end function

Mais apparement dès la première ligne le code est faut, c'est ça que je ne comprends pas !!
Utilisateur anonyme
15 août 2005 à 00:22
Oui, c'est bien d'avoirs mis ma fonction et merci de m'avoirs cité.
Mais j'aurais quand même préféré ta fonction. C'est ton programme à la base. Donc même si il n'est pas aussi performant, il peut aider les débutants. Le miens est un peu plus complexe (C'est la meilleurs technique de conversion d'accord) mais corrige ta fonction et remet là.
De toutes façon mon code restera en commentaire.

Voilà.
Bon coding.
OneHacker Messages postés 1447 Date d'inscription jeudi 2 novembre 2000 Statut Membre Dernière intervention 23 septembre 2007 2
15 août 2005 à 00:06
Je comprend mieux ! Je vais faire une ultime correction au cas où un maladroit mettrai du texte dans la inputbox LOL !
OneHacker Messages postés 1447 Date d'inscription jeudi 2 novembre 2000 Statut Membre Dernière intervention 23 septembre 2007 2
14 août 2005 à 23:56
Ca marche, je met la source à jour, mais je me demande comment as-tu fais tout, ça je suis halluciné ! LOL !

Bonne continuation, merci beaucoup.
Utilisateur anonyme
14 août 2005 à 23:31
Oui, c'est vrai, tu n'a peut-être pas appris les logarithme néperiens
Voilà le code complet et commenté
J'espère qu'il pourra t'aider.


Option Compare Binary
Option Explicit On
Option Strict On

Module mdlConverter

Sub Main()
Dim n As String
Try
n = InputBox("Un nombre SVP", "Nombre à Convertir")
If n = "" Then End
MsgBox(DecToBin(CInt(n)))
Catch ex As Exception
Call Main()
End Try
End Sub

Private Function DecToBin(ByVal nd As Integer, Optional ByVal Digit As Integer = 0) As String '// nd est le nombre à convertire, digit la taille du mot binaire
Dim nb As String '// La ou sera le nombre sous forme binaire
Dim y As Integer = CInt(Int(Math.Log(nd) / Math.Log(2))) '// Taille du mot
If (Digit - 1) > y Then y = (Digit - 1) '// Si un taille est spécifier on met la taille spécifier à condition qu'elle soit plus grande
'// Ici on va faire une boucle: ... 512 256 128 64 16 8 4 2 1
'// Le max étant la taille du mot au carré (si nd 21, y 4(si Digit = 0) donc i = 16, on bouclera 16 8 4 2 1)
Dim i As Integer = CInt(2 ^ y)
Do While i > 0
'// Si i est compris dans nd
If nd >= i Then nd -= i : nb &= 1 Else nb &= 0 '// On ajoute un 1 et en enlève i à nd ; sinon on ajoute un 0
i = CInt(i / 2)
Loop
Return nb '// On retourne le nombre binaire sous forme de chaîne de caractères
End Function

End Module
OneHacker Messages postés 1447 Date d'inscription jeudi 2 novembre 2000 Statut Membre Dernière intervention 23 septembre 2007 2
14 août 2005 à 23:01
Désolé mais j'ai du mal à comprendre ton code !
Utilisateur anonyme
14 août 2005 à 20:33
Bon comme ça ne marche toujours pas, j'ai analyser ton code et j'ai refais une fonction similaire qui marche.

Private Function DecToBin(ByVal nd As Integer, Optional ByVal Digit As Integer = 0)
Dim nb As String
Dim y As Integer = Int(Math.Log(nd) / Math.Log(2))
If (Digit - 1) > y Then y = (Digit - 1)
Dim i As Integer = 2 ^ y
Do While i > 0
If nd >= i Then nd -= i : nb &= 1 Else nb &= 0
i /= 2
Loop
Return nb
End Function

Voilà
PS: J'attente toujours que ta version marche
OneHacker Messages postés 1447 Date d'inscription jeudi 2 novembre 2000 Statut Membre Dernière intervention 23 septembre 2007 2
14 août 2005 à 02:10
C'est normal, cela permet de détecter où est l'erreur car il y a une msgbox qui detecte l'erreur générale, et l'autre locale si la générale = la locale àlors tu peux réperer l'erreur c'est à dire dans la boucle for et si le msgbox : msgbox("",..information) ne s'affiche pas c'est que l'erreur c'est la ligne d'avant : for i ... to ...step 1
Utilisateur anonyme
14 août 2005 à 01:55
Désolé, encore une erreur:
Maintenant, j'ai un msgbox qui s'affiche 2 fois
"La référence d'objet n'est pas définie à une instance d'un objet."

Bon coding
OneHacker Messages postés 1447 Date d'inscription jeudi 2 novembre 2000 Statut Membre Dernière intervention 23 septembre 2007 2
14 août 2005 à 01:35
Salut Charles, voici une correction ou plutôt une mise à jour de la source.
Utilisateur anonyme
14 août 2005 à 01:05
Désolé, ça ne marche pas ligne 32 après que j'ai entré un nombre

Une exception non gérée du type 'System.NullReferenceException' s'est produite dans microsoft.visualbasic.dll
Informations supplémentaires : Variable objet ou variable d'un bloc With non définie.

Je commenterais et noterais la source une fois que ça marchera :-)

Bonne Prog
OneHacker Messages postés 1447 Date d'inscription jeudi 2 novembre 2000 Statut Membre Dernière intervention 23 septembre 2007 2
13 août 2005 à 22:28
je parle pas des headers dans le domane des process.
C'est moi même qui a donné le nom de headers au nombre : 1,2,4,8,16 ...

Quant au DLL on ne peut l'exploiter que si on connais le code de la DLL car si c'est compilé c'est n'est que du binaire.

quant au bytes, je ne sait comment les manipuler.

Donc au prochaine qui regarde cette source quand je parle de headers, il s'agit d'une colletion de nombre ! Ne pas confondre !
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
13 août 2005 à 18:28
Il y a besoin de tableau header et autres trucs pour faire une conversion decimal binaire ?
Je saisis mal le but de ton prog, j'ai l'impression que tu amuses le processeur sans raison.
Si on ne peut pas manipuler les bits en vb.net, compile une dll en natif et appelle la, au moins tu auras le résultat en qlqs millièmes de seconde sans tableau ni rien d'autre.
OneHacker Messages postés 1447 Date d'inscription jeudi 2 novembre 2000 Statut Membre Dernière intervention 23 septembre 2007 2
13 août 2005 à 15:25
Allez-y ! Lachez vos commentaires qu'ils soient positifs ou négatifs. L'essentiel c'est de progresser !