Svp, au bord du suicide

Résolu
Signaler
Messages postés
46
Date d'inscription
vendredi 12 décembre 2003
Statut
Membre
Dernière intervention
18 mars 2005
-
Messages postés
46
Date d'inscription
vendredi 12 décembre 2003
Statut
Membre
Dernière intervention
18 mars 2005
-
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".



Merci encore de vos réponses.

11 réponses

Messages postés
3140
Date d'inscription
vendredi 14 mai 2004
Statut
Membre
Dernière intervention
11 mars 2019
31
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



Daniel
3
Merci

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 109 internautes nous ont dit merci ce mois-ci

Messages postés
176
Date d'inscription
vendredi 29 octobre 2004
Statut
Membre
Dernière intervention
7 mars 2005

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.

Bonne chance
Messages postés
3140
Date d'inscription
vendredi 14 mai 2004
Statut
Membre
Dernière intervention
11 mars 2019
31
ton code est bien puisque c'est le mien.
il faut démarrer avec un compteur qui correspond à la valeur de "mot"

Daniel
Messages postés
46
Date d'inscription
vendredi 12 décembre 2003
Statut
Membre
Dernière intervention
18 mars 2005

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
Messages postés
3140
Date d'inscription
vendredi 14 mai 2004
Statut
Membre
Dernière intervention
11 mars 2019
31
<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)

"m" --> 13 * 632 = 51597
"o" --> 15 * 631 = 945
"t" --> 20 * 630 = 20
────────
total 52562


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

"m" --> 13 * 630 = 13
"o" --> 15 * 631 = 945
"t" --> 20 * 632 = 79380
────────
total 80337

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 ^ (i - 1))
Next

' controle
Timer1_Timer


<HR>

Daniel
Messages postés
46
Date d'inscription
vendredi 12 décembre 2003
Statut
Membre
Dernière intervention
18 mars 2005

Alors là, j'ai totu ompris mais le problème c'est que ca ne marche pas.

Pourtant je suis sure d'avoir tout bien fait.

Lorsque je met donc que s = "mot" avec la routine que tu ma montrée en haut rien ne se lance.
Messages postés
3140
Date d'inscription
vendredi 14 mai 2004
Statut
Membre
Dernière intervention
11 mars 2019
31
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.

Daniel
Messages postés
46
Date d'inscription
vendredi 12 décembre 2003
Statut
Membre
Dernière intervention
18 mars 2005

Oui c'est tout a fait ce que jai fait et pourtant rien ne se lance.

J'ai mis tout pourtant et j'ai tout compris.

Pourtant quand je compile aucune erreur.
Messages postés
3140
Date d'inscription
vendredi 14 mai 2004
Statut
Membre
Dernière intervention
11 mars 2019
31
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é.

Daniel
Messages postés
46
Date d'inscription
vendredi 12 décembre 2003
Statut
Membre
Dernière intervention
18 mars 2005

Tu peux me mettre toute la source. J'ai peut etre foiré qq chose mais je vois vraiment pas.
Messages postés
46
Date d'inscription
vendredi 12 décembre 2003
Statut
Membre
Dernière intervention
18 mars 2005

Ro mé quel con je suis.

C'est pas possible.

c'est une bete faute de recopiage.(jai oublié la lettre i)

Merci encore beaucoup