2013-12-10 3 views
0

Может кто-нибудь скажет мне, почему r в downRight всегда поднимается до 5, когда я сказал, чтобы записать его значение, как только downRight получает значение?Matlab Loop не работает

A = [5,16,18,4,9; 
9,10,14,3,18; 
2,7,9,11,21; 
3,7,2,19,22; 
4,9,10,13,8] 

for r = 1:5 
    normal = strfind(A(r,:), [7,9,11]); 
    if isempty(normal) == 0; 
     rowOfFirstNum = r; 
     columnOfFirstNum = normal; 
    end 
end 
for diags = -5:5 
    downRight = strfind(diag(A,diags)', [10,9,19]); 
    if isempty(downRight) == 0; 
     rowOfFirstNum = downRight(1)+max(-diags,0); 
     columnOfFirstNum = downRight(1)+max(diags,0); 
    end 
    downLeft = strfind(diag(rot90(A),diags)', [11,2,9]); 
    if isempty(downLeft) == 0; 
     rowOfFirstNum = downLeft(1)+max(-diags,0); 
     columnOfFirstNum = downLeft(1)+max(diags,0); 
    end 
end 

г должно быть 2 не 5 для cOfFirstNum в Downright, но это всегда 5 то есть цикл достиг конца прежде, чем это значение было назначено cOfFirstNum, почему это?

+0

Можете ли вы опубликовать фактический код, который вы пытаетесь запустить? Это имеет много ошибок (например, строка 'A = ...' недействительна, и строка, начинающаяся с 'if is empty (downRight) == 0;' также недействительна). –

+0

Изменен, теперь он должен работать. Мне пришлось изменить оригинал. – user3071257

+0

'Неопределенная функция или переменная 'normal'.' – Daniel

ответ

2

В принципе, ваша ошибка состояла в том гнездо обе петли, проверяет внутренние петли для диагоналей и не имеет ничего общего с внешним контуром, который проверяет наличие строк:

A = [5,16,18,4,9; 
    9,10,14,3,18; 
    2,7,9,11,21; 
    3,7,2,19,22; 
    4,9,10,13,8] 

for r = 1:5 
    normal = strfind(A(r,:), [7,9,11]); 
    if isempty(normal) == 0; 
     rowOfFirstNum = r; 
     columnOfFirstNum = normal; 
    end 
end 
for diags = -5:5 
    downRight = strfind(diag(A,diags)', [10,9,19]); 
    if isempty(downRight) == 0; 
     rowOfFirstNum = downRight(1)+max(-diags,0); 
     columnOfFirstNum = downRight(1)+max(diags,0); 
    end 
end 

Пожалуйста, проверьте rowOfFirstNum и columnOfFirstNum, не shure, если мое решение верное.

+0

Что я могу исправить? – user3071257

+0

Попробуйте код из моего ответа. – Daniel

+0

Я думаю, что сейчас работает. Будет ли это работать для downLeft, upRight и upLeft? – user3071257

1

Ваш второй цикл не зависит от г:

for diags = -5:5 
    downRight = strfind(diag(A,diags)', [10,9,19]); 
    if isempty(downRight) == 0; 
     rowOfFirstNum = downRight; 
     columnOfFirstNum = r; 
    end 
end 

Таким образом, вы в основном оценивая, что заявление в пять раз:

downRight = strfind(diag(A,diags)', [10,9,19]); 

и это утверждение верно для каждого «г-петля»

+0

Что я могу исправить? – user3071257

+0

Попробуйте код из ответа @Daniel R. – Olivier