MATLAB: если Statement внутри цикла не выполняется и не выводит на экран - PullRequest
0 голосов
/ 02 марта 2011

Итак, мы пытаемся выполнить следующий код.Однако два оператора if выполняются, но внутренние операторы if не выполняются (мы убедились в этом, не подавляя вывод).Есть ли причина, почему?Или мы просто не в состоянии достичь этого состояния?

Технические характеристики

Входные данные выглядят следующим образом: v - вектор значений int, а c - целое число.c должно быть меньше или равно одному из значений в v

Проблема, которую мы пытаемся решить с помощью этого алгоритма, следующая:

Учитывая кассовый аппарат, какможно ли сделать такое изменение, чтобы клиенту было возвращено наименьшее количество монет?

Пример: вход: v = [1, 10, 25, 50], c = 40. Выход O = [5, 1,1, 0]

Мы просто ищем не лучшее решение, а скорее причину, по которой эта часть кода не выполняется.

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

Ответы [ 2 ]

1 голос
/ 02 марта 2011

Если c или v не являются целыми числами, т.е. class(c) оценивается как double, то я получаю следующее сообщение об ошибке

??? 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);

и программа прекращает выполнение. Таким образом, внутренняя часть второго оператора никогда не выполняется. Напротив, если, скажем, c является целым числом, например, класса uint8, все выполняется просто отлично.

Также: чего вы на самом деле пытаетесь достичь с помощью этого кода?

0 голосов
/ 02 марта 2011

Попробуйте выполнить эту операцию с вашими входными данными:

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

и запустите снова, по крайней мере, некоторые части вашего кода будут выполнены.idivide возникла ошибка, которую, по-видимому, вы пропустили:

??? 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);

Действительно, idivide, похоже, требует, чтобы у вас было фактических целочисленных входных данных (то есть class(c) и class(v) оба оцениваются как целочисленный тип, такой как int32).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...