How can I make this loop work?
1 view (last 30 days)
Show older comments
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);
0 Comments
Answers (1)
Walter Roberson
on 18 Jul 2016
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
See Also
Categories
Find more on Loops and Conditional Statements in Help Center and File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!