求助,一道matlab的题目!
1.编写一个程序,读取一句英语短语,并将其编制成莫尔斯码,再用一个程序将莫尔斯码变成英语。莫尔斯码是世界上最著名的编码机制,是1832年由SamuelMorse创立的,用...
1. 编写一个程序,读取一句英语短语,并将其编制成莫尔斯码,再用一个程序将莫尔斯码变成英语。
莫尔斯码是世界上最著名的编码机制,是1832年由Samuel Morse创立的,用于电报系统使用。莫尔斯码编码规则如下:①字母、数字和一些特殊符号(如圆点、逗号、分号)用一系列指定的点和线表示;②单词之间用三个空格分开,没有点和线;③编码字母之间用一个空格。
字符/数字 代码 字符/数字 代码 字符/数字 代码
A .- M ―― Y -.――
B -... N -. Z ――..
C -.-. O ――― 1 .――――
D -.. P .――. 2 ..―――
E . Q ――.- 3 ...――
F ..-. R .-. 4 ....-
G ――. S ... 5 .....
H .... T - 6 -....
I .. U ..- 7 ――...
J .――― V ...- 8 ―――..
K -.- W .―― 9 ――――.
L .-.. X -..- 0 ――――― 展开
莫尔斯码是世界上最著名的编码机制,是1832年由Samuel Morse创立的,用于电报系统使用。莫尔斯码编码规则如下:①字母、数字和一些特殊符号(如圆点、逗号、分号)用一系列指定的点和线表示;②单词之间用三个空格分开,没有点和线;③编码字母之间用一个空格。
字符/数字 代码 字符/数字 代码 字符/数字 代码
A .- M ―― Y -.――
B -... N -. Z ――..
C -.-. O ――― 1 .――――
D -.. P .――. 2 ..―――
E . Q ――.- 3 ...――
F ..-. R .-. 4 ....-
G ――. S ... 5 .....
H .... T - 6 -....
I .. U ..- 7 ――...
J .――― V ...- 8 ―――..
K -.- W .―― 9 ――――.
L .-.. X -..- 0 ――――― 展开
2个回答
展开全部
用法:
morsecode=morse('matlabsky baidu wacs5',0) %编码
srccode=morse(morsecode,1) %解码
morsecode(2)='.'; %修改码
srccode=morse(morsecode,1) %错误的morse码进行解码
=============以下是m文件==========
function Dst=morse(Src,Flag)
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%Author : wacs5
%%Email : wacs5@126.com
%%Date : 20101031
%%Function : morse(莫斯密码)编码和解码
%%Argument : Src为待编码/解码的字符串
%% : Flag=0为编码,Flag=1为解码
%%Return : Dst为完成的编码/解码的字符串
%%Called Mtb : disp,find,isempty,isequal,length,nargin,strrep,warning
%%Example:
%% : morsecode=morse('matlabsky baidu wacs5',0)
%% : srccode=morse(morsecode,1)
%% : morsecode(2)='.'; srccode=morse(morsecode,1) %错误的morse码
%%See also : http://www.matlabsky.com
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
if nargin==1
Flag=0; %缺省为编码
end
Dst=[];
SrcAlpha=['A':'Z','1':'9','0']; %原始字母
EncAlpha={'.-','-...','-.-.','-..','.','..-.','――.','....','..','.―――','-.-','.-..','――','-.','―――','.――.','――.-','.-.','...','-','..-','...-','.――','-..-','-.――','――..','.――――','..―――','...――','....-','.....','-....','――...','―――..','――――.','―――――'}; %相应的morse码
if Flag==0
disp('Encoding'); %编码
for i=1:length(Src)
if Src(i)>='a' && Src(i)<='z' %小写转大写
Src(i)=Src(i)-32;
end
index=find(SrcAlpha==Src(i)); %查找待编码字母在SrcAlpha中的位置
if isempty(index) %不在字典中
Dst=[Dst,' ']; %两个空格。因为字母后面已经有一空格
else
Dst=[Dst,EncAlpha{index},' ']; %每个morse码后加一空格
end
end
else
disp('Decoding'); %解码
if Src(end)~=' ' %最后一个不是空格,添加一个空格,仅为了方便编程
Src(end+1)=' ';
end
SpaceIndex=find(Src==' '); %找出所有空格位置
SpaceIndex=[0,SpaceIndex]; %将0加入,也仅仅是为了方便编程
for i=1:length(SpaceIndex)-1
Code=Src(SpaceIndex(i)+1:SpaceIndex(i+1)-1);%获得morse密文
if isempty(Code) %连续两个空格
Dst=[Dst,' ']; %译文也为空格
else
found=0; %是否在morse编码字典中存在
for j=1:length(EncAlpha)
if (isequal(EncAlpha{j},Code)) %在morse编码字典中找到
found=1;
break;
end
end
if found==0 %morse编码字典中没有找到,有误
Dst=[Dst,'*'];
warning(['Input Code frag "',Code,'" wrong']);
else
Dst=[Dst,SrcAlpha(j)]; %相应的原文
end
end
end
Dst=strrep(Dst,' ',' '); %多空格合为一个空格
end
morsecode=morse('matlabsky baidu wacs5',0) %编码
srccode=morse(morsecode,1) %解码
morsecode(2)='.'; %修改码
srccode=morse(morsecode,1) %错误的morse码进行解码
=============以下是m文件==========
function Dst=morse(Src,Flag)
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%Author : wacs5
%%Email : wacs5@126.com
%%Date : 20101031
%%Function : morse(莫斯密码)编码和解码
%%Argument : Src为待编码/解码的字符串
%% : Flag=0为编码,Flag=1为解码
%%Return : Dst为完成的编码/解码的字符串
%%Called Mtb : disp,find,isempty,isequal,length,nargin,strrep,warning
%%Example:
%% : morsecode=morse('matlabsky baidu wacs5',0)
%% : srccode=morse(morsecode,1)
%% : morsecode(2)='.'; srccode=morse(morsecode,1) %错误的morse码
%%See also : http://www.matlabsky.com
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
if nargin==1
Flag=0; %缺省为编码
end
Dst=[];
SrcAlpha=['A':'Z','1':'9','0']; %原始字母
EncAlpha={'.-','-...','-.-.','-..','.','..-.','――.','....','..','.―――','-.-','.-..','――','-.','―――','.――.','――.-','.-.','...','-','..-','...-','.――','-..-','-.――','――..','.――――','..―――','...――','....-','.....','-....','――...','―――..','――――.','―――――'}; %相应的morse码
if Flag==0
disp('Encoding'); %编码
for i=1:length(Src)
if Src(i)>='a' && Src(i)<='z' %小写转大写
Src(i)=Src(i)-32;
end
index=find(SrcAlpha==Src(i)); %查找待编码字母在SrcAlpha中的位置
if isempty(index) %不在字典中
Dst=[Dst,' ']; %两个空格。因为字母后面已经有一空格
else
Dst=[Dst,EncAlpha{index},' ']; %每个morse码后加一空格
end
end
else
disp('Decoding'); %解码
if Src(end)~=' ' %最后一个不是空格,添加一个空格,仅为了方便编程
Src(end+1)=' ';
end
SpaceIndex=find(Src==' '); %找出所有空格位置
SpaceIndex=[0,SpaceIndex]; %将0加入,也仅仅是为了方便编程
for i=1:length(SpaceIndex)-1
Code=Src(SpaceIndex(i)+1:SpaceIndex(i+1)-1);%获得morse密文
if isempty(Code) %连续两个空格
Dst=[Dst,' ']; %译文也为空格
else
found=0; %是否在morse编码字典中存在
for j=1:length(EncAlpha)
if (isequal(EncAlpha{j},Code)) %在morse编码字典中找到
found=1;
break;
end
end
if found==0 %morse编码字典中没有找到,有误
Dst=[Dst,'*'];
warning(['Input Code frag "',Code,'" wrong']);
else
Dst=[Dst,SrcAlpha(j)]; %相应的原文
end
end
end
Dst=strrep(Dst,' ',' '); %多空格合为一个空格
end
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询