1. Trang chủ
  2. » Công Nghệ Thông Tin

Mảng, tế bào và cấu trúc

9 412 0
Tài liệu được quét OCR, nội dung có thể không chính xác
Tài liệu đã được kiểm tra trùng lặp

Đang tải... (xem toàn văn)

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Tiêu đề Mảng tế bào và cấu trúc
Thể loại Tài liệu hướng dẫn
Định dạng
Số trang 9
Dung lượng 221,93 KB

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Nội dung

Máng tế bảo được xem như một mảng của các số nhị phân hoặc là như bộ chứa có thể lưu giữ nhiều kiểu dữ liệu khác nhau.. Cấu trúc là những mảng dữ liệu hướng đối tượng xây dựng cùng với t

Trang 1

CHUONG 19

MATLAB 5.0 giới thiệu 2 loại dữ liệu mới có tên gọi là mảng tế bào và cấu trúc Máng tế bảo được xem như một mảng của các số nhị phân hoặc là như bộ chứa có thể lưu giữ nhiều kiểu dữ liệu khác nhau Cấu trúc là những mảng dữ liệu hướng đối tượng xây dựng cùng với tên các trường có thể chứa nhiều kiểu dữ liệu khác nhau, bao gồm mảng tế bào và các cấu trúc

khác Cấu trúc cúng cấp cho ta phương tiện thuận lợi để nhóm các kiểu dữ liệu khác nhau

Những kiểu dữ liệu mới này, máng tế bào và cấu trúc tạo cho bạn khả năng tổ chức dữ liệu thành các gói rất thuận tiện

19.1 Mang té bao

Máng tế bào là những mảng MATLAB mà các phân tử của nó là các tế bào Mỗi tế bảo

trong mảng tế bào chứa các kiểu dữ liệu của MATLAB bao gồm mảng số, văn bản, đối tượng đặc trưng, các máng lế bào và cấu trúc Vi dụ một tế bào của máng tế bào có thể là mang sé, loại khác là kiểu chuỗi văn bản, loại khác là vector các giá trị số phức Các mảng tế bào có thể được :‹ây dựng với số chiêu lớn hơn 2, tuy nhiên để cho thuận tiện khi xét người ta lấy số chiều

là 2

18.2 Xây dựng và hiển thị mảng tế bào

Mảng tế bảo có thể được xây dựng bằng cách dùng câu lệnh gán, hoặc chỉ định mảng trước bằng cách sử dụng hàm tế bào sau đó gán dữ liệu cho mảng

Như mọi loại mảng khác, mảng té bao cé thé tao ra bằng cách gán dữ liệu cho từng tế bảo độc lập ở cùng một thời điểm Có hai cách khác nhau thâm nhập vào mảng tế bào Nếu bạn sử

dụng cú pháp mảng tiêu chuẩn, bạn phải để các tế bào trong dấu ngoặc "{ }" Ví dụ:

>>A(1,1)={1 2 3: 456 789},

>>A(1,2)={2+ 3Ÿ,

>> A(2, 1) ={ A text string 7:

216

Trang 2

>> A(2, 2) = (12: -2:0};

Dấu ngoặc nhọn bên phía phải của dấu bằng chỉ ra rằng biểu thức là một tế bào, hay còn gọi là chỉ số tế bào Cách viết sau tương đương với cách viết trên:

>> AUI,1) = [1 23:45 6: 7 8 9];

>> AML, 2} = 243):

>> A{2,1}=‘Atext string’:

>> A(2, 2} = 12: -2: 0:

Dấu ngoặc nhọn bên trai chi ra rang A la mOt mang té bao va biéu thie dat bén trong [a

khai báo tế bào

MATLAB hién thi mang A nhu sau:

>> A

A=

[3X3 double] 2.0000+ 3.0000 i

"A text string [1x7 double |

Để hiển thị nội dụng của mỗi tế bao trong mang tế bào ta dùng hàm ce/a”sø, hiển thị nội

dung của riêng một tế bào, truy nhập vào tế bào có sử dụng dấu ngoặc nhọn Ví dụ:

>> A22)

MATLAB hién thi so đô cấu trúc đồ hoa máng tế bào trong một cửa số bằng việc gọi hàm

celipiot

Ham ce/ làm việc với mảng tế bảo bằng việc tạo ra các máng trống theo kích cỡ của mang Vi du:

>> C= cell (2, 3)

19.3 Tổ hợp và khôi phục mắng tế bào

Nếu bạn gán dữ liệu cho tế bào ngoài số-chiều hiện có của mảng MATLAB sẽ tự động mở rộng mảng và điền vào giữa ma trận số rỗng Chú ý khái niệm "{]" thay cho ma trận tế bào rỗng va “[ ]’ thay cho mang sé ma tran rong

Trang 3

Sử dụng dẫu móc vuông để kết nối mảng tế bao:

>> C=|A BỊ

C=

[3x3 double] 2.0000+ 3.0000) [1x2 double] ' John Smith’

‘A text string [1x7 double] [200001300001] [ 5 |

>> C=lA‘B]

C=

[3x3 double | 2.0000 + 3.0000:

‘A text string’ [1x7 double |

[1x2 double] =‘ John Smith’

¡2.0000+ 3.0000] [ 5]

Một tập con các tế bào có thể được tách ra tạo thành một màng tế bào mới Nếu D là một

mảng tế bào 3x3, người ta có thể tách ra để tạo thành một mảng tế bào mới 2x2 như sau:

>>Ƒ = D(2:2,2:3);

Hàm zes/ape có thể được sử dụng để thay đổi cấu hình của một mảng tế bào nhưng

không thể dùng để thêm vào hoặc bớt đi tế bào,

>> X= cells(3,4);

-_ >> size(X)

ans =

3 4

>> X= reshape(X.6,2);

>> size(Y)

ans =

6 2

18.4 Truy nhập vào trong máng tế bào

Để truy nhập dữ liệu chứa trong các phần tử của mảng tế bảo, sử dụng dấu ngoặc nhọn

Dùng dấu ngoặc đơn thâm nhập mội phần tử như là một lế bào Để truy nhập nội dung của

phan tir trong mang té bao, kết nối các biểu thức như sau:

>>x= B22) % truy nhập nội dung của tế bào

Trang 4

>> class(x)

ans=

double

>> y = B[2,2] % truy nhap vao ban than té bao

y=

[5]

>> class(y)

ans=

cell

>> B{1,1}(1,2) % truy nhập vào phần tử thứ hai của

% vectortrong tế bào

ans=

2

Để truy nhập dải các phần tử trong mảng tế bào, sử dụng hàm dea/

>> [a,b] = deal(B{2,:1})

a=

2.0000+ 3.0000

5

Ham dea/can mot danh sach cac bién phan biét nhau bởi dấu phảy Biểu thức B{2,:} có thé str dung 6 moi noi va dau phay ding dé phan tach danh sach cac bién Do do, B{2,:} tuong duong vdi B(2,1) va B(2,2)

19.5 Mang tế bào của chuỗi kí tự

Một trong những ứng dụng phổ biến của mảng tế bào là xây dựng một mảng văn bản Mảng chuỗi kí tự tiêu chuẩn đỏi hỏi tất cả các chuỗi đều có chung độ dài Bởi vì mảng tế bào có

thể chứa nhiều kiểu dữ liệu khác nhau trong mỗi phần tử, chuỗi kí tự trong mảng tế bào không

có giới hạn này Ví dụ:

Trang 5

>> T = {' Tom’; Disk}

T=

‘Tom’

‘Disk’

19.6 Cau tric

Cấu trúc là những đối tượng MATLAB có tên “bộ chứa dữ liệu” còn gọi là Ze/đs, Như mọi phần tử của mảng tế bảo, trường cấu trúc có thể có bất cứ mội kiểu dữ liệu nào, Chúng khác ở

chỗ cấu trúc trưởng được truy nhập bằng tên phổ biến hơn là chỉ số, và không có sự hạn chế

nào về chỉ số cũng như cấu hình của các trường cấu trúc Cũng giống như mảng tế bao, cấu trúc có thể được nhóm lại với nhau tạo thành máng và mảng tế bào Một cấu trúc đơn là một

mảng cấu trúc 1x1

19.7 Xay dung mang cấu trúc

Cấu trúc sử dụng dấu “ “ để truy nhập vào trường Xây dựng một cấu trúc đơn giản như

gan dữ liệu vào các trường độc lập Ví dụ sau tạo một bản ghi client cho thư viện kiểm tra,

>> client.name = ` John Doe;

>> client.cost = 86.50;

>> clientes AIC = [6.3 6.8 7.1 7.0 6.7 6.5 63 6.4]

>> client.test CHC = [2.8 3.4 3.6 4.1 3.5]

>> client

client =

name L' John Doe ' cost:86.50

test: [1x1 struct]

>> Client test

ans=

AIC:6.3000 6.8000 7.1000 7.0000 6.7000 6.2000 6.3000 6.4000

CHC:2.8000 3.4000 3.6000 4.1000 3.5000

Bây giờ tạo bản ghi client thir hai:

Trang 6

>> client(2}.name = ' Alice Smith‘:

).cost = 112.35;

>> client(2).tesL AIC = (5.3 5.8 7.0 6567 5.5 6.0 5.9]

>> client(2) test CHC =[3.8 6.3 3.2 3.1 25],

>> client

(

>> client(2

( (

client =

1x2 struct array with field

name

cost

test

Cấu trúc cũng có thể được xây dựng bằng cách dùng hàm struct để tạo trước mội mảng cấu trúc Cú pháp là: ( field’ V1, ‘ fleld2’, V2, ) trong dé field1, field2, v.v la cac trường, và các mảng V1, V2, v.v phải là các mảng tế bảo có cùng kích thước., cùng số tế bảo, hoặc giá

trị Ví dụ, một mảng cấu trúc có thể được tạo ra như sau:

>> N ={' John Doe `, ' Alice Smith}:

>>C= 6.50, 112.35};

>> P = {[10.00 20.00 45.00);

>> bills = struct(‘name’N,‘cost’,C,’payment’,P}

bils=

1x2 struct array with fields

name cost

payment

19.8 Truy nhập vào các trường cấu trúc

Bởi vi nội dung cấu trúc là tên nhiều hơn là chỉ số, như trong trường hợp máng tế bào, lên của các trường trong cấu trúc phải được biết đến để truy nhập dữ liệu chứa trong chúng Tên

của các trường có thể được tìm thấy ở trong ở trong cửa số lệnh, đơn giản là chỉ việc nhập vào

lên của cấu trúc Tuy nhiên ở trong M-fie, một hàm cần thiết được tạo ra để cập nhật các tên trường đó Hàm Aefdname tra lai mot mang té bào có chứa tên của các trường trong mội cấu trúc

Trang 7

>> T = fieldnammes(bills)

T=

‘name ' cost |

‘payment’

Có hai phương pháp để truy nhập vào trường cấu trúc, Chỉ số trực tiếp sử dụng kĩ thuật chi

mục thích hợp, như phương pháp truy nhập trường cấu trúc, và chỉ số mảng thích hợp để truy nhập vào một số hoặc mộ mảng tế bào Sau đây là một ví dụ dựa trên cấu trúc bills va client

đã xét ở trên:

>> bills name

ans =

John Doe

ans=

Alice Smith

>> bills(2).cost

ans=

112.3500

>> bills(4)

ans=

name: ' John Doe‘

cost: ' 86.5000 '

payment: 10.000 20.0000 45.0000

>> baldue = bills(1).cost - sum(Bils(1).paymen)

baldue=

6.5000

>> bills(2).payment(2)

ans =

12.3500

>> client(2).test AIC(3)

Trang 8

ans=

7000

Phương pháp chỉ mục trực tiếp thường được sử dụng để truy nhập giá trị trưởng Tuy nhiên, ở các M-file nếu tên các trường được gọi ra từ hàm /#eldnames, thì hàm geffield và

sefffeld có thể được sử dụng để truy nhập dữ liệu trong cấu trúc Ví dụ:

>> getfield(biils,{1},name) — % tương tự như bils(1).name

ans=

John Doe

>> T = fieldnames(bills):

>> getfriend(bills {2}, 13} {2 tương tự như s(2),paymenl(2)

ans=

12.3500

Ví dụ sau trả lại cấu trúc có chứa cùng kiểu dữ liệu như cấu trúc nguyên thuỷ với một giá trị

bị thay đổi Dòng lệnh tương đương của client(2).tesLAIC(3) = 7.1 là:

>> client = setfield(cient{2 },test, "AIC '{3},7.1}

client=

‘x2 struct array with fields

name cost

test

>> client(2).tesLAIC(3)

ans=

7.1000

Một trường có thể được thêm vào trong một máng cấu trúc chỉ đơn giản bang cách gan gia

trị cho trường cấu trúc mới

>> client(1).addr = { MyStreet MyCity )

client =

1x2 struct array with fields

name

Trang 9

cost test addr

Một trường có thể được bỏ đi khỏi cấu trúc (hoặc một mảng cấu trúc) bằng lệnh zmfe/d

$= mrnfield (S, ' field’) s& bỏ đi trường field từ cấu trúc S $= rmnfield (S, F) trong dé F la mat

mắng tế bào của tên các trưởng, bỏ đi nhiều hơn một trường từ cấu trúc S tại một thời điểm

>> client = rmfield(chent,’ addr‘)

client =

1x2 struct array with fields

name

cost fest

19.9 Sunghich dao va ham kiém tra

Sự nghịch đảo giữa các máng tế bào và các cấu trúc bằng cách dùng hàm struct2celfva cell2strucf Tên trường phải được cùng cấp đây đủ cho cefl2sfucf và bị mất đi khi chuyển

thành mội máng tế bào từ một cấu trúc Sự chuyển đối từ mảng số và mảng xâu kí tự thành

mảng tế bào bằng cách sử dụng hàm zm2ceflvà ceffsứ: Ngược lại chuyển đổi từ một màng tế

bào thành mang ki tu bang ham char

Mặc dù hàm c/ass trả về kiểu kiểu dữ liệu của đối tượng, e/ass vẫn không thuận tiện sử

dụng để kiểm tra kiểu dữ liệu Hàm ésa(x, ‘ class ‘) tra lai frue néu x là một đối tượng kiểu

‘class’ Ví dụ, /sa(client, ' struct ) sẽ trả lại true Để thuận tiện, một số hàm kiểm tra số khác có

sẵn trong thư viện chương trình như: “sữuct, iscell, ischar, isnumeric, va islogical

Ngày đăng: 02/10/2013, 20:20

TỪ KHÓA LIÊN QUAN

w