# Conditional operations MATLAB

#### Maylis

Gold Member
1. The problem statement, all variables and given/known data

Often times, a program accepts input from a user, and needs to check the validity of the input, and
then produce useful and informative error messages if the input is invalid. Suppose that uiVal is a
variable representing the user's input, and that errorCode is an 1-by-0 empty array. Write Matlab
code that appends to errorCode various identifying integers depending on certain conditions as
follows:

1, if uiVal is not a numeric, real-valued array
2, if uiVal is not all integer valued. Note that if uiVal is not numeric, real-valued (as is
checked in the rst item) then this condition should not be checked, since it may produce
an error.
3, if any values of uiVal are less than 1 or greater than 6. Note that if uiVal is not numeric,
real-valued (as is checked in the rst item) then this condition should not be checked, since
it may produce an error.
4, if uiVal is not 2-dimensional (use command ndims) or it's size is not equal to 1-by-4.

2. Relevant equations

3. The attempt at a solution
Right now my code is getting 4/7, I can't figure out what is wrong. Everything seems fine in the code, but when I run uiVal = @sign it gives errorCode = [1 1]

Code:
errorCode = zeros(1,0);
if ~(isnumeric(uiVal) && isreal(uiVal))
errorCode = [errorCode, 1];
else
if (uiVal ~= round(uiVal))
errorCode = [errorCode, 2];
end
if (any(uiVal < 1) | any(uiVal > 6))
errorCode = [errorCode, 3];
end
end
if ndims(uiVal)~= 2 | size(uiVal) ~= [1,4]
errorCode = [errorCode, 4];
end
Code:
Problem 3: 4/7
*the value of errorCode is incorrect for the variables: uiVal = '[1 2 3 4]';
The size of your variable is not as expected
*the value of errorCode is incorrect for the variables: uiVal = [1 2 3 4 5];
The size of your variable is not as expected
*the value of errorCode is incorrect for the variables: uiVal = @sign;
The size of your variable is not as expected

Last edited:
Related Engineering and Comp. Sci. Homework News on Phys.org

#### jedishrfu

Mentor
Im not sure whats causing your problem but you need to properly indent your code for clarity.

The if ndims... statement block should be outdented tight?

I ran it on Freemat and it seemed to work so here's the console printout. I didn't try all cases:

Code:
FreeMat v4.0
Copyright (c) 2002-2008 by Samit Basu
Type <help license> to find out more
<pathtool> to set or change your path
Use <dbauto on/off> to control stop-on-error behavior
Use ctrl-b to stop execution of a function/script
Use <rootpath gui> to set/change where the FreeMat toolbox is installed
--> errorCode = zeros(1,0);
if ~(isnumeric(uiVal) && isreal(uiVal))
errorCode = [errorCode, 1];
else
if (uiVal ~= round(uiVal))
errorCode = [errorCode, 2];
end
if (any(uiVal < 1) | any(uiVal > 6))    errorCode = [errorCode, 3];
end
end
if ndims(uiVal)~= 2 | size(uiVal) ~= [1,4]
errorCode = [errorCode, 4];
-->     endError: Undefined function or variable uiVal
-->     end
Error: Undefined function or variable uiVal
--> uiVal=[1,2,3,4]
uiVal =
1 2 3 4
--> errorCode = zeros(1,0);
if ~(isnumeric(uiVal) && isreal(uiVal))
errorCode = [errorCode, 1];
else
if (uiVal ~= round(uiVal))
errorCode = [errorCode, 2];
end
if (any(uiVal < 1) | any(uiVal > 6))    errorCode = [errorCode, 3];
end
end
if ndims(uiVal)~= 2 | size(uiVal) ~= [1,4]
errorCode = [errorCode, 4];
-->     end
--> print errorCode
--> errorCode
ans =
Empty array 1 0
--> uiVal=[ 12.3, 14, 15.6 16]
uiVal =
Columns 1 to 3
12.3000   14.0000   15.6000
Columns 4 to 4
16.0000
--> errorCode = zeros(1,0);
if ~(isnumeric(uiVal) && isreal(uiVal))
errorCode = [errorCode, 1];
else
if (uiVal ~= round(uiVal))
errorCode = [errorCode, 2];
end
if (any(uiVal < 1) | any(uiVal > 6))    errorCode = [errorCode, 3];
end
end
if ndims(uiVal)~= 2 | size(uiVal) ~= [1,4]
errorCode = [errorCode, 4];
-->     end
--> errorCode
ans =
2 3
--> uiVal=['a','b','c','d']
uiVal =
abcd
--> errorCode = zeros(1,0);
if ~(isnumeric(uiVal) && isreal(uiVal))
errorCode = [errorCode, 1];
else
if (uiVal ~= round(uiVal))
errorCode = [errorCode, 2];
end
if (any(uiVal < 1) | any(uiVal > 6))
errorCode = [errorCode, 3];
end
end
if ndims(uiVal)~= 2 | size(uiVal) ~= [1,4]
errorCode = [errorCode, 4];
-->     end
--> errorCode
ans =
1

#### Maylis

Gold Member
Code:
if ndims(uiVal)~= 2 | size(uiVal) ~= [1,4]
it was changed to

Code:
if ndims(uiVal)~= 2 | isequal(size(uiVal), [1,4])

"Conditional operations MATLAB"

### Physics Forums Values

We Value Quality
• Topics based on mainstream science
• Proper English grammar and spelling
We Value Civility
• Positive and compassionate attitudes
• Patience while debating
We Value Productivity
• Disciplined to remain on-topic
• Recognition of own weaknesses
• Solo and co-op problem solving