23
Zadaci za praktikum Programiranje II Matematiˇ cki fakultet u Beogradu 27. maj 2015 Sadrˇ zaj 1 I nedelja - Obnavljanje gradiva Programiranja 1 3 1.1 Obavezni zadaci ................................................. 3 1.2 Dodatni zadaci ................................................. 3 2 II nedelja - Kompilacija iz viˇ se izvornih datoteka 4 2.1 Obavezni zadaci ................................................. 4 2.2 Dodatni zadaci ................................................. 4 3 III nedelja - Bitski operatori 5 3.1 Obavezni zadaci ................................................. 5 3.2 Dodatni zadaci ................................................. 5 4 IV nedelja - Rekurzija 6 4.1 Obavezni zadaci ................................................. 6 4.2 Dodatni zadaci ................................................. 6 5 V nedelja - Pretrage 8 5.1 Obavezni zadaci ................................................. 8 5.2 Dodatni zadaci ................................................. 8 6 VI nedelja - Sortiranje 9 6.1 Obavezni zadaci ................................................. 9 6.2 Dodatni zadaci ................................................. 9 7 VII nedelja - Sortiranje 10 7.1 Obavezni zadaci ................................................. 10 7.2 Dodatni zadaci ................................................. 11 8 VIII nedelja - Pokazivaˇ ci, Zadaci sa kolokvijuma 12 8.1 Obavezni zadaci ................................................. 12 8.2 Dodatni zadaci ................................................. 12 9 IX nedelja - Matrice 14 9.1 Obavezni zadaci ................................................. 14 9.2 Dodatni zadaci ................................................. 15 10 X nedelja - Dinamiˇ cka alokacija 16 10.1 Obavezni zadaci ................................................. 16 10.2 Dodatni zadaci ................................................. 17 11 XI nedelja - Pokazivaˇ ci na funkcije i biblioteˇ cke funkcije pretrage i sortiranja 18 11.1 Obavezni zadaci ................................................. 18 11.2 Dodatni zadaci ................................................. 18 1

Zadaci za praktikum Programiranje II Matematiˇcki fakultet

  • Upload
    others

  • View
    7

  • Download
    0

Embed Size (px)

Citation preview

Page 1: Zadaci za praktikum Programiranje II Matematiˇcki fakultet

Zadaci za praktikum

Programiranje II

Matematicki fakultet u Beogradu

27. maj 2015

Sadrzaj

1 I nedelja - Obnavljanje gradiva Programiranja 1 31.1 Obavezni zadaci . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31.2 Dodatni zadaci . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3

2 II nedelja - Kompilacija iz vise izvornih datoteka 42.1 Obavezni zadaci . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42.2 Dodatni zadaci . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4

3 III nedelja - Bitski operatori 53.1 Obavezni zadaci . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 53.2 Dodatni zadaci . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5

4 IV nedelja - Rekurzija 64.1 Obavezni zadaci . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 64.2 Dodatni zadaci . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6

5 V nedelja - Pretrage 85.1 Obavezni zadaci . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 85.2 Dodatni zadaci . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8

6 VI nedelja - Sortiranje 96.1 Obavezni zadaci . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 96.2 Dodatni zadaci . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9

7 VII nedelja - Sortiranje 107.1 Obavezni zadaci . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 107.2 Dodatni zadaci . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11

8 VIII nedelja - Pokazivaci, Zadaci sa kolokvijuma 128.1 Obavezni zadaci . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 128.2 Dodatni zadaci . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12

9 IX nedelja - Matrice 149.1 Obavezni zadaci . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 149.2 Dodatni zadaci . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15

10 X nedelja - Dinamicka alokacija 1610.1 Obavezni zadaci . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1610.2 Dodatni zadaci . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17

11 XI nedelja - Pokazivaci na funkcije i bibliotecke funkcije pretrage i sortiranja 1811.1 Obavezni zadaci . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1811.2 Dodatni zadaci . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18

1

Page 2: Zadaci za praktikum Programiranje II Matematiˇcki fakultet

12 XII nedelja - Liste 2012.1 Obavezni zadaci . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2012.2 Dodatni zadaci . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21

13 XIII nedelja - Stabla 2213.1 Obavezni zadaci . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2213.2 Dodatni zadaci . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23

2

Page 3: Zadaci za praktikum Programiranje II Matematiˇcki fakultet

1 I nedelja - Obnavljanje gradiva Programiranja 1

1.1 Obavezni zadaci

1. Napisati funkciju koja odreduje dva najveca elementa niza A, i program koji je testira (niz nece biti duzi od 32,i elementi niza se unose sa standardnog ulaza sve dok se ne unese 0)

Ulaz: 1 2 3 4 5 6 0 3 4 -1 2 3 0 4 5 4 5 2 0Izlaz: 5 6 3 4 5 5

2. Napisati program koji ispituje da li je string koji se unosi sa standardnog ulaza (maksimalne duzine 32) palindrom.

Ulaz: abcba programiranje aaIzlaz: da ne da

3. Napisati funkciju koja kvadrira one elemente niza koji su veci od aritmeticke sredine niza. Niz se unosi sastandardnog ulaza, sve kod se ne unese nula, i nece biti duzi od 32. Na standardni izlaz ispisati promenjen niz.

Ulaz: 1 2 3 4 5 6 0 3 4 -1 2 3 0 4 5 4 5 2 0Izlaz: 1 2 3 16 25 36 9 16 -1 2 9 4 25 4 25 2

4. Napisati program koji utvrduje koliko se puta data rec pojavljuje u datoj tekstualnoj datoteci. Naziv datotekekao i rec zadaju se kao argumenti komandne linije.

Poziv: ./a.out primer.txt programiranjeDatoteka: programiranje je jako vazno, i programiranje se lako uci.

programiranje treba redovno vezbati.Izlaz: 3

5. U datoteci (cije se ime zadaje iz komandne linije) dat je neki tekst. Napisati program koji sifruje dati tekst tzv.”Cezarovom” sifrom, i rezultujuci tekst upisuje u drugu datoteku, cije se ime takode zadaje iz komandne linije(ako se ne navede, ispisuje na standardni izlaz). Cezarovom sifrom se slova kodiraju na sledeci nacin:

A -> D, B -> E, ..., X -> A, Y -> B, Z -> C (slicno za mala slova).Ostali karakteri ostaju nepromenjeni.

Poziv: ./a.out ulaz.txt izlaz.txtulaz.txt: Abcde-Programiranje2izlaz.txt: Defgh-Surjudpludqmh2

1.2 Dodatni zadaci

1. Napisati program koji iz niza A izbacuje sve elemente A[i] koji imaju sledece svojstvo: i > 0 i A[i] je manji odsvih elemenata koji mu prethode u nizu A.

2. Napisati program koji ispituje da li dati string s1 nastaje ciklicnim pomeranjem drugog datog stringa s2. Npr:za s1="abcde" i s2="cdeab" s1 nastaje ciklicnim pomeranjem u desno stringa s2 za 2 mesta.

3

Page 4: Zadaci za praktikum Programiranje II Matematiˇcki fakultet

2 II nedelja - Kompilacija iz vise izvornih datoteka

2.1 Obavezni zadaci

1. Napisati malu biblioteku za rad sa polinomima:

(a) Definisati strukturu Polinom koja predstavlja polinom (stepena najvise 20). Struktura sadrzi stepen i nizkoeficijenata. (Diskutovati redosled navodenja koeficijenata u nizu)

(b) Napisati funkciju koja ispisuje polinom na standardni izlaz u sto lepsem obliku.

(c) Napisati funkciju koja ucitava polinom sa standardnog ulaza.

(d) Napisati funkciju za izracunavanje vrednosti polinoma u datoj tacki (diskutovati Hornerov algoritam injegove prednosti).

(e) Napisati funkciju koja sabira dva polinoma.

(f) Napisati funkciju koja mnozi dva polinoma.

Sve vreme, paralelno sa razvojem funkcija, pisati i glavni program koji ih testira.

Nakon toga, izdvojiti funkcije u zasebnu datoteku polinom.c, a program u test-polinom.c. Prikazati problemeu kompilaciji, posto ne postoji vise definicija strukture kao ni prototipovi funkcija u test-polinom.c. Diskutovatida dupliranje ovoga u obe C datoteke dovodi do velikih problema prilikom odrzavanja programa. Uvestipolinom.h kao resenje i ukljuciti ga u obe datoteke. Prikazati kreiranje objektne datoteke polinom.o.

gcc -o test-polinom polinom.c test-polinom.c

i

gcc -c polinom.cgcc -c test-polinom.cgcc -o test-polinom polinom.o test-polinom.o

”Distribuirati” datoteke polinom.h i polinom.o (ne polinom.c) - na primer premestanjem u novi direktorijum.Napisati novi test program, prevesti ga i povezati.

2.2 Dodatni zadaci

1. Napraviti biblioteku za rad sa razlomcima.

(a) Definisati strukturu za reprezentovanje razlomaka.

(b) Napisati funkcije za ucitavanje i ispis razlonaka.

(c) Napisati funkcije koje vracaju brojilac i imenilac.

(d) Napisati funkciju koja vraca vrednost razlomka kao double vrednost.

(e) Napisati funkciju koja izracunava reciprocnu vrednost razlomka.

(f) Napisati funkciju koja skracuje dati razlomak.

(g) Napisati funkcije koje sabiraju, oduzimaju, mnoze i dele dva razlomka.

4

Page 5: Zadaci za praktikum Programiranje II Matematiˇcki fakultet

3 III nedelja - Bitski operatori

3.1 Obavezni zadaci

1. Sastaviti funkciju int Broj01(unsigned int n) koja za dati broj n vraca 1 ako u njegovom binarnom zapisu imavise jednica nego nula, a inace vraca 0. Napisati program koji tu funkciju testira za broj koji se zadaje sastandardnog ulaza.

Ulaz: 10 1024 2147377146 1111111115Izlaz: 0 0 1 0

2. Napisati funkciju koja broji koliko se puta kombinacija 11 (dve uzastopne jedinice) pojavljuje u binarnom zapisucelog neoznacenog broja x. Tri uzastopne jedinice se broje dva puta. Napisati program koji tu funkciju testiraza broj koji se zadaje sa standardnog ulaza.

Ulaz: 11 1024 2147377146 1111111115Izlaz: 1 0 22 6

3. Napisati program koji sa standardnog ulaza ucitava pozitivan ceo broj, a na standardni izlaz ispisuje vrednost togbroja sa razmenjenim vrednostima bitova na pozicijama i, j. Pozicije i, j se ucitavaju kao parametri komandnelinije. Smatrati da je krajnji desni bit binarne reprezentacije 0-ti bit. Pri resavanju nije dozvoljeno koristitipomocni niz niti aritmeticke operatore +,-,/,*,%.

Poziv: ./a.out 1 2 ./a.out 1 2 ./a.out 12 12Ulaz: 11 1024 12345Izlaz: 13 1024 12345

4. Napisati funkciju koja na osnovu neoznacenog broja x formira nisku s koja sadrzi heksadekadni zapis brojax, koristeci algoritam za brzo prevodenje binarnog u heksadekadni zapis (svake 4 binarne cifre se zamenjujujednom odgovarajucom heksadekadnom cifrom). Napisati program koji tu funkciju testira za broj koji se zadajesa standardnog ulaza.

Ulaz: 11 1024 12345Izlaz: 0000000B 00000400 00003039

3.2 Dodatni zadaci

1. Napisati funkciju koja za dva data neoznacena broja x i y invertuje u podatku x one bitove koji se poklapaju saodgovarajucim bitovima u broju y. Ostali bitovi ostaju nepromenjeni. Napisati program koji tu funkciju testiraza brojeve koji se zadaju sa standardnog ulaza.

Ulaz: 123 10 3251 0 12541 1024Izlaz: 4294967285 4294967295 4294966271

2. Napisati funkciju koja racuna koliko petica bi imao ceo neoznacen broj x u oktalnom zapisu. Napisati programkoji tu funkciju testira za broj koji se zadaje sa standardnog ulaza.

Ulaz: 123 3245 100328Izlaz: 0 2 1

5

Page 6: Zadaci za praktikum Programiranje II Matematiˇcki fakultet

4 IV nedelja - Rekurzija

4.1 Obavezni zadaci

1. Napisati rekurzivnu funkciju koja odreduje maksimum niza celih brojeva. Napisati program koji testira ovufunkciju, za niz koji se ucitava sa standardnog ulaza. Niz nece biti duzi od 256, i njegovi elementi se unose svedo kraja ulaza.

Ulaz: 3 2 1 4 21 2 -1 0 -5 -10 1 11 3 5 8 1 5Izlaz: 21 2 11 5

2. Napisati rekurzivnu funkciju koja izracunava skalarni proizvod dva data vektora. Napisati program koji testiraovu funkciju, za nizove koji se ucitavaju sa standardnog ulaza. Duzina nece biti veca od 256. Prvo se unosidimenzija nizova, a zatim i sami njihovi elementi.

Ulaz: 3 1 2 3 1 2 3 2 3 5 2 6 0Izlaz: 14 36 0

3. Napisati rekurzivnu funkciju koja sabira dekadne cifre datog celog broja x. Napisati program koji testira ovufunkciju, za broj koji se ucitava sa standardnog ulaza.

Ulaz: 123 23156 1432 1 0Izlaz: 6 17 10 1 0

4. Napisati rekurzivnu funkciju koja racuna broj pojavljivanja elementa x u nizu a duzine n. Napisati programkoji testira ovu funkciju, za x i niz koji se ucitavaju sa standardnog ulaza. Niz nece biti duzi od 256. Prvo seunosi x, za zatim elementi niza sve do kraja ulaza.

Ulaz: 4 1 2 3 4 11 3 2 11 14 11 43 1 1 3 21 5 6Izlaz: 1 2 0

5. Napisati rekurzivnu funkciju koja ispituje da li je data niska palindrom. Napisati program koji testira ovufunkciju. Pretposatviti da niska nece biti duza od 32, i da se unosi sa standardnog ulaza.

Ulaz: programiranje anavolimilovana a aba aaIzlaz: ne da da da da

6. Napisati rekurzivnu funkciju kojom se proverava da li su tri zadata broja uzastopni clanovi niza. Potom, napisatiprogram koji je testira. Sa standardnog ulaza se unose najpre tri trazena broja, a zatim elementi niza, sve dokraja ulaza. Pretpostaviti da ih nece biti vise od 256.

Ulaz: 1 2 3 4 1 2 3 4 5 1 2 3 11 1 2 4 3 6 1 2 3 1 2Izlaz: da ne ne

4.2 Dodatni zadaci

1. Napisati rekurzivnu funkciju koja stampa bitovsku reprezentaciju neoznacenog celog broja, i program koji jetestira za ulaz koji se zadaje sa standardnog ulaza.

Ulaz: 10Izlaz: 00000000000000000000000000001010

2. Napisati rekurzivnu funkciju koja prikazuje sve varijacije sa ponavljanjem duzine n skupa {a, b}, i program kojije testira, za n koje se ucitava sa standardnog ulaza.

Ulaz: 3Izlaz: a a a

a a ba b aa b bb a ab a bb b ab b b

6

Page 7: Zadaci za praktikum Programiranje II Matematiˇcki fakultet

3. Modifikacija problema ”Hanojskih kula”: Data su cetiri vertikalna stapa, na jednom se nalazi n diskova poluprecnika1,2,3,... do n, tako da se najveci nalazi na dnu, a najmanji na vrhu. Ostala tri stapa su prazna. Potrebno jepremestiti diskove na drugi stap tako da budu u istom redosledu, premestajuci jedan po jedan disk, pri cemu seni u jednom trenutku ne sme staviti veci disk preko manjeg, pri cemu se preostala dva stapa koriste kao pomocnistapovi prilikom premestanja.

7

Page 8: Zadaci za praktikum Programiranje II Matematiˇcki fakultet

5 V nedelja - Pretrage

5.1 Obavezni zadaci

1. U datoteci koja se zadaje kao argument komandne linije, nalaze se koordinate tacaka. U zavisnosti od prisustvaopcija komandne linije (−x, −y), pronaci onu koja je najbliza x (y) osi, ili koordinatnom pocetku, ako nijeprisutna nijedna opcija. Broj tacaka u datoteci nije unapred poznat.

Poziv: ./a.out dat.txt -xDatoteka: 12 53

2.342 34.1-0.3 23-1 23.1123.5 756.12

Izlaz: -0.3 23

2. Napisati funkciju koja odreduje nulu funkcije cos(x) na intervalu [0, 2] metodom polovljenja intervala (napomena:analogija sa binarnom pretragom). Algoritam se zavrsava kada se vrednost kosinusne funkcije razlikuje za najvise0.001 od 0.

Izlaz: 1.571289

3. Napisati funkciju koja u sortiranom nizu nalazi prvi element veci od nule (napomena: primeniti binarnupretragu). Napisati i program koji testira ovu funkciju za niz elemenata koji se zadaju kao argumenti komandnelinije.

Poziv: ./a.out -43 -24 -5 -2 1 4 6 12 ./a.out -32 4 65 123Izlaz: 1 4

4. Napisati funkciju koja rekurzivno implementira algoritam interpolacione pretrage i program koji ovu funkcijutestira za brojeve koji se unose sa standardnog ulaza (pretpostaviti da niz brojeva koji se unosi nije duzi od 1000elemenata). Prvo se unosi broj koji se trazi, a zatim sortirani elementi niza sve do kraja ulaza.

Ulaz: 11 2 5 6 8 10 11 23 14 10 32 35 43 66 89 100 13Izlaz: 5 -1

5.

5.2 Dodatni zadaci

1. Napisati funkciju koja odreduje ceo deo logaritma za osnovu 2 datog neoznacenog celog broja, koristeci samobitske i relacione operatore.

(a) Prikazati varijantu sa pomeranjem broja udesno dok ne postane 0 (linearna slozenost).(b) Prikazati varijantu sa binarnom pretragom (logaritamska slozenost).

Ulaz: 10 4 17 1031Izlaz: 3 2 4 10

2. U prvom kvadrantu dato je 1 ≤ N ≤ 10000 duzi svojim koordinatama (duzi mogu da se seku, preklapaju, itd.).Napisati program koji pronalazi najmanji ugao 0 ≤ α ≤ 90◦, na dve decimale, takav da je suma duzina duzi saobe strane polupoluprave iz koordinatnog pocetka pod uglom α jednak (neke duzi bivaju presecene, a neke ne).Npr.

Ulaz:22 0 2 11 2 2 2

Izlaz:26.57

(Uputstvo: vrsiti binarnu pretragu intervala [0, 90◦]).

8

Page 9: Zadaci za praktikum Programiranje II Matematiˇcki fakultet

6 VI nedelja - Sortiranje

6.1 Obavezni zadaci

1. U datom nizu brojeva pronaci dva koja su na najmanjem rastojanju. Niz se zadaje sa standardnog ulaza, sve dokraja ulaza, i nece imati vise od 256 elemenata. (uputstvo: prvo sortirati niz). Na izlaz ispisati njihovu razliku.

Ulaz: 23 64 123 76 22 7 21 654 65 123 65 12 61Izlaz: 1 0

2. Napisati funkciju koja sortira slova unutar niske karaktera. Napisati program koji proverava da li su dve niskekaraktera anagrami. Dve niske su anagrami ako se sastoje od istog broja istih karaktera. Niske se zadaju sastandardnog ulaza, i nece biti duze od 128 karaktera.

Ulaz: anagram ramgana anagram anagrmIzlaz: jesu nisu

3. Napisati program koji pronalazi broj koji se najvise puta pojavljivao u datom nizu (uputstvo: prvo sortirati niza zatim naci najduzu sekvencu jednakih elemenata). Niz se zadaje sa standardnog ulaza sve do kraja ulaza, inece biti duzi od 256 elemenata.

Ulaz: 4 23 5 2 4 6 7 34 6 4 5 2 4 6 2 6 7 99 1Izlaz: 4 2

4. Napisati funkciju koja proverava da li u datom nizu postoje dva elementa kojima je zbir zadati ceo broj (uputstvo:prvo sortirati niz). Napisati i program koji testira ovu funkciju, u kome se prvo ucitava pomenuti broj, pa zatimniz ne vece duzine od 256 sve do kraja ulaza.

Ulaz: 34 134 4 1 6 30 23 12 53 1 43 3 56 13Izlaz: da ne

5. Napisati funkciju koja prima dva sortirana niza, i na osnovu njih pravi novi sortirani niz koji koji sadrzi elementeoba niza

int merge(int *niz1, int dim1, int *niz2, int dim2, int *niz3, int dim3);

Treca dimenzija predstavlja velicinu niza u koji se smesta rezultat. Ako je ona manja od potrebne duzine,funkcija vraca -1, kao indikator neuspeha, inace vraca 0. Napisati i program koji testira funkciju, u kome senizovi unose sa standardnog ulaza, sve dok se ne unese 0.

Ulaz: 3 6 7 11 14 35 0 3 5 8 0 1 4 7 0 9 11 23 54 75 0Izlaz: 3 3 5 6 7 8 11 14 35 1 4 7 9 11 23 54 75

6.2 Dodatni zadaci

1. Napraviti biblioteku ,,sort.h” i ,,sort.c” koja implementira algoritme sortiranja nizova celih brojeva. Bibliotekatreba da sadrzi bubble, insertion i shell sort. Upotrebiti biblioteku kako bi se napravilo poredenje efikasnostirazlicitih algoritama sortiranja. Efikasnost meriti na slucajno generisanim nizovima, na vec sortiranim nizovimai na naopako sortiranim nizovima. Izbor algoritma, velicine i pocetnog rasporeda elemenata niza birati krozargumente komandne linije. Vreme meriti programom time. Analizirati porast vremena sa porastom dimenzijen. Porediti vremena za razlicite implementacije istog algoritma (iterativna i rekurzivna).

9

Page 10: Zadaci za praktikum Programiranje II Matematiˇcki fakultet

7 VII nedelja - Sortiranje

7.1 Obavezni zadaci

1. Napisati funkcije koje sortiraju niz struktura tacaka na osnovu

(a) njihovog rastojanja od koordinatnog pocetka.

(b) x koordinate date tacke.

(c) y koordinate date tacke.

Napisati program koji ucitava niz tacaka iz datoteke cije se ime zadaje kao argument komandne linije, i uzavisnosti od prisutnih opcija u komandnoj liniji, sortira tacke po jednom od prethodna tri kriterijuma i rezultatupisuje u datoteku cije se ime zadaje kao drugi argument komandne linije. U ulaznoj datoteci nije zadato viseod 100 tacaka.

Poziv: a.out -x tacke.txt sorttacke.txtUlazna datoteka: 3 4

11 67 32 82-1 6

Izlazna datoteka: -1 62 823 47 311 6

2. Definisana je struktura podataka

typedef struct dete{

char ime[MAX_IME];char prezime[MAX_IME];unsigned godiste;

} Dete;

Napisati funkciju koja srotira niz dece po godistu, a kada su deca istog godista, tada ih sortirati leksikografskipo prezimenu i imenu. Napisati program koji ucitava podatke o deci koji se nalaze u datoteci cije se ime zadajekao prvi argument komandne linije, sortira ih i sortirani niz upisuje u datoteku sije se ime zadaje kao drugiargument komandne linije. Pretpostaviti da u ulaznoj datoteci nisu zadati podaci o vise od 100 dece.

Poziv: ./a.out ulaz.txt izlaz.txtUlazna datoteka: Izlazna datoteka:Petar Petrovic 2007 Marija Antic 2007Milica Antonic 2008 Ana Petrovic 2007Ana Petrovic 2007 Petar Petrovic 2007Ivana Ivanovic 2009 Milica Antonic 2008Dragana Markovic 2010 Ivana Ivanovic 2009Marija Antic 2007 Dragana Markovic 2010

3. Napisati funkciju koja sortira niz niski po broju suglasnika u niski, ukoliko reci imaju isti broj suglasnika tadapo duzini niske, a ukoliko su i duzine jednake tada leksikografski. Napisati program koji testira ovu funkciju zaniske koje se zadaju u datoteci niske.txt. Pretpostaviti da u nizu nema vise od 100 elemenata, kao da svakaniska sadrzi najvise 20 karaktera.

Ulazna datoteka:ana petar andjela milos nikola aleksandar ljubica matej milica

Izlaz:ana matej milos petar milica nikola andjela ljubica aleksandar

10

Page 11: Zadaci za praktikum Programiranje II Matematiˇcki fakultet

7.2 Dodatni zadaci

1. Razmatrajmo dve operacije: operacija U je unos novog broja x, a operacija N odredivanje n-tog po velicini odunetih brojeva. Implementirati program koji izvrsava ove operacije (Moze postojati najvise 100000 operacijaunosa, a uneti elementi se mogu ponavljati, pri cemu se i ponavljanja racunaju prilikom brojanja). Na primer:

Ulaz: U 2 U 0 U 6 U 4 N 1 U 8 N 2 N 5 U 2 N 3 N 5Izlaz: 0 2 8 2 6

(Napomena: brojeve cuvati u sortiranom nizu i svaki naredni element umetati na svoje mesto)

Optimizovati program, ukoliko se zna da nece biti vise od 500 razlicitih unetih brojeva.

2. Sa dve susedne stranice pravougaone livade dve grupe krtica istovremeno krecu da kopaju tunele (jedna grupana gore, a druga na desno). Krtica prestaje da kopa ukoliko naide na vec iskopan tunel (npr. krticu A zaustavljakrtica C, krticu C i D zaustavlja krtica B, a krticu B zaustavlja krtica E). Za svaku krticu se zna udaljenost odcoska livade i brzina kojom kopa.

|EEEEEEEEEE| B|DDDDDDB| B|CCCCCCB| A B|___A__B_______________

Napisati program koji odreduje koliko dugo svaka krtica kopa. Unose se broj krtica u obe grupe, a zatimudaljenost i brzina za svaku krticu. Izlaz je vreme za svaku krticu prikazano na dve decimale (-1 ukoliko se nezaustavlja) u istom redosledu u kojem su krtice unete. Npr.

Ulaz:2 31 42 5.14.5 3.61 15 0.5

Izlaz:1.120.88-1.001.00-1.00

3. Sef u restoranu je neuredan i palacinke koje ispece ne slaze redom po velicini. Konobar pre serviranja mora dasortira palacinke po velicini, a jedina operacija koju sme da izvodi je da obrne deo palacinki. Na primer:

3 5 2 14 4 1__ 25__ 3 3 31 1 4 42 2__ 5 5

Napisati program koji u najvise 2n − 3 okretanja sortira ucitani niz. (Uputstvo: imitirati selection sort i usvakom koraku dovesti jednu palacinku na svoje mesto koriscenjem najvise dva okretanja.)

11

Page 12: Zadaci za praktikum Programiranje II Matematiˇcki fakultet

8 VIII nedelja - Pokazivaci, Zadaci sa kolokvijuma

8.1 Obavezni zadaci

1. Koristeci pokazivacku sintaksu, prebrojati koliko argumenata komandne linije su palindromi.

Poziv: ./a.out programiranje anavolimilovana topot ana anagram tIzlaz: 4

2. Napisati program koji kao prvi argument komandne linije prihvata putanju do fajla u kome treba proveriti kolikoreci ima n karaktera, gde se n zadaje kao drugi argument komandne linije. U zadatku ne koristiti ugradjenefunkcije za rad sa stringovima, vec implementirati svoje koristeci pokazivacku sintaksu.

Poziv: ./a.out fajl.txt 5Fajl: Ovo je sadrzaj fajla i u njemu ima reci koje imaju 5 karaktera.Izlaz: 3

3. Napisati program koji kao prvi argument komandne linije prihvata putanju do fajla u kome treba proveriti kolikoreci ima zadati sufiks (prefiks), koji se zadaje kao drugi argument komandne linije. Program se mora pozvatisa jednom od opcija −s ili −p u zavisnosti da li treba proveravati sufiks ili prefiks reci. U zadatku ne koristitiugradjene funkcije za rad sa stringovima, vec implementirati svoje koristeci pokazivacku sintaksu.

Poziv: ./a.out fajl.txt la -sFajl: Ovo je sadrzaj fajla i u njemu ima reci koje se zavrsavaju na la .Izlaz: 2

8.2 Dodatni zadaci

1. Napisati rekurzivnu funkciju za odredivanje najvece cifre u oktalnom zapisu neoznacenog celog broja koriscenjembitskih operatora. Pomoc: Binarne cifre grupisati u podgrupe od po 3 cifre, pocev od bitova najmanje tezine.

Primer 1: Primer 2: Primer 3: Primer 4:Argument funkcije: 5 125 8 10Rezultat: 5 7 1 2

2. Napisati rekurzivnu funkciju za odredivanje (dekadne vrednosti) najvece cifre u heksadekadnom zapisu neoznacenogcelog broja koriscenjem bitskih operatora. Pomoc: Binarne cifre grupisati u podgrupe od po 4 cifre, pocev odbitova najmanje tezine.

Primer 1: Primer 2: Primer 3: Primer 4:Argument funkcije: 5 16 18 165Rezultat: 5 1 2 10

3. Napisati funkciju koja u rastuce sortiranom nizu celih brojeva binarnom pretragom nalazi prvi element veci odnule i vraca njegovu poziciju u nizu. Ukoliko nema elemenata vecih od nule, funkcija vraca −1. Napisati iprogram koji testira ovu funkciju za niz elemenata koji se ucitavaju sa standardnog ulaza. Niz nece biti duzi od256, i njegovi elementi se unose sve do kraja ulaza.

Primer 1: Primer 2: Primer 3:Ulaz: -151 -44 5 12 13 15 -100 -15 0 13 124 155 258 315 516 7000 -100 -15 -11 -8 -7 -5Izlaz: 2 3 -1

4. Napisati funkciju koja u opadajuce sortiranom nizu celih brojeva binarnom pretragom nalazi prvi element manjiod nule i vraca njegovu poziciju u nizu. Ukoliko nema elemenata manjih od nule, funkcija vraca −1. Napisati iprogram koji testira ovu funkciju za niz elemenata koji se ucitavaju sa standardnog ulaza. Niz nece biti duzi od256, i njegovi elementi se unose sve do kraja ulaza.

Primer 1: Primer 2: Primer 3:Ulaz: 151 44 5 -12 -13 -15 100 55 15 0 -15 -124 -155 -258 -315 -516 -7000 100 15 11 8 7 5 4 3 2Izlaz: 3 4 -1

5. Napisati strukturu Student sa podacima o broju indeksa studenta i poenima sa kolokvijuma. Pretpostaviti dasu brojevi indeksa i poeni sa kolokvijuma celi brojevi. Napisati program koji ucitava podatke o studentima izdatoteke kolokvijum.txt u kojoj se nalazi najvise 500 zapisa o studentima. Sortirati ovaj niz studenata po brojupoena opadajuce, a ako vise studenata ima isti broj poena, onda po broju indeksa rastuce. Ispisati sortiran nizstudenata na standardni izlaz.

12

Page 13: Zadaci za praktikum Programiranje II Matematiˇcki fakultet

Primer 1: Primer 2:Sadrzaj datoteke kolokvijum.txt : 20140015 25 20140015 25

20140115 24 20110010 1220130250 3 20140105 020140001 4 20120110 1320140038 25

Izlaz: 20140015 25 20140015 2520140038 25 20120110 1320140115 24 20110010 1220140001 4 20140105 020130250 3

6. Napisati strukturu Student sa podacima o broju indeksa studenta i broju poena osvojenih na testu. Pretpostavitida su brojevi indeksa celi brojevi, a poeni sa testa realni brojevi. Napisati program koji ucitava podatke ostudentima iz datoteke studenti.txt u kojoj se nalazi najvise 100 zapisa o studentima. Sortirati ovaj niz studenatapo broju poena rastuce, a ako vise studenata ima isti broj poena, onda po broju indeksa opadajuce. Ispisatisortiran niz studenata na standardni izlaz.

Primer 1: Primer 2:Sadrzaj datoteke studenti.txt : 20140015 4.5 20130015 9.5

20130115 4.5 20130010 9.520140250 3.4 20090103 0.520110304 1.2 20140005 10.0

20140120 1.320140038 2.5

Izlaz: 20110304 1.2 20090103 0.520140250 3.4 20140120 1.320140015 4.5 20140038 2.520130115 4.5 20130015 9.5

20130010 9.520140005 10.0

13

Page 14: Zadaci za praktikum Programiranje II Matematiˇcki fakultet

9 IX nedelja - Matrice

9.1 Obavezni zadaci

1. Relacije su predstavljene kvadratnim matricama nula ili jedinica. Dva elementa i i j su u relaciji ukoliko se umatrici u vrsti i i koloni j nalazi broj 1, a nisu u relaciji ukoliko je tu broj 0.

(a) Napisati funkciju koja proverava da li je data relacija refleksivna.

(b) Napisati funkciju koja proverava da li je data relacija simetricna.

(c) Napisati funkciju koja proverava da li je data relacija tranzitivna.

(d) Napisati funkciju koja odreduje refleksivno zatvorenje relacije (najmanju refleksivnu relaciju koja sadrzidatu).

(e) Napisati funkciju koja odreduje simetricno zatvorenje relacije (najmanju simetricnu relaciju koja sadrzidatu).

(f) Napisati funkciju koja odreduje refleksivno-tranzitivno zatvorenje relacije (najmanju refleksivnu i tranzitivnurelaciju koja sadrzi datu). (Napomena: koristiti Varsalov algoritam).

Napisati program koji ucitava matricu iz fajla koji se zadaje kao prvi argument komnadne linije, a zatim testiranapisane funkcije. U prvoj liniji fajla nalazi se dimenzija matrice, a potom i sami elementi. Dimenzija nece bitiveca od 64.

Datoteka: Izlaz:4 refleksivnost: ne1 0 0 0 simetricnost: ne0 1 1 0 tranzitivnost: da0 0 1 0 refleksivno zatvorenje:0 0 0 0 1 0 0 0

0 1 1 00 0 1 00 0 0 1simetricno zatvorenje:1 0 0 00 1 1 00 1 1 00 0 0 0refleksivno-tranzitivno zatvorenje:1 0 0 00 1 1 00 0 1 00 0 0 1

2. Napisati program koji sa standardnog ulaza ucitava matricu dimenzija n× n i na standardnom izlazu ispisuje:

(a) Vrednost najveceg elementa na sporednoj dijagonali.

(b) Indeks kolone koja sadrzi najmanji element matrice.

(c) Indeks vrste koja sadrzi najveci element matrice.

(d) Broj negativnih elemenata matrice.

Dimenzija n se zadaje kao argument komandne linije, i nece biti veca od 32.

Poziv: ./a.out 3Ulaz: 1 2 3

-4 -5 -67 8 9

Izlaz: 7 2 2 3

3. Na ulazu se zadaje ceo broj n (ne veci od 32), a zatim i dve kvadratne matrice dimenzije n.

(a) Napisati funkciju kojom se proverava da li su zadate matrice jednake.

(b) Napisati funkciju kojom se izracunava zbir unetih matrica.

14

Page 15: Zadaci za praktikum Programiranje II Matematiˇcki fakultet

(c) Napisati funkciju kojom se izracunava proizvod unetih matrica.

Napisati program koji testira rad napisanih funkcija. ( Prilikom testiranja zgodno je koristiti preusmeravanjeulaza.)

Ulaz: Izlaz:3 da1 2 3 2 4 61 2 3 2 4 61 2 3 2 4 61 2 3 6 12 181 2 3 6 12 181 2 3 6 12 18

4. Napisati funkciju kojom se porverava da li je zadata matrica A dimenzije n ortonormirana. Matrica je ortonormiranaako je skalarni proizvod svakog para razlicitih vrsta jednak 0, a skalarni proizvod vrste sa samom sobom 1.Napisati i program koji testira datu funkciju, za n (ne vece od 32) i elemente matrice koji se unose sa standardnogulaza.

Ulaz: Izlaz: Ulaz: Izlaz:4 da 3 ne1 0 0 0 1 2 30 1 0 0 5 6 70 0 1 0 1 4 20 0 0 1

9.2 Dodatni zadaci

1. Napisati funkciju koja izracunava k-ti stepen kvadratne matrice dimenzije n × n (n <= 32). Voditi racuna dase prilikom stepenovanja izvrsi sto manji broj mnozenja. Napisati i program koji testira datu funkciju, za n,elemente matrice i k koji se unose sa standardnog ulaza.

Ulaz: Izlaz:3 510008400 626654232 7433000641 2 3 1154967822 1419124617 16832814124 5 6 1799927244 2211595002 26232627607 8 98

15

Page 16: Zadaci za praktikum Programiranje II Matematiˇcki fakultet

10 X nedelja - Dinamicka alokacija

10.1 Obavezni zadaci

1. U datoteci pesme.txt u prvoj liniji nalazi se ukupan broj pesama prisutnih u fajlu, a zatim i same informacije ogledanosti pesama na Youtube-u u sledecem formatu:

izvodjac - naslov, brojGledanja

Napisati program koji ucitava informacije o pesmama i vrsi sortiranje pesama u zavisnosti od argumenatakomandne linije:

(a) nema opcija, sortiranje po broju gledanja.(b) -i, sortiranje po imenu izvodaca(c) -n, sortiranje po naslovu pesme

Maksimala duzina imena izvodaca i naslova pesme je 32.

Poziv: ./a.outDatoteka:5 Izlaz:Ana - Nebo, 2342 Jelena - Sunce, 92321Laza - Oblaci, 29 Mika - Kisa, 5341Pera - Ptice, 327 Ana - Nebo, 2342Jelena - Sunce, 92321 Pera - Ptice, 327Mika - Kisa, 5341 Laza - Oblaci, 29

2. Uraditi prethodni zadatak, ali ne praviti nikakve pretpostavke o maksimalnoj duzini imena izvodaca i naslovapesme.

3. Uraditi prethodni zadatak, s tim sto za razliku od njega, u fajlu pesme.txt nema informacija o ukupnom brojupesama. Napomena: koristiti realociranje memorije.

4. Napisati funkciju koja izracunava redni broj kolone matrice ciji je zbir maksimalan. Napisati program koji testiraovu funkciju za vrednosti koje se zadaju sa standardnog ulaza pri cemu se prvo unose dimenzije matrice, a zatimelementi matrice. Testirati program koriscenjem preusmeravanja.

Datoteka: Izlaz:3 4 31 2 3 45 6 7 89 10 11 12

5. Napisati funkciju koja menja sadrzaj matrice tako sto se elementi iznad glavne dijagonale polove, elementi ispodglavne dijagonale dupliraju, dok elementi na glavnoj dijagonali ostaju isti. Napisati program koji testira ovufunkciju za vrednosti koje se ucitavaju iz datoteke matrica.txt pri cemu se u datoteci nalazi prvo dimenzijamatrice, a zatim redom elementi matrice.

Datoteka: Izlaz:3 1 1 1.51 2 3 10 6 3.55 6 7 18 20 119 10 11

6. Napisati funkciju koja izracunava zbir apsolutnih vrednosti ispod sporedne dijagonale matrice. Napisati programkoji testira ovu funkciju za vrednosti koje se ucitavaju iz datoteke cije se ime zadaje kao argument komandnelinije pri cemu se u datoteci nalazi prvo dimenzija matrice, a zatim redom elementi matrice.

Poziv: ./a.out datoteka.txtdatoteka.txt: Izlaz:3 281 2 35 6 79 10 11

16

Page 17: Zadaci za praktikum Programiranje II Matematiˇcki fakultet

7. Napisati program koji sortira vrste matrice, rastuce na osnovu sume elemenata u vrsti. Prvo se sa standardnogulaza zadaju dimenzije matrice, a zatim i sami elementi po vrstama.

Ulaz: Izlaz:3 4 1 2 3 41 2 3 4 5 6 7 89 10 11 12 9 10 11 125 6 7 8

10.2 Dodatni zadaci

1. Pera sakuplja slicice igraca za predstojece Svetsko prvenstvo u fudbalu. U datoteci slicice.txt se nalaze informacijeo slicicama koje mu nedostaju u formatu:

redni_broj_slicice ime_reprezentacije_kojoj_slicica_pripada

Pomozite Peri da otkrije koliko mu slicica ukupno nedostaje, kao i da pronade ime reprezentacije cijih slicicaima najmanje.Zadatak realizovati koriscenjem realloc funkcije.

Datoteka: Izlaz:23 Brazil 4 Nemacka143 Nemacka145 Nemacka169 Italija

2. U datoteci temena.txt se nalaze tacke koje predstavljaju temena nekog n-tougla. Napisati program koji na osnovusadrzaja datoteke ispisuje o kom n-touglu je rec, a zatim i vrednosti njegovog obima i povrsine. Pretpostavka jeda ce mnogougao biti konveksan.

Datoteka: Ispis:1.0 0.0 n: 30.0 0.0 obim: 3.410.0 1.0 povrsina: 0.5

3. Napisati program koji na osnovu dveju matrica dimenzija m × n formira matricu dimenzija 2m × n tako stonaizmenicno kombinuje jednu vrstu prve matrice i jednu vrstu druge matrice. Matirce su zapisane u datotecimatrice.txt. U prvom redu se nalaze dimenzije m i n, u narednih m redova su vrste prve matrice, a u narednihm redova vrste druge matrice.

matrice.txt: Izlaz:2 4 1 2 3 41 2 3 4 5 6 3 28 8 1 2 8 8 1 25 6 3 2 9 0 1 69 0 1 6

4. Napisati program koji sortira kolone matrice, opadajuce, na osnovu vrednosti prvog elementa kolone. Prvo sesa standardnog ulaza zadaju dimenzije matrice, a zatim i sami elementi po vrstama.

Ulaz: Izlaz:3 4 4 3 2 11 2 3 4 8 7 6 55 6 7 8 12 11 10 99 10 11 12

5. Na ulazu se zadaje niz celih brojeva koji se zavrsava nulom. Napisati program koji od zadatog niz formiramatricu tako da prva vrsta odgovara unetom nizu, a svaka naredna se dobija ciklickim pomeranjem elemenataniza za jednu poziciju ulevo.

Ulaz: Izlaz:1 2 3 4 0 1 2 3 4

2 3 4 13 4 1 24 1 2 3

17

Page 18: Zadaci za praktikum Programiranje II Matematiˇcki fakultet

11 XI nedelja - Pokazivaci na funkcije i bibliotecke funkcije pretrage isortiranja

11.1 Obavezni zadaci

1. Napisati funkciju koja metodom polovljenja intervala priblizno prolanazi nulu date funkcije f(x) na intervalu[a, b]. Pretpostavlja se da je f neprekidna i da je f(a) ·f(b) < 0. (Napomena: koristiti postupak slican algoritmubinarne pretrage) Algoritam se zavrsava kada se vrednost funkcije razlikuje za najvise 0.001 od 0. Napisatii program, koji kao argumente komandne linije prihvata ime funkcije iz zaglavlja math.h, i krajeve intervalapretrage.

Poziv: ./a.out cos 0 2 ./a.out sin -0.5 1Izlaz: 1.571289 0.000977

2. Napisati program koji sa standardnog ulaza ucitava dva stringa, s i t (duzine manje od 20 karaktera), sortiranizove njihovih karaktera (biblioteckom qsort funkcijom), ispituje i stampa da li su s i t anagrami. (dva stringasu anagrami ako su sastavljeni od potpuno istih slova, samo razlicito rasporedenih)

Ulaz: vrata vatra qsort bsearchIzlaz: jesu nisu

3. Napisati program koji sa standardnog ulaza ucitava prvo ceo broj n (n <= 10) a zatim niz S od n stringova(maksimalna duzina stringa je 20 karaktera). Sortirati niz S (biblioteckom funkcijom qsort) i proveriti da li unjemu ima identicnih stringova.

Ulaz: 4 prog search sort search 3 test kol ispitIzlaz: ima nema

4. Napisati program u kome se prvo inicijalizuje staticki niz struktura osoba sa clanovima ime i prezime (uredenu rastucem poretku prezimena) sa manje od 10 elemenata, a zatim se ucitava jedan karakter i pronalazi(biblioteckom funkcijom bsearch) i stampa jedna struktura iz niza osoba cije prezime pocinje tim karakterom(ako takva osoba postoji).

Osoba niz_osoba[]={{"Mika", "Antic"},{"Dobrica", "Eric"},{"Desanka", "Maksimovic"},{"Dusko", "Radovic"},{"Ljubivoje", "Rsumovic"}};

Ulaz: R Izlaz:Dusko Radovic

5. Datoteka studenti.txt sadrzi spisak studenata. Za svakog studenta poznat je nalog na Alas-u (oblika npr.mr97125, mm09001), ime i prezime i broj poena. Napisati program koji sortira (koriscenjem funkcije qsort)studente po broju poena (ukoliko je prisutna opcija -p) ili po nalogu (ukoliko je prisutna opcija -n). Studenti sepo nalogu sortiraju tako sto se sortiraju na osnovu godine, zatim na osnovu smera, i na kraju na osnovu brojaindeksa. Ukoliko je u komandnoj liniji uz opciju -n naveden i nalog nekog studenta, funkcijom bsearch potrazitii prijaviti broj poena studenta sa tim nalogom. Sortirane studente upisati u datoteku izlaz.txt.

Poziv: ./a.out -n mm13321Datoteka: Izlaz:mr14123 Marko Antic 20 mm13321 Marija Radic 12mm13321 Marija Radic 12ml13011 Ivana Mitrovic 19ml13066 Pera Simic 15mv14003 Jovan Jovanovic 17

11.2 Dodatni zadaci

1. Napisati funkciju koja izracunava limes funkcije f(x) u tacki a. Adresa funkcije f ciji se limes racuna se prenosikao parametar funkciji za racunanje limesa. Limes se racuna sledecom aproksimacijom (vrednosti n i a uneti sastandardnog ulaza kao i ime funkcije):

limx→af(x) = limn→∞f(a +1n

)

18

Page 19: Zadaci za praktikum Programiranje II Matematiˇcki fakultet

Ulaz: tan 1.570795 10000 log 0 1000000Izlaz: -10134.5 -13.81551

2. Napisati funkciju koja odreduje integral funkcije f(x) na intervalu [a, b]. Adresa funkcije f se prenosi kaoparametar. Integral se racuna prema formuli:∫ b

a

f(x) = h · (f(a) + f(b)2

+ Σni=1f(a + i · h))

Vrednosti n, a i b uneti sa standardnog ulaza kao i ime funkcije, h = (b− a)/n.

3. Napisati funkciju koja priblizno izracunava integral funkcije f(x) na intervalu [a, b]. Funkcija f se prosleduje kaoparametar, a integral se procenjuje po Simpsonovoj formuli:

I =h

3

f(a) + 4n/2∑i=1

f(a + (2i− 1)h) + 2n/2−1∑

i=1

f(a + 2ih) + f(b)

Granice intervala, kao i n su argumenti funkcije, takode. Napisati i program, koji kao argumente komandnelinije prihvata ime funkcije iz zaglavlja math.h, krajeve intervala pretrage i n.

4. Definisana je struktura:

typedef struct { int dan; int mesec; int godina; } Datum;

Napisati funkciju koja poredi dva datuma i program koji ucitava datume iz datoteke koja se zadaje kao prviargument komandne linije (ne vise od 100 datuma), sortira ih pozivajuci funkciju qsort iz standardne bibliotekei potom pozivanjem funkcije bsearch iz standardne biblioteke proverava da li datumi ucitani sa standardnogulaza (sve do kraja ulaza) postoje medu prethodno unetim datumima.

Poziv: ./a.out datoteka.txtDatoteka: 1.1.2013 Ulaz: 13.12.2016 Izlaz: postoji

13.12.2016 10.5.2015 ne postoji11.11.2011 5.2.2009 postoji3.5.20155.2.2009

Izlaz: postoji

19

Page 20: Zadaci za praktikum Programiranje II Matematiˇcki fakultet

12 XII nedelja - Liste

12.1 Obavezni zadaci

1. Napisati program koji prebrojava pojavljivanja etiketa (bez atributa) HTML datoteke cije se ime zadaje kaoargument komandne linije. Sadrzaj rezultujuce liste ispisati na standardni izlaz. Za formirianje liste koristitistrukturu:

typedef struct _Element{

unsigned broj_pojavljivanja;char etiketa[20];struct _Element *sledeci;

} Element;

Poziv: ./a.out datoteka.htmlDatoteka.html: Izlaz:<html> a - 4<head><title>Primer</title></head> br - 1<body> h1 - 2<h1>Naslov</h1> body - 2Danas je lep i suncan dan. <br> title - 2A sutra ce biti jos lepsi. head - 2<a link="http://www.google.com"> Link 1</a> html - 2<a link="http://www.math.rs"> Link 2</a>

</body></html>

2. Napisati program koji objedinjuje dve sortirane liste. Funkcija ne treba da kreira nove cvorove, vec da samopostojece cvorove preraspodeli. Prva lista se ucitava iz datoteke koja se zadaje kao prvi argument komandnelinije, a druga iz druge. Rezultujucu listu ispisati na standardni izlaz.

Poziv: ./a.out dat1.txt dat2.txtdat1.txt: 2 4 6 10 15dat2.txt: 5 6 11 12 14 16Izlaz: 2 4 5 6 6 10 11 12 14 15 16

3. Napisati funkciju koja formira listu studenata tako sto se podaci o studentima ucitavaju iz datoteke cije se imezadaje kao argument komandne linije. U svakom redu datoteke nalaze se podaci o studentu i to broj indeksa, imei prezime. Napisati rekurzivnu funkciju koja odreduje da li neki student (koji se trazi na osnovu broja indeksa,pri cemu se broj indeksa zadaje sa standardnog ulaza) pripada listi ili ne. Ispisati zatim odgovarajucu poruku irekurzivno osloboditi memoriju koju je data lista zauzimala.

Poziv: ./a.out studenti.txtDatoteka: Ulaz: Izlaz:123/2014 Marko Lukic 3/2014 da: Ana Sokic3/2014 Ana Sokic 235/2008 ne43/2013 Jelena Ilic 41/2009 da: Marija Zaric41/2009 Marija Zaric13/2010 Milovan Lazic

4. Sadrzaj datoteke je aritmeticki izraz koji moze sadrzati zagrade {, [ i (. Napisati program koji ucitava sadrzajdatoteke i koriscenjem steka utvrduje da li su zagrade u aritmetickom izrazu dobro uparene. Program stampaodgovarajucu poruku na standardni izlaz.

Datoteka: {[23 + 5344] * (24 - 234)} - 23 Izlaz: ispravnoDatoteka: {[23 + 5] * (9 * 2)} - {23} Izlaz: ispravnoDatoteka: {[2 + 54) / (24 * 87)} + (234 + 23) Izlaz: neispravno

20

Page 21: Zadaci za praktikum Programiranje II Matematiˇcki fakultet

12.2 Dodatni zadaci

1. Neka su date dve jednostruko povezane liste L1 i L2. Napisati funkciju koja od tih lista formira novu listu L kojasadrzi alternirajuci rasporedene elemente lista L1 i L2 (prvi element iz L1, prvi element iz L2, drugi element L1,drugi element L2, itd.). Ne formirati nove cvorove, vec samo postojece cvorove rasporediti u jednu listu. Prvalista se ucitava iz datoteke koja se zadaje kao prvi argument komandne linije, a druga iz druge. Rezultujuculistu ispisati na standardni izlaz.

Poziv: ./a.out dat1.txt dat2.txtdat1.txt: 2 4 6 10 15dat2.txt: 5 6 11 12 14 16Izlaz: 2 5 4 6 6 11 10 12 15 14 16

2. Data je datotka brojevi.txt koja sadrzi cele brojeve, po jedan u svakom redu.

(a) Napisati funkciju koja iz zadate datoteke ucitava brojeve i smesta ih u listu.

(b) Napisati funkciju koja u jednom prolazu kroz zadatu listu celih brojeva pronalazi maximalan strogo rastucipodniz.

(c) Koristeci funkcije pod a) i b) napisati program koji u datoteku Rezultat.txt upisuje nadeni strogo rastucipodniz.

brojevi.txt Rezultat.txt43 1212 1515 1616428

3. Grupa od n plesaca (na cijim kostimima su u smeru kazaljke na satu redom brojevi od 1 do n) izvodi svoju plesnutacku tako sto formiraju krug iz kog najpre izlazi k-ti plesac (odbrojava se pocev od plesaca oznacenog brojem 1u smeru kretanja kazaljke na satu). Preostali plesaci obrazuju manji krug iz kog opet izlazi k-ti plesac (odbrojavase pocev od sledeceg suseda prethodno izbacenog, opet u smeru kazaljke na satu). Izlasci iz kruga se nastavljajusve dok svi plesaci ne budu iskljuceni. Celi brojevi n, k (k < n) se ucitavaju sa standardnog ulaza. Napisatiprogram koji ce na standardni izlaz ispisati redne brojeve plesaca u redosledu napustanja kruga. NAPOMENA:koristiti kruznu listu (u kruznoj listi, poslednji element, umesto null pokazivaca cuva adresu prvog elementa ulisti)

Ulaz: 5 3 Izlaz: 3 1 5 2 4

21

Page 22: Zadaci za praktikum Programiranje II Matematiˇcki fakultet

13 XIII nedelja - Stabla

13.1 Obavezni zadaci

1. Napisati sledece funkcije za rad sa binarnim stablima, koja sadrze cele brojeve:

(a) Funkcija koja izracunava broj cvorova stabla.

(b) Funkcija koja izracunava broj listova stabla.

(c) Funkcija koja izracunava sumu cvorova stabla.

(d) Funkcija koja izracunava dubinu stabla.

(e) Funkcija koja izracunava najveci element u stablu. (ovu funkciju napisati i za pretrazivacko i nepretrazivackostablo)

(f) Funkcija koja stampa pozitivne vrednosti listova stabla. (ovu funkciju napisati i za pretrazivacko i nepretrazivackostablo)

(g) Funkcija koja ispisuje sve elemente na i-tom nivou.

(h) Funkcija koja izracunava koliko se cvorova nalazi na i-tom nivou.

(i) Funkcija koja izracunava maksimalnu vrednost cvorova na i-tom nivou.

(j) Napisati funkciju koja izracunava zbir cvorova na i-tom nivou.

(k) Funkcija koja racuna sumu svih vrednosti y u binarnom stablu pretrage koje su manje ili jednake od datevrednosti x.

a zatim i main funkciju koja testira ove funkcije. Sve trazene funkcije, zajedno sa main-om, cuvati u fajlu 1.c,dok ostale neophodne funkcije (napravi cvor(), proveri alokaciju(), oslobodi stablo() i dodaj u stablo()), kao idefiniciju cvora stabla, iskoristiti iz prilozenih fajlova stabla.h i stabla.c. U main funkciji, stablo formirati odelemenata koji se unose sa standardnog ulaza, sve do kraja ulaza, a i i x potrebni u poslednjim funkcijama seunose kao argumenti komandne linije. Uputstvo: koristiti kompilaciju iz vise izvornih datoteka.

Poziv: ./a.out 2 15Ulaz: 10 5 15 3 2 4 30 12 14 13Izlaz: broj cvorova: 10

broj listova: 4suma cvorova: 108dubina stabla: 5najveci element: 30pozitivni listovi: 2 4 13 30elementi na 2. nivou: 3 12 30broj cvorova na 2. nivou: 3maksimalni na 2. nivou: 30zbir na 2. nivou: 45suma elemenata manjih ili jednakih 15: 78

2. Dva binarna stabla su identicna ako su ista po strukturi i sadrzaju, odnosno oba korena imaju isti sadrzaj injihova odgovarajuca podstabla su identicna. Napistati funkciju koja proverava da li su dva binarna stablaidenticna, i main funkciju, koja testira prethodnu. Stabla se unose sa standardnog ulaza zakljucno nulama.

Ulaz: 10 5 15 3 2 4 30 12 14 13 0 10 5 15 3 2 4 30 12 14 13 0Izlaz: jesuUlaz: 10 5 15 3 2 4 30 12 14 13 0 10 15 5 3 4 2 12 14 13 30 0Izlaz: jesuUlaz: 10 5 15 4 3 2 30 12 14 13 0 10 15 5 3 4 2 12 14 13 30 0Izlaz: nisu

3. U tekstualnoj datoteci nalaze se podaci o prijemnom ispitu ucenika jedne osnovne skole tako sto je u svakomredu navedeno: ime i prezime ucenika (niz znakova ne duzi od 50 znakova), broj poena na osnovu uspeha (realanbroj), broj poena na prijemnom ispitu iz matematike (realan broj) i broj poena na prijemnom ispitu iz maternjegjezika (realan broj). Za ucenika koji osvoji manje od 10 poena ukupno na oba prijemna smatra se da nije polozioprijemni. Napisati program na C-u koji na osnovu podataka iz ove datoteke formira i prikazuje rang listu ucenika.Rang lista sadrzi: redni broj, ime i prezime ucenika, broj poena na osnovu uspeha, broj poena na prijemnomispitu iz matematike, broj poena na prijemnom ispitu iz maternjeg jezika i ukupan broj poena i sortirana je

22

Page 23: Zadaci za praktikum Programiranje II Matematiˇcki fakultet

opadajuce po ukupnom broju poena. U rang listi se navode prvo oni ucenici koji su polozili prijemni a potomucenici koji nisu polozili prijemni. Izmedu ove dve grupe podvuci horizontalnu liniju. Ime datoteke navodi sekao argument komandne linije.

Datoteka: Izlaz:Marko Markovic 45.4 12.3 11 1. Maja Agic 60 19 20 99Milan Jevremovic 35.2 1.3 9 2. Nadica Zec 54.2 10 15.8 80Maja Agic 60 19 20 3. Marko Markovic 45.4 12.3 11 68.7Nadica Zec 54.2 10 15.8 4. Milan Jevremovic 35.2 1.3 9 45.5Jovana Milic 23.3 2 5.6 ---------------------------

5. Jovana Milic 23.3 2 5.6 30.9

4. Napisati program koji implementira podsetnik za rodendane. U fajlu se nalazi niz linija oblika:

Ime Prezime DD. MM. YYYY.

tj. za svaku osobu je naveden datum rodenja. Kada se program pokrene, korisnik treba da unese datum,a program treba da pronade osobu ciji je rodendan zadatog datuma, ili prvi sledeci. Ovaj postupak trebaponavljati dokle god korisnik ne unese komandu za kraj rada. Informacije o rodendanima uneti u mapu koja jeimplementirana preko binarnog stabla pretrage.

Datoteka: Ulaz: Izlaz:Marko Markovic 12.12.1990. 23.04. Maja Agic - 23.04Milan Jevremovic 04.06.1989. 01.01. Nadica Zec - 01.01Maja Agic 23.04.2000. 01.05. Jovana Milic - 05.05Nadica Zec 01.01.1993. krajJovana Milic 05.05.1990

13.2 Dodatni zadaci

1. AVL-stablo je binarno stablo pretrage kod koga apsolutna razlika visina levog i desnog podstabla svakog elementanije veca od jedan. Napisati funkciju koja kao argument uzima pokazivac na koren nekog binarnog stabla ivraca broj cvorova koji ispunjavaju uslove za AVL stablo. Napisati i main funkciju, koja dodaje elemente sastandardnog ulaza u stablo, do kraja ulaza, a potom testira trazenu funkciju.

Ulaz: 10 5 15 2 11 16 1 13Izlaz: 7

2. Dva binarna stabla su “slicna kao u ogledalu” ako su oba prazna ili ako nisu prazna, ako je levo stablo svakogstabla “slicno kao u ogledalu” desnom stablu onog drugog. Dakle, bitna je struktura stabala, ali ne i njihovsadrzaj. Napisati funkciju koja proverava da li su dva binarna stabla “slicna kao u ogledalu”, i main funkciju,koja dodaje elemente sa standardnog ulaza u prvo stablo, sve dok se ne unese nula, pa zatim u drugo stablo naisti nacin, i na kraju testira funkciju.

3. Binarno stablo se naziva HEAP ako za svaki cvor u stablu vazi da je njegov sadrzaj veci od sadrzaja svih ostalihcvorova u njegovim podstablima. Napisati funkciju koja proverava da li je dato binarno stablo celih brojevaHEAP.

4. Uraditi zadatak koji je isti kao prvi obavezni zadatak, samo su trazene funkcije sledece:

(a) Funkcija koja vraca pokazivac na cvor u stablu kod koga je najmanji (najveci) proizvod sadrzaja cvorovaiz njegovog desnog podstabla.

(b) Funkciju koja vraca pokazivac na cvor u stablu kod koga je najmanja suma sadrzaja njegovog levogpodstabla.

(c) Funkciju koja stampa sadrzaj svih cvorova binarnog stabla na putanji od korena do najdubljeg cvora.(d) Funkciju koja stampa sadrzaj svih cvorova binarnog stabla na putanji od korena do cvora koji ima najmanju

vrednost u stablu.

Ovaj zadatak uraditi i za pretrazivacko i nepretrazivacko stablo.

5. Napisati funkciju koja stampa sadrzaj cvorova drveta koji se nalaze na n-tom nivou u drvetu. Napisati programkoji stampa sadrzaj drveta po nivoima(a) koristeci prethodnu funkciju(b) bez koriscenja prethodne funkcije (uz samo jedan prolazak kroz drvo koriscenjem pomocne liste).

23