1. Not finding help here? Sign up for a free 30min tutor trial with Chegg Tutors
    Dismiss Notice
Dismiss Notice
Join Physics Forums Today!
The friendliest, high quality science and math community on the planet! Everyone who loves science is here!

Conditional operations MATLAB

  1. Jun 19, 2014 #1

    Maylis

    User Avatar
    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 (Text):
    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 (Text):
    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: Jun 19, 2014
  2. jcsd
  3. Jun 21, 2014 #2

    jedishrfu

    Staff: 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 (Text):

     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

     
     
  4. Jun 21, 2014 #3

    Maylis

    User Avatar
    Gold Member

    The problem was this statement
    Code (Text):
    if ndims(uiVal)~= 2 | size(uiVal) ~= [1,4]
    it was changed to

    Code (Text):
    if ndims(uiVal)~= 2 | isequal(size(uiVal), [1,4])
     
Know someone interested in this topic? Share this thread via Reddit, Google+, Twitter, or Facebook

Have something to add?
Draft saved Draft deleted



Similar Discussions: Conditional operations MATLAB
  1. Conditional Operators (Replies: 7)

Loading...