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 Center および File ExchangeBlue についてさらに検索

Community Treasure Hunt

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

Start Hunting!

Translated by