ch. 7 셀배열과구조체 - prof. soon s. jarngssjarng.chosun.ac.kr/matlab/chapter07.pdf ·...

46
CH. 7 셀 배열과 구조체

Upload: lehuong

Post on 18-Aug-2018

214 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: CH. 7 셀배열과구조체 - Prof. Soon S. Jarngssjarng.chosun.ac.kr/matlab/chapter07.pdf · 2017-05-29 · 7.1 셀배열 서로다른타입을가지는데이터들을배열의형태로저장한것

CH. 7 셀 배열과 구조체

Page 2: CH. 7 셀배열과구조체 - Prof. Soon S. Jarngssjarng.chosun.ac.kr/matlab/chapter07.pdf · 2017-05-29 · 7.1 셀배열 서로다른타입을가지는데이터들을배열의형태로저장한것

학습 목표학습 목표

셀 배열의 이해와 정의 및 활용1셀 인덱싱과 컨텐트 인덱싱의 이해와 활용2구조체의 이해와 정의 및 활용3

구조체 배열의 이해와 활용4

MATLAB PROGRAMMING CH. 7 2

Page 3: CH. 7 셀배열과구조체 - Prof. Soon S. Jarngssjarng.chosun.ac.kr/matlab/chapter07.pdf · 2017-05-29 · 7.1 셀배열 서로다른타입을가지는데이터들을배열의형태로저장한것

7.1 셀 배열서로 다른 타입을 가지는 데이터들을 배열의 형태로 저장한 것서로 다른 타입을 가지는 데이터들을 배열의 형태로 저장한 것

MATLAB PROGRAMMING CH. 7 3

Page 4: CH. 7 셀배열과구조체 - Prof. Soon S. Jarngssjarng.chosun.ac.kr/matlab/chapter07.pdf · 2017-05-29 · 7.1 셀배열 서로다른타입을가지는데이터들을배열의형태로저장한것

7.1.1 셀 배열의 생성

1) 중괄호를 셀 구성자로 이용해서 셀 배열 생성

cArray={ 12, 'abcdef'; [2 8 5], [1 5 ; 8 3] }

(예제 7-1)명령어 창에서 다음과 같은 명령을 실행해 셀 배열을 생성해 보시오명령어 창에서 다음과 같은 명령을 실행해 셀 배열을 생성해 보시오.

cArray={ 12, 'abcdef'; [2 8 5], [1 5 ; 8 3] }

MATLAB PROGRAMMING CH. 7 4

Page 5: CH. 7 셀배열과구조체 - Prof. Soon S. Jarngssjarng.chosun.ac.kr/matlab/chapter07.pdf · 2017-05-29 · 7.1 셀배열 서로다른타입을가지는데이터들을배열의형태로저장한것

cArray 가 생성된 작업공간창

MATLAB PROGRAMMING CH. 7 5

Page 6: CH. 7 셀배열과구조체 - Prof. Soon S. Jarngssjarng.chosun.ac.kr/matlab/chapter07.pdf · 2017-05-29 · 7.1 셀배열 서로다른타입을가지는데이터들을배열의형태로저장한것

< 명령어 cellplot - 셀 배열 구조 확인>

명령어 창에 “cellplot(cArray)”를 입력명령어 창에 cellplot(cArray) 를 입력

MATLAB PROGRAMMING CH. 7 6

Page 7: CH. 7 셀배열과구조체 - Prof. Soon S. Jarngssjarng.chosun.ac.kr/matlab/chapter07.pdf · 2017-05-29 · 7.1 셀배열 서로다른타입을가지는데이터들을배열의형태로저장한것

< 명령어 celldisp - 셀 배열의 내용 확인>

MATLAB PROGRAMMING CH. 7 7

Page 8: CH. 7 셀배열과구조체 - Prof. Soon S. Jarngssjarng.chosun.ac.kr/matlab/chapter07.pdf · 2017-05-29 · 7.1 셀배열 서로다른타입을가지는데이터들을배열의형태로저장한것

2) cell 명령어 사용하여 셀 배열 생성

MATLAB PROGRAMMING CH. 7 8

Page 9: CH. 7 셀배열과구조체 - Prof. Soon S. Jarngssjarng.chosun.ac.kr/matlab/chapter07.pdf · 2017-05-29 · 7.1 셀배열 서로다른타입을가지는데이터들을배열의형태로저장한것

(예제 7-2) 명령어 창에서 다음과 같이 cell 명령을 실행하여 셀 배열을 정의해 보시오.

MATLAB PROGRAMMING CH. 7 9

Page 10: CH. 7 셀배열과구조체 - Prof. Soon S. Jarngssjarng.chosun.ac.kr/matlab/chapter07.pdf · 2017-05-29 · 7.1 셀배열 서로다른타입을가지는데이터들을배열의형태로저장한것

7.1.2 셀 인덱싱 (cell indexing)과 컨텐츠 인덱싱(contentindexing)indexing)

• 인덱싱 배열의 특정한 위치를 지정하는 것인덱싱 배열의 특정한 위치를 지정하는 것

MATLAB PROGRAMMING CH. 7 10

Page 11: CH. 7 셀배열과구조체 - Prof. Soon S. Jarngssjarng.chosun.ac.kr/matlab/chapter07.pdf · 2017-05-29 · 7.1 셀배열 서로다른타입을가지는데이터들을배열의형태로저장한것

< 셀 인덱싱(Cell Indexing) >

• 셀 배열의 각 셀을 인덱싱하는 것 셀 배열 안에 있는 특정한 셀을 가리켜 참조하는 것

• 셀 인덱싱에는 소괄호 ( )가 사용됨• 셀 인덱싱에는 소괄호 ( )가 사용됨

셀 배열이름( i ) 또는 셀 배열이름( i, j )

MATLAB PROGRAMMING CH. 7 11

Page 12: CH. 7 셀배열과구조체 - Prof. Soon S. Jarngssjarng.chosun.ac.kr/matlab/chapter07.pdf · 2017-05-29 · 7.1 셀배열 서로다른타입을가지는데이터들을배열의형태로저장한것

(예제 7-3)명령어 창에서 다음과 같이 셀 인덱싱을 통해 셀 배열의 셀을 참조하여 다른 변수에 대입하는 것을 해보자.

MATLAB PROGRAMMING CH. 7 12

Page 13: CH. 7 셀배열과구조체 - Prof. Soon S. Jarngssjarng.chosun.ac.kr/matlab/chapter07.pdf · 2017-05-29 · 7.1 셀배열 서로다른타입을가지는데이터들을배열의형태로저장한것

(예제 7-4)다음의 명령을 실행하여 셀 인덱싱을 이용한 셀 배열 내의 특정한 셀을 다른 셀로 대치하는 것을 실행해 보자로 대치하는 것을 실행해 보자.

MATLAB PROGRAMMING CH. 7 13

Page 14: CH. 7 셀배열과구조체 - Prof. Soon S. Jarngssjarng.chosun.ac.kr/matlab/chapter07.pdf · 2017-05-29 · 7.1 셀배열 서로다른타입을가지는데이터들을배열의형태로저장한것

< 컨텐츠 인덱싱 (Content Indexing) >

셀 배열에서 지정한 셀의 내용( t t)를 인덱싱하는 것• 셀 배열에서 지정한 셀의 내용(content)를 인덱싱하는 것셀 배열 안에 있는 특정한 셀의 내용을 가리켜 그 내용을 참조하거나

(읽어오거나) 또는 그 내용에 다른 값을 대입하는 것• 컨텐츠 인덱싱에는 중괄호 { }가 사용됨• 컨텐츠 인덱싱에는 중괄호 { }가 사용됨

셀 배열이름{ i } 또는 셀 배열이름{ i, j }

MATLAB PROGRAMMING CH. 7 14

Page 15: CH. 7 셀배열과구조체 - Prof. Soon S. Jarngssjarng.chosun.ac.kr/matlab/chapter07.pdf · 2017-05-29 · 7.1 셀배열 서로다른타입을가지는데이터들을배열의형태로저장한것

(예제 7-5)명령어 창에서 다음의 컨텐츠 인덱싱을 통해 셀 배열의 각 셀의 내용을 참조하는 것을 보자하는 것을 보자.

MATLAB PROGRAMMING CH. 7 15

Page 16: CH. 7 셀배열과구조체 - Prof. Soon S. Jarngssjarng.chosun.ac.kr/matlab/chapter07.pdf · 2017-05-29 · 7.1 셀배열 서로다른타입을가지는데이터들을배열의형태로저장한것

(예제 7-6)다음을 실행하여 컨텐츠 인덱싱을 이용한 셀 배열 내의 특정한 셀의 내용을 다른 값으로 대치하는 것을 보자른 값으로 대치하는 것을 보자.

MATLAB PROGRAMMING CH. 7 16

Page 17: CH. 7 셀배열과구조체 - Prof. Soon S. Jarngssjarng.chosun.ac.kr/matlab/chapter07.pdf · 2017-05-29 · 7.1 셀배열 서로다른타입을가지는데이터들을배열의형태로저장한것

7.1.3 셀의 내용 참조(예제 7-7)다음의 명령을 실행하여 각 셀에 할당된 데이터를 수정해 보자.

MATLAB PROGRAMMING CH. 7 17

Page 18: CH. 7 셀배열과구조체 - Prof. Soon S. Jarngssjarng.chosun.ac.kr/matlab/chapter07.pdf · 2017-05-29 · 7.1 셀배열 서로다른타입을가지는데이터들을배열의형태로저장한것

7.1.3 중첩된 셀 배열 (예제 7-8)다음 명령을 실행하여

셀 배열의 셀에 다른 셀 배열이 할당된 것

중첩 셀 배열을 이해해보자.

셀 배열의 각 셀은 그 안에다른 셀 배열을 그 내용(content)으로서(content)으로서할당받을 수 있다.

MATLAB PROGRAMMING CH. 7 18

Page 19: CH. 7 셀배열과구조체 - Prof. Soon S. Jarngssjarng.chosun.ac.kr/matlab/chapter07.pdf · 2017-05-29 · 7.1 셀배열 서로다른타입을가지는데이터들을배열의형태로저장한것

②에서 cellplot(cellA)를 실행하면 다음과 같이 cellA의 구조②에서 p ( )를 실행하면 다음과 같이 의 구

MATLAB PROGRAMMING CH. 7 19

Page 20: CH. 7 셀배열과구조체 - Prof. Soon S. Jarngssjarng.chosun.ac.kr/matlab/chapter07.pdf · 2017-05-29 · 7.1 셀배열 서로다른타입을가지는데이터들을배열의형태로저장한것

7.2 구조체

• 구조체는 셀 배열과 같이 서로 다른 형식의 여러 개의 데이터를 같이 저장할수 있다.

• 구조체는 자신이 포함할 데이터를 할당할 변수들을 가지며 이 변수들에 다양한 형식의 값을 할당하여 서로 다른 형식의 데이터를 저장할 수 있다. 이렇게구조체 안에 포함된 변수를 필드라고 한다구조체 안에 포함된 변수를 필드라고 한다.

MATLAB PROGRAMMING CH. 7 20

Page 21: CH. 7 셀배열과구조체 - Prof. Soon S. Jarngssjarng.chosun.ac.kr/matlab/chapter07.pdf · 2017-05-29 · 7.1 셀배열 서로다른타입을가지는데이터들을배열의형태로저장한것

MATLAB PROGRAMMING CH. 7 21

Page 22: CH. 7 셀배열과구조체 - Prof. Soon S. Jarngssjarng.chosun.ac.kr/matlab/chapter07.pdf · 2017-05-29 · 7.1 셀배열 서로다른타입을가지는데이터들을배열의형태로저장한것

7.2.1 구조체 생성과 활용

(1) 점연산자를 이용한 구조체 생성

구조체 이름.필드이름 = 값

Car.model='KA101'

- 예제

Car.model KA101Car.year=2011Car.plate='KS8824'

MATLAB PROGRAMMING CH. 7 22

Page 23: CH. 7 셀배열과구조체 - Prof. Soon S. Jarngssjarng.chosun.ac.kr/matlab/chapter07.pdf · 2017-05-29 · 7.1 셀배열 서로다른타입을가지는데이터들을배열의형태로저장한것

(예제 7-9)앞에서 언급한 구조체 Car를 다음과 같이 명령어 창에서 점연산자를 이용하여생성하시오생성하시오.

구조체 Car를 생성한 후의 작업공간창

MATLAB PROGRAMMING CH. 7 23

Page 24: CH. 7 셀배열과구조체 - Prof. Soon S. Jarngssjarng.chosun.ac.kr/matlab/chapter07.pdf · 2017-05-29 · 7.1 셀배열 서로다른타입을가지는데이터들을배열의형태로저장한것

(2) 내장함수 struct를 이용한 구조체 생성

구조체이름 = struct( '필드이름1‘, 값1, ’필드이름2‘, 값2 .... )

Car= struct('model','KA101', 'year', 2011, 'plate','KS8824')

- 예제

(예제 7-10)예제 7-9의 구조체 Car를 내장함수 struct를 이용하여 정의하시오.

MATLAB PROGRAMMING CH. 7 24

Page 25: CH. 7 셀배열과구조체 - Prof. Soon S. Jarngssjarng.chosun.ac.kr/matlab/chapter07.pdf · 2017-05-29 · 7.1 셀배열 서로다른타입을가지는데이터들을배열의형태로저장한것

(3) 구조체의 필드 값 수정, 필드의 추가 및 삭제

<구조체 필드값 수정>

구조체 이름 필드 = 새로운 값구조체 이름.필드 = 새로운 값

setfield( 구조체이름, ‘필드이름’, 새로운 값 )

(예제 7-11)다음의 명령을 실행하여 점 연산자와 setfield 함수를 이용해 구조체의 필드의값을 수정하시값을 수정하시오.

MATLAB PROGRAMMING CH. 7 25

Page 26: CH. 7 셀배열과구조체 - Prof. Soon S. Jarngssjarng.chosun.ac.kr/matlab/chapter07.pdf · 2017-05-29 · 7.1 셀배열 서로다른타입을가지는데이터들을배열의형태로저장한것

<구조체 필드 추가 >

구조체에 새로운 필드를 추가하는 것도 점연산자나 내장함수 setfield를 이용

(예제 7-12)예제 7-11의 구조체에 대해 다음의 명령을 실행하여 구조체의 필드를 추가하시오.예제 7 11의 구조체에 대해 다음의 명령을 실행하여 구조체의 필드를 추가하시오.

MATLAB PROGRAMMING CH. 7 26

Page 27: CH. 7 셀배열과구조체 - Prof. Soon S. Jarngssjarng.chosun.ac.kr/matlab/chapter07.pdf · 2017-05-29 · 7.1 셀배열 서로다른타입을가지는데이터들을배열의형태로저장한것

<구조체 필드 삭제>

구조체 이름 = rmfield(구조체 이름, 삭제할 필드이름)

구조체 이름 = rmfield(구조체 이름 삭제할 필드의 셀배열)구조체 이름 = rmfield(구조체 이름, 삭제할 필드의 셀배열)= rmfield(구조체이름, {‘필드이름1’, ‘필드이름2’})

MATLAB PROGRAMMING CH. 7 27

Page 28: CH. 7 셀배열과구조체 - Prof. Soon S. Jarngssjarng.chosun.ac.kr/matlab/chapter07.pdf · 2017-05-29 · 7.1 셀배열 서로다른타입을가지는데이터들을배열의형태로저장한것

(예제 7-13)예제 7-12에서 정의된 구조체에서 rmfield를 이용해서 다음과 같이 필드를 제거하시오.하시

MATLAB PROGRAMMING CH. 7 28

Page 29: CH. 7 셀배열과구조체 - Prof. Soon S. Jarngssjarng.chosun.ac.kr/matlab/chapter07.pdf · 2017-05-29 · 7.1 셀배열 서로다른타입을가지는데이터들을배열의형태로저장한것

(4) 구조체의 필드 확인 및 필드 값 참조

< 필드 확인 >< 필드 확인 >ⅰ) 내장함수 disp를 이용하여 구조체가 가지고 있는 필드들과 각 값을 확인할 수 있다. ⅱ) 내장함수 fieldnames를 이용하면 구조체가 가지고 있는 필드의 이름을 확인할 수

있다있다.ⅲ) 내장함수 isfield를 이용하여 구조체가 특정 필드를 가지고 있는지 확인할 수 있다.

fieldnames( 구조체 이름)

isfield( 구조체 이름, ‘필드이름’ )

isfield( 구조체 이름 { ‘필드이름1’ ‘필드이름2’ } )isfield( 구조체 이름, { 필드이름1 , 필드이름2 } )

MATLAB PROGRAMMING CH. 7 29

Page 30: CH. 7 셀배열과구조체 - Prof. Soon S. Jarngssjarng.chosun.ac.kr/matlab/chapter07.pdf · 2017-05-29 · 7.1 셀배열 서로다른타입을가지는데이터들을배열의형태로저장한것

(예제 7-14) 다음과 같이 명령어 창에서 실행하여 내장함수 fieldnames와 isfield의 사용법을익혀보자.

MATLAB PROGRAMMING CH. 7 30

Page 31: CH. 7 셀배열과구조체 - Prof. Soon S. Jarngssjarng.chosun.ac.kr/matlab/chapter07.pdf · 2017-05-29 · 7.1 셀배열 서로다른타입을가지는데이터들을배열의형태로저장한것

< 필드 값 참조 >

점연산자를 이용하거나 내장함수 getfield를 이용

getfield( 구조체이름 ‘필드이름’)getfield( 구조체이름, 필드이름 )

(예제 7-15)(예제 7-15) 다음과 같이 명령어 창에서 실행하여 점 연산자와 내장함수 getfield를 사용하여 구조체의 필드의 값을 참조해보자.

MATLAB PROGRAMMING CH. 7 31

Page 32: CH. 7 셀배열과구조체 - Prof. Soon S. Jarngssjarng.chosun.ac.kr/matlab/chapter07.pdf · 2017-05-29 · 7.1 셀배열 서로다른타입을가지는데이터들을배열의형태로저장한것

7.2.2 구조체 배열

구조체 배열은 구조체를 원소로 갖는 배열

MATLAB PROGRAMMING CH. 7 32

Page 33: CH. 7 셀배열과구조체 - Prof. Soon S. Jarngssjarng.chosun.ac.kr/matlab/chapter07.pdf · 2017-05-29 · 7.1 셀배열 서로다른타입을가지는데이터들을배열의형태로저장한것

(1) 구조체 배열 생성

(예제 7 16)(예제 7-16)앞에서 다루었던 구조체 배열 Cars를 생성해 보자.

MATLAB PROGRAMMING CH. 7 33

Page 34: CH. 7 셀배열과구조체 - Prof. Soon S. Jarngssjarng.chosun.ac.kr/matlab/chapter07.pdf · 2017-05-29 · 7.1 셀배열 서로다른타입을가지는데이터들을배열의형태로저장한것

①에서 실행 후, 작업 공간창

②에서 실행 후, 작업 공간창

MATLAB PROGRAMMING CH. 7 34

Page 35: CH. 7 셀배열과구조체 - Prof. Soon S. Jarngssjarng.chosun.ac.kr/matlab/chapter07.pdf · 2017-05-29 · 7.1 셀배열 서로다른타입을가지는데이터들을배열의형태로저장한것

(예제 7-17)앞에서 다루었던 구조체 배열 Cars를 생성해 보자.앞에서 다루었던 구조체 배열 Cars를 생성해 보자.

MATLAB PROGRAMMING CH. 7 35

Page 36: CH. 7 셀배열과구조체 - Prof. Soon S. Jarngssjarng.chosun.ac.kr/matlab/chapter07.pdf · 2017-05-29 · 7.1 셀배열 서로다른타입을가지는데이터들을배열의형태로저장한것

①에서 실행 후, 작업 공간창

MATLAB PROGRAMMING CH. 7 36

Page 37: CH. 7 셀배열과구조체 - Prof. Soon S. Jarngssjarng.chosun.ac.kr/matlab/chapter07.pdf · 2017-05-29 · 7.1 셀배열 서로다른타입을가지는데이터들을배열의형태로저장한것

• repmat 함수를 이용한 구조체 배열 생성

repmat(A, M, N)

(예제 7 18)(예제 7-18)앞에서 다루었던 구조체 배열Cars를 repmat 함수를 이용하여 생성하시오.

MATLAB PROGRAMMING CH. 7 37

Page 38: CH. 7 셀배열과구조체 - Prof. Soon S. Jarngssjarng.chosun.ac.kr/matlab/chapter07.pdf · 2017-05-29 · 7.1 셀배열 서로다른타입을가지는데이터들을배열의형태로저장한것

(2) 구조체 배열에서 필드 참조

• 점 연산자를 이용하는 방법과 내장함수 getfield를 이용하는 방법

X = 구조체 배열 이름(i) 필드이름

X = getfield(구조체 배열 이름(i), '필드이름')

X = 구조체 배열 이름(i).필드이름

• 구조체 배열에서 i 번째 원소의 필드의 값 수정

구조체 배열 이름(i).필드이름 = 새로운 값

구조체 배열 이름(i) = setfield(구조체 배열 이름(i), '필드이름', 새로운 값)

MATLAB PROGRAMMING CH. 7 38

Page 39: CH. 7 셀배열과구조체 - Prof. Soon S. Jarngssjarng.chosun.ac.kr/matlab/chapter07.pdf · 2017-05-29 · 7.1 셀배열 서로다른타입을가지는데이터들을배열의형태로저장한것

(예제 7-19)예제 7-18에서 생성한 구조체 배열을 이용하여 다음의 명령을 실행하여 구조체배열의 필드값을 참조하고 수정하시오배열의 필드값을 참조하고 수정하시오.

MATLAB PROGRAMMING CH. 7 39

Page 40: CH. 7 셀배열과구조체 - Prof. Soon S. Jarngssjarng.chosun.ac.kr/matlab/chapter07.pdf · 2017-05-29 · 7.1 셀배열 서로다른타입을가지는데이터들을배열의형태로저장한것

공학 예제공학 예제

사람의 인원수와 각 사람의 이름을 입력 받고 그 이름의 첫 글자를사람의 인원수와 각 사람의 이름을 입력 받고 그 이름의 첫 글자를기준으로 오름차순으로 정렬하여 출력하는 스크립트를 작성하시오. 단 입력 받은 이름을 셀 배열로 저장하여 정렬하시오.

MATLAB PROGRAMMING CH. 7 40

Page 41: CH. 7 셀배열과구조체 - Prof. Soon S. Jarngssjarng.chosun.ac.kr/matlab/chapter07.pdf · 2017-05-29 · 7.1 셀배열 서로다른타입을가지는데이터들을배열의형태로저장한것

MATLAB PROGRAMMING CH. 7 41

Page 42: CH. 7 셀배열과구조체 - Prof. Soon S. Jarngssjarng.chosun.ac.kr/matlab/chapter07.pdf · 2017-05-29 · 7.1 셀배열 서로다른타입을가지는데이터들을배열의형태로저장한것

예를 들어 3명의 이름을 입력 받아 cellA에 다음과 같이 저장하고 정렬하는 경우를 보자.

• k=1이고 j=2인 경우

MATLAB PROGRAMMING CH. 7 42

Page 43: CH. 7 셀배열과구조체 - Prof. Soon S. Jarngssjarng.chosun.ac.kr/matlab/chapter07.pdf · 2017-05-29 · 7.1 셀배열 서로다른타입을가지는데이터들을배열의형태로저장한것

• k=1이고 j=3인 경우

MATLAB PROGRAMMING CH. 7 43

Page 44: CH. 7 셀배열과구조체 - Prof. Soon S. Jarngssjarng.chosun.ac.kr/matlab/chapter07.pdf · 2017-05-29 · 7.1 셀배열 서로다른타입을가지는데이터들을배열의형태로저장한것

k=2이고 j=3인 경우 k=2이고 j=3인 경우

MATLAB PROGRAMMING CH. 7 44

Page 45: CH. 7 셀배열과구조체 - Prof. Soon S. Jarngssjarng.chosun.ac.kr/matlab/chapter07.pdf · 2017-05-29 · 7.1 셀배열 서로다른타입을가지는데이터들을배열의형태로저장한것

• 최종적인 결과

MATLAB PROGRAMMING CH. 7 45

Page 46: CH. 7 셀배열과구조체 - Prof. Soon S. Jarngssjarng.chosun.ac.kr/matlab/chapter07.pdf · 2017-05-29 · 7.1 셀배열 서로다른타입을가지는데이터들을배열의형태로저장한것

• 스크립트를 eng_7_1.m 으로 저장하고 실행한 결과

MATLAB PROGRAMMING CH. 7 46