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 :

Question sur les divisions avec VB


Sujet :

VB 6 et antérieur

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Octobre 2009
    Messages
    44
    Détails du profil
    Informations personnelles :
    Âge : 42

    Informations forums :
    Inscription : Octobre 2009
    Messages : 44
    Par défaut Question sur les divisions avec VB
    Bonjour à tous,

    Je suis sur une partie de mon programme, où j'aimerai pouvoir sur un nombre X, séparer les unités, les dizaines, les centaines, les milliers, etc...

    je vous mets le bout du programme qui me pose soucis. Voilà par exemple, si je rentre 123, mon programme fonctionne !!!, mais si je rentre 873 (ca plante).. .

    J'ai remarqué avec le déboggeur que lors de ma première division, le 8 passe en 9, ce qui va me faire fausser mon calcul par la suite et va tourner à l'infini dans ma 2ème boucle...

    Voici mes questions : Y a-t-il un algorithme ou je puisse m'inspirer ? La division en programmation est-elle justicieuse, ou y a-t-il d'autres procédés ?
    Est-ce qu'il y a un tuto parlant de ces principes de divisions ou des calculs entres float et 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
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
     
     
        Dim Val_CC as Long 
        Dim Val_Int As Integer
        Dim Indice_Barre As Integer
     
        Val_Int = Val_CC / Val_Div
     
        Do While Val_Int > 9 Or Val_Int < 1
     
            If Val_Int = 0 Then
                Val_Div = Val_Div / 10
                Val_Int = Val_CC / Val_Div
            Else
                Val_Div = Val_Div * 10
                Val_Int = Val_CC / Val_Div
            End If
     
        Loop
     
        Indice_Barre = 1
     
        Code_couleur Val_Int, Indice_Barre
     
        Val_CC = Val_CC - (Val_Int * Val_Div)
     
        Val_Div = Val_Div / 10
     
        Val_Int = Val_CC / Val_Div
     
        Do While Val_Int > 9 Or Val_Int < 1
     
            If Val_Int = 0 Then
                Val_Div = Val_Div / 10
                Val_Int = Val_CC / Val_Div
            Else
                Val_Div = Val_Div * 10
                Val_Int = Val_CC / Val_Div
            End If
     
        Loop
     
        Indice_Barre = 2
     
        Code_couleur Val_Int, Indice_Barre
     
        Val_CC = Val_CC - (Val_Int * Val_Div)
     
        Val_Div = Val_Div / 10
     
        Val_Int = Val_CC / Val_Div
     
        Do While Val_Int > 9 Or Val_Int < 1
     
            If Val_Int = 0 Then
                Val_Div = Val_Div / 10
                Val_Int = Val_CC / Val_Div
            Else
                Val_Div = Val_Div * 10
                Val_Int = Val_CC / Val_Div
            End If
     
        Loop
     
        Indice_Barre = 3
     
        Code_couleur Val_Int, Indice_Barre
    Si il y a des erreurs grossières dites-le moi...

    Je vous remercie pour m'avoir lu...

    Amicalement Philou

  2. #2
    Membre émérite Avatar de DAUDET78
    Homme Profil pro
    retraité
    Inscrit en
    Janvier 2008
    Messages
    635
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 82
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2008
    Messages : 635
    Par défaut
    Et si tu remplaçais la division "/" par "\" ?

  3. #3
    Inactif  

    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    4 555
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 4 555
    Par défaut
    Salut,

    Aucun algo (code explicite).

    Ce code est bâclé (j'ai sommeil) et est à peaufiner.

    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
    Private Type nume
      millions As Integer
      centmilliers As Integer
      dixmilliers As Integer
      milliers As Integer
      centaines As Integer
      dizaines As Integer
      unites As Integer
    End Type
     
    Private Sub Command1_Click()
      Dim toto As Long
      toto = 1124791
      MsgBox toto & " ===>>>  " & vbCrLf & titi(toto).unites & " unités " & vbCrLf & _
       titi(toto).dizaines & " dizaines " & vbCrLf & _
       titi(toto).centaines & " centaines " & vbCrLf & _
       titi(toto).milliers & " milliers " & vbCrLf & _
       titi(toto).dixmilliers & " dizaines de milliers " & vbCrLf & _
       titi(toto).centmilliers & " centaines de milliers " & vbCrLf & _
       titi(toto).millions & " millions " & vbCrLf
    End Sub
    Private Function titi(ByVal nb As Long) As nume
     dim n as string, pos as integer
        n = CStr(nb)
        pos = Len(n)
        titi.unites = Mid(n, pos, 1): pos = pos - 1
        If pos Then titi.dizaines = Mid(n, pos, 1): pos = pos - 1
        If pos Then titi.centaines = Mid(n, pos, 1): pos = pos - 1
        If pos Then titi.milliers = Mid(n, pos, 1): pos = pos - 1
        If pos Then titi.dixmilliers = Mid(n, pos, 1): pos = pos - 1
        If pos Then titi.centmilliers = Mid(n, pos, 1): pos = pos - 1
        If pos Then titi.millions = Mid(n, pos, 1): pos = pos - 1
    End Function
    Tu peux t'en inspirer le conduire à l'infini ainsi (suffit d'ajouter à la structure).

    Bonne nuit

    EDIT :
    je disais plus haut :
    Aucun algo (code explicite)
    Pour la raison simple qu'i'il se traduirait par (exactement comme pour la détermination visuelle, en lecture) un algo qui esposerait :
    "lire des unités (donc du dernier caractère) jusqu'à l'unité la plus grande (donc le 1er caractère), caractère par caractère, en remontant et traduire la correspondance en se servant d'une structure, en remplacement de ce que l'on fait en pensée, en lisant..."

  4. #4
    Membre confirmé
    Inscrit en
    Octobre 2009
    Messages
    44
    Détails du profil
    Informations personnelles :
    Âge : 42

    Informations forums :
    Inscription : Octobre 2009
    Messages : 44
    Par défaut
    Merci Bien pour vos réponses,

    Je sens que j'aurai du travail ce soir ;-)... Super pour le code, oui je pense que je vais grandement m'en inspirer... Y a du boulot pour que j'arrive à programmer à ce niveau et si rapidement.

    Encore merci

    Amicalement Philou

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

Discussions similaires

  1. Question sur les pointeurs avec les fonctions
    Par Loester dans le forum Débuter
    Réponses: 2
    Dernier message: 01/02/2012, 22h56
  2. Question sur les tableaux avec en-têtes fixes et tri sur les colonnes
    Par lolo5935 dans le forum Général JavaScript
    Réponses: 14
    Dernier message: 29/07/2010, 15h50
  3. Question sur les trigger avec Forms 9i
    Par Arnaud13 dans le forum Forms
    Réponses: 0
    Dernier message: 29/01/2010, 10h44
  4. Question sur les images avec Swing
    Par scary dans le forum 2D
    Réponses: 5
    Dernier message: 02/12/2009, 18h35
  5. Question sur les fonctions avec "TABLE" comme param. de retour
    Par Alex01 dans le forum Développement
    Réponses: 2
    Dernier message: 17/11/2008, 09h26

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