2015년 7월 18일 토요일

싸이랩(scialb)의 조건 검사 if ~ elseif ~ else ~ end

 scilab에서 어떤 조건이 참인지 거짓인지 판별한는데 if 명령이 사용되며 만약 if 문 바로 뒤의 조건문이 참이라면 명령문들을 수행한다. if 문은 반드시 end문과 쌍을 이루어야 한다. 간단한 예를 들면 다음과 같다.

>> if %t then
     disp(“True!”)
  end

이 예는 if 문 뒤의 진리값이 항상 참이므로 then과 end 사이의 명령이 항상 실행될 것이다. else 문을 이용하면 진리값이 거짓일 경우 수행될 코드를 처리할 수 있다.

>> n=%e;
>> if n==%pi then
       a=1
   else
       a=2
   end

위의 조건 검사문은 if문 뒤의 조건이 거짓이므로 변수 a는 2값을 가질 것이다. 또한 elseif 명령을 이용하여 여러 조건 검사를 한꺼번에 수행할 수도 있다.

>> n=2;
>> if n==%pi then
     a=1
  elseif n==%e then
     a=2
  else
     a=3
  end

위의 예에서 변수 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 144
Undefined operation for the given operands.
check or define function %s_1_s for overloading.
단 ==, ~= (혹은 <>) 연산은 허용된다. 복소수의 경우 실수부와 허수부가 모두 같아야 참(%t)이 반환될 것이다.

 논리 연산자를 사용할 때 한가지 알아두어야 할 점은 피 연산자가 벡터(행렬)인 경우이다. 다음 예들을 보자.

>> [1 2 3] == 1
ans  =
 T F F  

>>[1 2 3] == [1 2]
ans  =
 F  

>>[1 2;3 4] == [1 2; 3 5]
ans  =
 T T  
 T 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;
  else
     a=3;
  end

위의 예에서 변수 a는 2값을 가질 것이다.


댓글 없음:

댓글 쓰기