Download presentation
Presentation is loading. Please wait.
1
Strukturni tipovi podataka
Programski jezici Strukturni tipovi podataka
2
Strukturni tipovi podataka
Polja Zapisi Skupovi Datoteke
3
Strukturni tipovi Prisutni u svim višim programskim jezicima
Nizovi Slogovi Skupovi Datoteke Pascal uvodi pojam strukturnih tipova podataka Jednorodne ili raznorodne strukture podataka
4
Polja Jednodimenzionalne ili višedimenzionalne strukture podataka koje obuhvataju više vrednosti istog tipa Jednodimenzionalna polja – vektori Višedimenzionalna polja – matrice Ključna reč array za opis polja type VEKTOR = array[ ] of integer;
5
Definisanje polja Definisanje polja VEKTOR od 10 elemenata tipa float
type VEKTOR = array[ ] of float; Definisanje dve varijable tipa VEKTOR var A, B: VEKTOR; Varijable A i B odgovaraju strukturama podataka sa po 10 elemenata tipa float Pristup komponentama vektora pomoću indeksa A(I) – opšti slučaj A[I] – Pascal
6
Pristup elementima polja
Pristup pomoću indeksa koji određuje element u okviru strukture Indeks je u opštem slučaju celi broj Indeks može da bude definisan i kao celobrojni izraz A(2*I+1) Indeksirane promenljive se koriste u programu kao i proste promenljive odgovarajućeg tipa A(3):=0.0; X:=A(3);
7
Indeksni tip Tip indeksa u jeziku Ada može biti bilo koji diskretni tip Intervalni tipovi u funkciji indeksa
8
Memorijski prostor Polja se realizuju kao statičke strukture podataka
Unapred se rezerviše potreban memorijski prostor u memoriji računara Granice indeksa u definiciji tipa mogu biti date i preko promenljivih i izraza čija vrednost mora biti poznata u tački definicije tipa u programu type VEKTOR1 = array[1 .. N] of float; type VEKTOR2 = array[N .. N+M] of float;
9
Dodeljivanje na nivou polja
Vektori istog strukturnog tipa mogu se dodeljivati jedan drugom, na nivou strukture ili pojedinačnih komponenti
10
Dodeljivanje i eksplicitna ekvivalentnost
Ako su dva vektora definisana u okviru različitih tipova koji su strukturno jednaki, sva međusobna dodeljivanja su nekorektna u slučaju eksplicitne ekvivalentnosti
11
Anonimne definicije strukturnih tipova
Definicija strukturnih tipova bez eksplicitnog definisanja i imenovanja tipa Obično važi strukturna ekvivalentnost na nivou naredbi dodeljivanja, a u novije vreme eksplicitna ekvivalentnost
12
Neograničena polja Mogućnost definisanja polja sa neograničenim opsegom indeksa (Ada) Definisanje klase strukturnih tipova koja se u konkretnoj definiciji tipa bliže određuje
13
Neograničena polja i podtipovi
Definisanje konkretnih tipova podataka, kao podtipova tipa sa neograničenim indeksom Podtipovi međusobno kompatibilni jer potiču od istog roditeljskog tipa
14
Višedimenzionalna polja
Potreba za višedimenzionalnim strukturama podataka pri rešavanju mnogih problema Jednorodne strukture podataka Pojedinačnim elementima se pristupa pomoću dva ili više indeksa Dvodimenzionalne strukture – matrice za rešavanje široke klase problema sa matričnom reprezentacijom podataka
15
Definisanje višedimenzionalnih polja
16
Atributi polja Postoje u pojedinim programskim jezicima i koriste se za bliže određivanje strukture, slično kao kod elementarnih tipova podataka Isti skup atributa se koristi za strukturni tip i za pojedinačne strukture (Ada) A_TIP'LENGTH i A'LENGTH daju broj elemenata strukture A_TIP'RANGE i A'RANGE daju opseg indeksa A_TIP'FIRST i A_TIP'LAST daju prvu i zadnju vrednost indeksa A(A_TIP'FIRST) prvi element strukture A
17
Zapisi Zapisi (slogovi) su strukture podataka koje se, za razliku od polja, sastoje od komponenti (segmenata) različitog tipa. Definišu se preko eksplicitnih definicija odgovarajućih strukturnih tipova podataka ili preko anonimnih opisa tipova.
18
Definisanje zapisa type DATUM is record
mesec : (jan,feb,mar,apr,maj,jun,jul,avg,sep, nov,dec); dan : integer range 1..31; godina : integer range ; end record;
19
Pristup elementima zapisa
Pristup elementima preko selektora danas, sutra : DATUM; danas.mjesec := dec; sutra.dan := 14; danas.dan := sutra.dan;
20
Dodela vrednosti zapisu
Obično postoji mogućnost dodele vrednosti celom zapisu danas := (dec, 13, 1994); -- Najčešće se koristi danas := DATUM(dec, 13, 1994); -- Pascal danas := (mesec => dec, god => 1994, dan => 13); --Ada
21
Nizovi zapisa Jednom definisani strukturni tipovi mogu se koristiti za definisanje novih strukturnih tipova type PRAZNIK is array (1..10) of DATUM; Raspust : PRAZNIK; Raspust(1) := (29, dec, 2011);
22
Zapisi preko zapisa Preko već definisanih zapisa mogu se definisati novi zapisi type OSOBA is record Ime : String(1..10); Prezime : String(1..15); Dan_rodj : DATUM; end record; Student, Ja, Ti : OSOBA; Student := ("Ana", "Petrovic",(14,maj, 1970)); Ja.Dan_rodj.godina := 1953;
23
Zapisi sa varijantama Definisanje zapisa sa segmentima koji se uključuju u strukturu zapisa zavisno od vrednosti nekog drugog segmenta zapisa
24
Naredba with u Pascalu Student : OSOBA; with Student do
with Dan_rodj do begin mesec := maj; dan := 14; godina := 1983 end; Student : OSOBA; with Student, Dan_rodj do begin mesec := maj; dan := 14; godina := 1983 end;
25
Skupovi Skup - više elemenata objedinjenih nekim zajedničkim svojstvom (matematika) U programskim jezicima pojam skupa je nešto uži u odnosu na matematiku Definisanje skupova pomoću struktura podataka i odgovarajućih strukturnih tipova (Pascal)
26
Skupovi – primer program Skupovi(input,output);
type OsnovneBoje = (crvena, oranz, zelena, zuta, plava, violet); Boje = Set of OsnovneBoje; var Sboja, Sboja1, Sboja2 : Boje; Jednaboja : OsnovneBoje; B : Boolean; begin Sboja1 := [ crvena, zuta, violet ]; Sboja2 ;= [ ]; Sboja1 := [ crvena, zuta, violet, oranz, zelena, plava ]; Sboja2 := [ plava ]; end.
27
Operacije nad skupovima
Unija skupova Presek skupova Razlika skupova Jednakost i nejednakost skupova Podskupovi Pripadnost skupu
28
Unija skupova Sboja1 := [ crvena, zuta, violet ];
Sboja2 := [ plava, zelena ]; Sboja := Sboja1 + Sboja2; Sboja := [ crvena, zuta, violet ] + [ plava, zelena ];
29
Presek skupova Sboja1 := [ crvena, zuta, violet ];
Sboja2 := [ plava, zelena, zuta ]; Sboja := Sboja1 * Sboja2;
30
Razlika skupova Sboja1 := [ crvena, zuta, violet ];
Sboja := Sboja1 - [ zuta, violet ];
31
Jednakost i nejednakost skupova
Sboja1 := [ crvena, zuta, violet ]; Sboja2 := [ crvena, zuta, violet ]; Sboja := [ crvena, zuta, violet, zelena ]; B := Sboja1 = Sboja2; B := Sboja1 < > Sboja;
32
Podskupovi Sboja1 := [ crvena, zuta ];
Sboja2 := [ crvena, zuta, violet ]; B := Sboja1 < = Sboja2; B := Sboja2 > = Sboja1;
33
Pripadnost skupu Sboja1 := [ crvena, zuta ];
Sboja2 := [ crvena, zuta, violet ]; Jednaboja := violet; B := Jednaboja in Sboja1; B := Jednaboja in Sboja2;
34
Definisanje uslova preko skupova
if (I = 215) or (I = 220) or ... or (I = 275) or (I = 280) then ... if I in [ 215, 220, 225, ..., 280 ]
35
Datoteke Sekvencijalne strukture jednorodnih zapisa
Jednorodne strukture slične poljima Broj elemenata se ne definiše unapred Podrazumeva se da datoteke fizički postoje van programa na nekom eksternom medijumu Opisuju se sa file i postali su standardni u programskim jezicima nakon pojave ovog koncepta u Pascalu
36
Primeri definicija const Limit = 10; type Opseg = 1 .. Limit;
Skup = set of Opseg; Vektor = array [Opseg] of real; Complex = record Re, Im : integer; end; Intdat = file of integer; Redat = file of real; Chdat = file of char; Skupdat = file of Skup; Vekdat = file of Vektor; Komdat = file of Complex;
37
Procedure F^– Baferska promenljiva EOF(F) – Funkcija kraja datoteke
38
GET i PUT
39
Primer Program kojim se sadržaj datoteke A preslikava u datoteku B:
program Datoteke: type Dat = file of integer; var A, B : Dat; begin reset (A); rewrite (B) ; while not EOF(A) do B^ := A^; GET (A); PUT(B); end; end.
40
Read i Write
41
Tekstualne datoteke Datoteke čiji su elementi znaci ASCII kodirani
type Text = file of char;
42
Tekstualne datoteke
43
Standardne datoteke INPUT i OUTPUT
WRITE(CH) ekvivalentno sa WRITE(OUTPUT,CH) READ(CH) ekvivalentno sa READ(INPUT,CH) WRITELN ekvivalentno sa WRITELN(OUTPUT) READLN ekvivalentno sa READLN(INPUT) EOF ekvivalentno sa EOF(INPUT) EOLN ekvivalentno sa EOLN(INPUT)
44
Datoteke u C-u FILE struktura koja je kao specijalan tip podataka definisana u stdio.h Definicija pokazivača datoteke FILE *pok_dat; Korišćenjem ovog pokazivača ostvaruje se pristup datoteci
45
Procedure u C-u FILE *fopen(char* ime_datoteke, char* modus)
modus – znakovni niz koji pokazuje dozvoljeni način pristupa datoteci Funkcija vraća pokazivač na datoteku koja je otvorena, ili NULL ako datoteka nije mogla da bude otvorena FILE *pok_dat; pok_dat = fopen("datul","r");
46
Procedure u C-u int fclose(FILE *pok_datoteke)
Ovom funkcijom se prekida veza koja postoji između pokazivača datoteke i imena datoteke. Ukoliko je zatvaranje izvršeno uspešno, povratna vrednost ove funkcije je 0.
47
Procedure u C-u Standardna funkcija za čitanje jednog znaka (bajta) iz datoteke int fgetc(FILE *pok_dat) Funkcije za upis jednog znaka (bajta) u datoteku int fputc(char c,FILE *pok_dat) Rezultat funkcije je upisani znak. Funkcija za čitanje jednog reda iz tekstualne datoteke char *fgets(char *s, int maxbr, FILE *pok_dat) Učitava jedan red (niz znakova do znaka ‘\n’) iz datoteke na koju ukazuje pok_dat. s je niz u koji se smešta učitani red, a maxb-1 je maksimalni broj znakova koji se mogu učitati. Funkcija za upis jednog reda u tekstualnu datoteku char *fputs(char *s, FILE *pok_dat)
48
Procedure u C-u Funkcija za formatirano čitanje podataka iz tekstualne datoteke int fscanf(FILE *pok_dat,char *format [,arg]…) Funkcija za formatirani upis podataka u tekstualne datoteke int fprintf(FILE *pok_dat,char *format [,arg]…)
49
Procedure u C-u Funkcija za binarno čitanje
int fread(void *ulaz, long vel, long br, FILE *uldat) Iz binarne datoteke na koju ukazuje pok_dat učitava se br podataka veličine vel bajtova i to smešta počev od lokacije na koju ukazuje pokazivač ulaz. Funkcija za binarni upis int fwrite(void *izlaz, long vel, long br,FILE *izdat) U binarnu datoteku na koju ukazuje pok_dat upisuje se br podataka veličine vel bajtova. izlaz je početna adresa od koje su smešteni podaci koji se prenose u datoteku.
50
Pitanja ???
Similar presentations
© 2025 SlidePlayer.com. Inc.
All rights reserved.