MATLAB HCH switch-case case 문 v switch case 문은 switch 다음의표현식의값에따라여러명령그룹들중에서한그룹을골라실행시킬때사용한다. switch문-case 문은 if 문을사용하여똑같이실행시킬수있지만, switch 문이프로그램을이해하기가더

Similar documents
Infinity(∞) Strategy

Microsoft PowerPoint - chap05-제어문.pptx

예제 1.1 ( 관계연산자 ) >> A=1:9, B=9-A A = B = >> tf = A>4 % 4 보다큰 A 의원소들을찾을경우 tf = >> tf = (A==B) % A

Visual Basic 반복문

PowerPoint 프레젠테이션

<4D F736F F F696E74202D20C1A63036C0E520BCB1C5C3B0FA20B9DDBAB928B0ADC0C729205BC8A3C8AF20B8F0B5E55D>

윈도우즈프로그래밍(1)

Microsoft PowerPoint - Java7.pptx

PowerPoint 프레젠테이션

PowerPoint Presentation

Java ...

< E20C6DFBFFEBEEE20C0DBBCBAC0BB20C0A7C7D12043BEF0BEEE20492E707074>

PowerPoint 프레젠테이션

Microsoft PowerPoint - chap-07.pptx

<3235B0AD20BCF6BFADC0C720B1D8C7D120C2FC20B0C5C1FE20322E687770>

장연립방정식을풀기위한반복법 12.1 선형시스템 : Gauss-Seidel 12.2 비선형시스템 12.1 선형시스템 : Gauss-Seidel (1/10) 반복법은초기근을가정한후에더좋은근의값을추정하는체계적인절차를이용한다. G-S 방법은선형대수방정

5장. JSP와 Servlet 프로그래밍을 위한 기본 문법(완성-0421).hwp

Microsoft PowerPoint - chap-06.pptx

Microsoft PowerPoint - Lesson6.pptx

프로그래밍개론및실습 2015 년 2 학기프로그래밍개론및실습과목으로본내용은강의교재인생능출판사, 두근두근 C 언어수업, 천인국지음을발췌수정하였음

C 언어 프로그래밊 과제 풀이

59점은 이다. >> grade=hakjeom(59) 잘된다. 문제는 100 점이이상이면어떻게할것인지? 입력값이정확히범위안에들어온다는 가정에서프로그래밍할것인지입력값의범위등을사전에필터링할것인지의문제이다. (2) 두번째문제는 입력점수가숫자하나가아닌여러숫자의묶음 ( 벡터,

10 강. 쉘스크립트 l 쉘스크립트 Ÿ 쉘은명령어들을연속적으로실행하는인터프리터환경을제공 Ÿ 쉘스크립트는제어문과변수선언등이가능하며프로그래밍언어와유사 Ÿ 프로그래밍언어와스크립트언어 -프로그래밍언어를사용하는경우소스코드를컴파일하여실행가능한파일로만들어야함 -일반적으로실행파일은다

쉽게 풀어쓴 C 프로그래밍

쉽게 풀어쓴 C 프로그래밍

슬라이드 1

PowerPoint Presentation

Microsoft PowerPoint - ch07 - 포인터 pm0415

PowerPoint Template

Microsoft PowerPoint Predicates and Quantifiers.ppt

Columns 8 through while expression {commands} 예제 1.2 (While 반복문의이용 ) >> num=0

OCW_C언어 기초

(001~006)개념RPM3-2(부속)

PowerPoint Presentation

비트와바이트 비트와바이트 비트 (Bit) : 2진수값하나 (0 또는 1) 를저장할수있는최소메모리공간 1비트 2비트 3비트... n비트 2^1 = 2개 2^2 = 4개 2^3 = 8개... 2^n 개 1 바이트는 8 비트 2 2

학습목차 2.1 다차원배열이란 차원배열의주소와값의참조

이 장에서 사용되는 MATLAB 명령어들은 비교적 복잡하므로 MATLAB 창에서 명령어를 직접 입력하지 않고 확장자가 m 인 text 파일을 작성하여 실행을 한다

쉽게 풀어쓴 C 프로그래밍

31. 을전개한식에서 의계수는? 를전개한식이 일 때, 의값은? 을전개했을때, 의계수와상수항의합을구하면? 을전개했을때, 의 계수는? 를전개했을때, 상수항을 구하여라. 37

Chapter_06

Microsoft PowerPoint - chap02-C프로그램시작하기.pptx

중간고사

금오공대 컴퓨터공학전공 강의자료

Vector Differential: 벡터 미분 Yonghee Lee October 17, 벡터미분의 표기 스칼라미분 벡터미분(Vector diffrential) 또는 행렬미분(Matrix differential)은 벡터와 행렬의 미분식에 대 한 표

Microsoft PowerPoint - chap04-연산자.pptx

설계란 무엇인가?

Microsoft PowerPoint - m05_Equation1(Print) [호환 모드]

슬라이드 1

<B4EBC7D0BCF6C7D02DBBEFB0A2C7D4BCF62E687770>

슬라이드 1

JAVA 프로그래밍실습 실습 1) 실습목표 - 메소드개념이해하기 - 매개변수이해하기 - 새메소드만들기 - Math 클래스의기존메소드이용하기 ( ) 문제 - 직사각형모양의땅이있다. 이땅의둘레, 면적과대각

Tcl의 문법

완벽한개념정립 _ 행렬의참, 거짓 수학전문가 NAMU 선생 1. 행렬의참, 거짓개념정리 1. 교환법칙과관련한내용, 는항상성립하지만 는항상성립하지는않는다. < 참인명제 > (1),, (2) ( ) 인경우에는 가성립한다.,,, (3) 다음과같은관계식을만족하는두행렬 A,B에

PowerPoint 프레젠테이션

<BFACBDC0B9AEC1A6C7AEC0CC5F F E687770>

<322EBCF8C8AF28BFACBDC0B9AEC1A6292E687770>

슬라이드 1

?

Microsoft PowerPoint - ch03 - 조건문과 반복문 pm0215

설계란 무엇인가?

금오공대 컴퓨터공학전공 강의자료

PowerPoint 프레젠테이션

1.1.1 컴퓨터의 구성 p.19

마지막 변경일 2018년 5월 7일 ** 이항분포와 정규분포의 관계 ** Geogebra와 수학의 시각화 책의 3.2소절 내용임. 가장 최근 파일은 링크를 누르면 받아 보실 수 있습니다.

쉽게 배우는 알고리즘 강의노트

adfasdfasfdasfasfadf

4장.문장

슬라이드 1

0. 표지에이름과학번을적으시오. (6) 1. 변수 x, y 가 integer type 이라가정하고다음빈칸에 x 와 y 의계산결과값을적으시오. (5) x = (3 + 7) * 6; x = 60 x = (12 + 6) / 2 * 3; x = 27 x = 3 * (8 / 4

집합 집합 오른쪽 l 3. (1) 집합 X 의각원소에대응하는집합 Y 의원소가단하나만인대응을 라할때, 이대응 를 X 에서 Y 로의라고하고이것을기호로 X Y 와같이나타낸다. (2) 정의역과공역정의역 : X Y 에서집합 X, 공역 : X Y 에서집합 Y (3) 의개수 X Y


슬라이드 1

슬라이드 1

(Microsoft PowerPoint - Ch21_NumAnalysis.ppt [\310\243\310\257 \270\360\265\345])

Chap 6: Graphs

Microsoft PowerPoint - [2009] 02.pptx

[ 마이크로프로세서 1] 2 주차 3 차시. 포인터와구조체 2 주차 3 차시포인터와구조체 학습목표 1. C 언어에서가장어려운포인터와구조체를설명할수있다. 2. Call By Value 와 Call By Reference 를구분할수있다. 학습내용 1 : 함수 (Functi

Microsoft PowerPoint 자바-기본문법(Ch2).pptx

슬라이드 1


슬라이드 1

Microsoft PowerPoint - chap-11.pptx

% Rectangular Value 입력 t = -50 : 1 : 50; % 시간영역 for i = 1 : 101 if abs ( t ( i ) ) < 10 x ( i ) = 1; else x ( i ) = 0; % 화면을 2 열 1 행으로나눈후 % 2 열 1 행에 R

(Microsoft PowerPoint - Ch6_NumAnalysis.ppt [\310\243\310\257 \270\360\265\345])

chap 5: Trees

Microsoft PowerPoint - C++ 5 .pptx

untitled

제 11 장포인터 유준범 (JUNBEOM YOO) Ver 본강의자료는생능출판사의 PPT 강의자료 를기반으로제작되었습니다.

Microsoft PowerPoint - chap-05.pptx

Microsoft PowerPoint - chap06-1Array.ppt

06 세상을 변화시키는 연산자

Microsoft PowerPoint - chap06-2pointer.ppt

statistics

Python과 함께 배우는 신호 해석 제 5 강. 복소수 연산 및 Python을 이용한 복소수 연산 (제 2 장. 복소수 기초)

<B1B9BEEE412E687770>

Microsoft PowerPoint 자바스크립트(1).pptx

01

2015 개정교육과정에따른정보과평가기준개발연구 연구책임자 공동연구자 연구협력관

Microsoft PowerPoint - C프로그래밍-chap03.ppt [호환 모드]

COMPANY INITIATION , 98,400 1), 2), 3) DCF 98,400 75,300 23,100 DCF ~ (EV) (+ ) (93.1) 1,024.6 ( ) 10.4

Transcription:

switch-case case 문 v switch case 문은 switch 다음의표현식의값에따라여러명령그룹들중에서한그룹을골라실행시킬때사용한다. switch문-case 문은 if 문을사용하여똑같이실행시킬수있지만, switch 문이프로그램을이해하기가더쉽다. v switch 문의구조 switch 표현식 case 값1 case 값2 otherwise MATLAB 프로그램 MATLAB 명령어그룹 1 MATLAB 명령어그룹 2 MATLAB 명령어그룹 n MATLAB 프로그램 명령어 switch 문 명령어 그외 명령그룹 1 7 장 MATLAB 프로그래밍 1/76 값 1 값 2 명령그룹 2 명령그룹 n

switch-casecase 문의사용방법 v 다음예제를통해 switch-casecase 문의사용방법에대해알아보자. route = input(' 원하는노선을선택하세요 : '); switch route l switch 다음의표현식은스칼라나문자열, 값 case 1 이미리정의된변수나정수결과를갖는수 fare = 1000; 학식이될수있다. case 2 fare = 1100; l route 값이 2 이면 case 2에해당하는명령어그 case {3, 4, 5} 룹이실행된다. 만일 case 2가한개이상인경 fare = 1200; 우에는처음만나는 case 문만실행된다. case 2 l case 문은 2개이상의값을가질수있으며, 이 fare = 1300; 경우벡터표시와달리 { } 표시를사용한다. otherwise disp( [int2str(route), ' 번은없는노선입니다.'] ) fare = 0; if fare fprintf('%d번노선요금은 %d 원입니다.\n' n', route, fare) 7 장 MATLAB 프로그래밍 2/76

switch-casecase 문의사용예 v 주어진단위의길이를 cm 단위로변환하는프로그램을작성해보자. unit = input(' 변환할현재단위는 [in/ft/m/cm]? : ', 's'); x= input(' 현재길이는? : '); switch unit case {'in', 'inch'} lcm = x * 2.54; case {'ft', 'feet'} lcm = x * 2.54*12; case {'m', 'meter'} lcm = x * 100; case {'cm', 'centimeter'} lcm = x; otherwise disp( ['unknown unit : ', unit] ) lcm = NaN; fprintf('%d %s는 %d cm 입니다.\n', x, unit, lcm) 7 장 MATLAB 프로그래밍 3/76

예제 7.4 에너지의단위변환 (1/2) v Joule, ft-lb, cal, ev 단위의에너지를다른단위로변환하는스크립트파일을작성하라. 실행시에에너지의양과현재단위, 원하는단위를입력해야하며, 변환된에너지양을출력한다. 1 J=0.738 ft-lb= lb=0.239 cal =6.24 1018 ev 이다. 또한프로그램으로다음을변환하라. a) 150 J을 ft-lb 로, b) 2800 cal를 Joule로, c) 2.7 ev를 cal로. Ein=input(' 변환할에너지 ( 일 ) 의값을입력하시오 : '); EinUnits=input(' 현재단위를입력하시오 (J, ft-lb, cal, or ev): ', 's'); EoutUnits=input(' 새단위를입력하시오 (J, ft-lb, cal, or ev): ', 's'); error=0; switch EinUnits case 'J' EJ=Ein; 파일명 : EnergyConversion case 'ft-lb' EJ=Ein/0.738; case 'cal' EJ=Ein/0.239; case 'ev' EJ=Ein/6.24e18; otherwise error=1; 7 장 MATLAB 프로그래밍 4/76

예제 7.4 (2/2) switch EoutUnits case 'J' Eout=EJ; case 'ft-lb' Eout=EJ*0.738; case 'cal' Eout=EJ*0.239; case 'ev' Eout=EJ*6.24e18; otherwise error=1; if error disp('error current or new else fprintf('e = %g %s',eout,eoutunits) 명령창에서의실행결과 >> >> EnergyConversion 변환할에너지 ( 일 ) 의값을입력하시오 : 2800 현재단위를입력하시오 (J, ft-lb, cal, or ev): cal 새단위를입력하시오 (J, ft-lb, cal, or ev): J E = 11715.5 J units are typed incorrectly.') 7 장 MATLAB 프로그래밍 5/76

Loop : for- loop (1/2) v 루프는명령어그룹을어떤횟수만큼반복수행하며, 매회반복시적어도 1개이상의변수가루프내에서새값을할당받는다. 루프에는반복횟수가지정된 for- loop와지정조건이만족될때까지반복되는 while- loop가있다. v for- loop for k = f : s : t 명령어그룹 Loop의인덱스변수 k는아무변수이름이나상관없지만, 주로 i, j, k, m, n 등이사용된다. MATLAB 에서는 i, j가복소수표현에사용되므로복소수를사용할때는사용하지않도록한다. 처음실행할때 k=f 이며명령어그룹을실행한후두번째실행에서는 k=f+s이된다. k가최종값 t를초과하게되면명령어그룹을실행하지않고 다음의명령어로넘어간다. 예 ) k=1:2:4일때루프는 k=1, 3에대해 2번실행된다. 명령어 k 최종값 명령그룹 k 값수정 명령그룹 n 거짓 7 장 MATLAB 프로그래밍 6/76 참

Loop : for- loop (2/2) for k = f : s : t 명령어그룹 증감값 s가 1과같으면, 생략해도된다. 예 ) for m=1:4 for m=1:1:4 증감값 s는음수가될수있다. 예 ) k=8:-3:1은 k=8, 5, 3 으로세번반복하게된다. 시작값인 vi가최종값인 vf와같으면, 단한번만실행하게된다. f > t와 s > 0, 또는 f < t와 s < 0 이면루프는실행되지않으며 루프인덱스 k는 f 부터시작해서루프를돌때마다 않으며, f=t 이면 1번실행된다. 때마다 s씩증가하며, 그때마다최종값 t 보다큰지검사해서 k가 t 보다크면루프를종료한다. 마지막으로실행할때의 k 값은 t와같거나 t 보다작다. for 문에서 k 값에벡터로지정된특정값을할당할수도있다. 예 ) for k=[5 3 8-2 4], disp(k), k 값이루프내에서다시정의되어서는안된다. 루프가끝나면, 루프인덱스변수 k의값은마지막으로할당받은값이다. for 문에 서최종값과비교할때의값이아니라는점에주의하라. 7 장 MATLAB 프로그래밍 7/76

for- 루프의사용예 1 v 1, 4, 7, 10의네수의제곱값을차례대로구하여출력하라. for k=1: 3: 10 x = k^2 >> for k=1:3:10, x=k^2, x = 1 x = 16 x = 49 x = 100 7 장 MATLAB 프로그래밍 8/76

for- 루프의사용예 2 v 1 부터사용자가입력한 N 까지의모든홀수들의합과곱을구하는프로그램을작성하라. N=input(' 최종숫자를입력하시오 : '); sum = 0; product = 1; for i=1: 2: N sum = sum + i; product = product * i; 예를들어 N=6인경우, i 는 1 부터 2씩증가하므로세번루프를돌며, i는각루프에서 1, 3, 5의값을갖는다. i=7은최종값 6을초과하므로 i=5가최종값이된다. fprintf('1 부터 %d 까지의모든홀수들의합은 %d 이다.\n' n', N, sum) fprintf('1 부터 %d 까지의모든홀수들의곱은 %d 이다.\n' n', N, product) fprintf(' 마지막으로더해진홀수는 %d 이다.\n' n', i) 7 장 MATLAB 프로그래밍 9/76

for- 루프의사용예 3 v 사용자가입력한수 N의계승 (factorial) 을계산하는프로그램을작성하라. N=input(' 계승 (factorial) 을구할수를입력하시오 : '); if (N >=0 ) f = 1; for i=1:n f = f*i; fprintf('%d! = %d\n' n', N, f); else fprintf(' 음수 %d을( 를 ) 입력했습니다. 양수를입력하세요.\n' n', N) >> facto 계승 (factorial) 을구할수를입력하시오 : 5 5! = 120 7 장 MATLAB 프로그래밍 10/76

for- 루프사용예 4 v for- 루프를사용한결과와원소별연산을사용한결과가같은경우가있는데, 일반적으로원소별연산이루프보다더빠르며두방법모두사용가능한경우라면원소별원소연산방법이더바람직하다. v 예제 for x=1:2:9 y = sqrt(x); for x=[1 3 5 7 9] y = sqrt(x); v for 명령어에서인덱스에배열이주어진경우, 열벡터의원소가모두수행될때까지열벡터가순서대로인덱스변수에대입되어루프를반복한다. é2 A = ê ê 8 êë 9 4 5 8 6 ù 7 ú ú 11úû for n=a fprintf('n=%d, ', n) x=(n(3)-n( n(2))*n( ))*n(1); fprintf('x=%d\n', n', x) vs. x=[1 3 5 7 9] y = sqrt(x) 명령창에서의실행결과 n=2, n=8, n=9, x=2 n=4, n=5, n=8, x=12 n=6, n=7, n=11, x=24 7 장 MATLAB 프로그래밍 11/76

for- 루프사용예 5 v for 명령어의루프인덱스변수에실수도사용될수있다. loop=1; for i=[ =[2.1 4.3 7.5-6.8] fprintf('loop No =%d, i=%4.1f\n' n', loop, i) loop=loop+1; v 벡터 v의원소중에서양의원소의주소를알려주는프로그램 실행결과 loop No =1, i= 2.1 loop No =2, i= 4.3 loop No =3, i= 7.5 loop No =4, i=-6.8 v=[3-2 0 8-7]; n=0; for m=1:length(v) if v(m)>0 n=n+1; y(n)=m >> find_for y= 1 4 실행결과 >> find(x>0) ans= 1 4 7 장 MATLAB 프로그래밍 12/76

예제 7.5 급수의합 (1/2) a) for- 루프를이용하여급수의첫 n 항의합성하고, n=4와 n=20 에대해합을구하라. 을계산하는프로그램을작 b) Taylor 급수를이용하여 sin(x) 를계산하는사용자정의함수파일을작성하라. 함수이름과인자는 y=tsin(x,n) 으로한다. 입력인자는각도 ( ) 인 x와급수의항의개수인 n 이다. 이함수로항의개수가 3과 7일때 sin(150 ) 를계산하라. sin x = å k = 0 k (-1) x 2 1! 2k + 1 ( k + ) (a) 루프를반복할때마다급수의각항을계산하고이전항들의합에더한다. n=input(' 항의개수를입력하시오 : '); s=0; for k=1:n s=s+(-1)^k*k/ )^k*k/2^k; fprintf(' 급수의합은 %f 이다.\n' n', s) n å k= 1 (-1) k 2 k k 실행결과 >> Exp7_4a 항의개수를입력하시오 : 4 급수의합은 -0.125000 이다. >> Exp7_4a 항의개수를입력하시오 : 20 급수의합은 -0.222216 이다. 7 장 MATLAB 프로그래밍 13/76

예제 7.5 (2/2) (b) Taylor 공식의 n 개의항을더하여 sin(x) 를계산하는사용자정의함수파일. 첫번째항은 k=0에해당하므로, 마지막루프인덱스는 k=n-1이되어야 n개의항을더한셈이된다. function y = Tsin(x, n) % Tsin 은 Taylor 공식에의해 sin을계산한다. % 입력인자 : % x는각도 % n은항의개수 xr = x*pi/180; y = 0; for k= 0: n-1 y = y + (-1)^k*xr^(2*k+1)/factorial(2*k+1); 명령창 >> Tsin(150, 3) ans = 0.6523 >> Tsin(150, 7) ans = 0.5000 7 장 MATLAB 프로그래밍 14/76

예제 7.6 벡터원소의수정 v 벡터 V=[5, 17, -3, 8, 0, -7, 12, 15, 20, -6, 6, 4, -2, 16] 의원소중에서양수이면서 3 이나 5, 또는 3과 5로나누어떨어지는원소는 2를곱하고, 음수이면서 -5 보다큰원소는세제곱을하는프로그램을스크립트파일로작성하라. V=[5, 17, -3, 8, 0, -7, 12, 15, 20, -6, 6, 4, -2, 16]; n=length(v); for k=1:n if V(k)>0 & ( rem(v(k), 3)== )==0 rem(v(k), 5)== )==0 ) V(k)=2*V(k) *V(k); for- 루프에서반복횟수는벡터의원소개 elseif V(k) < 0 & V(k) > -5 수와같다. 매회반복할때마다조건문에서한 V(k)=V(k)^3; 원소씩체크한다. 원소가문제의조건을만족 하면, 새로계산한값으로원소를대체한다. V >> Exp7_5 V = 10 17-27 8 0-7 24 30 40-6 12 4-8 16 7 장 MATLAB 프로그래밍 15/76

while- 루프 (1/3) v while- 루프는반복실행이필요하지만반복횟수를미리모르는경우에사용된다. 따라서 while 루프에서는루프가시작될때반복회수가지정되지않는대신 while 문의조건식이만족될때까지루프가반복된다. v while- 루프구조 while 조건식 MATLAB 프로그램 명령어그룹 MATLAB 프로그램 명령어 조건식 참 명령그룹 거짓 v while의조건식이만족 ( 참 ) 되면, while과 사이의명령어그룹을수행시킨후조건식으로돌아가서조건식의만족여부를다시체크한다. 조건식이만족되지않으면 ( 거짓 ), 로건너뛰어루프를종료한다. 명령그룹 n 7 장 MATLAB 프로그래밍 16/76

while- 루프 (2/3) v while- 루프가정상적으로수행되기위해서는 while의조건식은적어도하나의변수를반드시포함해야한다. 처음으로 while 명령어를수행할때조건식에포함된변수는 while 명령어이전에미리값을할당받은상태이어야한다. 조건식의변수들중에서적어도하나는 while과 사이의명령어에서새로운값을할당받아서 while 명령어의조건식이거짓이되도록만들어야한다. 그렇지않으면, 루프는조건식을거짓으로만들수가없으므로무한루프를돌게되어루프를빠져나올수없게된다. v while 루프의적용예 명령어창실행 m=1; while m <= 7 m = 2*m m = 2 m = 4 m = 8 7 장 MATLAB 프로그래밍 17/76

while- 루프 (3/3) v 무한루프의예 : m=8; while m ~= 0 m = m 3; m이 8, 5, 2, -1, 과같이변하게되어정확히 0과같은값을갖지못하므로조건식을거짓으로만들수없다. 따라서무한루프를돌게된다. v while 루프는어떤조건이만족되는동안명령어그룹을반복수행하고자할때주로사용된다. 일반적으로 while 루프를 for 루프로수행할수있지만, 이런경우에는 for 루프로구현하기가좀더까다로운경우가많다. n=1; while n ~= 5 disp(n) n=n+1; for n=1:4 disp(n) 7 장 MATLAB 프로그래밍 18/76

while 루프와 for 루프 (1/2) v eps(e) 의크기를추정하는프로그램 EPS=1; n=0; while 1+EPS > 1 EPS = EPS/2; n = n + 1; EPS = EPS*2 EPS=1; for n=1 : 1000 EPS = EPS/2; if (1+EPS)== +EPS)==1 EPS = EPS*2 break; v 프로그램이무한루프에빠지게된경우, 키보드의 Ctrl + C 또는 Ctrl + Break 키조합을누름으로써프로그램의수행을중지시킬수있다. 7 장 MATLAB 프로그래밍 19/76

v 1 부터 N 까지의정수의합을구하는프로그램 7 장 MATLAB 프로그래밍 20/76

while 루프와 for 루프 (2/2) v 1 부터 N 까지의정수의합을구하는프로그램 N=100; sum = 0; for i = 1 : N sum = sum + i; sum N=100; sum = 0; k = 1; while k <= N sum = sum + k; k = k + 1; sum v n! 100 을만족하는가장큰정수 n을구하는프로그램을작성하라. n=1; while prod(1:n) < 100 n = n + 1; n = n - 1 7 장 MATLAB 프로그래밍 21/76

중첩루프와중첩조건문 v 루프와조건문은또다른루프나조건문속에중첩될수있으며, 중첩될수있는루프와조건문의수에는제한이없다. 그러나 if, case, for, while 문각각에해당하는 문을잊지않도록해야한다. for k=1:n for h=1:m 중첩 ( 된 ) 루프 루프 예 ) for k=1:3 for h=1:4 명령어그룹 k=1로시작하여중첩루프를 h=1, 2, 3, 4에대해 4번실행한다. 다음, k=2 에서중첩루프는다시 h=1, 2, 3, 4로 4번실행한다. 결국모두 3 x 4 = 12 번명령어그룹을실행한다. 7 장 MATLAB 프로그래밍 22/76

예제 7.8 루프에의한행렬생성 v 다음조건의원소들을갖는 n m 행렬을생성하는스크립트파일을작성하라. 첫째행의원소는해당원소가속한열의번호와같다. 첫째열의원소들은해당 원소의행의번호와같다. 나머지원소들은자기바로위의원소와자기왼쪽원 소를더한값과같다. n과 m의값은프로그램이실행될때입력되도록작성한다. n=input(' 행의개수를입력하시오 : '); m=input(' 열의개수를입력하시오 : '); 첫째루프의인덱스변수 k는 A=[]; 행의주소이며, 둘째루프의인 for k=1:n 덱스변수 h는열의주소이다. for h=1:m if k==1 A(k, h)=h; >> Chap7_exp7 elseif h==1 행의개수를입력하시오 : 4 A(k, h)=k; else 열의개수를입력하시오 : 5 A = A(k, h)=a(k, h-1) + A(k-1, h); 1 2 3 4 5 2 4 7 11 16 3 7 14 25 41 4 11 25 50 91 A 7 장 MATLAB 프로그래밍 23/76

예제 loop와 break v 사용자가어떤수를입력하면, 1 부터그수까지센후다시반복회수를묻는프로그램을작성하라. 0을입력하면프로그램은종료된다. while 1 n = input(' 반복회수를입력하시오 ( < 100) : '); if n <= 0 fprintf('\n' n'), break; fprintf('---------------------\n' n'), fprintf(' 번호 = ') for i =1 : n fprintf( '%2d', i) if i < n, pause(0.6), fprintf('\b\b' b'), fprintf('\n%d번반복하였습니다.\n' n', n) fprintf('---------------------\n\n' n') >> whileloop 반복회수를입력하시오 ( < 100) : 5 --------------------- 번호 = 5 5번반복하였습니다. --------------------- 반복회수를입력하시오 ( < 100) : 0 7 장 MATLAB 프로그래밍 24/76

예제 7.9 (3/3). 파일명 : Chap7_exp9 fprintf(' 계좌의잔고는 %d년동안유지된다.\n' n', year(n-1) ) bar(year, [AB' W'], 2.0) >> Chap7_exp9 year = 0 1 W = 0 25000 AB = 300000 290000 year = 0 1 2 W = 0 25000 25500 AB = 300000 290000 279000 year = 0 1 2 3 W = 0 25000 25500 26010 AB = 300000 290000 279000 266940.. 계좌의잔고는 15년동안유지된다. 2.5 2 1.5 1 0.5 3 x 105 계좌잔고 인출금액 0-5 0 5 10 15 20 7 장 MATLAB 프로그래밍 25/76

예제 7.11 로켓모델의비행 (1/4) v 로켓이처음 0.15 s 동안엔진에의해 16 N의힘으로위로추진되며, 이후에는중력때문에점점느려진다. 정점에도달한후, 로켓이아래로떨어지기시작해서속도가 20 m/s에도달하면, 낙하산이펴지며이후땅에닿을때까지 20 m/s 의일정한속도로계속내려온다. 로켓이비행하는동안, 로켓의속도와고도를시간의함수로계산하고그래프로출력하는프로그램을작성하라. v 풀이 구간 1 : 엔진이켜진처음 0.15 s 동안의운동 å FE - mg 1 F = FE - mg = ma Þ a = \ v( t) = at, h( t) = at m 2 이구간끝 t =0.15 s 에서의시간, 속도, 높이를 t 1, v 1, h 1 이라고하자. 구간 2 : 엔진이멈춘뒤부터낙하산이펴질때까지의운동 1 v( t) = v - g t - t h( t) = h + v t - t - g t - t 2 ( ), ( ) ( ) 2 1 1 1 1 1 1 이구간은일정한감속도 g로움직이며, 로켓속도가 -20 m/s( 아래방향 ) 가될때까지계속되며, 구간끝에서의시간과높이는 t 2, v 2, h 2 라고한다. 7 장 MATLAB 프로그래밍 26/76 2

예제 7.11 (2/4) 구간 3 : 낙하산이펴진때부터로켓이땅에닿을때까지의운동 이구간에서는로켓속도가 -20 m/s로일정하며, 로켓높이가 0이될때까지이다. ( ) h( t) = h - vchute t - t 2 2 7 장 MATLAB 프로그래밍 27/76

m=0.05; g=9.81; tengine=0.15; Force=16; vchute=-20; Dt=0.01; clear t v h n=1; t(n)=0; v(n)=0; h(n)=0; % 구간 l a1=(force-m*g)/m; F - while t(n) < tengine & n < 50000 a = E m n=n+1; t(n)=t(n-1) + Dt;, v(n)=a1*t(n) *t(n); h(n)=0.5*a1*t(n)^2; v1=v(n) =v(n); h1=h(n) =h(n); t1=t(n) =t(n); % 1 구간끝에서의속도, 높이, 시간 1 v( t) = at h( t) = at 2 7 장 MATLAB 프로그래밍 28/76 mg 2

예제 7.11 (3/4) % 구간 2 while v(n) >= vchute & n < 50000 n=n+1; t(n)=t(n-1)+dt; v(n)=v1-g*(t(n) g*(t(n)-t1); h(n)=h1+v1*(t(n) *(t(n)-t1)-0.5*g*(t(n)-t1)^2; v2=v(n) =v(n); h2=h(n) =h(n); t2=t(n) =t(n); % 구간 3 while h(n) > 0 & n < 50000 n=n+1; t(n)=t(n-1)+dt; v(n)=vchute; h(n)=h2+vchute*(t(n) +vchute*(t(n)-t2); subplot(1,2,1), plot(t,h,t2,h2,'o'),'o') subplot(1,2,2), plot(t,v,t2,v2,'o'),'o') ( ) v( t) = v - g t - t 1 1 1 h( t) = h + v t - t - g t - t 2 ( ) ( ) 1 1 1 1 ( ) h( t) = h - v t - t 2 chute 2 2 7 장 MATLAB 프로그래밍 29/76

예제 7.11 (4/4) v 결과의정확도는시간증분 Dt의크기에따라좌우된다. Dt=0.0101 초의설정이좋은결과를준것으로보인다. v while 명령어의조건식은 n이 50,000000 보다크면루프를멈추도록 n에대한조건도포함하고있는데, 이것은루프내의명령문에에러가있을경우무한루프를피하기위한예방책이다. v 이문제는여러방법으로프로그래밍할수있다. 예를들어, 낙하산이펴지는시간과로켓이땅에닿는시간을먼저계산하여, while 루프대신 for- 루프를사용할수도있다. 시간이처음결정되면, 루프대신원소별계산을이용할수도있다. 120 50 100 80 60 40 20 0 낙하산펴짐 40 30 20 10 0-10 -20 낙하산펴짐 -20 0 5 10 15-30 0 5 10 15 7 장 MATLAB 프로그래밍 30/76

7 장강의록끝 7 장 MATLAB 프로그래밍 31/76