1 / 22

Algoritmi i strukture podataka

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.

hye
Download Presentation

Algoritmi i strukture podataka

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 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. Zaštićeno licencom http://creativecommons.org/licenses/by-nc-sa/2.5/hr/

  2. Creative Commons • slobodno smijete: • dijeliti — umnožavati, distribuirati i javnosti priopćavati djelo • remiksirati — prerađivati djelo • pod sljedećim uvjetima: • imenovanje. 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 korištenje njegova djela imate njegovu izravnu podršku). • nekomercijalno. Ovo djelo ne smijete koristiti u komercijalne svrhe. • dijeli pod istim uvjetima. Ako ovo djelo izmijenite, preoblikujete ili stvarate koristeći ga, preradu možete distribuirati samo pod licencom koja je ista ili slična 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/. Algoritmi i strukture podataka, FER, 2007/08.

  3. Utvrđivanje gradiva iz PIPI-ja Pokazivači Datoteke Dinamička rezervacija memorije

  4. Pokazivači • Što će se ispisati izvođenjem sljedećeg programskog odsječka? Pokazivac Što se rezervira u memoriji? #include <stdio.h> int main () { int a = 4; int *b; b = &a; *b = 8; printf ("%d %d\n", a, *b); return 0; } Što je u programu *b? Što je u programu b? Što bi se dogodilo da nema ovog? Algoritmi i strukture podataka, FER, 2007/08.

  5. Rješ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 Algoritmi i strukture podataka, FER, 2007/08.

  6. Razmjena podataka s funkcijom - call by value KomunikacijaSFunkcijama 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; } Algoritmi i strukture podataka, FER, 2007/08.

  7. Razmjena podataka s funkcijom - call by reference KomunikacijaSFunkcijama 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; } Algoritmi i strukture podataka, FER, 2007/08.

  8. Razmjena podataka s funkcijom - lokalna zamjena adresa KomunikacijaSFunkcijama 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; } Algoritmi i strukture podataka, FER, 2007/08.

  9. Rezervacija i oslobađanje memorije • Definicijom polja uvijek se u memoriji rezervira prostor za najveći očekivani broj članova polja: • no, najčešće ćemo raditi s mnogo manjim brojem članova polja • još jedna česta greška: • bolji je pristup od računala zatražiti točnu potrebnu količinu memorije: • malloc • realloc • free • #include <malloc.h> Koliko se okteta rezervira? • int polje [1000]; scanf("%d", &n); int polje[n]; Algoritmi i strukture podataka, FER, 2007/08.

  10. Rezervacija memorije • rezervira blok veličine size bajtova u memoriji i vraćapokazivač na taj blok • ako blok tražene veličine nije mogao biti rezerviran, vraća NULL pokazivač. • pokazivač na nedefinirani tip podataka (pokazivač na “bilo što”) • može se, bez gubitka podataka, pretvoriti u bilo koji drugi tip pokazivača PrimjerZaMalloc #include <malloc.h> void *malloc (size_t size); void * Algoritmi i strukture podataka, FER, 2007/08.

  11. Promjena rezervacije memorije • ako se prije rezervirani blok može proširiti na veličinu size, proširuje ga • ako nema mjesta u memoriji, kopira sadržaj starog bloka na novu lokaciju na kojoj ima mjesta za size okteta • ako nigdje u memoriji nema size okteta slobodnog mjesta, vraća NULL • ako je block zapravo NULL pokazivač, funkcija radi kao malloc #include <malloc.h> void *realloc (void *block, size_t size); Algoritmi i strukture podataka, FER, 2007/08.

  12. Oslobađanje memorije • oslobađa blok memorije na koji pokazuje pokazivač block • pokazivač block smije biti samo jedan od pokazivača nastalih prethodnim pozivima funkcije malloc ili realloc #include <malloc.h> void free (void *block); Algoritmi i strukture podataka, FER, 2007/08.

  13. Primjer s rezervacijom memorije • Na disku se nalazi slijedna formatirana datoteka polje u kojoj se u svakom retku nalazi jedan cijeli broj. • 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 elementima učitanog jednodimenzionalnog polja, a elementi ostalih redaka potencije elemenata prvog retka (drugi redak=druga potencija, treći treća itd.) • formiranu matricu upisati na disk u slijednu neformatiranu datoteku npolje tako da na početku bude zapisan broj redaka odnosno stupaca matrice (int), a zatim elementi matrice po retcima. • Npr. datoteku poljetreba učitati u jednodimenzionalno polje i formirati matricu 1 2 3 1 4 9 1 8 27 1 2 3 Algoritmi i strukture podataka, FER, 2007/08.

  14. Primjer s rezervacijom memorije: rezultat izvođenja • Ulazni podaci: Ispis na zaslonu: MallocMatrica 3 2 4 8 5 3 2 4 8 5 9 4 16 64 25 27 8 64 512 125 81 16 256 4096 625 243 32 1024 32768 3125 Algoritmi i strukture podataka, FER, 2007/08.

  15. Polja pokazivača ? ? ? • Deklaracija rezervira u memoriji polje od 3 elementa čiji se članovip[0], p[1]i p[2]tipa char * što možemo promatrati kao char *p[3]; Algoritmi i strukture podataka, FER, 2007/08.

  16. Primjer 0 10 21 32 45 • Načiniti program koji će sadržaj slijedne formatirane datoteke prepisati u drugu datoteku redak po redak, ali od posljednjeg retka prema prvom. Imena datoteka treba zadati iz naredbenog retka. • rješenje s realociranjem memorije Realloc prvi red\n drugi red\n treci red\n cetvrti red\n peti red\n Algoritmi i strukture podataka, FER, 2007/08.

  17. Zadaci za vježbu Pokazivači Polja Zapisi Datoteke

  18. Pokazivači • Napisati funkciju koja će iz zadanog JMBG-a vratiti datum rođenja 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, FER, 2007/08.

  19. Polja - 1 • Iz slijedne formatirane datoteke UlazZaDvodimenzionalnoPolje.txtpročitati 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 izračunavati pripadni indeks analognog jednodimenzionalnog polja i ispisivati sadržaj. DvodimenzionalnoPolje Algoritmi i strukture podataka, FER, 2007/08.

  20. Polja - 2 • Napisati funkciju koja računa 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, FER, 2007/08.

  21. Zapisi i datoteke • Iz slijedne datoteke studenti.txt treba stvoriti direktnu datoteku studenti.dat u kojoj je struktura zapisa: 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 zapisa. Prazan zapis sadrži mbr jednak 0. DohvatiBrisi • Što ako se pokuša dohvatiti po negativnom matičnom broju? • struct zapis { • int mbr; // 3 znamenke • char ime [40+1]; • char spol [1+1]; • } Algoritmi i strukture podataka, FER, 2007/08.

  22. 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 početku datoteke je upisan jedan podatak tipa long koji govori koliko ima 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 nalazi poreznog obveznika koji mora platiti najveći porez Porez Algoritmi i strukture podataka, FER, 2007/08.

More Related