530 likes | 616 Views
Структурални типови података. Тип set Тип array Тип record Тип file Тип string. Тип set. Тип set је скуп свих подскупова основног типа. Основни тип може да буде било који редни тип. Задавање скупа врши се тако што се у средњим заградама наведу елементи скупа одвојени зарезима.
E N D
Структурални типови података Тип set Тип array Тип record Типfile Тип string
Тип set • Тип set је скуп свих подскупова основног типа. • Основни тип може да буде било који редни тип. • Задавање скупа врши се тако што се у средњим заградама наведу елементи скупа одвојени зарезима. • Скуп може да има до 256 елемената.
= of type ime set prosti tip Тип set
[ ] .. izraz izraz , Тип set
Тип set type skup = setof 1..256; slova = setof ‘A’..’Z’; cifre = setof ‘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 коришћењем алгоритма Ератостеново сито.
Тип set programprosti(input,output); {Eratsotenovo sito} const n=250; var sito, prostbroj: setof 2..n; p, j: integer; begin writeln(‘prosti brojevi do ’, n); writeln; sito:=[2..n]; prostbroj:=[]; p:=2; repeat whilenot(p in sito) do p:=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 • Име променљиве типа низ је уједно име сваке од компонената. • Појединој компоненти се приступа навођењем имена низа и индекса компоненте у средњим заградама. • Максимална дужина низа се наводи приликом декларације и не може се променити у програму.
= [ ] of type ime array tip prosti tip , Тип array
Тип array • Декларација једнодимензионог низа (вектора): type niz=array[T1] of T2; при чему је Т1 било који редни тип осим типа integer, али може бити интервални тип над типом integer, док је Т2 тип компонената низа.
Тип array • Декларација дводимензионалног низа (матрице): type matrica=array[T1] ofarray[T2] of T; где је Т1 тип индекса врсте, Т2 тип индекса колоне а Т тип компонената матрице. • У том случају, ако је matпроменљива типа matrica, компoнентамa приступамо у стилу mat[i][j].
Тип array • Алтернативни начин декларације је typematrica=array[T1,Т2] ofT; • У овом случају елементима матрице приступамо у стилу mat[i,j].
Тип array • Компоненте вишедимензионалних ни-зова се у меморију смештају у редоследу по врстама (roworder). • Уколико су m1и m2 променљиве истог типа, дозвољено је над њима употребити оператор доделе (m1:=m2) и релацијске операторе = и <>.
Тип array Пример Написати програм којим се врши сортирање целобројног низа а који има n компонената у растућем редоследу.
Тип array program sortiranje(input, output); const maxduz=100; vara:array[1..maxduz] of integer; i, j: 1..maxduz; n, pom: integer; begin write(‘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 do if a[i] > a[j] then begin pom:=a[i]; a[i]:=a[j]; a[j]:=pom; end; for i:=1 to n do write(a[i]:4); end.
Тип array ПримерНаписати програм којим се генерише и штампа матрица Аn×n облика.
Тип array program 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 do if i <= j then a[i,j]:=n-j+i else a[i,j]:=0; for i:=1 to n do begin for j:=1 to n do write(a[i,j]:4); writeln; end; end.
Тип record • Тип запис је састављен од извесног броја компонената које, за разлику од поља, могу бити произвољног типа, изузев типа file.
lista komponenata = type ime record end Тип record
Тип record • Код навођења листе компонената за сваку од њих се наводи тип на начин сличан декларацији променљивих. typeimetipa = 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 do read(re, im); writeln ('|z| = ', sqrt(sqr(re)+sqr(im))); end; end.
Тип file • Тип датотека или file представља низ компонената истог типа који се памти на секундарним меморијским медијумима.
= of type ime file tip Тип file
Тип file • У стандардном Паскалу дефинисан је тип секвенцијалне датотеке као type datoteka = fileof T; где је Т било који тип осим типа file. • Датотеке могу бити текстуалне и бинарне.
Тип file • Текстуална датотека је унапред дефинисани тип text. type text = fileof 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 постоје функције и процедуре за рад са датотекама од којих су најбитније дате у следећој табели.
Тип 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 begin g^:=f^; put(g); get(f); end; end.