22
Algoritmi i Algoritmi i strukture podataka strukture podataka Zaštićeno licencom http://creativecommons.org/licenses/by-nc-sa/2.5/hr/ Prof. dr. sc. Damir Kalpić Prof. dr. sc. Vedran Mornar Prof. dr. sc. Krešimir Fertalj Doc. dr. sc. Gordan Gledec Dr. sc. Zvonimir Vanjak Mr. sc. Boris Milašinović Ivica Botički, dipl. ing.

Algoritmi i strukture podataka

  • Upload
    hye

  • View
    68

  • Download
    0

Embed Size (px)

DESCRIPTION

Algoritmi i strukture podataka. Prof. dr. sc. Damir Kalpić Prof. dr. sc. Vedran Mornar Prof. dr. sc. Krešimir Fertalj Doc. dr. sc. Gordan Gledec Dr. sc. Zvonimir Vanjak Mr. sc. Boris Milašinović Ivica Botički, dipl. ing. - PowerPoint PPT Presentation

Citation preview

Page 1: Algoritmi i strukture podataka

Algoritmi i strukture podatakaAlgoritmi i strukture podataka

Zaštićeno licencom http://creativecommons.org/licenses/by-nc-sa/2.5/hr/

Prof. dr. sc. Damir KalpićProf. dr. sc. Vedran MornarProf. dr. sc. Krešimir FertaljDoc. dr. sc. Gordan GledecDr. sc. Zvonimir VanjakMr. sc. Boris MilašinovićIvica Botički, dipl. ing.

Page 2: Algoritmi i strukture podataka

Creative CommonsCreative Commons

slobodno smijete:slobodno smijete: dijelitidijeliti — umnožavati, distribuirati i javnosti priopćavati djelo — umnožavati, distribuirati i javnosti priopćavati djelo remiksiratiremiksirati — prerađivati djelo — prerađivati djelo

pod sljedećim uvjetima:pod sljedećim uvjetima: imenovanjeimenovanje. Morate priznati i označiti autorstvo djela na način kako je . Morate priznati i označiti autorstvo djela na način kako je

specificirao autor ili davatelj licence (ali ne način koji bi sugerirao da Vi ili Vaše specificirao autor ili davatelj licence (ali ne način koji bi sugerirao da Vi ili Vaše korištenje njegova djela imate njegovu izravnu podršku). korištenje njegova djela imate njegovu izravnu podršku).

nekomercijalnonekomercijalno. Ovo djelo ne smijete koristiti u komercijalne svrhe. . Ovo djelo ne smijete koristiti u komercijalne svrhe. dijeli pod istim uvjetimadijeli pod istim uvjetima. Ako ovo djelo izmijenite, preoblikujete ili stvarate . Ako ovo djelo izmijenite, preoblikujete ili stvarate

koristeći ga, preradu možete distribuirati samo pod licencom koja je ista ili slična koristeći ga, preradu možete distribuirati samo pod licencom koja je ista ili slična ovoj. ovoj.

U slučaju daljnjeg korištenja ili distribuiranja morate drugima jasno dati do znanja licencne uvjete ovog djela. Najbolji način da to učinite je linkom na ovu internetsku stranicu. Od svakog od gornjih uvjeta moguće je odstupiti, ako dobijete dopuštenje nositelja autorskog prava. Ništa u ovoj licenci ne narušava ili ograničava autorova moralna prava.

Tekst licencije preuzet je s http://creativecommons.org/.

2 / 22Algoritmi i strukture podataka, FER, 2007/08.

Page 3: Algoritmi i strukture podataka

Utvrđivanje gradiva iz PIPI-jaUtvrđivanje gradiva iz PIPI-ja

Pokazivači Pokazivači DatotekeDatotekeDinamička rezervacija memorijeDinamička rezervacija memorije

Page 4: Algoritmi i strukture podataka

PokazivačiPokazivači

Što će se ispisati izvođenjem sljedećeg programskog odsječka?Pokazivac

#include <stdio.h>

int main () {

int a = 4;

int *b;

b = &a;

*b = 8;

printf ("%d %d\n", a, *b);

return 0;

}

Što se rezervira u memoriji?

Što je u programu b?

Što je u programu *b?

Što bi se dogodilo da nema ovog?

4 / 22Algoritmi i strukture podataka, FER, 2007/08.

Page 5: Algoritmi i strukture podataka

RješenjeRješenje

Što bi se dogodilo kad bismo izostavili liniju b = &a; ? budući da pokazivač b prije pridruživanja vrijednosti pokazuje na

nedefiniranu adresu, moglo bi doći do pokušaja upisivanja vrijednosti 8 na adresu koja je rezervirana za pohranu drugih varijabli ili koda, što može izazvati neočekivano ponašanje ili pogrešku pri izvođenju programa zbog neovlaštenog pristupa dijelu memorije

uvijek treba inicijalizirati vrijednost pokazivača prije upotrebe program u MS Visual C++ završava pogreškom zbog korištenja varijable

koja nije definirana

5 / 22Algoritmi i strukture podataka, FER, 2007/08.

Page 6: Algoritmi i strukture podataka

void zamijeni (int tri, int sedam) { // call by value

int pom;

pom = tri;

tri = sedam;

sedam = pom;

}

int main () {

int tri=3, sedam=7;

zamijeni (tri, sedam);

return 0;

}

Razmjena podataka s funkcijom - Razmjena podataka s funkcijom - call by valuecall by value

KomunikacijaSFunkcijama

6 / 22Algoritmi i strukture podataka, FER, 2007/08.

Page 7: Algoritmi i strukture podataka

void zamijeni (int *tri, int *sedam) { // call by reference

int pom;

pom = *tri;

*tri = *sedam;

*sedam = pom;

}

int main () {

int tri=3, sedam=7;

zamijeni (&tri, &sedam);

return 0;

}

Razmjena podataka s funkcijom - Razmjena podataka s funkcijom - call by referencecall by reference

KomunikacijaSFunkcijama

7 / 22Algoritmi i strukture podataka, FER, 2007/08.

Page 8: Algoritmi i strukture podataka

void zamijeni (int *tri, int *sedam) {

int *pom; // lokalna zamjena adresa

pom = tri;

tri = sedam;

sedam = pom;

}

int main () {

int tri=3, sedam=7;

zamijeni (&tri, &sedam);

return 0;

}

Razmjena podataka s funkcijom - Razmjena podataka s funkcijom - lokalna zamjena adresalokalna zamjena adresa

KomunikacijaSFunkcijama

8 / 22Algoritmi i strukture podataka, FER, 2007/08.

Page 9: Algoritmi i strukture podataka

Rezervacija i oslobađanje memorijeRezervacija i oslobađanje memorije

Definicijom polja uvijek se u memoriji rezervira prostor za najveći očekivani broj Definicijom polja uvijek se u memoriji rezervira prostor za najveći očekivani broj članova polja:članova polja:

no, najčešće ćemo raditi s mnogo manjim brojem članova poljano, najčešće ćemo raditi s mnogo manjim brojem članova polja još jedna česta greška:još jedna česta greška:

bolji je pristup od računala zatražiti točnu potrebnu količinu memorije:bolji je pristup od računala zatražiti točnu potrebnu količinu memorije: mallocmalloc reallocrealloc freefree

#include <malloc.h>#include <malloc.h>

int polje [1000];int polje [1000]; Koliko se okteta rezervira?

scanf("%d", &n);

int polje[n];

9 / 22Algoritmi i strukture podataka, FER, 2007/08.

Page 10: Algoritmi i strukture podataka

Rezervacija memorijeRezervacija memorije

rezervira blok veličine rezervira blok veličine sizesize bajtova u memoriji i bajtova u memoriji i vraćavraća pokazivačpokazivač na taj blokna taj blok

ako blok tražene veličine nije mogao biti rezerviran, vraća ako blok tražene veličine nije mogao biti rezerviran, vraća NULLNULL pokazivačpokazivač. .

pokazivač na nedefinirani tip podataka (pokazivač na “bilo što”)pokazivač na nedefinirani tip podataka (pokazivač na “bilo što”) može se, bez gubitka podataka, pretvoriti u bilo koji drugi tip pokazivačamože se, bez gubitka podataka, pretvoriti u bilo koji drugi tip pokazivača

PrimjerZaMallocPrimjerZaMalloc

#include <malloc.h> #include <malloc.h>

void *malloc (size_t size);void *malloc (size_t size);

void *void *

10 / 22Algoritmi i strukture podataka, FER, 2007/08.

Page 11: Algoritmi i strukture podataka

Promjena rezervacije memorijePromjena rezervacije memorije

ako se prije rezervirani blok može proširiti na veličinu ako se prije rezervirani blok može proširiti na veličinu sizesize, , proširuje gaproširuje ga

ako nema mjesta u memoriji, ako nema mjesta u memoriji, kopirakopira sadržaj starog bloka na sadržaj starog bloka na novunovu lokaciju na kojoj ima mjesta za lokaciju na kojoj ima mjesta za sizesize okteta okteta

ako nigdje u memoriji nema ako nigdje u memoriji nema sizesize okteta slobodnog mjesta, vraća okteta slobodnog mjesta, vraća NULLNULL ako je ako je blockblock zapravo zapravo NULLNULL pokazivač, funkcija radi kao pokazivač, funkcija radi kao mallocmalloc

#include <malloc.h> #include <malloc.h>

void *realloc (void *block, size_t size);void *realloc (void *block, size_t size);

11 / 22Algoritmi i strukture podataka, FER, 2007/08.

Page 12: Algoritmi i strukture podataka

Oslobađanje memorijeOslobađanje memorije

oslobađa blok memorije na koji pokazuje pokazivač oslobađa blok memorije na koji pokazuje pokazivač blockblock pokazivač pokazivač blockblock smije biti samo jedan od pokazivača nastalih smije biti samo jedan od pokazivača nastalih

prethodnim pozivima funkcije prethodnim pozivima funkcije mallocmalloc ili ili reallocrealloc

#include <malloc.h> #include <malloc.h>

void free (void *block);void free (void *block);

12 / 22Algoritmi i strukture podataka, FER, 2007/08.

Page 13: Algoritmi i strukture podataka

Primjer s rezervacijom memorijePrimjer s rezervacijom memorije

Na disku se nalazi Na disku se nalazi slijedna formatiranaslijedna formatirana datoteka polje u kojoj se u svakom retku datoteka polje u kojoj se u svakom retku nalazi jedan cijeli broj. nalazi jedan cijeli broj. učitati sadržaj datoteke u memoriju računala kao jednodimenzionalno polje. učitati sadržaj datoteke u memoriju računala kao jednodimenzionalno polje. u memoriji računala formirati kvadratnu matricu kojoj su elementi prvog retka jednaki u memoriji računala formirati kvadratnu matricu kojoj su elementi prvog retka jednaki

elementima učitanog jednodimenzionalnog polja, a elementi ostalih redaka potencije elementima učitanog jednodimenzionalnog polja, a elementi ostalih redaka potencije elemenata prvog retka (drugi redak=druga potencija, treći treća itd.)elemenata prvog retka (drugi redak=druga potencija, treći treća itd.)

formiranu matricu upisati na disk u slijednu neformatiranu datoteku formiranu matricu upisati na disk u slijednu neformatiranu datoteku npoljenpolje tako da na tako da na početku bude zapisan broj redaka odnosno stupaca matrice (int), a zatim elementi matrice početku bude zapisan broj redaka odnosno stupaca matrice (int), a zatim elementi matrice po retcima. po retcima.

Npr. datoteku Npr. datoteku poljepolje treba učitati u jednodimenzionalno polje i treba učitati u jednodimenzionalno polje i formirati matricuformirati matricu

123

1 2 3 1 4 9 1 8 27

13 / 22Algoritmi i strukture podataka, FER, 2007/08.

Page 14: Algoritmi i strukture podataka

Primjer s rezervacijom memorije: rezultat izvođenjaPrimjer s rezervacijom memorije: rezultat izvođenja

Ulazni podaci: Ulazni podaci: Ispis na zaslonu:Ispis na zaslonu:

MallocMatricaMallocMatrica

32485

33 2 2 4 4 8 8 5 5

99 4 4 16 16 64 64 25 25

2727 8 8 64 64 512 512 125125

8181 16 16 256 256 4096 4096 625625

243243 32 32 1024 1024 327683276831253125

14 / 22Algoritmi i strukture podataka, FER, 2007/08.

Page 15: Algoritmi i strukture podataka

Polja pokazivačaPolja pokazivača

Deklaracija Deklaracija

rezervira u memoriji polje od 3 elementa čiji se članovirezervira u memoriji polje od 3 elementa čiji se članovip[0]p[0], , p[1]p[1] i i p[2]p[2] tipa tipa char *char *

što možemo promatrati kaošto možemo promatrati kao???

char *p[3];char *p[3];

15 / 22Algoritmi i strukture podataka, FER, 2007/08.

Page 16: Algoritmi i strukture podataka

PrimjerPrimjer

Načiniti program koji će sadržaj slijedne formatirane datoteke Načiniti program koji će sadržaj slijedne formatirane datoteke prepisati u drugu datoteku redak po redak, ali od posljednjeg retka prepisati u drugu datoteku redak po redak, ali od posljednjeg retka prema prvom. Imena datoteka treba zadati iz naredbenog retka.prema prvom. Imena datoteka treba zadati iz naredbenog retka.

rješenje s realociranjem memorijerješenje s realociranjem memorijeRealloc

0

10

21

32

45

prvi red\n

drugi red\n

treci red\n

cetvrti red\n

peti red\n

16 / 22Algoritmi i strukture podataka, FER, 2007/08.

Page 17: Algoritmi i strukture podataka

Zadaci za vježbuZadaci za vježbu

PokazivačiPokazivačiPoljaPoljaZapisiZapisiDatotekeDatoteke

Page 18: Algoritmi i strukture podataka

PokazivačiPokazivači

Napisati funkciju koja će iz zadanog JMBG-a vratiti datum rođenja Napisati funkciju koja će iz zadanog JMBG-a vratiti datum rođenja kao niz znakova u obliku kao niz znakova u obliku DD.MM.GGGGDD.MM.GGGG. Memorijski prostor . Memorijski prostor potreban za novi niz znakova obavezno zauzeti u funkciji (funkcija potreban za novi niz znakova obavezno zauzeti u funkciji (funkcija mallocmalloc).).

DatumJMBGDatumJMBG

18 / 22Algoritmi i strukture podataka, FER, 2007/08.

Page 19: Algoritmi i strukture podataka

Polja - 1Polja - 1

Iz slijedne formatirane datoteke Iz slijedne formatirane datoteke UlazZaDvodimenzionalnoPolje.txtUlazZaDvodimenzionalnoPolje.txt pročitati pročitati broj redaka i stupacabroj redaka i stupaca cjelobrojnog polja, zatim cjelobrojnog polja, zatim redom čitati redom čitati vrijednostivrijednosti. .

Ispisati članove dvodimenzionalnog polja zajedno s indeksima Ispisati članove dvodimenzionalnog polja zajedno s indeksima dvodimenzionalnog i indeksom analognog jednodimenzionalnog dvodimenzionalnog i indeksom analognog jednodimenzionalnog polja. Za zadane indekse dvodimenzionalnog polja izračunavati polja. Za zadane indekse dvodimenzionalnog polja izračunavati pripadni indeks analognog jednodimenzionalnog polja i ispisivati pripadni indeks analognog jednodimenzionalnog polja i ispisivati sadržaj.sadržaj. DvodimenzionalnoPoljeDvodimenzionalnoPolje

19 / 22Algoritmi i strukture podataka, FER, 2007/08.

Page 20: Algoritmi i strukture podataka

Polja - 2Polja - 2

Napisati funkciju koja računa Napisati funkciju koja računa zbroj pozitivnih elemenatazbroj pozitivnih elemenata dvodimenzionalnog polja te prikazati poziv funkcije iz glavnog dvodimenzionalnog polja te prikazati poziv funkcije iz glavnog programa.programa. Podsjetnik: dvodimenzionalno polje se u funkciju prenosi kao Podsjetnik: dvodimenzionalno polje se u funkciju prenosi kao

jednodimenzionalno. Pohranjeno je po retcima pa se elementu p[i,j] pristupa jednodimenzionalno. Pohranjeno je po retcima pa se elementu p[i,j] pristupa kao p [i*kao p [i*maxstupmaxstup + j]. + j].

SumaUPoljuSumaUPolju

20 / 22Algoritmi i strukture podataka, FER, 2007/08.

Page 21: Algoritmi i strukture podataka

Zapisi i datotekeZapisi i datoteke

Iz slijedne datoteke Iz slijedne datoteke studenti.txtstudenti.txt treba stvoriti direktnu datoteku treba stvoriti direktnu datoteku studenti.datstudenti.dat u u kojoj je struktura zapisa: kojoj je struktura zapisa:

Napisati funkciju koja dohvaća podatke o studentu sa zadanim matičnim brojem Napisati funkciju koja dohvaća podatke o studentu sa zadanim matičnim brojem te ga potom briše iz datoteke. Matični broj studenta odgovara rednom broju te ga potom briše iz datoteke. Matični broj studenta odgovara rednom broju zapisa. Prazan zapis sadrži zapisa. Prazan zapis sadrži mbrmbr jednak jednak 00..DohvatiBrisiDohvatiBrisi

Što ako se pokuša dohvatiti po negativnom matičnom broju?Što ako se pokuša dohvatiti po negativnom matičnom broju?

struct zapis {struct zapis {

int mbr; int mbr; // 3 znamenke// 3 znamenke

char ime [40+1];char ime [40+1];

char spol [1+1];char spol [1+1];

}}

21 / 22Algoritmi i strukture podataka, FER, 2007/08.

Page 22: Algoritmi i strukture podataka

Zapisi i datotekeZapisi i datoteke

U poreznoj upravi u U poreznoj upravi u slijednoj neformatiranojslijednoj neformatiranoj datoteci datoteci porez.dat porez.dat postoje podaci s postoje podaci s poreznih kartica poreznih obveznika. Bitni podaci su:poreznih kartica poreznih obveznika. Bitni podaci su: JMBG (13+1 znamenka),JMBG (13+1 znamenka), ime i prezime (40+1 znak), ime i prezime (40+1 znak), ukupni prijavljeni prihod (float) i ukupni prijavljeni prihod (float) i iznos poreza koji još moraju platiti (float). iznos poreza koji još moraju platiti (float).

Na početku datoteke je upisan jedan podatak tipa Na početku datoteke je upisan jedan podatak tipa longlong koji govori koliko ima koji govori koliko ima zapisa u datoteci. Potrebno je napisati glavni program sa sljedećim dijelovima:zapisa u datoteci. Potrebno je napisati glavni program sa sljedećim dijelovima: funkcijom koja učitava sadržaj datoteke u dinamički alocirano polje struktura funkcijom koja učitava sadržaj datoteke u dinamički alocirano polje struktura funkcijom koja nalazi poreznog obveznika koji mora platiti najveći porezfunkcijom koja nalazi poreznog obveznika koji mora platiti najveći porez

Porez

22 / 22Algoritmi i strukture podataka, FER, 2007/08.