A + 1 = B OU affichage en Hexa ?

Vous débutez et vous avez besoin d'aide ? N'hésitez pas à poser vos questions
Shinao
Messages : 137
Inscription : dim. 21/sept./2008 13:00

A + 1 = B OU affichage en Hexa ?

Message 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
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Message par Backup »

...........
Dernière modification par Backup le sam. 01/oct./2011 12:48, modifié 3 fois.
Shinao
Messages : 137
Inscription : dim. 21/sept./2008 13:00

Message par Shinao »

Merci pas pensé a cette méthode ;)
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Message par Backup »

reedité mon message avec un 2em code !! :)
Shinao
Messages : 137
Inscription : dim. 21/sept./2008 13:00

Message 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)
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Message 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
kerkael
Messages : 97
Inscription : mer. 03/sept./2008 21:08

Message 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
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Message 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 ! ;)
kerkael
Messages : 97
Inscription : mer. 03/sept./2008 21:08

Message 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:
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Message par Backup »

kerkael a écrit : :twisted: Mon code est court ET fonctionnel. De surcroit il remplit le cahier des charges. :twisted:
heu ! .... oui :)
kerkael
Messages : 97
Inscription : mer. 03/sept./2008 21:08

Message 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:
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Message 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
Ollivier
Messages : 4197
Inscription : ven. 29/juin/2007 17:50
Localisation : Encore ?
Contact :

Message 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
Dernière modification par Ollivier le mer. 01/juil./2009 13:05, modifié 1 fois.
kerkael
Messages : 97
Inscription : mer. 03/sept./2008 21:08

Message 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
Ollivier
Messages : 4197
Inscription : ven. 29/juin/2007 17:50
Localisation : Encore ?
Contact :

Message 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
Répondre