Структурални типови података

Preview:

DESCRIPTION

Структурални типови података. Тип set Тип array Тип record Тип file Тип string. Тип set. Тип set је скуп свих подскупова основног типа. Основни тип може да буде било који редни тип. Задавање скупа врши се тако што се у средњим заградама наведу елементи скупа одвојени зарезима. - PowerPoint PPT Presentation

Citation preview

Структурални типови података

• Тип set

• Тип array

• Тип record

• Тип file

• Тип string

Тип set

• Тип set је скуп свих подскупова основног типа.

• Основни тип може да буде било који редни тип.

• Задавање скупа врши се тако што се у средњим заградама наведу елементи скупа одвојени зарезима.

• Скуп може да има до 256 елемената.

Тип set

type ime prosti tipset= of

Тип set

izraz

[ ]

izraz..

,

Тип set

type skup = set of 1..256;

slova = set of ‘A’..’Z’;

cifre = set of ‘0’..’9’;

var a, b, c : skup;

a:=[1, 3, 5, 7, 9];

b:=[2, 4, 5, 6, 8];

Тип set

• На типу set дозвољене су операције• * (пресек), • + (унија) и • - (разлика).

Тип set

• Дозвољени су и оператори који дају резултат логичког типа: in јесте елемент скупа,

= једнакост скупова,

<> различитост скупова,

<= јесте подскуп,

>= јесте надскуп.

• Празан скуп се означава са [].

Тип set

Пример Написати програм који исписује све просте бројеве до 250 коришћењем алгоритма Ератостеново сито.

Тип setprogram prosti(input,output);{Eratsotenovo sito}const n=250;var sito, prostbroj: set of 2..n;

p, j: integer;begin

writeln(‘prosti brojevi do ’, n);writeln;sito:=[2..n];prostbroj:=[];p:=2;repeat

while not(p in sito) dop:=p+1;

prostbroj:=prostbroj+[p];write(p:8);for j:=1 to (n div p) do

sito:=sito-[j*p];until sito = [];

writeln;end.

Тип array

• Тип низ (array) састављен је од компонената које су све истог типа.

• Тип компонената може бити било који прости или структурални тип осим типа file.

Тип array

• Име променљиве типа низ је уједно име сваке од компонената.

• Појединој компоненти се приступа навођењем имена низа и индекса компоненте у средњим заградама.

• Максимална дужина низа се наводи приликом декларације и не може се променити у програму.

Тип array

type ime prosti tiparray= [ ]

,

of tip

Тип array

• Декларација једнодимензионог низа (вектора):

type niz=array[T1] of T2;

при чему је Т1 било који редни тип осим типа integer, али може бити интервални тип над типом integer, док је Т2 тип компонената низа.

Тип array

• Декларација дводимензионалног низа (матрице):

type matrica=array[T1] of array[T2] of T;

где је Т1 тип индекса врсте, Т2 тип индекса колоне а Т тип компонената матрице.

• У том случају, ако је mat променљива типа matrica, компoнентамa приступамо у стилу mat[i][j].

Тип array

• Алтернативни начин декларације је

type matrica=array[T1,Т2] of T;

• У овом случају елементима матрице приступамо у стилу mat[i,j].

Тип array

• Компоненте вишедимензионалних ни-зова се у меморију смештају у редоследу по врстама (row order).

• Уколико су m1 и m2 променљиве истог типа, дозвољено је над њима употребити оператор доделе (m1:=m2) и релацијске операторе = и <>.

Тип array

Пример Написати програм којим се врши сортирање целобројног низа а који има n компонената у растућем редоследу.

Тип arrayprogram sortiranje(input, output);const maxduz=100;var a:array[1..maxduz] of integer;

i, j: 1..maxduz;n, pom: integer;

beginwrite(‘unesite broj elemenata niza ->’);readln(n);writeln(‘unesite elemenate niza’);for i:=1 to n do

readln(a[i]);for i:=1 to n do

write(a[i]:4);for i:=1 to n-1 do

for j:=i+1 to n doif a[i] > a[j] then

beginpom:=a[i];a[i]:=a[j];a[j]:=pom;

end;for i:=1 to n do

write(a[i]:4);end.

Тип array

Пример Написати програм којим се генерише и штампа матрица Аn×n облика.

n

n

nn

nn

A

000

30

210

121

Тип arrayprogram matrica(input,output);var a:array[1..20,1..20] of 0..20;

n, i, j : 1..20;begin

readln(n);for i:=1 to n do

for j:=1 to n doif i <= j then

a[i,j]:=n-j+ielse

a[i,j]:=0;for i:=1 to n do

beginfor j:=1 to n do

write(a[i,j]:4);writeln;

end;end.

Тип record

• Тип запис је састављен од извесног броја компонената које, за разлику од поља, могу бити произвољног типа, изузев типа file.

Тип record

type ime lista komponenatarecord= end

Тип record

• Код навођења листе компонената за сваку од њих се наводи тип на начин сличан декларацији променљивих.

type imetipa = record

S1: T1;

S2: T2; . . .Sn: Tn;

end;

Тип record

• Приступ појединим компонентама променљиве типа record врши се тако што наведемо име променљиве а затим име компоненте између којих је тачка.

• Уколико имамо две променљиве истог типа record, онда можемо да користимо оператор придруживања := и релацијске операторе = и <>.

Тип record

• Запис може да буде компонента другог структуралног типа осим типа скуп.

• Имена компонента записа могу бити иста као и имена неких променљивих изван записа.

Тип record

Пример Написати програм којим се реализује сабирање комплексних бројева.

Тип record

program kompleksni(input, output);type complex = record

re, im: real;end;

var z1, z2, z3: complex;begin

read(z1.re, z1.im);read(z2.re, z2.im);z3.re:=z1.re+z2.re;z3.im:=z1.im+z2.im;write(z3.re, '+ i*', z3.im);

end.

Тип record

• Запис може бити променљив, односно може да садржи променљиви део, реализован помоћу структуре case, који се мења у зависности од вредности селекторског поља.

Тип record

type osobe = record

ime: array[1..15] of char;

prezime : array[1..15] of char;

pol: (m,z);

case pol of

m: (vrok:(da, ne));

z: (devprez: array[1..15] of char);

end;

Тип record

• Наредба with пружа околину у оквиру које не морамо да наводимо име променљиве типа запис, већ само имена појединих компонента.

• Ово је нарочито корисно када неки тип запис садржи компоненте које су такође типа запис.

Тип record

Пример Написати програм којим се израчунава модуо комплексног броја.

Тип record

program moduo(input, output);type complex = record

re, im: real;end;

var z: complex;begin

with z doread(re, im);writeln ('|z| = ', sqrt(sqr(re)+sqr(im)));

end;end.

Тип file

• Тип датотека или file представља низ компонената истог типа који се памти на секундарним меморијским медијумима.

Тип file

type ime tipfile= of

Тип file

• У стандардном Паскалу дефинисан је тип секвенцијалне датотеке као

type datoteka = file of T;

где је Т било који тип осим типа file.

• Датотеке могу бити текстуалне и бинарне.

Тип file

• Текстуална датотека је унапред дефинисани тип text.

type text = file of char;

Тип file

• Стандардни улазни и излазни уређаји су датотеке типа text.

• У оквиру датотека типа text може се радити само са типовима integer, real, char и boolean, док бинарне датотеке могу да садрже и сложеније типове.

Тип file

• Приликом декларације сваке датотеке врши се и имплицитна декларација још једне променљиве која је истог типа као и компоненте датотеке а коју зовемо датотечни прозорчић.

Тип file

• Преко ове променљиве се може приступати компонентама датотеке и то само једној истовремено.

• Ако је d датотека, одговарајући датотечни прозорчић је d^.

Тип file

• Свака датотека има посебан знак који означава крај и који се назива end-of-file.

• Стандардна функција eof(d) враћа true уколико је достигнут крај датотеке d.

Тип file

• У стандардном Паскалу се за рад са датотекама користе стандардне проце-дуре reset, rewrite, get и put.

Тип file

• Процедура reset(d) поставља датотечни прозорчић на почетак датотеке d и променљивој d^ додељује први елемент датотеке.

Тип file

• Уколико датотека није празна тада је eof(d)=false.

• У супротном, eof(d)=true а d^ није дефинисано.

• Ова процедура се употребљава када започињемо читање датотеке.

Тип file

• Процедура rewrite(d) отвара празну датотеку d у коју се сада могу уносити подаци.

• Ако је датотека већ постојала њен претходни садржај се замењује празном датотеком.

Тип file

• Процедура get(d) поставља датотечни прозорчић на следећу компоненту датотеке.

• Ако та следећа компонента не постоји, онда је eof(d)=true а d^ није дефинисано.

Тип file

• Процедура put(d) додаје вредност променљиве d^ на крај датотеке d.

• Може се користити само ако је eof(d)=true.

• Тада остаје eof(d)=true а d^ постаје недефинисано.

Тип file

• У TurboPascalu постоје функције и процедуре за рад са датотекама од којих су најбитније дате у следећој табели.

Тип fileassign(logime, 'fizime') Додељује логичко име logime датотеци са физичким

именом пута fizime.

rewrite(logime) Отвара датотеку са логичким именом logime за упис.

reset(logime) Враћа датотечни прозорчић на почетак датотеке са логичким именом logime.

write[ln](logime, prom) Уписује вредност променљиве prom у датотеку са логичким именом logime.

read[ln] (logime, prom) Чита вредност променљиве prom из датотеке са логичким именом logime.

seek(logime, brkomp) Позиционира датотечни прозорчић на компонету са редним бројем brkomp у датотеци са логичким именом logime.

eoln(logime) Враћа true ако је причитан знак за крај реда у датотеци са логичким именом logime.

eof(logime) Враћа true ако је причитан знак за крај датотеке у датотеци са логичким именом logime.

Тип file

Пример Написати програм којим се преписује садржај датотеке f у датотеку g.

Тип file

program prepisi(input, output);type datoteka = file of integer;var f, g: datoteka;begin

rewrite(g);reset(f);while not eof(f) do

beging^:=f^;put(g);get(f);

end;end.

Тип string

• У TurboPascalu постоји тип string који представља низ знакова.

• Максимална дужина низа се приликом декларације наводи у средњим заградама и мора бити у границама од 1 до 255.

Тип string

• У TurboPascalu постоји тип string који представља низ знакова.

• Максимална дужина низа се приликом декларације наводи у средњим заградама и мора бити у границама од 1 до 255.

type niz=string[20];ime=string[30];

Тип string

• Тип string личи на array of char али постоје две битне разлике.– Промељиве које су типа array of char су

компатибилне једино са променљивама истог типа док су променљиве типа string компатибилне са другим string променљивама без обзира на дефинисану максималну дужину и име типа. Уколико је изворна променљива дужа од одредишне, врши се одсецање.

– Друга разлика је у томе што нулта компонента типа стринг садржи број знакова у променљивој.

Recommended