커뮤니티
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;
}
이렇게 하면 무한루프에 빠지면서 에러가 납니다. 아무리 생각해봐도 뭐가 문젠지 모르겠네요;;;
이전글