53
Структурални типови података • Тип set • Тип array • Тип record • Тип file • Тип string

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

Embed Size (px)

DESCRIPTION

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

Citation preview

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

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

• Тип set

• Тип array

• Тип record

• Тип file

• Тип string

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

Тип set

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

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

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

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

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

Тип set

type ime prosti tipset= of

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

Тип set

izraz

[ ]

izraz..

,

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

Тип 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];

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

Тип set

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

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

Тип set

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

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

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

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

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

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

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

Тип set

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

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

Тип 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.

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

Тип array

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

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

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

Тип array

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

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

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

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

Тип array

type ime prosti tiparray= [ ]

,

of tip

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

Тип array

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

type niz=array[T1] of T2;

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

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

Тип array

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

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

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

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

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

Тип array

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

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

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

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

Тип array

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

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

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

Тип array

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

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

Тип 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.

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

Тип array

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

n

n

nn

nn

A

000

30

210

121

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

Тип 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.

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

Тип record

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

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

Тип record

type ime lista komponenatarecord= end

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

Тип record

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

type imetipa = record

S1: T1;

S2: T2; . . .Sn: Tn;

end;

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

Тип record

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

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

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

Тип record

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

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

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

Тип record

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

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

Тип 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.

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

Тип record

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

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

Тип 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;

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

Тип record

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

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

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

Тип record

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

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

Тип 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.

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

Тип file

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

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

Тип file

type ime tipfile= of

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

Тип file

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

type datoteka = file of T;

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

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

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

Тип file

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

type text = file of char;

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

Тип file

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

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

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

Тип file

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

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

Тип file

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

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

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

Тип file

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

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

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

Тип file

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

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

Тип file

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

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

Тип file

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

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

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

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

Тип file

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

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

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

Тип file

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

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

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

Тип file

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

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

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

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

Тип file

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

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

Тип 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.

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

Тип file

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

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

Тип 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.

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

Тип string

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

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

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

Тип string

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

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

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

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

Тип string

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

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

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