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.NET Discussion :

Convertir un nombre base 10 vers 9 sans 0 et inverse


Sujet :

VB.NET

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Informatique, programmation
    Inscrit en
    Novembre 2010
    Messages
    33
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Vienne (Poitou Charente)

    Informations professionnelles :
    Activité : Informatique, programmation

    Informations forums :
    Inscription : Novembre 2010
    Messages : 33
    Points : 26
    Points
    26
    Par défaut Convertir un nombre base 10 vers 9 sans 0 et inverse
    Salut, j'ai chercher pendent un moment et j'ai trouver de l'aide pour convertir
    un nombre qui est en base 10 (0123456789) vers base 9 sans 0 (123456789)
    (c'est pas vraiment ce terme mais bon...)

    On m'as aidé et voici le code en question que j'ai convertie en PB.Net:

    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
    Function Transformer(ByVal Int64 As Int64) As Int64
     
            ' À toutes les dizaines on est décalé d'une unité, ça donne une Retenue
            Dim Retenue As Int64 = (Int64 - 1) \ 9
     
            ' On ajoute la Retenue au résultat
            Dim Resultat As Int64 = Int64 + Retenue
     
            ' Pour l'instant on n'a modifié que les unités ajoutés toutes les dizaines, il faut aussi ajouter
            ' tous les blocs de 0 qui apparaissent 10 fois toutes les centaines, 100 fois tous les milliers, etc.
     
            ' Sans oublier qu'à chaque fois qu'on ajoute une Retenue celle-ci décale le résultat, il faut donc
            ' calculer aussi la Retenue de la Retenue !
     
            ' 1 = unités, 10 = dizaines, 100 = centaines...
            Dim Rang As Int64 = 1
     
            ' On s'arrête quand il n'y a plus de Retenue à ajouter
            While Retenue > 0
     
                ' Nouvelle Retenue à ajouter
                Retenue = (10 * Rang) * ((Retenue - 1) \ (9 * Rang))
     
                ' Ajout de la Retenue
                Resultat += Retenue
     
                ' Passage au Rang suivant
                Rang *= 10
     
            End While
     
            Return Resultat
     
        End Function
     
        Sub Main()
     
            Console.WriteLine(Transformer(1000))
            Console.ReadLine()
     
        End Sub
    Ce code est fonctionnel et très rapide, on peut surement l'améliorer mais c'est pas la priorité là

    Bien, on m'as de même aider pour crée le code inverse en Purebasic qui fonctionne très bien mais convertie en VB.Net plus rien ne marche, serais t-il possible de corriger ou me dire se qui ne va pas svp
    Ce code permet en théorie de convertir un nombre convertie sans 0 avec 0


    Voici le code PureBasic:
    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
    Procedure  PowQ(nombre_q, puissance, resultat_q)
      resultat_q = 1
      For j = 1 To puissance
        resultat_q * nombre_q
      Next
      ProcedureReturn resultat_q
    EndProcedure
     
    Procedure.q  Decoder(Nombre.q)
      Protected.q res, div10, mul9, c1, c2, reste, chiffre
      Protected i.l, j.l
     
      res = Nombre
      nb_chiffre = IntQ(Log10(Nombre)) + 1
     
      ;    div10 = Pow(10, nb_chiffre); ne fonctionne pas avec des Quad
      div10 = PowQ(10, nb_chiffre, div10)
     
      ;   mul9 = Pow(9, nb_chiffre - 1); ne fonctionne pas avec des Quad
      mul9 = PowQ(9, nb_chiffre - 1, mul9)
     
      For i = nb_chiffre - 1 To 1 Step -1
        div10 / 10
     
        c1 = Nombre / div10
        chiffre = IntQ(c1) - IntQ(c1 / 10) * 10
     
        mul9 / 9
        res = res - i * mul9 * (chiffre + reste)
     
        reste = reste * 10 + chiffre
      Next
     
      ProcedureReturn res
    EndProcedure
     
    Debug Str(DeCoder(27726677999))

    Voici le code VB.Net:

    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
    Function PowQ(ByVal NombreQ As Int64, ByVal Puissance As Int64, ByVal ResultaQ As Int64) As Int64
            ResultaQ = 1
            For j = 1 To Puissance
                ResultaQ *= NombreQ
            Next
            Return ResultaQ
        End Function
     
        Function Décode(ByVal Nombre As Int64) As Int64
     
            Dim Res As Int64 = Nombre
            Dim Div10 As Int64 = 0
            Dim Mul9 As Int64 = 0
            Dim C1 As Int64 = 0
            Dim Reste As Int64 = 0
            Dim Chiffre As Int64 = 0
            Dim NombreChiffre As Int64 = CLng(Fix(Math.Log10(Nombre))) + 1
     
            Res = Nombre
     
            Div10 = PowQ(10, NombreChiffre, Div10)
            Mul9 = PowQ(9, NombreChiffre - 1, Mul9)
     
            For i = NombreChiffre - 1 To 1 Step -1
                Div10 \= 10
     
                C1 = CLng(Nombre \ Div10)
     
                Chiffre = CLng(Fix(C1) - Fix(CLng(C1) \ 10) * 10)
     
                Mul9 \= 9
                Res = CLng(Res - (i * Mul9 * (Chiffre + Reste)))
     
                Reste = CLng(Reste * (10 + Chiffre))
            Next
     
            Return Res
     
        End Function
     
        Sub Main()
            Console.WriteLine(Décode(1331))
            Console.ReadLine()
        End Sub
    Dans cette exemple 1000 convertie sans 0 = 1331
    A l'inverses le résulta devrais être: 1331 = 1000

  2. #2
    Membre éprouvé
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    665
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 665
    Points : 1 161
    Points
    1 161
    Par défaut
    Bonjour,
    a tester le fonctionnement (pour l'améliorer...) :
    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
        Function Décode(ByVal Nombre As Int64) As Int64
     
            Dim Res As Int64 = Nombre
            Dim Div10 As Int64 = 0
            Dim Mul9 As Int64 = 0
            Dim C1 As Int64 = 0
            Dim Reste As Int64 = 0
            Dim Chiffre As Int64 = 0
            Dim NombreChiffre As Int64 = CLng(Fix(Math.Log10(Nombre))) + 1
     
            Res = 0 'Nombre
            Div10 = PowQ(10, NombreChiffre, Div10)
     
            For i = NombreChiffre - 1 To 0 Step -1
                Div10 \= 10
                C1 = CLng(Nombre \ Div10)
                Chiffre = CLng(Fix(C1) - Fix(CLng(C1) \ 10) * 10)
     
                Mul9 = PowQ(9, i, Mul9)
                Res += Mul9 * Chiffre
     
            Next
     
            Return Res
     
        End Function

  3. #3
    Nouveau membre du Club
    Homme Profil pro
    Informatique, programmation
    Inscrit en
    Novembre 2010
    Messages
    33
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Vienne (Poitou Charente)

    Informations professionnelles :
    Activité : Informatique, programmation

    Informations forums :
    Inscription : Novembre 2010
    Messages : 33
    Points : 26
    Points
    26
    Par défaut
    Super, ça marche
    Merci beaucoup

  4. #4
    Membre à l'essai
    Homme Profil pro
    Aucune
    Inscrit en
    Mars 2014
    Messages
    34
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Aucune

    Informations forums :
    Inscription : Mars 2014
    Messages : 34
    Points : 11
    Points
    11
    Par défaut
    Bien le bonjour,

    Vous savez si il serait possible de faire fonctionner se système avec des BigInteger ?
    J'aimerais me servir de se code pour que ça fonctionne en BigInteger.

    cordialement.

Discussions similaires

  1. [VB.NET] Convertir un nombre base 10 vers 9 sans 0
    Par Dayvid dans le forum Débuter
    Réponses: 0
    Dernier message: 24/05/2013, 18h25
  2. Export d'une base 11g vers 10g sans l'argument VERSION
    Par Le-DOC dans le forum Import/Export
    Réponses: 0
    Dernier message: 10/01/2013, 14h54
  3. Comment convertir de la base 16 vers la base 10 ?
    Par beegees dans le forum Assembleur
    Réponses: 10
    Dernier message: 25/12/2008, 11h01
  4. Convertir base HyperFile vers PostgreSQL
    Par bradern dans le forum PostgreSQL
    Réponses: 1
    Dernier message: 17/11/2006, 14h25

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