Procedure Code Morse

Partagez votre expérience de PureBasic avec les autres utilisateurs.
Avatar de l’utilisateur
Zorro
Messages : 2185
Inscription : mar. 31/mai/2016 9:06

Procedure Code Morse

Message par Zorro »

allez encore une autre pour la route :)

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
Image
Image
Site: http://michel.dobro.free.fr/
Devise :"dis moi ce dont tu as besoin, je t'expliquerai comment t'en passer"