à l'aide ma boucle tourne dans l'infini

Résolu
khedidija Messages postés 33 Date d'inscription samedi 16 février 2008 Statut Membre Dernière intervention 11 mai 2011 - 10 avril 2008 à 22:16
khedidija Messages postés 33 Date d'inscription samedi 16 février 2008 Statut Membre Dernière intervention 11 mai 2011 - 14 avril 2008 à 14:17
salut!
je dois faire un programme qui converte les décimaux en binaire avec une boucle inconditionnelle.mais mon souci c'est que une fois que j'éxécute mon programme ça n'arrête pas .voilà mon mon code,qui peut me dire ou est le problème? et merci à priori.
=============================
Private Sub Command1_Click()
Dim bin, nbre, result, rest, dev As Double

bin = " "
nbre = Text1

While result > 0

result = nbre \ 2
rest = nbre Mod 2
result = Fix(nbre \ 2)

Wend

bin = rest + bin
Label1.Caption = bin

End Sub
============================
merci à priori

6 réponses

khedidija Messages postés 33 Date d'inscription samedi 16 février 2008 Statut Membre Dernière intervention 11 mai 2011 2
14 avril 2008 à 14:17
merci les amis grâce à vous proposition j'ai pu résoudre mon prolblème donc voilà le bon code ça marche 100% bien
====================
Private Sub Command1_Click()
  Dim n, digit As Integer
  Dim bin As String

n = text1

If n > 0 Then

   Do While n <> 0
    
      digit = n Mod 2
      n = n \ 2
      bin = digit & bin
     
   Loop
   
   Text2.Text = bin

Else
   
     MsgBox ("Nombre négatif pas accepté !")

End If
 

End Sub

============================
et merci beaucoup pour votre soutien.
3
cs_casy Messages postés 7741 Date d'inscription mercredi 1 septembre 2004 Statut Membre Dernière intervention 24 septembre 2014 40
10 avril 2008 à 22:25
fait le test.

Prend n'importe qu'elle valeur pour nbre par exemple 14 (au pif) et parcours manuellement sur le papier plusieurs fois ta boucle en notant à chaque étapes les valeurs de chacune des variables.

---- Sevyc64  (alias Casy) ----<hr size="2" width="100%" /># LE PARTAGE EST NOTRE FORCE #    http://aide-office-vba.monforum.com/index.php
0
cs_DARKSIDIOUS Messages postés 15814 Date d'inscription jeudi 8 août 2002 Statut Membre Dernière intervention 4 mars 2013 130
10 avril 2008 à 22:47
Salut,

Forcément que ca boucle à l'infini => la fonction "/" tend vers le 0 infini, et n'atteinds jamais le 0 absolu...

Donc ta condition :
While result > 0
n'est jamais remplie !

De plus :
Dim bin, nbre, result, rest, dev As Double
Cela veut dire que seul dev est un double ! Toutes les autres variables sont des variant !!! Ce qui est beaucoup plus lents à utiliser, et ne sert strictement à rien : pour la décomposition en binaire, seul les nombres entiers sont utilisés, donc déclare les en long !
______________________________________
DarK Sidious
0
cs_casy Messages postés 7741 Date d'inscription mercredi 1 septembre 2004 Statut Membre Dernière intervention 24 septembre 2014 40
10 avril 2008 à 22:51
Le problème est encore plus simple Dark

nbre n'est jamais mis à jour, alors quelque soit le nombre de boucle effectuées result aura toujours la même valeur.

Si nbre <1 ça doit marcher, mais pour toutes valeurs de nbre >1 = => boucle infinie

---- Sevyc64  (alias Casy) ---- <hr size ="2" width="100%" /># LE PARTAGE EST NOTRE FORCE #    http://aide-office-vba.monforum.com/index.php
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
khedidija Messages postés 33 Date d'inscription samedi 16 février 2008 Statut Membre Dernière intervention 11 mai 2011 2
11 avril 2008 à 01:13
salut!
merci les amis
mais voilà j'ai pu trouvé une solution pour sortir de l'infini mais je n'obtiens que 1 n'importe quel soit le nombre donné
voilà le  nouveau code :
================
Private Sub Command1_Click()
Dim nbre, result, rest, dev As Integer
Dim bin As String
bin = 0
nbre = Text1.Text

If nbre > 0 Then
 
    Do While result > 0
     
      rest = nbre Mod 2
      bin = rest + bin
      nbre = nbre \ 2

    Loop

Else

MsgBox ("Nombre négatif pas accepté !")

End If

Label1.Caption = bin

End Sub
========================
et quand je déclare as double ça ne donne que 0!
alors svp aidez moi ça me gène
0
bricoyeye Messages postés 326 Date d'inscription vendredi 15 avril 2005 Statut Membre Dernière intervention 29 avril 2008 2
11 avril 2008 à 09:14
Salut,

 Do While result > 0
     
      rest = nbre Mod 2
      bin = rest + bin
      nbre = nbre \ 2

    Loop

tu n'as donné aucune valeur à result avant ta boucle, donc il est à 0, la boucle ne ce fait pas, et la valeur de bin est celle que tu lui a donnée plus haut.

If nbre > 0 Then
  result = ???
    Do While result > 0  
      rest = nbre Mod 2
      bin = rest + bin
      nbre = nbre \ 2
result = ????



    Loop

A toi de remplacer les ????
0
Rejoignez-nous