當前位置:成語大全網 - 新華字典 - 求助,壹道matlab的題目!

求助,壹道matlab的題目!

用法:

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 :

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

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