Page 1 sur 2
A + 1 = B OU affichage en Hexa ?
Publié : jeu. 25/juin/2009 18:21
par Shinao
Bonjour,
je voudrais savoir comment faire pour trouver la lettre suivante d'un caractere ... genre B + 2 = D ... ?
Ou sinon afficher grâce a la Table des codes ASCII et leur correspondance
mais je vois pas comment faire ?
merci d'avance
Publié : jeu. 25/juin/2009 18:37
par Backup
...........
Publié : jeu. 25/juin/2009 18:43
par Shinao
Merci pas pensé a cette méthode

Publié : jeu. 25/juin/2009 18:46
par Backup
reedité mon message avec un 2em code !!

Publié : jeu. 25/juin/2009 18:52
par Shinao
Aussi , comment afficher un nombre dans une chaîne de caractère ?
Car j'ai une boucle et dans celle-ci j'affiche un message avec le nombre de fois qu'elle a été faites, mais je ne peux pas mix strings with numerical values ... comment faire ?
j'ai essayé Str() mais le chiffre revient à 0.
merci d'avance
Edit : merci la premire procedure me convient ^^' (jolie boucle :p)
Publié : jeu. 25/juin/2009 18:56
par Backup
Code : Tout sélectionner
For i = 1 To 100
ligne.s="on va compter :"+Str(i)+" et voila "
Debug ligne.s
Next i
Publié : mer. 01/juil./2009 10:11
par kerkael
Code : Tout sélectionner
Procedure.s beta(myletter$,offset)
myascii=Asc(myletter$)
mynewletter$=Chr(myascii+offset)
ProcedureReturn mynewletter$
EndProcedure
Debug beta("c",3)

Publié : mer. 01/juil./2009 10:25
par Backup
kerkael a écrit :Code : Tout sélectionner
Procedure.s beta(myletter$,offset)
myascii=Asc(myletter$)
mynewletter$=Chr(myascii+offset)
ProcedureReturn mynewletter$
EndProcedure
Debug beta("c",3)

faire court c'est bien, mais avec cette exemple
ta procedure renvoi ")" <-- et ce n'est pas une lettre !

Publié : mer. 01/juil./2009 10:44
par kerkael
Et bien, comme tu avais mis le code qui permettait de faire la boucle sur les 26- caractères, j'ai pas voulu le recopier. Comme ça il reste un peu de travail à faire à Shinao
Et puis comme la question d'origine ne demandait pas explicitement une rotation sur l'alphabet, mais mentionnait aussi table Ascii et caractère, sans faire le tour, tu peux aussi aussi considérer mon code comme universel.
Les offsets négatifs sont acceptés tant dans mon code que dans le tien, mais si on veut boucler vers le bas dans ton code, on tombe toujours sur a. De la même manière, tout offset supérieur à 26 dans ton code donne la lettre z.

Mon code est court ET fonctionnel. De surcroit il remplit le cahier des charges.

Publié : mer. 01/juil./2009 11:02
par Backup
kerkael a écrit :

Mon code est court ET fonctionnel. De surcroit il remplit le cahier des charges.

heu ! .... oui

Publié : mer. 01/juil./2009 11:15
par kerkael
Allez, pour faire plaisir à Dobro

Mais peut-être que Shinao ne veut pas de tout cela ... et si on lui demandait.
Code : Tout sélectionner
Procedure.s beta(myletter$,offset)
myascii=Asc(myletter$)
If myascii<97 Or myascii>122
mysortie$="Ne fonctionne qu'avec les les lettres minuscules !"
Else
;Debug "myletter$ :" + myletter$
;Debug "offset :" + Str(offset)
;Debug "offset%26 :" + Str(offset % 26)
mynewascii=myascii+(offset%26)
;Debug "mynewascii :" + Str(mynewascii)
If mynewascii>122
mynewascii=mynewascii-26
ElseIf mynewascii<97
mynewascii=mynewascii+26
EndIf
;Debug "mynewascii again :" + Str(mynewascii)
;Debug Chr(mynewascii)
mynewletter$=Chr(mynewascii)
mysortie$=mynewletter$
EndIf
ProcedureReturn mysortie$
EndProcedure
Debug beta("i",2) ; affiche k 2eme lettre après i
Debug beta("r",19) ; affiche k, en faisant une fois le tour par le haut
Debug beta("a",-120) ; affiche k; en faisat plusieurs fois le tour par le bas
Debug beta("B",5) ; affche "Ne fonctionne qu'avec les les lettres minuscules !" puisque B sort du tableau des minuscules ! : :?:
J'ai bon, là ?

Publié : mer. 01/juil./2009 12:25
par Backup
kerkael a écrit :
J'ai bon, là ?

tiens ? il m'avais pourtant semblé avoir ete d'accord avec ton dernier argument..

Publié : mer. 01/juil./2009 13:02
par Ollivier
Sûrement!!!
Tiens! Court, fonctionnel, bio et tout le toutim...
Code : Tout sélectionner
Procedure.S Omega(A.S, D.I)
ProcedureReturn Chr((Asc(UCase(A))+D+456911)%26+65+Asc(A)-Asc(UCase(A)))
EndProcedure
Publié : mer. 01/juil./2009 13:03
par kerkael
Sinon, et pour ceux qui ne connaissent pas la division modulo :
offset%26 donne le reste de la division entière d'offset par 26 ...
Donc :
si offset est compris entre 0 et 26, offset%26=offset.
si offset > 26, par exemple offset=28, 28%26=2, le reste de 28/26
Ça permet de considérer les cycles de valeur 26.

Publié : mer. 01/juil./2009 13:08
par Ollivier
@Kerkael
On fait de jolis posts croisés!! Très bien le modulo. Le problème c'est que ((-1) % 26) = -1, et ça ça n'est pas top. Il faut un rattrapage en ajoutant une puissance de 26 avant d'effectuer le modulo. Il y a le code juste au-dessus de ton post.
Ollivier