on remplace simplement les caracteres par leur équivalent Morse
ce qui est cool avec ce code, c'est que finalement, on peut mettre ce qu'on veux
on peut se fabriquer un Alphabet Morse maison , seule condition .... ne pas répéter les caracteres
une seule forme de caractere par alphabet
ps: une variante pourrai etre possible en faisant jouer le morse par la carte son
mais ici, c'est le vrais code morse qui est utilisé :
*=son court
-=son long
Code : Tout sélectionner
;***********************************************
;Titre :Morse_codec
;Auteur : Zorro
;Date :03/08/2016
;Heure :15:18:08
;Version Purebasic : PureBasic 5.50 (Windows - x86)
;Version de l'editeur :EPB V2.64
; Libairies necessaire : Aucune
;***********************************************
Declare.s morse(txt.s,mode)
txt.s="rien n'est jamais acquit a l'homme ,ni sa force, ni sa faiblesse"
Debug "la phrase en clair =" +txt.s
mode=1 ; encode
phrase.s=Morse(txt.s,mode)
Debug ""
Debug "la phrase en morse : "+phrase.s
debug ""
mode=0 ; decode
sortie$=Morse(phrase.s,mode)
debug "la phrase decodée :"+sortie$
Procedure.s Morse(txt.s,mode)
;by Zorro
Alphabet_morse.s=" |-----|*----|**---|***--|****-|*****|-****|--***|---**|----*|*-|-***|-*-*|-**|*|**-*|--*|****|**|*---|-*-|*-**|--|-*|---|*--*|--*-|*-*|***|-|**-|***-|*--|-**-|-*--|--**"
Alphabet.s=" |0|1|2|3|4|5|6|7|8|9|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"
txt.s=Lcase(txt.s)
sortie.s="" :res$="":mor$=""
nb=CountString(Alphabet.s,"|")
select mode
Case 1 ; encode
For p=1 to len(txt.s)
car.s=mid(txt.s,p,1)
For p2=1 to nb-1
res$=StringField(Alphabet.s,p2,"|")
if res$=car.s
pos=p2
Break
Else
pos=0
Endif
Next p2
if pos=0
sortie.s=sortie.s+StringField(Alphabet_morse.s,1,"|")+"/"
Else
sortie.s=sortie.s+StringField(Alphabet_morse.s,pos,"|")+"/"
Endif
Next p
Case 0 ;decode
nb=CountString(txt.s,"/")
nb2=CountString(Alphabet_morse.s,"|")
For p=1 to nb
mor$=StringField(txt.s,p,"/")
For p2=1 to nb2-1
res$=StringField(Alphabet_morse.s,p2,"|")
if res$=mor$
pos=p2
Endif
Next p2
sortie.s=sortie.s+StringField(Alphabet.s,pos,"|")
Next p
EndSelect
ProcedureReturn sortie.s
EndProcedure