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

Contribuez Discussion :

Diviser un entier de grande longueur par un autre entier [Sources]


Sujet :

Contribuez

  1. #1
    Membre émérite
    Avatar de DelphiManiac
    Homme Profil pro
    Homme à tout faire
    Inscrit en
    Mars 2002
    Messages
    1 147
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Homme à tout faire
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2002
    Messages : 1 147
    Points : 2 533
    Points
    2 533
    Par défaut Diviser un entier de grande longueur par un autre entier
    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
    51
    52
    53
    54
     
    Option Compare Database
    Option Explicit
     
    Function lDiv(numerateur As String, diviseur As Long, ByRef reste As Long) As String
      Dim part As Integer
      Dim c As String
     
      Dim res As String
     
      res = ""
     
      Do While Len(numerateur) > 0
        c = c & Left$(numerateur, 1)
        numerateur = Right$(numerateur, Len(numerateur) - 1)
        If CLng(c) < diviseur Then
          If res <> "" Then
            res = res & "0"
          End If
        Else
          part = CStr((CLng(c) \ diviseur))
          c = CStr(CLng(c) - (part * diviseur))
          res = res & CStr(part)
        End If
      Loop
      lDiv = res
      reste = CLng(c)
    End Function
     
    Function LongToBinaire(unevaleur As String) As String
      Dim reste As Long
      Dim res As String
     
      Do While Len(unevaleur) > 0
        unevaleur = lDiv(unevaleur, 2, reste)
        res = CStr(reste) & res
      Loop
     
      LongToBinaire = res
    End Function
     
    Sub test()
      Dim reste As Long
      Dim numsecu As String
     
      ' Vérification d'un numero de sécu
      ' la clé d'un n° de sécu correpond à 97 - (le reste de la division du n° de secu / 97)
      numsecu = "1640183137262"
      lDiv numsecu, 97, reste
      Debug.Print "Clé = " & 97 - reste
     
      ' Conversion d'un entier trèèèèèssss long en binaire
      Debug.Print LongToBinaire("65536564564564654658978978978978798798")
    End Sub
    Ce code à pour but de diviser un entier sous forme de chaine de caractères de longeur quelconque pour en obtenir le résultat (entier) et le reste.

    2 exemples sont inclus, la vérification d'un n° de sécu français et la conversion d'un entier très long sous forme binaire.

  2. #2
    Membre expérimenté
    Avatar de Papy Turbo
    Homme Profil pro
    Développeur Office/VBA
    Inscrit en
    Mars 2004
    Messages
    822
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Office/VBA
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2004
    Messages : 822
    Points : 1 709
    Points
    1 709
    Par défaut
    Salut, DelphiManiac,
    Interessant

    Je vais avouer que je n'ai pas encore testé cette "super division", mais juste une remarque.
    Dans la 2 ème fonction "LongToBinaire", si je ne m'abuse, le paramètre ("unevaleur") est détruit par la fonction.
    À l'arrivée,
    - LongToBinaire contient bien le résultat,
    - unevaleur ne contient plus le (string du) nombre à convertir, ce qui peut être gênant si on a passé une variable.
    Il suffirait d'ajouter un ByVal pour éviter cela, comme dans :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Function LongToBinaire(byVal unevaleur As String) As String
    Tu es d'accord ou j'ai rien compris ?

  3. #3
    Membre émérite
    Avatar de DelphiManiac
    Homme Profil pro
    Homme à tout faire
    Inscrit en
    Mars 2002
    Messages
    1 147
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Homme à tout faire
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2002
    Messages : 1 147
    Points : 2 533
    Points
    2 533
    Par défaut
    Tout à fait d'accord avec toi, mais d'un autre coté LongToBinaire n'était là que comme exemple d'utilisation de la fonction de division.

  4. #4
    Membre expérimenté
    Avatar de Papy Turbo
    Homme Profil pro
    Développeur Office/VBA
    Inscrit en
    Mars 2004
    Messages
    822
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Office/VBA
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2004
    Messages : 822
    Points : 1 709
    Points
    1 709
    Par défaut
    +1
    Excuse moi d'être un peu maniaque sur les bords

  5. #5
    Membre émérite
    Avatar de DelphiManiac
    Homme Profil pro
    Homme à tout faire
    Inscrit en
    Mars 2002
    Messages
    1 147
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Homme à tout faire
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2002
    Messages : 1 147
    Points : 2 533
    Points
    2 533
    Par défaut
    Pas de soucis

  6. #6
    Membre chevronné

    Profil pro
    Inscrit en
    Avril 2006
    Messages
    1 399
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 1 399
    Points : 2 221
    Points
    2 221
    Par défaut
    Bonjour,

    votre fonction m'a rappelé que j'avais écrit un petit programme de vérification de clé de n° de sécu et de clé RIB.

    J'utilisais des variants décimaux pour calculer les clés et à priori ça passe.

    J'ai testé le numéro de sécu, et j'obtiens la même clé.
    Les décimaux sont par contre trop courts pour tester votre deuxième exemple !

    Je l'ai un peu dépoussiéré, Si on le compile en <.mde>, il ressemble à un petit programme indépendant d'Access.

    Lien du programme ci-dessous (Access 2003) :
    http://pbserv.free.fr/dev/

    Amicalement,

    Philippe

Discussions similaires

  1. Remplacer un mot entier par un autre dans une chaîne de caractères
    Par clemini dans le forum Requêtes et SQL.
    Réponses: 11
    Dernier message: 19/02/2009, 14h39
  2. Explorer une grande image par cliquer-glisser
    Par antoine.info dans le forum Général JavaScript
    Réponses: 0
    Dernier message: 19/10/2008, 13h06
  3. Projet : calculette à nombre entiers infiniment GRAND
    Par nzaero dans le forum Débuter
    Réponses: 13
    Dernier message: 01/08/2008, 16h34
  4. Stocker un entier très grand
    Par bogoss91 dans le forum C++
    Réponses: 17
    Dernier message: 27/11/2007, 09h11
  5. Diviser une procédure trop grande
    Par tenaka69 dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 31/08/2007, 09h45

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