You are on page 1of 38

Algoritmi i strukture podataka

Openito o predmetu
pretpostavka:
studenti znaju operativno programirati u jeziku C

studenti koji su eventualno uspjeli poloiti Programiranje i programsko inenjerstvo ne


nauivi C, imat e ozbiljnih problema s polaganjem ovog ispita
manjkavosti u znanju treba pravovremeno nadoknaditi

osnovni koncepti struktura podataka i algoritmi nad njima


rekurzija
stogovi, redovi, liste, stabla, tablice s rasprenim adresiranjem
algoritmi pretraivanja, sortiranja i adresiranja
objektno-orijentirana programska paradigma

predmet je bio uveden jo u nastavni plan FER-1 kao zajedniki


odlukom oba studija i svih smjerova
Algoritmi i strukture podataka, 2006/07.

2 / 38

Tko i gdje predaje?


predavai & asistenti
prof. dr. sc. Vedran Mornar
prof. dr. sc. Damir Kalpi
prof. dr. sc. Robert Manger
prof. dr. sc. Kreimir Fertalj
doc. dr. sc. Gordan Gledec
dr. sc. Strahil Ristov
dr. sc. Nikica Hlupi
dr. sc. Zvonimir Vanjak
dr. sc. Tomislav Pribani

1.04
1.07
1.09
1.06
1.01
1.05
1.08
1.03
1.02

Dubravka Pukljak-Zokovi
Andrija Rubelj
Boris Milainovi
Ivana Nieti
Gordan Gledec
Ivica Botiki
Hrvoje Hegedu, Marko Jurevi
Zvonimir Vanjak
Tomislav Rajnovi

administracija
Zavod za primijenjeno raunarstvo, III kat zgrada D
Tel: 6129-915 (ga. Sonja Majstorovi)

Obavijesti: na web-stranici predmeta ili na vratima Zavoda za primijenjeno raunarstvo (3. kat
zgrade D)
http://www.fer.hr/predmet/asp

Algoritmi i strukture podataka, 2006/07.

3 / 38

Literatura
http://www.fer.hr/predmet/asp
vlastita biljenica
Horowitz & Sahni: Fundamentals of Computer Algorithms, Pitman, London,
1995
Weiss: Data Structures and Algorithm Analysis in C, Addison Wesley, 1997
Sedgwick: Algorithms in C, Addison-Wesley, 2001
Cormen, Leiserson & Rivest: Introduction to algorithms, 2/e,MIT Press, 2001
Budin: Informatika za 1. razred gimnazije, Element, Zagreb, 1996
Knuth: Fundamental Algorithms, Addison-Wessley, 1973
Wirth: Algorithms + Data Structures = Programs, Prentice-Hall, 1976
Eckel: Thinking in C++ Vol. 1 (PDF u Repozitoriju predmeta)
Algoritmi i strukture podataka, 2006/07.

4 / 38

Materijali
materijali za ovaj predmet mogu se preuzeti s weba u repozitoriju
stranice predmeta
http://www.fer.hr/ Ustroj ustanove Zavodi ZPR Predmeti
Algoritmi i strukture podataka
ili
http://www.fer.hr/predmet/asp

Algoritmi i strukture podataka, 2006/07.

5 / 38

Ankete
rezultati ankete bitni su za analizu i unapreenje nastave
anonimno!

ulazna anketa
tijekom prva tri tjedna predavanja.

zavrna anketa
tijekom zadnja tri tjedna predavanja

obrazac e biti objavljen na webu FER-a Ahyco

Algoritmi i strukture podataka, 2006/07.

6 / 38

Laboratorijske vjebe
pokazalo se da gotovo svi studenti imaju vlastita raunala pa mogu
raditi kod kue, odnosno gdje i kad im odgovara
za svladavanje predvienog programa i predaju domaih zadaa
studentima je na raspolaganju i laboratorij

Algoritmi i strukture podataka, 2006/07.

7 / 38

Ocjenjivanje
elementi:
sudjelovanje u nastavi
automatsko ocjenjivanje domaih zadaa (3 x 3)
automatsko ispitivanje znanja (3 x 6)
I meuispit
II meuispit
zavrni ispit

8%
9%
18 %
15 %
20 %
30 %

za pozitivnu ocjenu (prolaz) treba ostvariti vie od 50,00 % moguih


bodova

Algoritmi i strukture podataka, 2006/07.

8 / 38

Vrednovanje sudjelovanja u nastavi


komponente:
prisustvovanje na predavanju
rjeavanje jednostavnih zadataka na raunalu ili ploi
rjeavanje kratkih kontrolnih zadaa
ukupna vrijednost komponente

Algoritmi i strukture podataka, 2006/07.

8 % bodova

9 / 38

Vrednovanje domaih zadaa


ukupno tri domae zadae bit e zadane putem weba FER-a
za ispravljanje odgovorni asistenti
vrednovanje:
dohvat i predaja domae zadae u elektronikom obliku
korektno objanjenje vlastite zadae pred asistentom
ukupna vrijednost komponente

Algoritmi i strukture podataka, 2006/07.

3 x 3 = 9% bodova

10 / 38

Vrednovanje automatskog ocjenjivanja (blic)


ukupno tri automatski generirana testa donose svaki po 6% bodova u
terminima o kojima e studenti biti obavijeteni barem tjedan dana unaprijed
generirani test se rjeava pod nadzorom deurnog asistenta ili predavaa
student se treba samostalno i na vrijeme pripremiti
provjera korisnikog imena i lozinke, pokusni rad sa sustavom Ahyco

uvjebavanje mogue preko weba s ogranienim skupom pitanja


komponente vrednovanja svakog testa:
svako od 12 generiranih pitanja vrijedi 0,5 % bodova
pogrean odgovor odnosi 0,1% bodova
trajanje ispita 30 minuta
maksimalni doprinos pojedinog testa je 6% bodova
ukupna vrijednost komponente
Algoritmi i strukture podataka, 2006/07.

3 x 6 = 18% bodova
11 / 38

Prvi meuispit
ispit je pismeni
sastoji se od problemskih zadataka koji ukupno donose 15% bodova
u tjednu 26.03.2007. 30.03.2007.
rjeenja ispravljaju asistenti

Algoritmi i strukture podataka, 2006/07.

12 / 38

Drugi meuispit
ispit je pismeni
sastoji se od problemskih zadataka koji ukupno donose 20% bodova
u tjednu 07.05.2007. 11.05.2007.
rjeenja ispravljaju asistenti

Algoritmi i strukture podataka, 2006/07.

13 / 38

Zavrni ispit
ispit je pismeni
sastoji se od problemskih zadataka koji ukupno donose 30% bodova
u tjednu 18.06.2007. 21.06.2007.
rjeenja ispravljaju asistenti, a verificiraju nastavnici
ispitu ne mogu pristupiti studenti koji e do tada prikupiti manje od
20% bodova

Algoritmi i strukture podataka, 2006/07.

14 / 38

Ponovljeni zavrni ispit


ispit je pismeni
sastoji se od problemskih zadataka koji ukupno donose 30% bodova
u tjednu 26.06.2007. 29.06.2007.
studentima koji pristupaju ponovljenom zavrnom ispitu briu se
bodovi s prethodnog zavrnog ispita
ispitu mogu pristupiti i studenti koji ele poveati ocjenu
ali je mogue da je i umanje ili ak padnu na ispitu!

ispit ispravljaju asistenti, a verificiraju nastavnici

Algoritmi i strukture podataka, 2006/07.

15 / 38

Ocjenjivanje Gauss
15% - 5
35% - 4
35% - 3
15% - 2

...od onih koji su ostvarili vie od 50% bodova

Algoritmi i strukture podataka, 2006/07.

16 / 38

Konzultacije
konzultacije kod izvoditelja nastave
svaki dan od 12-13h ili prema dogovoru s nastavnikom

Zavod za primijenjeno raunarstvo


Zgrada D/III kat, sjeverozapadno krilo

donijeti vlastite biljeke s nastave!

sve primjedbe i upite vezane uz predmet aljite na:


e-mail adresu predavaa koji izvodi nastavu

adresa oblika ime.prezime@fer.hr

Subject: [ASP]
podesite svoje programe za slanje elektronike pote tako da koriste vae
puno ime i prezime i u potpisu navedite svoj matini broj

Algoritmi i strukture podataka, 2006/07.

17 / 38

Plan nastave
prvi ciklus (5 tjedana)
utvrivanje gradiva iz prethodnog semestra
algoritmi, sloenost algoritma, tehnike adresiranja
poziv funkcije na sistemskom stogu, rekurzija

drugi ciklus (4 tjedna)


sortiranje
uvod u objektno programiranje
stog

trei ciklus (4 tjedna)


red, jednostruko i dvostruko povezane liste
stabla
gomila kao prioritetni red, heapsort
Algoritmi i strukture podataka, 2006/07.

18 / 38

Utvrivanje gradiva iz PIPI-ja


Pokazivai
Datoteke
Dinamika rezervacija memorije

Pokazivai
to e se ispisati izvoenjem sljedeeg programskog odsjeka?
Pokazivac
#include <stdio.h>
int main () {
int a = 4;
int *b;

to se rezervira u memoriji?
to je u programu *b?
to je u programu b?

b = &a;
to bi se dogodilo da nema ovog?
*b = 8;
printf ("%d %d\n", a, *b);
return 0;
}
Algoritmi i strukture podataka, 2006/07.

20 / 38

Rjeenje
to bi se dogodilo kad bismo izostavili liniju b = &a; ?
Budui da pokaziva b prije pridruivanja vrijednosti pokazuje na
nedefiniranu adresu, moglo bi doi do pokuaja upisivanja vrijednosti 8 na
adresu koja je rezervirana za pohranu drugih varijabli ili koda, to moe
izazvati neoekivano ponaanje ili pogreku pri izvoenju programa zbog
neovlatenog pristupa dijelu memorije.
uvijek treba inicijalizirati vrijednost pokazivaa prije upotrebe
program u MS Visual C++ zavrava pogrekom zbog koritenja varijable
koja nije definirana

Algoritmi i strukture podataka, 2006/07.

21 / 38

Razmjena podataka s funkcijom - call by value


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;
}

KomunikacijaSFunkcijama
Algoritmi i strukture podataka, 2006/07.

22 / 38

Razmjena podataka s funkcijom - call by reference


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;
}

KomunikacijaSFunkcijama
Algoritmi i strukture podataka, 2006/07.

23 / 38

Razmjena podataka s funkcijom - lokalna zamjena adresa


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;
}

KomunikacijaSFunkcijama
Algoritmi i strukture podataka, 2006/07.

24 / 38

Rezervacija i oslobaanje memorije


Definicijom polja uvijek se u memoriji rezervira prostor za najvei oekivani broj
lanova polja:

int polje [1000];

Koliko bajtova se rezervira?

no, najee emo raditi s mnogo manjim brojem lanova polja


jo jedna esta greka:
scanf("%d", &n);
int polje[n];
bolji je pristup od raunala zatraiti tonu potrebnu koliinu memorije:
malloc
realloc
free

#include <malloc.h>
Algoritmi i strukture podataka, 2006/07.

25 / 38

Rezervacija memorije
#include <malloc.h>
void *malloc (size_t size);

rezervira blok veliine size bajtova u memoriji i vraa pokaziva


na taj blok
ako blok traene veliine nije mogao biti rezerviran, vraa NULL
pokaziva.
void *

pokaziva na nedefinirani tip podataka (pokaziva na bilo to)


moe se, bez gubitka podataka, pretvoriti u bilo koji drugi tip pokazivaa

PrimjerZaMalloc
Algoritmi i strukture podataka, 2006/07.

26 / 38

Promjena rezervacije memorije


#include <malloc.h>
void *realloc (void *block, size_t size);

ako se prije rezervirani blok moe proiriti na veliinu size,


proiruje ga
ako nema mjesta u memoriji, kopira sadraj starog bloka na novu
lokaciju na kojoj ima mjesta za size bajtova
ako nigdje u memoriji nema size bajtova slobodnog mjesta, vraa
NULL
ako je block zapravo NULL pokaziva, funkcija radi kao malloc

Algoritmi i strukture podataka, 2006/07.

27 / 38

Oslobaanje memorije
#include <malloc.h>
void free (void *block);

oslobaa blok memorije na koji pokazuje pokaziva block


pokaziva block smije biti samo jedan od pokazivaa nastalih
prethodnim pozivima funkcije malloc ili realloc

Algoritmi i strukture podataka, 2006/07.

28 / 38

Primjer s rezervacijom memorije


Na disku se nalazi slijedna formatirana datoteka polje u kojoj se u svakom retku
nalazi jedan cijeli broj.
uitati sadraj datoteke u memoriju raunala kao jednodimenzionalno polje.
u memoriji raunala formirati kvadratnu matricu kojoj su elementi prvog retka jednaki
elementima uitanog jednodimenzionalnog polja, a elementi ostalih redaka potencije
elemenata prvog retka (drugi redak=druga potencija, trei trea itd.)
formiranu matricu upisati na disk u slijednu neformatiranu datoteku npolje tako da na
poetku bude zapisan broj redaka odnosno stupaca matrice (int), a zatim elementi matrice
po retcima.

Npr. datoteku polje treba uitati u jednodimenzionalno polje i formirati matricu

1
2
3
Algoritmi i strukture podataka, 2006/07.

1
1
1

2 3
4 9
8 27
29 / 38

Primjer s rezervacijom memorije: rezultat izvoenja


Ulazni podaci:
3
2
4
8
5

Ispis na zaslonu:
3
9
27
81
243

2
4
8
16
32

4
16
64
256
1024

8
64
512
4096
32768

5
25
125
625
3125

MallocMatrica

Algoritmi i strukture podataka, 2006/07.

30 / 38

Polja pokazivaa
Deklaracija
char *p[3];
rezervira u memoriji polje od 3 elementa iji se lanovi
p[0], p[1] i p[2] tipa char *
to moemo promatrati kao
?
?
?

Algoritmi i strukture podataka, 2006/07.

31 / 38

Primjer
Nainiti program koji e sadraj slijedne formatirane datoteke
prepisati u drugu datoteku redak po redak, ali od posljednjeg retka
prema prvom. Imena datoteka treba zadati iz naredbenog retka.
Rjeenje s realociranjem memorije
Realloc
0
10
21
32
45
Algoritmi i strukture podataka, 2006/07.

prvi red\n
drugi red\n
treci red\n
cetvrti red\n
peti red\n
32 / 38

Zadaci za vjebu
Pokazivai
Polja
Zapisi
Datoteke

Pokazivai
Napisati funkciju koja e iz zadanog JMBG-a vratiti datum roenja
kao niz znakova u obliku DD.MM.GGGG. Memorijski prostor
potreban za novi niz znakova obavezno zauzeti u funkciji (funkcija
malloc).
DatumJMBG

Algoritmi i strukture podataka, 2006/07.

34 / 38

Polja - 1
Iz slijedne formatirane datoteke UlazZaDvodimenzionalnoPolje.txt
proitati broj redaka i stupaca cjelobrojnog polja, zatim redom itati
vrijednosti.
Ispisati lanove dvodimenzionalnog polja zajedno s indeksima
dvodimenzionalnog i indeksom analognog jednodimenzionalnog
polja. Za zadane indekse dvodimenzionalnog polja izraunavati
pripadni indeks analognog jednodimenzionalnog polja i ispisivati
sadraj.
DvodimenzionalnoPolje

Algoritmi i strukture podataka, 2006/07.

35 / 38

Polja - 2
Napisati funkciju koja rauna zbroj pozitivnih elemenata
dvodimenzionalnog polja, te prikazati poziv funkcije iz glavnog
programa.
Podsjetnik: dvodimenzionalno polje se u funkciju prenosi kao
jednodimenzionalno. Pohranjeno je po retcima pa se elementu p[i,j]
pristupa kao p [i*maxstup + j].
SumaUPolju

Algoritmi i strukture podataka, 2006/07.

36 / 38

Zapisi i datoteke
Iz slijedne datoteke studenti.txt treba stvoriti direktnu datoteku studenti.dat u
kojoj je struktura zapisa:
struct zapis {
int mbr; // 3 znamenke
char ime [40+1];
char spol [1+1];
}

Napisati funkciju koja dohvaa podatke o studentu sa zadanim matinim


brojem te ga potom brie iz datoteke. Matini broj studenta odgovara rednom
broju zapisa. Prazan zapis sadri mbr jednak 0.
DohvatiBrisi

to ako se pokua dohvatiti po negativnom matinom broju?


Algoritmi i strukture podataka, 2006/07.

37 / 38

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

Na poetku datoteke je upisan jedan podatak tipa long koji govori koliko ima
zapisa u datoteci. Potrebno je napisati glavni program sa sljedeim dijelovima:
funkcijom koja uitava sadraj datoteke u dinamiki alocirano polje struktura
funkcijom koja nalazi poreznog obveznika koji mora platiti najvei porez
Porez

Algoritmi i strukture podataka, 2006/07.

38 / 38

You might also like