Pb avec les gds nombres (10^26) [Résolu]

Loozerteam 17 Messages postés mercredi 10 novembre 2004Date d'inscription 27 avril 2008 Dernière intervention - 26 avril 2008 à 18:11 - Dernière réponse : Loozerteam 17 Messages postés mercredi 10 novembre 2004Date d'inscription 27 avril 2008 Dernière intervention
- 27 avril 2008 à 01:37
Afficher la suite 

7 réponses

Répondre au sujet
cs_Galain 1270 Messages postés mardi 11 novembre 2003Date d'inscription 24 juillet 2013 Dernière intervention - 27 avril 2008 à 01:11
+3
Utile
Voici le code que j'ai fait

Public Function BinToLettre(BinVal as String) As String
   Dim sortie As String, i As integer, my_lettres As String,chiffre as String
   my_lettres = "ZYXWVUTSRQPONMLKJIHGFEDCBA"
   sortie =""
   For i = len(Binval) to 1 step -1  ' on explore BinVal de droite à gauche
      chiffre = mid$(BinVal,i,1) ' chiffre de BinVal (0 ou 1)      if chiffre "1" then sortie sortie & mid$(my_lettres,i,1) ' si = 1 : lettre de la même position
   Next i
   BinToLettre = sortie
End Function

GRENIER Alain
Cette réponse vous a-t-elle aidé ?  
Commenter la réponse de cs_Galain
Loozerteam 17 Messages postés mercredi 10 novembre 2004Date d'inscription 27 avril 2008 Dernière intervention - 26 avril 2008 à 18:22
0
Utile
heu .... je crois qu'il y a eu un beug, mon message est vide, et c'est reparti pour un tour ^^

Msg original:
Bonjour, j'ai créé une fonction qui a un binaire associe une chaine de caractère.
Son "schéma" est le suivant: 1 -> A  ;  11 -> BA  ;  1000000000000000000000000 -> Z ...

Voici ma fonction:
Public Function BinToLettre(BinVal As String) As String
Dim sortie As String, length As Byte, my_lettres As String
length = Len(BinVal)
my_lettres = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
Do While BinVal <> 0
MsgBox BinVal
sortie = sortie &amp; Mid(my_lettres, length, 1)
BinVal = BinVal - (10 ^ (length - 1))
length = length - 1
Loop
BinToLettre = sortie
End Function


J'ai un problème au niveau de mon surlignement en rouge. En effet, je ne sais pas quelle typage utiliser.
Mon problème (vérifié par la MsgBox) est qu'après la première redéfinition de BinVal, celle-ci est arrondie, elle vaut en effet: "1,11111111111111E+24" si j'ai appelé "BinToLettre(111111111111111111111111111)" (il y'en a 26).
Cela n'est pas cool, car du coup "BinToLettre(11..11)" renvoit "Z...K" autrement dit que 16 lettres au lieu de l'alphabet entier ...

Merci d'avance.
http://loozerteam.tk
Commenter la réponse de Loozerteam
cs_Galain 1270 Messages postés mardi 11 novembre 2003Date d'inscription 24 juillet 2013 Dernière intervention - 27 avril 2008 à 00:45
0
Utile
Salut Lozerteam
Si j'ai compris ta fonction A --> 1 ,  11 -->BA , 101 -->CA (  on ne met pas le B car le bit est à 0)
donc 10000000000000000000000000 donne Z ( 1 suivi de  25 zéros) et 10000000000000000000000001 donne ZA ( 1 suivi de 24 zéros puis un 1)

Soit la String 111000111 en paramètre de ta fonction
Cela doit donner "IHGCBA"  comme résultat

Dans ta fonction tu mets comme paramètre Binval as String et dans le code de la fonction tu codes : Do While BinVal <> 0 ( là Binval n'est pas une chaine de caractères mais une valeur numérique)

J'aurais bien un code à te proposer pour solutionner ton problème mais je voudrais être sur de bien avoir compris la fonction que tu désires coder

J'attends ta réponse pour confirmer si j'ai bien compris ou non
A+
GRENIER Alain
Commenter la réponse de cs_Galain
Loozerteam 17 Messages postés mercredi 10 novembre 2004Date d'inscription 27 avril 2008 Dernière intervention - 27 avril 2008 à 01:00
0
Utile
Salut, Galain, tout à fait, tu as tout compris, en effet j'ai mis binval as string en "attendant" de trouver une réponse ^^.
Merci pour ta future réponse
Commenter la réponse de Loozerteam
Loozerteam 17 Messages postés mercredi 10 novembre 2004Date d'inscription 27 avril 2008 Dernière intervention - 27 avril 2008 à 01:20
0
Utile
Hum ... ca marche mais du coup, my_lettres="ABCDEFGHIJKLMNOPQRSTUVWXYZ" car la boucle s'effectue dans l'autre sens ou alors For i =1 to  len(Binval) ...
Mais merci, il n'y a donc pas de solutions miracle pour que vb ne fasse pas d'arrondi ?
Au cas où un jour pour un autre pb j'en aurais besoin ...
http://loozerteam.tk
Commenter la réponse de Loozerteam
cs_Galain 1270 Messages postés mardi 11 novembre 2003Date d'inscription 24 juillet 2013 Dernière intervention - 27 avril 2008 à 01:34
0
Utile
C'est ce que je me suis aperçu en testant mon code
L'astuce consiste à faire de façon que Binval fasse 26 caractères en rajoutant des zéros à gauche

Public Function BinToLettre(BinVal as String) As String
   Dim sortie As String, i As integer, my_lettres As String,chiffre as String
   my_lettres = "ZYXWVUTSRQPONMLKJIHGFEDCBA"
   BinVal = String(26 - Len(BinVal), "0") & BinVal ' rajoute les zéros à gauche
   sortie =""
   For i = len(Binval) to 1 step -1  ' on explore BinVal de droite à gauche
      chiffre = mid$(BinVal,i,1) ' chiffre de BinVal (0 ou 1)      if chiffre "1" then sortie sortie & mid$(my_lettres,i,1) ' si = 1 : lettre de la même position
   Next i
   BinToLettre = sortie
End Function
GRENIER Alain
Commenter la réponse de cs_Galain
Loozerteam 17 Messages postés mercredi 10 novembre 2004Date d'inscription 27 avril 2008 Dernière intervention - 27 avril 2008 à 01:37
0
Utile
Mon code final:

Public Function BinToLettre(BinVal As String) As String
   Dim sortie As String, i As Integer, my_lettres As String, chiffre As String
   my_lettres = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
   sortie = ""
   For i = 1 To Len(BinVal) ' on explore BinVal de droite à gauche
      chiffre = Mid$(BinVal, i, 1) ' chiffre de BinVal (0 ou 1)      If chiffre "1" Then sortie sortie & Mid$(my_lettres, i, 1) ' si = 1 : lettre de la même position
   Next i
   BinToLettre = sortie
End Function

Il est tout aussi simple, et en plus le résultat est renvoyé classé par ordre alphabétique, encore mieux !!!

Merci, bcp et bonne nuit.
Commenter la réponse de Loozerteam

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.