• Support PF! Buy your school textbooks, materials and every day products via PF Here!

Conditional operations MATLAB

  • Thread starter Maylis
  • Start date

Maylis

Gold Member
945
49
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
This is the autograder remarks:
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:
10,585
4,114
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
 Licensed under the GNU Public License (GPL)
 Type <help license> to find out more
      <helpwin> for online help
      <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
945
49
The problem was this statement
Code:
if ndims(uiVal)~= 2 | size(uiVal) ~= [1,4]
it was changed to

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

Want to reply to this thread?

"Conditional operations MATLAB" You must log in or register to reply here.

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
Top