[MATLAB] 제어흐름 2/2

YJ·2024년 10월 30일

MATLAB 공부하기

목록 보기
6/19
post-thumbnail

💡 도움이 되셨다면 ♡와 팔로우 부탁드려요! 미리 감사합니다.

제어흐름

return

  • return은 함수가 실행을 종료하고, 제어권을 호출한 함수로 강제 반환하도록 합니다.
    • 호출 함수: return을 포함한 함수나 스크립트를 호출한 상위 함수 또는 스크립트입니다.
  • 명령 프롬프트에서 직접 호출 시, return을 만나면 명령 프롬프트로 바로 제어권이 돌아옵니다.

실행 예시 (그래프를 그리는 함수 호출)

  • 사용자로부터 입력을 받아 동작을 결정합니다.
    • ans == 0: return을 통해 함수를 종료하고 반환합니다.
    • ans가 0이 아닌 경우: 입력에 따라 다항함수 그래프를 그립니다.

function myplot
    disp('Do you want to plot polynomial function?')
    ans = input('Enter 1 if YES, 0 if NO \n')
    if ans == 0
	    return
    else
	    c = input('input the coefficient of polynomial [a_n... a_0] \n')
	    d = input('input the domain you want to see [a b] \n')
	    x = d(1):(d(2) - d(1))/1000:d(2);
	    n = length(c); y = 0;
	    for i = 1:n
		    y = y + c(i)*x.^(n-1);
	    end
	    plot(x, y)
    end
end

keyboard

  • keyboard는 실행 중인 프로그램을 일시 중지하고, 디버그 모드로 전환하여 사용자에게 제어권을 부여합니다.
    • 디버그 모드에서는 변수 값 확인 및 변경이 가능합니다.
  • dbcont 명령어를 사용하여 일시 중지된 실행을 계속할 수 있습니다.

실행 예시

a = ones(5);
for i = 1:5;
	disp(i);
	a(:, i) = i * a(:,i);
	if i == 3
	keyboard
	end
end
a

실행 결과

  • 제어권을 부여한 후, a 행렬의 3열을 0으로 변경한 뒤, dbcont로 실행을 계속합니다.
>> keyboard_example
     1

     2

     3

K>> a(:,i) = 0 * a(:,i);
K>> dbcont
     4

     5

a =

     1     2     0     4     5
     1     2     0     4     5
     1     2     0     4     5
     1     2     0     4     5
     1     2     0     4     5

pause

  • pause는 MATLAB 코드의 실행을 일시적으로 중단합니다.
    • pause(n): n초 동안 일시 중지한 후 실행을 재개합니다.

실행 예시 (n각형 도형 그리기)

  • linspace를 통해 0에서 2π까지의 구간을 n등분한 각도 배열을 생성합니다.
  • axis로 그래프 축의 범위를 설정합니다.
    • axis([xmin xmax ymin ymax])
  • line(x, y): 두 점을 순서대로 연결하여 도형의 변을 그립니다.
n = input('n각형 도형 그리기\n') + 1;
theta = linspace(0, 2*pi, n);
axis([-1 1 -1 1]) 
hold on
for i = 1:n-1
	x = [cos(theta(i)) cos(theta(i + 1))]
	y = [sin(theta(i)) sin(theta(i + 1))]
	line(x, y)
	pause(0.5)
end
hold off

switch, case, otherwise

  • switch문은 여러 경우(case) 중 하나를 선택하여 해당 명령문을 실행합니다.
    • case: 지정된 조건이 참일 경우 해당 블록의 코드를 실행합니다.
    • otherwise: 위의 모든 case 조건이 거짓일 경우 실행할 기본 명령문을 정의합니다.

형식

switch switch_expression
	case case_expression
		statements
	case case_expression
		statements
		...
	otherwise
		satements
end

사용 예시 (과일 이름을 입력받아 해당 색상 출력)

  • 사용자로부터 과일 이름을 입력받아 switch 문을 통해 해당 과일의 색상을 출력합니다.
    • case 블록에 해당하는 과일을 입력하면 그 과일에 대한 색상이 출력됩니다.
    • 정의된 case에 해당하지 않는 입력일 경우, otherwise 블록이 실행됩니다.
fruit = input('Enter a fruit name (apple, banana, grape): ', 's');

switch fruit
    case 'apple'
        disp('The color of apple is red.');
    case 'banana'
        disp('The color of banana is yellow.');
    case 'grape'
        disp('The color of grape is purple.');
    otherwise
        disp('Unknown fruit.');
end

break

  • break 문은 for 또는 while 루프 실행을 강제로 종료하는 역할을 합니다.
    • 조건이 충족되면 break를 만나자마자 루프가 종료되고, 루프 이후의 코드로 바로 넘어갑니다.

사용 예시 (특정 숫자를 찾으면 루프 종료)

  • 1부터 10까지 숫자를 순서대로 출력하다가 특정 숫자에 도달하면 break로 루프를 종료합니다.
    • 찾으려는 숫자가 발견되면 루프를 빠져나가고 이후 코드가 실행됩니다.
target = 5;
for i = 1:10
    disp(i);
    if i == target
        disp('Target found, exiting loop.');
        break;
    end
end
profile
제 글이 유익하셨다면 ♡와 팔로우로 응원 부탁드립니다.

0개의 댓글