Aller au contenu


Photo
- - - - -

Programmation with VB6 (acte II)


  • Veuillez vous connecter pour répondre
2 réponses à ce sujet

#1 philou-RX

philou-RX

    Habitué

  • Membres
  • PipPip
  • 261 messages
  • Gender:Male
  • Location:Riviera - Vaudoise

Posté 16 novembre 2009 - 08:57

Salouti à 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...


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
[/code]


Si il y a des erreurs grossières dites-le moi...

Je vous remercie pour m'avoir lu...

Amicalement Philou

#2 robocop

robocop

    Membre passionné

  • Membres
  • PipPipPip
  • 357 messages
  • Gender:Male

Posté 16 novembre 2009 - 11:16

Salut !
Ca m'a l'air bien compliqué ton truc. Le principe, c'est bien de diviser par 10 succesivement. Moi, j'utilise une astuce, c'est de diviser des integers, il y a une troncature automatique dans mon langage de programmation (ocaml).
Exemple :
- : int = 5[/code]
Si ça ne marche pas comme ça, il doit avoir une fonction genre "partie entière" ou similaire en Vb.

Ainsi, moi, ça donne ça :
let rec digits n =
let asd = n/10 in
if n < 10 then [n]
else (n-asd*10)::digits asd
;;[/code]
Exemple :
# digits 8245;;
- : int list = [5; 4; 2; 8]

A+

#3 philou-RX

philou-RX

    Habitué

  • Membres
  • PipPip
  • 261 messages
  • Gender:Male
  • Location:Riviera - Vaudoise

Posté 17 novembre 2009 - 08:59

Salut à tous,

Merci Robo... je vais regardé ca ce soir !!! Effectivement ta solus me semble plus judicieuse mon Usine à Gaz.

A+
Amicalement Philou




0 utilisateur(s) li(sen)t ce sujet

0 members, 0 guests, 0 anonymous users