How can I make this loop work?

1 回表示 (過去 30 日間)
KAI YIN CHAN
KAI YIN CHAN 2016 年 7 月 18 日
コメント済み: KAI YIN CHAN 2016 年 7 月 18 日
I want to create a function that can translate text input to morse code. But I am suck in the loop. e.g.
>> morserOutputFile('AB')
c =
1
c =
2
morsecode =
.-
Here is the code
function morserOutputFile(text)
Dit = '.';
ssp = ' ';
Dah = '-';
% Defining Characters & Numbers
A = strcat(Dit,ssp,Dah);
B = strcat(Dah,ssp,Dit,ssp,Dit,ssp,Dit);
C = strcat(Dah,ssp,Dit,ssp,Dah,ssp,Dit);
D = strcat(Dah,ssp,Dit,ssp,Dit);
E = strcat(Dit);
F = strcat(Dit,ssp,Dit,ssp,Dah,ssp,Dit);
G = strcat(Dah,ssp,Dah,ssp,Dit);
H = strcat(Dit,ssp,Dit,ssp,Dit,ssp,Dit);
I = strcat(Dit,ssp,Dit);
J = strcat(Dit,ssp,Dah,ssp,Dah,ssp,Dah);
K = strcat(Dah,ssp,Dit,ssp,Dah);
L = strcat(Dit,ssp,Dah,ssp,Dit,ssp,Dit);
M = strcat(Dah,ssp,Dah);
N = strcat(Dah,ssp,Dit);
O = strcat(Dah,ssp,Dah,ssp,Dah);
P = strcat(Dit,ssp,Dah,ssp,Dah,ssp,Dit);
Q = strcat(Dah,ssp,Dah,ssp,Dit,ssp,Dah);
R = strcat(Dit,ssp,Dah,ssp,Dit);
S = strcat(Dit,ssp,Dit,ssp,Dit);
T = strcat(Dah);
U = strcat(Dit,ssp,Dit,ssp,Dah);
V = strcat(Dit,ssp,Dit,ssp,Dit,ssp,Dah);
W = strcat(Dit,ssp,Dah,ssp,Dah);
X = strcat(Dah,ssp,Dit,ssp,Dit,ssp,Dah);
Y = strcat(Dah,ssp,Dit,ssp,Dah,ssp,Dah);
Z = strcat(Dah,ssp,Dah,ssp,Dit,ssp,Dit);
period = strcat(Dit,ssp,Dah,ssp,Dit,ssp,Dah,ssp,Dit,ssp,Dah);
comma = strcat(Dah,ssp,Dah,ssp,Dit,ssp,Dit,ssp,Dah,ssp,Dah);
question = strcat(Dit,ssp,Dit,ssp,Dah,ssp,Dah,ssp,Dit,ssp,Dit);
slash_ = strcat(Dah,ssp,Dit,ssp,Dit,ssp,Dah,ssp,Dit);
n1 = strcat(Dit,ssp,Dah,ssp,Dah,ssp,Dah,ssp,Dah);
n2 = strcat(Dit,ssp,Dit,ssp,Dah,ssp,Dah,ssp,Dah);
n3 = strcat(Dit,ssp,Dit,ssp,Dit,ssp,Dah,ssp,Dah);
n4 = strcat(Dit,ssp,Dit,ssp,Dit,ssp,Dit,ssp,Dah);
n5 = strcat(Dit,ssp,Dit,ssp,Dit,ssp,Dit,ssp,Dit);
n6 = strcat(Dah,ssp,Dit,ssp,Dit,ssp,Dit,ssp,Dit);
n7 = strcat(Dah,ssp,Dah,ssp,Dit,ssp,Dit,ssp,Dit);
n8 = strcat(Dah,ssp,Dah,ssp,Dah,ssp,Dit,ssp,Dit);
n9 = strcat(Dah,ssp,Dah,ssp,Dah,ssp,Dah,ssp,Dit);
n0 = strcat(Dah,ssp,Dah,ssp,Dah,ssp,Dah,ssp,Dah);
text = upper(text);
vars ={'period','comma','question','slash_'};
morsecode='';
a = length(text);
i = length(text);
while a > 0
c=(i-a)+1
switch c
case text(c)=='A'
morsecode = strcat(morsecode,A);
case text(c)=='B'
morsecode = strcat(morsecode,B);
case text(c)=='C'
morsecode = strcat(morsecode,C);
case text(c)=='D'
morsecode = strcat(morsecode,D);
case text(c)=='E'
morsecode = strcat(morsecode,E);
case text(c)=='F'
morsecode = strcat(morsecode,F);
end
a = a-1;
end
display(morsecode);

回答 (1 件)

Walter Roberson
Walter Roberson 2016 年 7 月 18 日
Use an ascending for loop instead of a descending while loop.
Your code could be much more efficient if you used a cell array.
targets = ['A' : 'Z', '.,?/', '0' : '9'];
morse_translations = {A, B, C, D, .... };
[tf, idx] = ismember(text(c), targets);
if tf
this_code = morse_translations{idx};
...
end
  1 件のコメント
KAI YIN CHAN
KAI YIN CHAN 2016 年 7 月 18 日
Thank you so much! Especially for showing how I can make it more efficient.

サインインしてコメントする。

カテゴリ

Help Center および File ExchangeLoops and Conditional Statements についてさらに検索

タグ

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by