커뮤니티
IF중첩
2003-07-16 00:00:00
1905
글번호 402
반갑습니다
결과값이 1~4까지 골고루 나오기를 원합니다.
문법오류라고 나옵니다.
var:A(0);
IF C>O THEN
{IF C<H THEN
{A=1;
IF C=H THEN
{A=2;
IF L=O THEN
{A=3;}}}}
ELSE A=4;
plot1(A);
답변 3
리서치팀 예스스탁 답변
2003-07-17 00:00:00
안녕하세요..예스스탁입니다.
다음과 같이 작성할 경우는 1또는 4의 값만 출력합니다.
이유는 C > O 의 조건을 만족하는 경우만 블럭1의 내용을 실행하게 되고, C < H의 조건에 만족할 경우만 블럭2의 조건을 실행하게 됩니다. 따라서 C==H일 경우는 블럭2 시작 이전에 맨아래 ELSE조건으로 빠져나가게 됩니다.
var:A(0);
IF C>O THEN { // 블럭1 시작
IF C<H THEN { // 블럭2 시작
A=1;
IF C==H THEN {
A=2;
IF L==O THEN {
A=3;
}
}
} // 블럭2 끝
} // 블럭1 끝
ELSE A=4;
plot1(A);
따라서 1,2,3,4가 각각 나오도록 하기 위해서는 다음과 같이 작성해야 됩니다.
var:A(0);
IF C>O THEN {
IF C<H THEN //조건1
A=1;
Else IF C==H THEN //조건2
A=2;
Else IF L==O THEN // 조건3
A=3;
}
ELSE
A=4;
plot1(A);
그러나 이 식에서도 3의 결과는 출력되지 않습니다.
이유는 L==O를 연산하기 위해서는 직전 두개의 if문의 조건을 만족하지 않아야 하는데, 모든 봉에서 C < H 또는 C==H의 조건을 만족하기 때문에 이 이외의 경우는 있지 않기 때문입니다.
즉, 조건2가 수행되기 위해서는 조건1에 만족하지 않아야 하고, 조건3이 수행되기 위해서는 조건1 과 조건2의 조건을 만족하지 않는 경우라야 합니다.
또다른 방법으로 작성해보면 다음과 같이 작성할 수 있는데, 결과는 위와 다릅니다.
var:A(0);
IF C>O THEN {
IF C<H THEN //조건1
A=1;
IF C==H THEN //조건2
A=2;
IF L==O THEN // 조건3
A=3;
}
ELSE
A=4;
plot1(A);
식에서는 C > O의 조건을 만족하게 되면 블럭문을 실행하게 되는데, 조건1에 만족하면 a에 1을 저장하고, 조건2에 만족하면 a에 2를 저장하고, 조건3에 만족하면 a에 3을 저장하게 됩니다. 조건1과 조건2를 동시에 만족한다면 최종 출력되는 결과는 나중에 연산된 조건2의 결과값(2)이 출력되게 됩니다. 위 두번째 식과 비교해 본다면 두번째 식에서는 조건2가 수행되기 위한 조건으로 조건1에 만족하지 않아야 하지만, 이 식에서는 C > O 의 조건에 만족하면 조건1 , 조건2, 조건3이 순차로 실행됩니다. 다만, 최종적인 결과값은 제일 마지막으로 조건을 만족시킨 때의 저장값을 출력시키게 됩니다.
즐거운 하루 되세요..
> 검은펜 님이 쓴 글입니다.
> 제목 : IF중첩
> 반갑습니다
> 결과값이 1~4까지 골고루 나오기를 원합니다.
> 문법오류라고 나옵니다.
>
> var:A(0);
>
> IF C>O THEN
> {IF C<H THEN
> {A=1;
> IF C=H THEN
> {A=2;
> IF L=O THEN
> {A=3;}}}}
> ELSE A=4;
>
> plot1(A);
대박의추억 예스스탁 답변
2003-07-16 00:00:00
Var: A(0)
if( C > O ) then {
if( C < H ) then {
A = 1;
if( C == H ) then {
A = 2;
if( L == O ) then {
A = 3;
}
}
}
}
else
{
A = 4;
}
plot( A );
이렇게 하면 중괄로 빠트리는 것도 좀 줄일수 있고 나중에 알아보기도 좀 편할것 같네요
이렇게 if 문을 중첩해서 사용할 경우 들여쓰기를 해 주는 것이 나중에 알아보기가 좋을
것 같네요 ...
위식에서는 A=2, A=3 의 경우는 나올수가 없습니다.
=====================================================================
> var:A(0);
>
> IF C>O THEN
> {IF C<H THEN
> {A=1;
> IF C=H THEN
> {A=2;
> IF L=O THEN
> {A=3;}}}}
> ELSE A=4;
>
> plot1(A);
선물투자
2003-07-16 00:00:00
비교를 할때는 "=" 가 아니라 "=="이걸로 쓰시면 에러가 안날듯..^^
> 검은펜 님이 쓴 글입니다.
> 제목 : IF중첩
> 반갑습니다
> 결과값이 1~4까지 골고루 나오기를 원합니다.
> 문법오류라고 나옵니다.
>
> var:A(0);
>
> IF C>O THEN
> {IF C<H THEN
> {A=1;
> IF C=H THEN
> {A=2;
> IF L=O THEN
> {A=3;}}}}
> ELSE A=4;
>
> plot1(A);