saveourssouls
Messages postés46Date d'inscriptionvendredi 12 décembre 2003StatutMembreDernière intervention18 mars 2005
-
27 févr. 2005 à 04:15
saveourssouls
Messages postés46Date d'inscriptionvendredi 12 décembre 2003StatutMembreDernière intervention18 mars 2005
-
27 févr. 2005 à 15:18
Donc voila.
LA fonction que je vais tenter de vous faire comprendre est une fonction qui incrémente.
L'erreur n'est pas dans le code, enfin vous allez voir.
Dim Table(62) As Byte
Dim Cpt As Long
Private Sub Form_Load()
Dim i As Integer
Table(0) = 32
For i 1 To 26: Table(i) i + 96: Next
For i 27 To 52: Table(i) i + 38: Next
For i 53 To 62: Table(i) i - 5: Next
Timer1.Enabled = true
Timer1.Interval = 1
Timer1.Interval = 1
End sub
Private Sub Timer1_Timer()
Dim i As Long
Dim s As String
Cpt = Cpt + 1
i = Cpt
While i > 0
s = Chr$(Table(i Mod 63)) & s
i = i \ 63
Wend
Text1 = s
End Sub
Il y a bien sure un text1.box
Donc jusque ici rien d'anormale. > il incrémente toujours et toujours
Mais en faite moi j'aimerais qu'il commence a incrémenter a partir d'un mot donné.
Donc par ex je met dans laod : text1.text = "mot". Puis quand il a fini
de passer par le load, il incrémente "mot" donc on aura
"not","oot","pot",... Et c'est cela le problème.
C'est qu'il ne veut rien savoir.
Si je lui dit que le texte a incrémenter est "mot" il commence toujours par a.
J'ai bien essaye de refiler mot "mot" qq part mais sans aucunes effet.
Donc j'aimerais avoir l'avis d'un expert (enfin d'un plus doué que moi
quoi > c pas dur a trouver) qui puisse me garder ce code intacte et
me dire où je dois placer mon "mot".
Gobillot
Messages postés3140Date d'inscriptionvendredi 14 mai 2004StatutMembreDernière intervention11 mars 201934 27 févr. 2005 à 15:13
Dim Table(62) As Byte
Dim Cpt As Long
Private Sub Form_Load()
Dim i As Integer
Dim j As Integer
Dim p As Integer
Dim s As String
Table(0) = 32 For i 1 To 26: Table(i) i + 96: Next For i 27 To 52: Table(i) i + 38: Next For i 53 To 62: Table(i) i - 5: Next
s = "mot"
For i = 1 To Len(s)
p = Asc(Mid$(s, i, 1))
For j = 0 To 62
If p = Table(j) Then Exit For
Next
Cpt = Cpt + (j * 63 ^ (Len(s) - i))
Next
Cpt = Cpt - 1
Timer1.Interval = 1
Timer1.Enabled = True
End Sub
Private Sub Timer1_Timer()
Dim i As Long
Dim s As String
Cpt = Cpt + 1
i = Cpt
While i > 0
s = Chr$(Table(i Mod 63)) & s
i = i \ 63
Wend
Text1 = s
' DoEvents
End Sub
cbnet
Messages postés176Date d'inscriptionvendredi 29 octobre 2004StatutMembreDernière intervention 7 mars 2005 27 févr. 2005 à 06:25
Ecoute, c'est peut-être moi, mais je trouve que ton algorithme est un
peu bizarre ! Moi je peux rien faire avec ce code, je te conseille de
partir sur autre chose car ce que tu veux faire est assez simple
pourtant (si j'ai bien compris). Ce que je peux te dire, c'est que tu
te plantes au moins sur 1 point : "
Si je lui dit que le texte a incrémenter est "mot" il commence toujours par a."
Peux tu me dire à quel moment tu dis à ton prog de se
servir de "mot" ou de ce qu'il y a dans ta textbox pour commencer à
incrémenter ??
Si il commence toujours par a, c'est simple, tu ne te sers à aucun
moment de "mot" dans ta boucle while, i commence par 1, et s =
chr$(Table(i mod 63)) te renverra forcément un a au premier tour
puisque Table(1) vaut 97 (nombre ASCII de a)...
Réfléchis 5 min, et recommence ton code à zéro, c'est un conseil.
saveourssouls
Messages postés46Date d'inscriptionvendredi 12 décembre 2003StatutMembreDernière intervention18 mars 2005 27 févr. 2005 à 12:30
cbnet, je ne t'ai pas attendu pour faire ca, mais il me mettait une erreur de capacité.
Gobillot, comment je fais ca?
Je sais que je dois faire quelque chose avec Cpt, j'ai bien essayer
mais sans résultat. Vu que je vois pas où Cpt est défini comme valeur.
Je connais pas sa valueur de départ.(on ne le dit nule part) > on
dit juste que cpt est égale a cpt+1
Vous n’avez pas trouvé la réponse que vous recherchez ?
Gobillot
Messages postés3140Date d'inscriptionvendredi 14 mai 2004StatutMembreDernière intervention11 mars 201934 27 févr. 2005 à 13:14
<HR>
Cpt n'est pas initialisé donc sa valeur de départ est égal à zéro.
la valeur d'un mot est calculé sur une base de 63
63 = (espace + 26 lettres minuscules + 26 lettres majuscules + 10 chiffres)
donc la valeur de départ est 52561 puisqu'on fait Cpt = Cpt + 1
Dim i As Integer
Dim j As Integer
Dim p As Integer
Dim s As String
s = "mot"
For i = 1 To Len(s)
p = Asc(Mid$(s, i, 1))
For j = 0 To 62
If p = Table(j) Then Exit For
Next
Cpt = Cpt + (j * 63 ^ (Len(s) - i))
Next
Cpt = Cpt - 1
' controle
Timer1_Timer
<HR>
en modifiant la routine de calcul, on obtient d'autres valeurs:
Private Sub Timer1_Timer()
Dim i As Long
Dim s As String
i = Cpt
While i > 0
s = s & Chr$(Table(i Mod 63))
i = i \ 63
Wend
Text1 = s
Cpt = Cpt + 1
End Sub
Gobillot
Messages postés3140Date d'inscriptionvendredi 14 mai 2004StatutMembreDernière intervention11 mars 201934 27 févr. 2005 à 14:36
Lorsque j'arrive après calcul (1er cas) avec Cpt =52561 et que j'appelle le Timer une fois, "mot" doit s'afficher dans le TextBox , preuve que le calcul est bon, donc "mot" correspond bien au nombre 52561.
c'était seulement un contrôle ...
sinon après calcul de Cpt, tu continues ton programme normalement avec:
Timer1.Enabled = true
Timer1.Interval = 1
et le timer devrait redémarrer à partir du point où il en était.
Gobillot
Messages postés3140Date d'inscriptionvendredi 14 mai 2004StatutMembreDernière intervention11 mars 201934 27 févr. 2005 à 14:53
essayes avec une valeur de Timer1.Interval un peu plus grande parce que 1 ça me paraît un peu faible, donc il a pas le temps d'afficher dans le TextBox ou alors en insérant un DoEvents.
sinon chez moi ça marche même avec 1 et sans DoEvents. mais j'ai pas essayé en compilé.