Error check if statement

조회 수: 3 (최근 30일)
Nicholas Salce
Nicholas Salce 2016년 9월 15일
답변: Walter Roberson 2016년 9월 15일
Hi all,
I am trying to create a program to calculate resistor values from the colour code. The calculations work but I tried to input an error checking step to ensure that only valid colours are input by the user. For some reason it dosen't work as I expected. I have defined the values of the resistors at the beginning as individual variables then tried to create an if statement that would check that only a valid colour is input later on. Can anyone see where I went wrong??
Thanks
black = 0;
brown = 1;
red = 2;
orange = 3;
yellow = 4;
green = 5;
blue = 6;
violet = 7;
grey = 8;
white = 9;
gold = 5;
silver = 10;
%Request number of bands on the resistor from User
x=input('No of bands = ');
% If 4 BAND resistor use following code block
if x==4
%Input colours of each band of the resistor
k = input('band 1 colour = ');
l = input('band 2 colour = ');
m = input('band 3 colour = ');
n = input('band 4 colour = ');
if k ~= black||brown||red||orange||yellow||green||blue||violet||grey||white
disp('Incorrect Colour for Band 1')
elseif l ~= black||brown||red||orange||yellow||green||blue||violet||grey||white
disp('Incorrect Colour for Band 2')
elseif m ~= black||brown||red||orange||yellow||green||blue||violet||grey||white||gold||silver
disp('Incorrect Colour for Band 3')
elseif n ~= brown||red||gold||silver
disp('Incorrect Colour for Band 4')
else
end
o = k*10 + l;
p = o * 10^m;
disp ('resistor value (ohms) = '); disp(p);
if n == red||brown||gold||silver
disp('tolerence (+/-) % = '); disp(n);
else
disp('incorrect input')
end

답변 (2개)

Star Strider
Star Strider 2016년 9월 15일
I would replace your tests with this ‘test’ function and calls to it.
Example:
test = @(k) ismember(k,{'black','brown','red','orange','yellow','green','blue','violet','grey','white'});
k = 'red'
Out1 = test(k)
k = 'indigo'
Out2 = test(k)
k =
red
Out1 =
1
k =
indigo
Out2 =
0
That should also make your code more efficient.

Walter Roberson
Walter Roberson 2016년 9월 15일
k ~= black||brown||red||orange||yellow||green||blue||violet||grey||white
means the same thing as
(k ~= black) || (brown ~= 0) || (red ~= 0) || (orange ~= 0) || (yellow ~= 0) || (green ~= 0) || (blue ~= 0) || (violet ~= 0) || (grey ~= 0) || (white ~= 0)
which is of course always true since brown ~= 0
I have been unsuccessful in finding any computer languages which "distribute" relational operators in the way you thought MATLAB worked, so I have yet to figure out where people are picking up the idea that it could work.
I suggest that you consider using ismember()

카테고리

Help CenterFile Exchange에서 Blue에 대해 자세히 알아보기

Community Treasure Hunt

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

Start Hunting!

Translated by