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)
:D

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)
:D
faire court c'est bien, mais avec cette exemple

Code : Tout sélectionner

Debug beta("z",3)
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 :D

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.

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

Publié : mer. 01/juil./2009 11:02
par Backup
kerkael a écrit : :twisted: Mon code est court ET fonctionnel. De surcroit il remplit le cahier des charges. :twisted:
heu ! .... oui :)

Publié : mer. 01/juil./2009 11:15
par kerkael
Allez, pour faire plaisir à Dobro :P
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à ? :twisted:

Publié : mer. 01/juil./2009 12:25
par Backup
kerkael a écrit : J'ai bon, là ? :twisted:
tiens ? il m'avais pourtant semblé avoir ete d'accord avec ton dernier argument.. :o

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 :

Code : Tout sélectionner

mynewascii=myascii+(offset%26) 
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.


:P

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