1. Algoritmi i
strukture podataka
Tipovi podataka
Leonardo Miljko
www.ckm.ba - Leonardo Miljko
Prezentacija nastala na osnovu knjige:
Brano Markić i Dražena Tomić,
Uvod u algoritme i strukture, Ekonomski fakultet , Mostar,2008.
2. Tipovi podataka
Temeljna funkcija računala je izvršavanje programa, tj. izvršavanje
naredbi. Proces izvršavanje naredbi dijeli se na dvije faze:
● fazu pribavi naredbu
iz memorije (fetch)
● fazu izvrši naredbu.
Obrada jedne naredbe zove se
instrukcijski ciklus
(instruction cycle).
Izvršavanje programa prekida se ako se
računalo ugasi, pojavi pogreška u radu
ili izvede instrukcija koja
prekida rad računala.
www.ckm.ba - Leonardo Miljko
3. Izvršavanje programa zapisanih u CPU
• Na početku svakog instrukcijskog ciklusa CPU (Central Procesing
Unit – središnja procesna jedinica) pribavlja instrukciju
pohranjenu u memoriji. Registar nazvan programski brojač sadrži
adresu sljedeće naredbe koja se treba pribaviti. Sve dok se ne
saopći drukčije, CPU inkrementira (povećava za jedan) programski
brojač nakon svakog pribavljanja instrukcije. Nova naredba koja će
se pribaviti , "locirana" je na sljedećoj višoj adresi memorije.
• Pretpostavimo da svaka instrukcija zauzima 16-bitnu riječ
memorije. Neka je programski brojač postavljen na lokaciju čija je
adresa 600. Naredni instrukcijski ciklusi će pribaviti instrukcije na
lokacijama 601, 602, 603 itd. Naravno, redoslijed se može
promijeniti uporabom naredbi skoka ili grananja.
• Pribavljena instrukcija pohranjuje se u CPU registar poznat kao
instrukcijski registar (IR). Instrukcija je u obliku binarnog koda, a
njezin sadržaj određuje akciju koju će CPU poduzeti.
www.ckm.ba - Leonardo Miljko
4. Izvršavanje programa zapisanih u CPU
CPU dekodira (interpretira) instrukciju i izvršava traženu akciju. Sve
akcije CPU-a pripadaju jednoj od četiri kategorije :
● CPU memorija. Podaci se prenose iz memorije u CPU ili iz CPU u
memoriju.
● Obrada podataka. CPU izvršava neku od aritmetičkih ili logičkih
operacija nad podacima.
● CPU ulaz/izlaz. Podaci se prenose iz okoline računala u CPU ili
memoriju i iz CPU-a na izlazne jedinice.
● Upravljačke akcije. To može biti naredba skoka kojom se mijenja
slijed izvršavanja naredbi. Npr. pribavlja se naredba s lokacije
164(16) čiji kod ukazuje da će sljedeća instrukcija biti pribavljena s
lokacije 228(16) To znači da su adrese prikazane u heksadekadnom brojevnom sustavu.
www.ckm.ba - Leonardo Miljko
5. Izvršavanje programa zapisanih u CPU
Naravno, moguće su i različite kombinacije akcija iz navedene četiri
kategorije. U cilju razumijevanja načina izvođenja naredbi može se
pretpostaviti da računalo ima sljedeća obilježja:
● CPU ima akumulator (AC) - registar za privremeno memoriranje
podataka i rezultata obrade.
● Podaci i instrukcije imaju duljinu 16 bitova (2 bajta).
● Neka jedna lokacija memorije sadrži 16 bitova. U jednu lokaciju
memorije pohranjuje se jedan podatak ili jedna instrukcija.
● Instrukcijska riječ ima sljedeći format:
www.ckm.ba - Leonardo Miljko
6. Izvršavanje programa zapisanih u CPU
• Organizacija instrukcijske riječi pokazuje da operacijski kod ima
četiri bita.
• Drugim riječima, može se označiti 24 = 16 različitih operacijskih
kodova.
• Budući da za adresiranje memorije rabimo ostalih 12 binarnih
znamenki, ukupan je broj lokacija memorije koji se može izravno
adresirati 212 = 4096 riječi memorije.
www.ckm.ba - Leonardo Miljko
7. Instrukcijski skup računala
Svaka instrukcija na fizičkoj razini je niz bitova.
Format instrukcije sačinjavaju polja, a ona označavaju bitne dijelove
instrukcije.
Instrukciju čine najmanje tri polja:
• polje koda operacije
• polje načina adresiranja
• polje adresa.
www.ckm.ba - Leonardo Miljko
8. Instrukcijski skup računala
• Instrukcijski skup najčešće sadrži više načina adresiranja. Za
vrijeme instrukcijskog ciklusa instrukcija se pribavlja u instrukcijski
registar. CPU mora razumjeti značenje binarnih znamenki u
različitim poljima instrukcije kako bi se izvršila zapisana operacija.
• Rad s binarnim znamenkama (nizom 0 i 1) bio je složen za
programere. Zato se može reći da je jedan od ključnih koraka u
razvoju softvera bio simboličko predstavljanje strojnih instrukcija.
Instrukcije zapisane kao niz 0 i 1 zovu se strojne instrukcije.
• Operacijski kod u formatu instrukcije prikazan je kraticama koje se
zovu mnemonici.
www.ckm.ba - Leonardo Miljko
9. Instrukcijski skup računala
• Operandi se isto tako prikazuju simbolički. Npr. instrukcija ADD X, Y
znači pribroj vrijednost sadržanu u lokaciji Y sadržaju registra X. Y se odnosi na
adresu lokacije u memoriji, a X se odnosi na pojedinačni registar.
• Svaka se operacija izvodi nad sadržajem lokacije memorije, a ne
nad njezinom adresom. Tako je moguće pisati program u simboličkom
obliku, a koji se onda prevodi u strojni jezik. Svaki operacijski kod
zapisan simbolički ima jedinstvenu ili nepromjenjivu reprezentaciju.
Programer simbolički zapisuje svaki operand i njegovu lokaciju.
Npr. programer može zapisati instrukcije:
X = 48; Y = 261; Z := X + Y.
Jednostavno računalo prihvaća te simboličke ulaze, pretvara operacijski kod
i adrese operanda u binarni oblik i stvara binarne strojne instrukcije.
Naravno, programi se danas pišu u višim programskim jezicima, a
simbolički orijentirani jezici rabe se za opisivanje strojnih instrukcija.
Razlozi uporabe zato su isključivo edukativni.
www.ckm.ba - Leonardo Miljko
10. Instrukcijski skup računala
Broj operacijskih kodova razlikuje se od računala do računala. Neki su
tipovi operacija opći i nalaze se u svim računalima.
Tipične su:
• aritmetičke operacije
• logičke operacije
• prijenos podataka
• prijenos kontrole izvođenja
• ulazno/izlazne operacije
• konverzija.
Operacije prijenosa podataka (strojne instrukcije) moraju definirati
izvor i odredište operanda.
www.ckm.ba - Leonardo Miljko
14. Tipovi operanada – elementarni tipovi podataka
Strojne instrukcije uvijek izvode određene operacije nad podacima
pohranjenim u memoriji ili registrima CPU-a.
Podaci nad kojima se izvode operacije nisu istoga tipa.
Oni su kodirani tako da pripadaju skupu numeričkih vrijednosti ili
skupu znakova koji su kodirani prema ASCII standardu, ili pak
skupu logičkih vrijednosti ({true, false} ili {1,0}).
Mogu biti:
• numerički (prirodni, cjelobrojni ili realni)
• znakovi
• logički podaci
• adrese.
www.ckm.ba - Leonardo Miljko
15. Tipovi operanada – elementarni tipovi podataka
Numerički, znakovni i logički podaci se nazivaju i primitivni ili
elementarni tipovi, jer predstavljaju nedjeljive cjeline i imaju
izravan prikaz u memoriji.
U programiranju se tip podataka koje sadrži neki operand mora
eksplicitno deklarirati. Tip podataka ukazuje na dimenziju
prostora (broj bajtova u memoriji) koji prevoditelj (kompajler)
određuje za podatak tog tipa.
U programskim jezicima tip podataka označava pripadnost istom
skupu, skupu koji ima zajednička obilježja. Podaci se za vrijeme
izvršenja programa nalaze u memoriji i nazivaju se memorijski
objekti. Položaj objekta u memoriji naziva se adresa. Adresa se
označava brojem. On ukazuje na lokaciju memorije veličine 8 bita.
Lokacije memorije su linearno uređene.
www.ckm.ba - Leonardo Miljko
16. Tipovi operanada – elementarni tipovi podataka
Značaj elementarnih tipova podataka može se jasno uočiti u
jednostavnom primjeru:
int a,b,c;
a = 12; b=34
c = a+b+8;
U prvom retku je iskaz koji se naziva deklaracija varijabli a, b i c.
Deklaracija „najavljuje“ tri varijable cjelobrojnog tipa. Ona služi
kompajleru da rezervira potreban prostor u memoriji za tri
varijable. Operacija pridruživanja vrijednosti varijablama a i b je u
drugom retku, a u trećem se izračunava vrijednost varijable c.
Vrijednost varijable c je 54.
www.ckm.ba - Leonardo Miljko
17. Tipovi operanada – elementarni tipovi podataka
Znakovni
Znakovi (characters) opći su oblik podataka koje čovjek najčešće
primjenjuje.
To su tekstualni podaci za koje je razvijen niz kodova za prevođenje u
binarne znamenke.
Najpoznatiji je ASCII kod (ASCII je kratica od American Standard Code
for Information Interchange).
www.ckm.ba - Leonardo Miljko
18. Tipovi operanada – elementarni tipovi podataka
Numerički
Svaki programski jezik podržava brojeve (number) kao jedan od
tipova podataka.
Obično se razlikuju:
• cijeli brojevi (integer)
• realni brojevi (float, double).
Adrese su u određenom smislu tipovi podataka nad kojima se trebaju
izvesti određena izračunavanja ovisno o načinu adresiranja. Zato
se mogu adrese promatrati kao cijele brojeve bez predznaka.
Logički
Logički tipovi podataka (logical data) mogu imati samo dvije
vrijednosti: istinito ili lažno.
www.ckm.ba - Leonardo Miljko
19. Prikaz elementarnih tipova podataka u RAM
memoriji računala
• U glavnoj memoriji računala elementarni tipovi podataka
zauzimaju određen broj bajtova.
• Razumjeti prikaz znakovnog tipa podataka nije složeno jer se s
osam bitova može kodirati 256 različitih znakova.
• Nešto je složenije prikazati cijele brojeve i realne brojeve s
pokretnom točkom.
• Razlikuje se prikaz negativnih i pozitivnih cijelih brojeva.
www.ckm.ba - Leonardo Miljko
20. Prikaz elementarnih tipova podataka u RAM
memoriji računala
• Negativni cijeli brojevi se prikazuju pomoću dvojnog komplementa
www.ckm.ba - Leonardo Miljko
21. Prikaz elementarnih tipova podataka u RAM
memoriji računala
• Negativni cijeli brojevi se prikazuju pomoću dvojnog komplementa.
• Koliko se cijelih brojeva može prikazati s tri binarne znamenke (prva
znamenka je predznak)? Prevedeno na dekadni brojevni sustav:od -23 do 23 -1 (od -8 do 7).
www.ckm.ba - Leonardo Miljko
22. Prikaz elementarnih tipova podataka u RAM
memoriji računala
• Ako se za prikaz cijelih brojeva koriste 4 bajta (1 bajt = 8 bit-ova)
onda je raspon cijelih brojeva u dekadnom brojevnom sustavu koji
se mogu zapisati s četiri bajta: -231 do 231-1 (prvi bit se koristi za
predznak).
• Općenito s n binarnih znamenki se može zapisati najveći dekadni
pozitivni 2n-1 i -2n najmanji negativni cijeli broj.
www.ckm.ba - Leonardo Miljko
23. Prikaz realnih brojeva u računalu
• U računalu se može predstaviti samo konačno mnogo realnih brojeva.
Kako se zapisuju realni brojevi u aritmetici pokretne točke (floating
point)? Ti brojevi se zapisuju prema IEEE standardu 754 za prikaz realnih
brojeva u standardnoj točnosti, pri čemu je u uporabi standardna točnost
4 byte (32 bita) i dvostruka točnost 8 byta (64 bita). Za četiri bajta taj
format ima sljedeći izgled:
• P (predznak): P=1 negativan, P=0 pozitivan. Ako je vrijednost 0 onda je
broj pozitivan, a vrijednost 1 označava negativan broj.
• Karakteristika: binarni eksponent + 127 (izbjegavanje prikaza negativnog
eksponenta). Karakteristika se izračunava tako što se eksponentu koji
normalizira broj u oblik 1.xxxx... dodaje 127. Ta dekadna vrijednosti se
prevodi u binarni brojevni sustav.
• Mantisa: normalizirana (jedan bit ispred binarne točke). Normalizirana
mantisa je oblika 1.xxxx... tj. sadrži jedan bit ispred binarne točke.
www.ckm.ba - Leonardo Miljko
24. Prikaz realnih brojeva dvostruke točnosti
• Realni brojevi dvostruke točnosti (tip double u programskom jeziku C++).
Za prikaz realnih brojeva dvostruke točnosti rabi se osam bajtova ili 64 bita.
• P (predznak): P=1 negativan, P=0 pozitivan.
• Karakteristika: binarni eksponent + 1023.
• Mantisa: normalizirana.
• Opseg realnih brojeva dvostruke točnosti:
• Karakteristika = 0 prikazuje broj 0.
• Karakteristika = 2047 rezervirana je za prikaz beskonačnog broja.
• To znači da je karakteristika u intervalu 00000000001 do 11111111110 ili u dekadnom
brojevnom sustavu [1,2046].
• Binarni eksponent = Karakteristika – 1023, pa se može kretati u intervalu [-1022, 1023].
• Najmanji pozitivni broj koji se može prikazati 1.02 * 2-1022 =2.225073858507 * 10-308
• Najveći pozitivan broj 1.11111111111111111111112 * 21023 , što je približno 21024 =
1.797693134862316 * 10308.
www.ckm.ba - Leonardo Miljko
25. Strukture podataka
• Struktura podataka se može razumjeti i kao skupina varijabli u
nekom programu i veza medu tim varijablama. Struktura podataka
se može definirati jedino poznajući tipove podataka.
• Tip podataka je skup vrijednosti koje neki podatak može poprimiti
(npr. podatak tipa int može imati samo vrijednosti iz skupa cijelih
brojeva).
• Pojam tip podataka označava vrstu podataka i što se istim
podacima može učiniti (npr. koje operacije obaviti).
• Pojedinačne se vrijednosti u memoriji čuvaju u skalarnim
varijablama.
• Strukture podataka koje nisu skalari su polja, slogovi, liste i sl.
Navedene se strukture sastoje iz skalarnih vrijednosti. Oni su
složeni tipovi podataka ili strukture podataka.
www.ckm.ba - Leonardo Miljko
26. Strukture podataka
Tablica prikazuje broj bitova koji se u memoriji rezervira za pojedinačne
elementarne tipove podatka i intervale vrijednosti u dekadnom brojevnom
sustavu za te tipove podataka u C++.
www.ckm.ba - Leonardo Miljko
28. Strukture podataka
• Često se spominje i pojam apstraktni tip podataka i njegova
implementacija.
• Apstraktni tip podataka T = <W,O> sastoji se niza vrijednosti W i
niza operatora O koji se mogu primijeniti na te vrijednosti.
• Pojam apstraktni tip podataka (Abstract Data Type) prethodi
razvoju objektno orijentiranog dizajna i programiranja. On se
određuje navođenjem jednog ili više tipova podataka, te jedne ili
više operacija (funkcija). Operandi i rezultati navedenih operacija su
podaci navedenih tipova. Apstraktnom tipu podataka se pridružuje
ime.
• Implementacija apstraktnog tipa podataka je konkretna realizacija
dotičnog apstraktnog tipa podataka u nekom programu. Sastoji se
od definicije za strukturu podataka (kojom se prikazuju podaci iz
apstraktnog tipa podataka) i funkcija kojima se operacije iz
apstraktnog tipa podataka ostvaruju.
www.ckm.ba - Leonardo Miljko
29. Strukture podataka s obzirom na memoriju u
kojoj se pohranjuju
a) Interne - u glavnoj memoriji računala.
• Statičke – unaprijed im je dodijeljen memorijski prostor i ne može
se povećavati. To mogu biti jednostavni tipovi koji su nedjeljivi (npr.
int, float), ili složeni sastavljeni od jednostavnih (npr. polje).
• Dinamičke - Prostor koji zauzimaju u memoriji se može povećavati
ili smanjivati. Više je primjera takvih dinamičkih struktura: linearna
lista, binarno stablo, red i sl.
www.ckm.ba - Leonardo Miljko
30. Strukture podataka s obzirom na memoriju u
kojoj se pohranjuju
b) Eksterne na vanjskim memorijama računala.
• Datoteke – najmanje organizacijske jedinice podataka koje
operacijski sustav može pročitati kada se jednom obraća vanjskoj
memoriji. Mogu biti tekstualne (niz redova), formatirane (skup
slogova). Formatirane mogu biti sekvencijalne (slijedni pristup
slogovima), indeks-sekvencijalne (na temelju indeksa se pristupa
bloku a potom se slijedno u bloku pronalazi slog) i izravni pristup
(adresa sloga je određena ključem, tj. postoji funkcija koja
vrijednost ključa transformira u fizičku adresu sloga).
• Baze podataka su skup međusobno povezanih datoteka na nekom
području primjene. Razvoj moćnih osobnih računala i njihovih
mreža postavio je zadatak razumijevanja organizacije i strukture
baze podataka
www.ckm.ba - Leonardo Miljko