커뮤니티

for문 while문 문의

프로필 이미지
미니후니아빠
2018-04-24 05:47:10
123
글번호 118403
답변완료
start를 0 값으로 초기화 하고 조건문에서 최초로 만족할 값을 가질 경우 start에 i값을 넣기 start=0; for i=0 to 500 { trix_grad[i]=(trix_v[i]-trix_v[i+1]); if trix_grad[i] > 0 and trix_grad[i+1] <= 0 and start==0 Then { start=i; } } 이렇게 할 경우 문제는 없는데 for문 연산을 너무 많이 하기 때문에 while문으로 바꿔봤습니다. while start==0 { trix_grad[i]=(trix_v[i]-trix_v[i+1]); if trix_grad[i] > 0 and trix_grad[i+1] <= 0 Then { start=i; } i=i+1; } 이렇게 하면 무한루프에 빠지면서 에러가 납니다. 아무리 생각해봐도 뭐가 문젠지 모르겠네요;;;
지표
답변 1
프로필 이미지

예스스탁 예스스탁 답변

2018-04-25 10:02:39

안녕하세요 예스스탁입니다. 1 while start==0 { trix_grad[i]=(trix_v[i]-trix_v[i+1]); if trix_grad[i] > 0 and trix_grad[i+1] <= 0 Then { start = i; } i=i+1; } 위 내용은 차트의 첫봉에서 무한루프를 걸리게 됩니다. 차트의 첫봉을 기준으로 보시면 trix값이 없고 이전봉의 값도 없습니다. i가 0부터 1씩 증가하는데 루프를 계속 돌아도 항상 trix_grad[i]값은 N/A(계산할수 없는 구간)이므로 무한으로 수행됩니다. 값이 N/A이면 빠져나가게 하는 내용이 필요합니다. for문에서는 단지 횟수가 제한때문에 500회 후 빠져나온것일 뿐입니다. 2 아래수식과 같이 값이 N/A(계산할수 없는 구간)이면 빠져나올수 있는 내용이 필요합니다. var : trix_v(0),start(0),i(0); Array : trix_grad[501](0); trix_v = trix(10); i = 0; start = 0; while start==0 { trix_grad[i]=(trix_v[i]-trix_v[i+1]); if IsNaN(trix_grad[i]) == false then { if trix_grad[i] > 0 and trix_grad[i+1] <= 0 Then { start = i; } } else Start = -1; i=i+1; } plot1(start); 3 if trix_grad[i] > 0 and trix_grad[i+1] <= 0 then 위 내용은 살펴봐 주시기 바랍니다. 구현하고자 하시는 내용에 대해 정확히 파악되지 않아 정확하지는 않치만 잘못 작성된 내용인것 같습니다 수식이 루프 i에서 trix_grad[i]만 계산하게 되어 있는데 아직 계산하지 않은 다음루프에서 알수 있는 trix_grad[i+1]을 조건으로 사용합니다. 즐거운 하루되세요 > 미니후니아빠 님이 쓴 글입니다. > 제목 : for문 while문 문의 > start를 0 값으로 초기화 하고 조건문에서 최초로 만족할 값을 가질 경우 start에 i값을 넣기 start=0; for i=0 to 500 { trix_grad[i]=(trix_v[i]-trix_v[i+1]); if trix_grad[i] > 0 and trix_grad[i+1] <= 0 and start==0 Then { start=i; } } 이렇게 할 경우 문제는 없는데 for문 연산을 너무 많이 하기 때문에 while문으로 바꿔봤습니다. while start==0 { trix_grad[i]=(trix_v[i]-trix_v[i+1]); if trix_grad[i] > 0 and trix_grad[i+1] <= 0 Then { start=i; } i=i+1; } 이렇게 하면 무한루프에 빠지면서 에러가 납니다. 아무리 생각해봐도 뭐가 문젠지 모르겠네요;;;