Macierze komórek i struktur

Transkrypt

Macierze komórek i struktur
Złożone typy danych w Matlabie
W Matlabie istnieją dwa złożone typy danych pozwalające przechowywać w jednej tablicy
dane różnych typów. Te złożone typy danych to tablice komórek (typ: cell) oraz tablice struktur
(typ: struct).
Tablica komórek (cell)
−
to tablica w której każdy element może być innego typu a w tym także typu złożonego.
W odróżnieniu od tablic liczbowych, wpisywaną zawartość tablic komórkowych ujmujemy w
nawiasy klamrowe { } (a nie prostokątne).
Jako pierwszy przykład zdefiniujemy tablicę komórkową z nazwami przedmiotów i ocenami
uzyskanymi z tych przedmiotów przez pewnego studenta:
>> oc={'fizyka', 3.5; 'chemia', 4.0; 'rysunek',5}
oc =
'fizyka'
'chemia'
'rysunek'
[3.5000]
[
4]
[
5]
Z kolei tą tablicę z ocenami możemy wstawić jako element do bardziej złożonej tablicy ST
z danymi studenta, gdzie podane będą: imię, nazwisko, wiek, oceny oraz dokonywane w tym roku
wpłaty:
>> ST={'Jan Kowalski', 23; oc, [230, 120, 600]}
ST =
'Jan Kowalski'
{3x2 cell}
[
23]
[1x3 double]
Dostęp do danych w tablicy komórkowej jest możliwy przez podawanie kolejnych
poziomów indeksów, na przykład:
>> ST{2,1}{3,1}
ans =
rysunek
Dane następnych studentów możemy gromadzić na następnych stronach trójwymiarowej
tablicy ST:
>> ST(:,:,2)={'Adam Kos', 25;{},[]}
ST(:,:,1) =
'Jan Kowalski'
{3x2 cell}
ST(:,:,2) =
'Adam Kos'
{}
[
23]
[1x3 double]
[25]
[]
A więc mamy dwie strony tablicy trójwymiarowej: pierwsza z danymi pana Kowalskiego a druga
z niekompletnymi jeszcze danymi pana Kosa.
Jednym ze sposobów wprowadzania danych do tablicy komórkowej oraz strukturalnej może
być pokazane niżej zastosowanie polecenia inputdlg:
% Program wprowadza dane osób do tablicy komórkowej: osoba
% oraz do tablicy struktur o nazwie: baza
clear; clc
pola={'Imie'; 'Nazwisko'; 'Wiek'};
we={'...'};
i=1;
while ~isempty(we)
we = inputdlg(pola, ['Student ',num2str(i)]);
if ~isempty(we)
osoba{i}=we;
osoba{i}
baza(i)=cell2struct(osoba{i},pola,1)
i=i+1;
end
end
Dostęp do elementów tablicy komórkowej mamy tylko przez indeksy. Nieco wygodniejszy
może wydawać się dostęp do elementów tablicy struktur, gdzie po nazwie tablicy i po indeksach
jej elementu podajemy oddzieloną kropką nazwę pola.
Tablica struktur (struct)
−
to tablica, której elementami są rekordy (jak w bazie danych) złożone z pól
przechowujących wartości różnego typu i identyfikowanych przez swoje nazwy.
Rekordy te nazywają się w Matlabie strukturami (typ: struct).
Tablice struktur można definiować na dwa sposoby:
a) Definiowanie z użyciem „konstruktora” czyli funkcji struct ma postać:
nazwa_tablicy = struct('nazwa_pola1', wartość_pola1, 'nazwa_pola2', wartość_pola2, …)
Przykład:
>> student = struct('Nazwisko', 'Kowalski', 'Imie', 'Jan', 'Wiek', 23)
student =
Nazwisko: 'Kowalski'
Imie: 'Jan'
Wiek: 23
Zdefiniowanie zmiennej student jako struktury o określonych polach i ich wartościach utworzy
na razie jednoelementową tablicę strukturalną, której elementem jest rekord dotyczący konkretnego
studenta.
b) Definiowanie przez przypisywanie wartości kolejnych pól.
Nazwy pól oddzielamy kropką od nazwy tablicy lub jej elementu.
W ten sposób możemy zarówno definiować pola nowej struktury jak i dodawać nowe pole do już
istniejącego rekordu:
>> student.grupa=1
student =
Nazwisko: 'Kowalski'
Imie: 'Jan'
Wiek: 23
grupa: 1
a także definiować kolejne elementy-rekordy dotyczące kolejnych studentów:
>> student(2).Nazwisko='Jankowski'
student =
1x2 struct array with fields:
Nazwisko
Imie
Wiek
grupa
>> student(2) % wyświetli zawartość drugiego elementu tablicy struktur
ans =
Nazwisko: 'Jankowski'
Imie: []
Wiek: []
grupa: []

Podobne dokumenty