开发者

MATLAB: If Statement inside loop is not executing, nor printing to the screen

So, we are trying to execute the following code. The two if statements are executing, however, the inside if statements are failing to execute (we verified this by not suppressing the output). Is there a reason why? Or are we just not able to reach this state?

Specifications

The input is as follows: v is a vector of int values and c is a integer. c must be less than or equal to one of the values within v

The problem that we are trying to solve with this algorithm is as follows:

Given a cash register, how does one make change such that the fewest coins possible are returned to the customer?

Ex: Input: v = [1, 10, 25, 50], c = 40. Output O = [5, 1, 1, 0]

We are just looking for not a better solution but more of a reason why that portion of the code is not executing.

function O = changeGreedy(v,c)
  O = zeros(size(v,1), size(v,2));
  for v_item = 1:size(v,2)
         %locate largest term
         l_v_item = 1
         for temp = 2:size(v,2)
            if v(l_v_item) < v(temp)
                l_v_item = temp
            end    
         end    

    %"Items inside if statement are not executing"
    if (c > v(l_v_item))
        v(l_v_item) = -1 %"Not executing"
    else
        O(l_v_item) = idivide(c, v(l_v_item)) %"Not开发者_高级运维 executing"
        c = mod(c, v(l_v_item)) %"Not executing"
    end      
end


If c or v are not integers, i.e. class(c) evaluates to double, then I get the following error message

??? Error using ==> idivide>idivide_check at 66
At least one argument must belong to an integer class.

Error in ==> idivide at 42
idivide_check(a,b);

and the program stops executing. Thus, the inside of the second statement never executes. In contrast, if, say, c is an integer, for example of class uint8, everything executes just fine.

Also: what are you actually trying to achieve with this code?


Try to do this operation on your input data:

v = int32([1, 10, 25, 50]), c = int32(40)

and run again, at least some portions of your code will execute. There is an error raised by idivide, which apparently you missed:

??? Error using ==> idivide>idivide_check at 67
At least one argument must belong to an integer class.

Error in ==> idivide at 42
idivide_check(a,b);

Indeed, idivide seems to require that you have actual integer input data (that is, class(c) and class(v) both evaluate to an integer type, such as int32).

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜