scilab에서 어떤 조건이 참인지 거짓인지 판별한는데 if 명령이 사용되며 만약 if 문 바로 뒤의 조건문이 참이라면 명령문들을 수행한다. if 문은 반드시 end문과 쌍을 이루어야 한다. 간단한 예를 들면 다음과 같다.
>> if %t thendisp(“True!”)end |
이 예는 if 문 뒤의 진리값이 항상 참이므로 then과 end 사이의 명령이 항상 실행될 것이다. else 문을 이용하면 진리값이 거짓일 경우 수행될 코드를 처리할 수 있다.
>> n=%e;>> if n==%pi thena=1elsea=2end |
위의 조건 검사문은 if문 뒤의 조건이 거짓이므로 변수 a는 2값을 가질 것이다. 또한 elseif 명령을 이용하여 여러 조건 검사를 한꺼번에 수행할 수도 있다.
>> n=2;>> if n==%pi thena=1elseif n==%e thena=2elsea=3end |
위의 예에서 변수 a는 3값을 가지게 될 것이다.
조건검사에 쓰이는 비교 연산자를 다음 표에 정리하였다.
[표 1] 조건 검사에 사용되는 비교/논리연산자
비교연산자
|
설명
|
a==b
|
(비교연산자) 같다
|
a~=b 혹은 a<>b
|
(비교연산자) 다르다
|
a<b
|
(비교연산자) 크다
|
a>b
|
(비교연산자) 작다
|
a<=b
|
(비교연산자) 크거나 같다
|
a>=b
|
(비교연산자) 작거나 같다
|
a & b
|
(논리연산자) and
|
a | b
|
(논리연산자) or
|
~a
|
(논리연산자) not
|
‘같다’를 검사하는 연산자는 == 이며 = 가 아님에 주의해야 한다. 조건식에 대입연산자 =를 사용하면 에러를 발생하게 된다.
대소비교를 하는 <, >, <=. >= 네 개의 연산자는 피연산자로 오직 실수(행렬)만이 허용됨을 유의해야 한다. 복소수는 수학적으로도 대소 관계가 정의되어 있지 않으므로 Scilab에서도 그것이 허용되지 않는다.
>>1+2*%i < 3!--error 144Undefined operation for the given operands.check or define function %s_1_s for overloading. |
단 ==, ~= (혹은 <>) 연산은 허용된다. 복소수의 경우 실수부와 허수부가 모두 같아야 참(%t)이 반환될 것이다.
논리 연산자를 사용할 때 한가지 알아두어야 할 점은 피 연산자가 벡터(행렬)인 경우이다. 다음 예들을 보자.
>> [1 2 3] == 1ans =T F F>>[1 2 3] == [1 2]ans =F>>[1 2;3 4] == [1 2; 3 5]ans =T TT F |
위의 예들에서 보듯이 다음과 같이 정리할 수 있다.
➊ 하나가 스칼라, 다른 하나가 행렬일 경우 스칼라와 행렬의 모든 요소를 비교한다.
➋ 둘 다 행렬이고 크기가 다를 경우 거짓 (%f)가 반환된다.
➌ 둘 다 행렬이고 크기가 같을 경우 같은 위치의 요소끼리 비교한다.
만약 행렬의 상동을 if 문으로 비교할 경우 크기와 모든 요소가 같아야 참으로 간주된다.
>>a=0>>A=[1 2; 3 4]>>B=[1 2;3 5]>>C=[1 2;3 4]>> if A==B then // [T T; T F]a=1;elseif A==C then // [T T;T T]a=2;elsea=3;end |
위의 예에서 변수 a는 2값을 가질 것이다.
댓글 없음:
댓글 쓰기