Problem introducing user input into an array

2 views (last 30 days)
Hey guys, im new to matlab and i have a problem. I have to create a simulator of an RZ signal coding.
I have made the part where the user adds the 1´s and 0´s but when i want to creat a array to assing values to the 1´s and 0´s i just dont ge it why its not working
heres the code
% ask the user
bny = input('Insira o codigo a codificar: ' ,'s');
% Verifyif only 0´s and 1´s
inv_c=regexp(bny,'[a-z_A-Z2-9]');
if(~isempty(inv_c))
disp(['O seu código não é válido: ' bny(inv_c) ' Valores não validos= ' num2str(inv_c)])
else
% its valid
disp(['your code is : ', bny ])
end
for i = 1 : length(bny)
if bny(i) == 1
n(i)=3;
else
n(i)=-3;
end
end
  2 Comments
Walter Roberson
Walter Roberson on 9 Jan 2019
Note: I recommend you change
inv_c=regexp(bny,'[a-z_A-Z2-9]');
to
inv_c = regexp(bny, '[^01]');
for example ';' is not one of the characters you listed and so your checking would permit through ';'.

Sign in to comment.

Accepted Answer

Stephen23
Stephen23 on 9 Jan 2019
Edited: Stephen23 on 9 Jan 2019
Simpler:
bny = input('Insira o codigo a codificar: ' ,'s');
idx = ismember(bny,'01');
assert(all(idx),'Input must contain only 0s and 1s, but it contains %s',bny(~idx))
fprintf('Your code is: %s\n',bny)
V = [-3,3];
n = V(bny-'/')
  3 Comments
Stephen23
Stephen23 on 9 Jan 2019
@António Pereira: I fixed the last line of code and tested it:
Insira o codigo a codificar: 1101101
Your code is: 1101101
n =
3 3 -3 3 3 -3 3
António Pereira
António Pereira on 9 Jan 2019
Thanks a lot!!! Not only it looks nicer as it works nicely

Sign in to comment.

More Answers (1)

Walter Roberson
Walter Roberson on 9 Jan 2019
You are reading in characters. You have
if bny(i) == 1
but this is comparing the character in bny(i) to the number 1. The character is '0' or '1' which are not numeric 0 or 1 -- they are numeric 48 and 49.
You can vectorize your code.
n = 3 * ((bny - '0') * 2 - 1)
or somewhat more obscurely,
n = bny * 6 - 291;
  3 Comments
Walter Roberson
Walter Roberson on 9 Jan 2019
bny is '0' or '1'. When you subtract '0' then you get numeric 0 or 1. Multiply by 2 to get numeric 0 or 2. Subtract one from that to get numeric -1 or +1 . Multiply by 3 to get -3 or +3.
The second form with the 291 is an optimization of the first one. '0' is equal to 48 and 291 is 48*6 - 3 -- i.e., (6 * bny - 6 * '0' - 3) which is the result of expanding 3 * ((bny - '0') * 2 - 1)
António Pereira
António Pereira on 10 Jan 2019
I got it, someone showed me a way to make it work, but thanks anyway for your time

Sign in to comment.

Categories

Find more on Verification, Validation, and Test 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!