IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

VB 6 et antérieur Discussion :

[VB6] changement de base....


Sujet :

VB 6 et antérieur

  1. #1
    Candidat au Club
    Inscrit en
    Janvier 2004
    Messages
    6
    Détails du profil
    Informations forums :
    Inscription : Janvier 2004
    Messages : 6
    Points : 2
    Points
    2
    Par défaut [VB6] changement de base....
    Bonjour tout le monde, je voulais savoir si quelqu'un saurait comment gerer des changements dec-binaire, dec-hexa et dec-octal en VB (c pas trop dur) mais faudrait que je gere les single (virgule flottante), je sais vraiment aps quoi en faire de cette fichue partie decimale ¡¡

  2. #2
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    21
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 21
    Points : 11
    Points
    11
    Par défaut Bases et nombres décimaux
    Pour aller directement au résultat (je ne te donne les explications que pour le binaire, tu n'auras pas de mal à généraliser le source) : 19,328125 en décimal vaut 10011,010101 en binaire. Ci-dessous le soft en VB.
    En gros, on traite la partie décimale par les divisions successives par 2 et la partie décimale par les produits successifs par 2. On obtient donc 2 chaînes composées de 0 et de 1. Le truc c'est qu'il faut toujours lire ces chaînes à partir de la virgule. Donc il faudra lire la chaîne des entiers à l'envers. Le résultat "11001" donnera "10011".

    Un bouton Command1 suffira
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
     
    Option Explicit
     
    Private Sub Command1_Click()
      Dim PartEnt As Double ' Partie entière
      Dim PartDec As Double ' Partie décimale
      Dim Valeur As Double
      Dim Chaîne As String
      Dim Séparateur As Integer
      Dim Diviseur As Double
      Dim Entière As String
      Dim Décimale As String
     
      Valeur = 19.328125
      PartEnt = Int(Valeur) ' Partie entière
      PartDec = Valeur - PartEnt ' Partie décimale
     
      ' Conversion de la partie entière
      ' On lit la chaîne de droite à gauche d'où le StrReverse
      Entière = StrReverse(BinEnt(PartEnt))
      ' Conversion de la partie décimale
      ' On lit la chaîne de gauche à droite donc telle quelle
      Décimale = BinDec(PartDec)
      MsgBox "Le résultat vaut :" & Entière & "," & Décimale
    End Sub
     
    Function BinEnt(ByVal Diviseur As Double) As String
      BinEnt = ""
      Do
        If Diviseur / 2 = Int(Diviseur / 2) Then
          BinEnt = BinEnt & "0"
        Else
          BinEnt = BinEnt & "1"
        End If
        Diviseur = Int(Diviseur / 2)
      Loop Until Diviseur = 0
    End Function
     
    Function BinDec(ByVal Produit As Double) As String
      BinDec = ""
      Do
        If Int(Produit * 2) = 0 Then
          BinDec = BinDec & "0"
          Produit = Produit * 2
        Else
          BinDec = BinDec & "1"
          Produit = Produit * 2 - 1
        End If
      Loop Until Produit = 0
    End Function
    [Balises de code rajoutées par Thierry AIM, Merci d'y penser la prochaine fois]

  3. #3
    Candidat au Club
    Inscrit en
    Janvier 2004
    Messages
    6
    Détails du profil
    Informations forums :
    Inscription : Janvier 2004
    Messages : 6
    Points : 2
    Points
    2
    Par défaut Re: Bases et nombres décimaux
    Merci beaucoups, ça m'a bien aidé, maintenant c quasiment finit mais j'ai quand meme le probleme du moins qui se pose car le programe que j'ai me le supprime tout simplement... et puis dans les autres bases que la décimale, il suffit pas juste de poser un - devant !!!
    Si tu as encore une idée pour ça Michel, je suis preneur !!!

  4. #4
    Candidat au Club
    Inscrit en
    Avril 2004
    Messages
    2
    Détails du profil
    Informations forums :
    Inscription : Avril 2004
    Messages : 2
    Points : 2
    Points
    2
    Par défaut
    il faut d'abord trouver le nombre positif (sa valeur absolut) en binaire, c'est déjà fais-faux remercier Michel-, puis trouver son complèment à 2 : j'explique;
    "le complément à 2" = "le complément à 1" + 1.
    le complément à 1, c'est d'inverser les 1 en 0, et les 0 en 1.
    ex: n=10110
    complément à 1= 01001
    complément à 2 = 01001 + 1 = 01010
    voilà
    --------------------------------------------------------
    faire ce qu'on veux, avec ce qu'on à!

  5. #5
    Candidat au Club
    Inscrit en
    Janvier 2004
    Messages
    6
    Détails du profil
    Informations forums :
    Inscription : Janvier 2004
    Messages : 6
    Points : 2
    Points
    2
    Par défaut
    Merci beacoups pour ces explications, donc au final pour mes autres bases, je me prends pas la tete, je calcul en decimal, test si le res est negatif, si non je repasse en base d'origine et j'affiche, si oui, je passe en binaire, prend le complement a 1, ajoute 1 et repasse dans la base d'origine.... pffff quel bordel pour une pauvre addition !!
    En tous cas merci beaucoup a tous les deux !!!

  6. #6
    Candidat au Club
    Inscrit en
    Janvier 2004
    Messages
    6
    Détails du profil
    Informations forums :
    Inscription : Janvier 2004
    Messages : 6
    Points : 2
    Points
    2
    Par défaut
    Arfff j'ai encore un probleme pour prendre le complement a 1 de mon nombre..., une fois que j'ai fait mon calcul en decimal, je traduis en binaire (ça c bon ) mais la j'ai pas forcément un chiffre a 8 bits a comparer à mon 11111111 avec un Xor... je peux avoir 1 ou 10 ou 101... donc je me suis dit je vais concaténer mon résultat avec une chaine de 0 de longueur variable histoire d'avoir 00000001 ou 00000010...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    If Len(Resultat) = 1 Then
        vide = "0000000"
        Resultat = vide & Resultat
        End If
    Et la c le drame car il me met juste un 0 devant, et il ignore les autres.... alors si quelqu'un voit... merci d'avance !

  7. #7
    Candidat au Club
    Inscrit en
    Avril 2004
    Messages
    2
    Détails du profil
    Informations forums :
    Inscription : Avril 2004
    Messages : 2
    Points : 2
    Points
    2
    Par défaut
    ta variable Resultat doit être de type string.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    Dim R as string
    .
    .
    .
    R=String(8-len(r),"0") & R
    'la fonction String(N,C) renvoie N fois le caractére C
    --------------------------------------------------------
    faire ce qu'on veux, avec ce qu'on à!

  8. #8
    Candidat au Club
    Inscrit en
    Janvier 2004
    Messages
    6
    Détails du profil
    Informations forums :
    Inscription : Janvier 2004
    Messages : 6
    Points : 2
    Points
    2
    Par défaut
    Merci encore alors la c bon mais j'arrive pas a prendre l'inverse, pourtant:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    If Left(Resultado, Len(Resultado) - (Len(Resultado) - 1)) = "-" Then
            txtFromBase = 10
            txtToBase = 2
            Resultado = BaseConv(StrConv(Resultado, vbLowerCase), txtFromBase, txtToBase)
            Resultado = String(8 - Len(Resultado), "0") & Resultado
            temp2 = String(Len(Resultado), "1")
            Resultado = Not Resultado
            MsgBox "je suis la !!!!!!!!!!!!!!", vbOKOnly, "Cuidado !"
            Signe = Resultado
    devrait marcher non ??? et ben non au lieu d'avoir des 0 et des 1 ça le balance des 3, des 7...pfffffff

  9. #9
    Candidat au Club
    Inscrit en
    Janvier 2004
    Messages
    6
    Détails du profil
    Informations forums :
    Inscription : Janvier 2004
    Messages : 6
    Points : 2
    Points
    2
    Par défaut
    j'ai tenté le not car le Xor foir assez rapidement... le 10 - 11 marche et dés qu'on passe au 10 - 100 il part en slaille...

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [VB6]connexion à une base de données distant via ADO
    Par alaminabil1 dans le forum VB 6 et antérieur
    Réponses: 3
    Dernier message: 03/02/2006, 12h11
  2. [VB6]empaquetter une base de données
    Par meoliver dans le forum VB 6 et antérieur
    Réponses: 10
    Dernier message: 02/02/2006, 12h36
  3. [VB6] Connexion à la base de donnée.
    Par yoda7666 dans le forum VB 6 et antérieur
    Réponses: 9
    Dernier message: 25/01/2006, 19h00
  4. Changement de base...enfin je crois....
    Par Eric Boisvert dans le forum Algorithmes et structures de données
    Réponses: 22
    Dernier message: 28/09/2005, 21h11
  5. [VB6]Créer une Base de données
    Par ThierryAIM dans le forum VB 6 et antérieur
    Réponses: 4
    Dernier message: 07/04/2003, 17h24

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo