[Resolu] Gestion des DIM et décalage

Vous débutez et vous avez besoin d'aide ? N'hésitez pas à poser vos questions
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Re: [Resolu] Gestion des DIM et décalage

Message par Backup »

par contre j'ai un soucis si on declale trop..
pas le temps de regarder
si ça depasse 13 ça risque de deconner ...
Avatar de l’utilisateur
Ar-S
Messages : 9540
Inscription : dim. 09/oct./2005 16:51
Contact :

Re: [Resolu] Gestion des DIM et décalage

Message par Ar-S »

J'ai modifié et corrigé le code, j'ai aussi mis 2 modes possibles.
J'ai renommé la procédure en CesarIt() (cryptage cesar)

CesarIt(Decalage,phrase$,[mode])
mode = 1 : se base sur la Nieme lettre le l'alphabet
mode = 0 (ou rien) : incrémente le décalage de Decalage

Exemple en mode 0
CesarIt(1,phrase$)
"aaa" devient "bbb" car CesarIt décale de 1 par rapport à la 1ere lettre de l'alphabet
CesarIt(2,phrase$)
"aaa" devient "ccc"

Exemple en mode 1
CesarIt(1,phrase$,1)
"aaa" devient "aaa" car CesarIt se positionne sur la lettre 1
CesarIt(2,Phrase$,1)
"aaa" devient "bbb"

Code : Tout sélectionner

; procedure originale : Dobro
; Modifiée par Ar-S

Procedure.s CesarIt(pos,Phrase$,MODE=0)
  ; mode : 0 = decalage normal
  ; mode : 1 = decalage via position
   
  
  If MODE = 1
    pos-1
    decalage = pos
  Else 
    pos = pos
    decalage = pos
  EndIf
  
  sortie$ = ""
  
  ref$="a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z"
  ref2$="abcdefghijklmnopqrstuvwxyz"
  Phrase$=LCase(Phrase$)
  
  
  If decalage = 0
    decalage = 1
  ElseIf decalage<1 Or decalage>26
    ProcedureReturn "Erreur"
  EndIf
  
  For i=1 To Len(Phrase$)
    extrait$=Mid(Phrase$,i,1)
    Position=FindString(ref2$,extrait$,1)
    
    If Position + pos > 26
      Position = (Position + pos) - 26
    Else
      Position + pos
    EndIf 
    
    extrait2$=StringField(ref$,Position,",") 
    sortie$+extrait2$
  Next i
  Debug Phrase$+" devient "+sortie$
  
  ProcedureReturn sortie$
EndProcedure


Phrase$="attz"

Debug CesarIt(2,Phrase$,1) ; Decale à la 2 eme lettre => (B)
Debug CesarIt(2,Phrase$) ; Decale de 2 a partir de A => (C)

~~~~Règles du forum ~~~~
⋅.˳˳.⋅ॱ˙˙ॱ⋅.˳Ar-S ˳.⋅ॱ˙˙ॱ⋅.˳˳.⋅
W11x64 PB 6.x
Section HORS SUJET : ICI
LDV MULTIMEDIA : Dépannage informatique & mes Logiciels PB
UPLOAD D'IMAGES : Uploader des images de vos logiciels
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Re: [Resolu] Gestion des DIM et décalage

Message par Backup »

cool ! :)

l'utilisation de stringfield permet de considerer une chaine comme un tableau
a une dimension , sans le cirque qui va avec...
j'aime vraiment cette fonction :)

bon certes , c'est surement moins rapide qu'avec des peeks
mais au moins on voit concretement ou on en est :)


rien qu'avec Stringfield, Purebasic est un grand langage !! :lol:
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Re: [Resolu] Gestion des DIM et décalage

Message par Backup »

...............
Dernière modification par Backup le sam. 01/oct./2011 9:16, modifié 1 fois.
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Re: [Resolu] Gestion des DIM et décalage

Message par Backup »

..............
Dernière modification par Backup le ven. 30/sept./2011 19:40, modifié 1 fois.
Avatar de l’utilisateur
Ar-S
Messages : 9540
Inscription : dim. 09/oct./2005 16:51
Contact :

Re: [Resolu] Gestion des DIM et décalage

Message par Ar-S »

héhé oui comme quoi un petit rafraichissement ça fait du bien :)

CesarIt(13,Phrase$) = wrfhvfharpneebggranvar :mrgreen:

Phrase$ = ??? :P
Dernière modification par Ar-S le ven. 02/sept./2011 16:38, modifié 1 fois.
~~~~Règles du forum ~~~~
⋅.˳˳.⋅ॱ˙˙ॱ⋅.˳Ar-S ˳.⋅ॱ˙˙ॱ⋅.˳˳.⋅
W11x64 PB 6.x
Section HORS SUJET : ICI
LDV MULTIMEDIA : Dépannage informatique & mes Logiciels PB
UPLOAD D'IMAGES : Uploader des images de vos logiciels
Good07
Messages : 308
Inscription : ven. 23/avr./2004 18:08
Localisation : Hérault 34190 Laroque

Re: [Resolu] Gestion des DIM et décalage

Message par Good07 »

Bonjour Ar-s

J'ai pas tout lu, mais ne serai-ce pas plus simple de faire comme ça ?

Code : Tout sélectionner

Global crypto$, Phrase$
Phrase$="ATTZ"

Procedure.s Cesar(Texte$,Decalage)
  crypto$=""
  For n=1 To Len(Phrase$)
    ValLettre=Asc(Mid(Phrase$,n,1))
    Res=ValLettre+Decalage
    If Res>90 
      Res=Res-26
    EndIf
    crypto$=crypto$+Chr(Res)
  Next n
  ProcedureReturn crypto$
EndProcedure
Debug Cesar(Phrase$,1)
Debug Cesar(Phrase$,7)
Bien sûr il faut que le texte de base soit en majuscule :D
Mais on peut aussi travailler avec des minuscules en changeant la valeur ASCII.
Avatar de l’utilisateur
Ar-S
Messages : 9540
Inscription : dim. 09/oct./2005 16:51
Contact :

Re: [Resolu] Gestion des DIM et décalage

Message par Ar-S »

merci Good007,
C'était mon orientation première de passer par les Asc() et Chr()
ça marche aussi et c'est une méthode de plus (j'aime la prog pour ça)
pour ton histoire de Majuscule, c'est plus simple de les imposer avec un phrase$=Ucase(phrase$), ça évite d'avoir à changer les Valeurs Ascii
~~~~Règles du forum ~~~~
⋅.˳˳.⋅ॱ˙˙ॱ⋅.˳Ar-S ˳.⋅ॱ˙˙ॱ⋅.˳˳.⋅
W11x64 PB 6.x
Section HORS SUJET : ICI
LDV MULTIMEDIA : Dépannage informatique & mes Logiciels PB
UPLOAD D'IMAGES : Uploader des images de vos logiciels
Good07
Messages : 308
Inscription : ven. 23/avr./2004 18:08
Localisation : Hérault 34190 Laroque

Re: [Resolu] Gestion des DIM et décalage

Message par Good07 »

Pas de problème, et effectivement il vaut mieux forcer le texte en majuscule.
Pour améliorer le système il faudrait rajouter une procédure de formatage du texte qui enlève les lettres accentuées et les espaces ainsi que les signes de ponctuation.
Ça évite pas mal de problèmes quand on tape une phrase sans faire trop attention.

Bonne continuation.
Avatar de l’utilisateur
Ar-S
Messages : 9540
Inscription : dim. 09/oct./2005 16:51
Contact :

Re: [Resolu] Gestion des DIM et décalage

Message par Ar-S »

Exacte, pour les accents j'y viendrait, pour les espaces c'est fait.

Voilà ma procédure modifiée avec possibilité de décrypter une phrase en utilisant la valeur négative.
Je reprends l'histoire du ROT13

Code : Tout sélectionner

; procedure CesarIt() par Ar-S / 02/09/2011
; v0.6 Ajout de la fonction décodage si on entre un chiffre négatif
; v0.5 Correctifs mineurs
; v0.4 Ajout du mode 1
;
; procedure originale : Dobro


Global.b cesar

;{- Proce CESARIT
Procedure.s CesarIt(pos,Phrase$,MODE=0)
  ; mode : 0 = decalage normal
  ; mode : 1 = decalage via position
  
  Shared ref2$
  sortie$ = ""
  
  ref$="a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z"
  ref2$="abcdefghijklmnopqrstuvwxyz"
  
  Phrase$=LCase(Phrase$)
  Phrase$=RemoveString(Phrase$," ")
  
  If pos < -26
    ProcedureReturn "Erreur"
    
  ElseIf pos < 0 And pos > -27   
    MODE = 0 ;(on force le MODE 0) 
    pos = pos-(pos*2)
    ; La feinte :)
    ref$=ReverseString(ref$)
    ref2$=ReverseString(ref2$)
  Else
    
    If MODE = 1
      pos-1
    Else 
      pos = pos
    EndIf
    
    decalage = pos
    
    If decalage = 0
      decalage = 1
    ElseIf decalage<1 Or decalage>26
      ProcedureReturn "Erreur"
    EndIf
    
  EndIf
  
  
  For i=1 To Len(Phrase$)
    extrait$=Mid(Phrase$,i,1)
    Position=FindString(ref2$,extrait$,1)
    
    If Position + pos > 26
      Position = (Position + pos) - 26
    Else
      Position + pos
    EndIf 
    
    extrait2$=StringField(ref$,Position,",") 
    sortie$+extrait2$
  Next i
  
  Debug Phrase$+" devient "+sortie$
  
  ProcedureReturn sortie$
  
EndProcedure
;}-

cesar = 13

; Decalage de la phrase de 13 (ROT13)
Phrase$="je suis une carrotte naine"
Debug CesarIt(cesar,Phrase$) ; devient => "wrfhvfharpneebggranvar"

; Décodage du ROT13
Phrase$="wrfhvfharpneebggranvar"
CesarIt(-13,Phrase$)

~~~~Règles du forum ~~~~
⋅.˳˳.⋅ॱ˙˙ॱ⋅.˳Ar-S ˳.⋅ॱ˙˙ॱ⋅.˳˳.⋅
W11x64 PB 6.x
Section HORS SUJET : ICI
LDV MULTIMEDIA : Dépannage informatique & mes Logiciels PB
UPLOAD D'IMAGES : Uploader des images de vos logiciels
Répondre