2013-03-05 6 views
1

타이머 개체를 사용하는 동안 for 루프에서 조건이 참인 횟수를 계산하는 방법에 대해이 문제가 있습니다. 그래서 나는 60 초마다이 함수를 호출하는 타이머 객체를 설정하고 X와 Z가 1 인 경우 데이터베이스에서 내 조건을 검사 한 다음 무언가를 수행합니다. 문제는 매 초마다 X와 Z의 값을 변경하는 프로그램이 있기 때문에 X와 Z가 모두 1 일 때마다 계산하기를 원합니다. 계수가 1, 2 및 3과 같으면 다르게 수행됩니다. 내가 그것을 실행할 때, X와 Z가 여러 번 1과 같음에도 불구하고 1을 넘지 않는다. 아래는 내 코드입니다MATLAB - 루프 조건이 참일 경우 카운트

a = timer('ExecutionMode', 'fixedRate','TimerFcn', 'func(1)', 'Period', 60); 
start(a); 


function [x] = func(y) 
count = 0; 
if x == y && z == y 
count = count +1; 
if count == 1 
    disp('1') 
elseif count == 2 
    disp('2') 
elseif count == 3 
    disp('3') 
end 
else 
disp('same') 
end 

답변

1

끝으로 첫 번째 if 문을 닫지는 않습니다. 따라서 카운트 == 1 다음과 모든에만 실행되는 경우, X 축 == y를 & & Z는 == y를

if 문 첫 번째 닫고 코드는 작동합니다 :

if x == y && z == y 
    count = count +1; 
end 
if count == 1 
... 

참고도 그 코드를 작성 했으므로 함수를 시작할 때마다 카운트가 0으로 재설정됩니다. 즉 count = count + 1입니다. 항상 count = 0 + 1 = 1;

+0

답장을 보내 주셔서 감사합니다. 예, count = count + 1은 타이머가이 함수를 호출 할 때마다 항상 1과 같습니다. 다음 번에 타이머 콜백 및 조건이 참인 경우 카운트 = 2로 설정하는 방법을 잘 모르겠습니다. – user2134351

+0

대답은 간단합니다. 함수 자체에서 0으로 재설정하지 마십시오. 호출자 함수에 설정하고 func에 매개 변수로 전달하여 매번 func에서 가져옵니다 (예 : function [x, count] = func (y, count)). 그러나 두 방법 중 하나를 사용하면 함수 자체에서 카운트를 0으로 설정하지 마십시오. 매번 카운터를 재설정해야합니다. – Lolo

0

함수에 들어가는 횟수를 계산하려면 카운터 변수를 영구적으로 만들어야합니다. 그렇지 않으면 모든 호출에서 0으로 설정됩니다.

2

귀하의 주요 문제는 count 변수가 함수 - 로컬 범위를 가지므로 함수가 호출 될 때마다 만들어지고 함수가 종료 될 때 파괴됩니다. 함수 호출간에 지속해야합니다.

global count; 
count = 0; 

a = timer('ExecutionMode', 'fixedRate','TimerFcn', 'func(1)', 'Period', 60); 
start(a); 

function func(y) 
global count; 
if x == y && z == y 
    count = count + 1; 
    disp(num2str(count)); 
else 
    disp('same'); 
end 

이 코드는 또한 disp 단일 호출로 다양한 disp 전화를 만든 if 구조를 대체 한 가지 가능성은 세계적인 count 변수를 확인하는 것입니다. 카운트를 인쇄하려는 것이 더 나은 방법입니다.

관련 문제