à l'aide ma boucle tourne dans l'infini [Résolu]

Signaler
Messages postés
33
Date d'inscription
samedi 16 février 2008
Statut
Membre
Dernière intervention
11 mai 2011
-
Messages postés
33
Date d'inscription
samedi 16 février 2008
Statut
Membre
Dernière intervention
11 mai 2011
-
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

Messages postés
33
Date d'inscription
samedi 16 février 2008
Statut
Membre
Dernière intervention
11 mai 2011
2
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.
Messages postés
7741
Date d'inscription
mercredi 1 septembre 2004
Statut
Membre
Dernière intervention
24 septembre 2014
38
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
Messages postés
15814
Date d'inscription
jeudi 8 août 2002
Statut
Modérateur
Dernière intervention
4 mars 2013
124
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
Messages postés
7741
Date d'inscription
mercredi 1 septembre 2004
Statut
Membre
Dernière intervention
24 septembre 2014
38
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
Messages postés
33
Date d'inscription
samedi 16 février 2008
Statut
Membre
Dernière intervention
11 mai 2011
2
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
Messages postés
326
Date d'inscription
vendredi 15 avril 2005
Statut
Membre
Dernière intervention
29 avril 2008
2
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 ????