TearDitch

[너Do 나Do MATLAB]#5 제어흐름(Control Flow), 조건문(Conditional Statements)/루프 제어문(Loop Control Statements) 사용 본문

MATLAB

[너Do 나Do MATLAB]#5 제어흐름(Control Flow), 조건문(Conditional Statements)/루프 제어문(Loop Control Statements) 사용

TearDitch 2018. 2. 3. 20:53

지난 시간에는 MATLAB(매트랩)의 논리연산(Logical Operatioin)에 대해서 살펴보았는데요. [#4 논리연산자와 논리연산] 오늘은 이것을 활용한 제어흐름(Control Flow)을 배워보겠습니다.

 

제어흐름(Control Flow)은 크게 보면 조건문(Conditional Statements)루프 제어문(Loop Control Statements)으로 나뉘어 집니다. 조건문이란 예를들어 'A라는 조건이 만족되면 B를 수행해라'와 같은 것입니다. 루프 제어문은 특정한 조건이 되기까지 어떤 연산을 반복하는 형태를 의미합니다. 이런 제어흐름을 사용하는 이유는 복잡한 연산을 단순한 논리적 형태로 분할하여 수행할 수 있도록 하기 위한 것입니다. 이런 제어흐름에 딸린 조건들에 지난 시간에 살펴본 논리연산이 사용됩니다. 제어흐름에 사용되는 구문은 아래와 같습니다.

 

 

 조건문 (Conditional Statements)

 사용

 1

 if, elseif, else

 만약(if) 조건이(Coditions) 참이면, 명령문(Statements)를 실행

 2

 switch, case, otherwise

 여러 명령문(Statements)의 그룹(case) 중 하나를 실행

 3

 try, catch

 명령문(Statements)을 실행하고 에러를 잡음

 

 루프 제어문 (Loop Control Statements)

 사용

 1

 for

 지정된 회수만큼 for 문을 반복

 2

 while

 조건이 참일 때 while 문을 반복

 

그러면 위에서 언급한 제어흐름을 예시를 통해서 살펴보도록 하겠습니다. 먼저 if, elseif, else의 사용법부터 보겠습니다.

 

Syntax :: if 조건문 1

   명령문 1

elseif 조건문 2

   명령문 2

else

   명령문 3

end

 >> x = 10;
 >> minVal = 2;
 >> maxVal = 6;
 >>
 >> if (x >= minVal) && (x <= maxVal)
 >>     disp('Value within specified range.')
 >> elseif (x > maxVal)
 >>     disp('Value exceeds maximum value.')
 >> else
 >>     disp('Value is below minimum value.')
 >> end

 

Value exceeds maximum value. 

 

위에서 보시는 것처럼 예시는 변수(x, minVal, maxVal)를 입력하고 조건문 2개와 명령문 3개로 이루어져 있습니다. 여기서 조건문들은 변수의 관계에 대한 논리연산으로 구성되어 있습니다. 자세히 들여다보면 조건문 1의 경우 x는 minVal와 maxVal 보다 크므로 거짓(0)입니다. 따라서 조건문 2는 참(1)입니다. 그리고 조건문 2에 호응하는 명령문 2가 실행되므로 'Value exceeds maximum value.' 라는 문구가 화면에 출력되게 됩니다.

 

다음은 switch, case, otherwise의 사용법을 예시로 보시죠. 

Syntax :: switch switch할 변수

case 값 1

        명령문 1

     case 값 2

        명령문 2

     . . .

     otherwise

        명령문

   end

>> n = input('Enter a number: ');
>>
>> switch n
>>     case -1
>>         disp('negative one')
>>     case 0
>>         disp('zero')
>>     case 1
>>         disp('positive one')
>>     otherwise
>>         disp('other value')
>> end

 

% 만약 명령창에 1을 입력했다면

positive one

 

% 만약 명령창에 3을 입력했다면

other value

 

위의 예시와 값이 switch의 경우 특정한 논리연산 형태의 조건문을 이용하는 것이 아닌 단순히 변수를 정하고 이 변수가 어떤 값을 가지느냐에 따라 나열식으로 해당 명령문을 수행하는 방식입니다. 따라서 변수가 일정한 범위의 값을 가지는 경우에 명령문을 수행하도록 하는 조건문은 구현할 수 없습니다. < > 와 같은 관계연산에서 값은 무한하기 때문입니다. 따라서 switch, case, otherwise는 경우가 단순하고 개수가 적어서 정의가 용이한 경우 주로 사용됩니다.

 

마지막 조건문으로 try, catch를 예시를 통해 살펴보겠습니다.

 

Syntax :: try 

     명령문

 catch 제외 변수

     명령문 

            end

>> try
>>     x = 3;
>>     x = x + y
>> catch exception
>>     x = x +2
>> end

 

x =

5

 

try, catch는 에러가 발생한 경우에도 중지없이 연산을 수행할 수 있도록 합니다. 위의 예시와 같이 try 아래의 명령문을 수행함에 있어 x 변수는 정의되어 있지만 y 변수는 정의되어 있지 않습니다. 따라서 x = x + y 를 수행하면 Undefined function or variable 'y'. 라는 에러 메세지가 나오게 됩니다. 하지만 위의 경우 에러가 발생하게 되면 catch 아래의 명령문을 수행하고 대신 에러에 대한 정보를 exception 이라는 변수에 저장하게 됩니다. 생성된 exception을 살펴보면 내부에 identifier와 message 등의 에러 정보가 담겨 있는 것을 확인할 수 있습니다. 이와 같이 try, catch를 사용하면 에러를 핸들링할 수 있습니다.

 

자, 이제 루프제어문(Loop Control Statements)으로 넘어 가겠습니다. 루프제어문은 for와 while로 구성되어 있습니다. 역시나 예시를 통해서 설명하도록 하겠습니다.

 

Syntax :: for 반복변수 = 시작값:증감값:종료값

     명령문

end

>> A = zeros(2,3);

>> for i = 1:2
>>     for j = 1:3 
>>         A(i,j) = 10*i + j
>>     end
>> end

 

A =

11    0    0

 

       0    0    0

 

A =

11    12    0

 0      0    0

. . .

 

A =

11    12    13

21    22    23

 

먼저 for 의 사용법을 살펴보겠습니다. 위 예시에서 볼 수 있는 것 처럼 for 문은 사용자가 반복 횟수(또는 반복 조건)를 설정하고 시작부터 마칠 때까지 해당 명령문을 반복해서 수행하는 것입니다. 이 때 반복변수는 꼭 sclar값이 아닌 열 vector도 가능합니다. 위의 예는 MATLAB을 사용하면서 많이 접하게될 중복 for 구문입니다. i와 j가 반복변수로 1~2 그리고 1~3으로 증가합니다. 그 때 A 행렬의 각 성분을 채워넣는 것입니다. 각 iteration이 수행될 때마다 성분아 하나씩 채워져 가는 것을 볼 수 있습니다.

 

다음은 while의 사용법을 예시를 통해서 살펴보겠습니다.

 

Syntax :: while 조건문

     명령문

end

>> sum = 0; n =1;

>> while n < 11
>>         sum = sum + n

>>         n = n + 1;
>> end

 

sum =

1

 

sum =

3

. . .

 

sum =

55

 

위의 예시는 1부터 10까지 더하는 연산을 while을 사용하여 표현한 것입니다. 보시는 바와 같이 n이 1부터 10까지 차례로 덧셈을 수행하게 되고 n이 11이 되는 순간, 즉 조건문이 거짓(0)인 경우 반복문이 종료가 됩니다. for와 while의 가장 큰 차이점은 for문의 경우 종료 시점을 정해놓고 반복수행 하는 것이라면 while문의 경우 특정한 논리 판단에 따라 반복수행이 종료된다는 것입니다.

 

오늘은 제어흐름을 예시를 통해서 살펴보았습니다. 더 자세한 내용을 알고 싶으시다면 Mathworks 홈페이지의 documentation section[바로가기]을 참고하시기 바랍니다. 위 예시의 일부는 Mathworks 홈페이지 documentation을 참고하여 작성하였습니다.

Comments