23
1 1. ZADACI 1.1. Linearne strukture 1. Data je jednostruko povezana lista prirodnih brojeva. Formirati novu listu koja sadrži sve parne brojeve date liste u originalnom poretku. 2. Data je jednostruko povezana lista celih brojeva. Izbrojati koliko nula ima u toj listi. Odštampati datu listu. 3. Date su dve jednostruko povezane liste prirodnih brojeva. Ispitati da li su iste. 4. Date su dve jednostruko povezane liste prirodnih brojeva. Na prvu listu nadovezati drugu. 5. Data je jednostruko povezana lista celih brojeva. Napisati proceduru koja menja mesta najmanjem i najvećem elementu liste. 6. Formirati jednostruko povezanu listu celih brojeva dodavanjem elemenata na kraj liste. Brojeve učitavati sa tastature sve dok se ne učita nula. Ispitati koliko je brojeva ove liste deljivo sa 5. 7. Napišite funkciju ciji je prototip: int *vratiPolje (int *brelem); koja će dinamički alocirati prostor za polje od 200 elemenata i napuniti ga slučajno odabranim celim brojevima iz intervala [-200,300]. Ako je broj elemenata s vrednošcu 0 manji od 10, polje treba proširiti za dodatnih 10 elemenata i njih napuniti nulama. Funkcija vraća novonastalo polje, a preko argumenta brelem vraća broj elemenata polja. Treba napisati glavni program u kojem ce se definisati potrebne promenljive, pozvati funkciju vratiPolje i ispisati dobijeno polje. 8. Napisati funkciju koja će iz steka izbaciti sva pojavljivanja broja n. Funkcija, mora u novi stek, koji je inicijalno prazan, ubaciti brojeve koji predstavljaju koliko je broj bio udaljen od originalnog vrha steka. Funkcija ima sledeći prototip: void izbaci_broj(Stek *stek, int n, Stek *novi); Primer: Ukoliko je ulazni stek bio (vrh je naveden krajnje desno) bio: 8 1 4 9 9 2 5 9 6 7 9 i ukoliko je funkcija pozvana izbaci_broj(stek, 9, novi) nakon završetka funkcije, početni stek će biti 8 1 4 2 5 6 7 a novi stek će imati vrednosti 0 3 6 7 (može i 7 6 3 0) 9. Napišite potprogram void ELIMINATE(LIST *L, elementtype x) koji iz liste L izbacuje sve elemente koji su veći od zadanog elementa x. Pretpostavljamo da se podaci tipa elementtype mogu upoređivati standardnim operatorom poređenja (može se pretpostaviti da je to tip int). Pretpostavite da pozicije svih elemenata liste nakon poziva funkcije DELETE ostaju uvane (osim naravno onog elementa kojeg brišemo). 10. Zadane su funkcije za stavljanje i skidanje elemenata sa stek, i za stavljanje i skidanje elemenata iz reda (realiziranih listom): int DodajNaStek (int element, atom **glava); int SkiniSaSteka (int *element, atom **glava); int DodajURed (int element, atom **glava, atom **rep); int SkiniIzReda (int *element, atom **glava, atom **rep); Implementirati gore navedene metode. Napišite rekurzivnu funkciju, koristeći gore navedene funkcije,

1. ZADACI - nasport.pmf.ni.ac.rsnasport.pmf.ni.ac.rs/materijali/1263/Razni zadaci.pdf · 1 1. ZADACI 1.1. Linearne strukture 1. Data je jednostruko povezana lista prirodnih brojeva

Embed Size (px)

Citation preview

Page 1: 1. ZADACI - nasport.pmf.ni.ac.rsnasport.pmf.ni.ac.rs/materijali/1263/Razni zadaci.pdf · 1 1. ZADACI 1.1. Linearne strukture 1. Data je jednostruko povezana lista prirodnih brojeva

1

1. ZADACI

1.1. Linearne strukture 1. Data je jednostruko povezana lista prirodnih brojeva. Formirati novu listu koja sadrži sve parne

brojeve date liste u originalnom poretku.

2. Data je jednostruko povezana lista celih brojeva. Izbrojati koliko nula ima u toj listi. Odštampati datu listu.

3. Date su dve jednostruko povezane liste prirodnih brojeva. Ispitati da li su iste.

4. Date su dve jednostruko povezane liste prirodnih brojeva. Na prvu listu nadovezati drugu.

5. Data je jednostruko povezana lista celih brojeva. Napisati proceduru koja menja mesta najmanjem i najvećem elementu liste.

6. Formirati jednostruko povezanu listu celih brojeva dodavanjem elemenata na kraj liste. Brojeve učitavati sa tastature sve dok se ne učita nula. Ispitati koliko je brojeva ove liste deljivo sa 5.

7. Napišite funkciju ciji je prototip: int *vratiPolje (int *brelem); koja će dinamički alocirati prostor za polje od 200 elemenata i napuniti ga slučajno odabranim celim brojevima iz intervala [-200,300]. Ako je broj elemenata s vrednošcu 0 manji od 10, polje treba proširiti za dodatnih 10 elemenata i njih napuniti nulama. Funkcija vraća novonastalo polje, a preko argumenta brelem vraća broj elemenata polja. Treba napisati glavni program u kojem ce se definisati potrebne promenljive, pozvati funkciju vratiPolje i ispisati dobijeno polje.

8. Napisati funkciju koja će iz steka izbaciti sva pojavljivanja broja n. Funkcija, mora u novi stek, koji je inicijalno prazan, ubaciti brojeve koji predstavljaju koliko je broj bio udaljen od originalnog vrha steka. Funkcija ima sledeći prototip:

void izbaci_broj(Stek *stek, int n, Stek *novi); Primer: Ukoliko je ulazni stek bio (vrh je naveden krajnje desno) bio: 8 1 4 9 9 2 5 9 6 7 9 i ukoliko je funkcija pozvana izbaci_broj(stek, 9, novi) nakon završetka funkcije, početni stek će biti 8 1 4 2 5 6 7 a novi stek će imati vrednosti 0 3 6 7 (može i 7 6 3 0)

9. Napišite potprogram void ELIMINATE(LIST *L, elementtype x) koji iz liste L izbacuje sve elemente koji su veći od zadanog elementa x. Pretpostavljamo da se podaci tipa elementtype mogu upoređivati standardnim operatorom poređenja (može se pretpostaviti da je to tip int). Pretpostavite da pozicije svih elemenata liste nakon poziva funkcije DELETE ostaju očuvane (osim naravno onog elementa kojeg brišemo).

10. Zadane su funkcije za stavljanje i skidanje elemenata sa stek, i za stavljanje i skidanje elemenata iz reda (realiziranih listom): int DodajNaStek (int element, atom **glava);

int SkiniSaSteka (int *element, atom **glava);

int DodajURed (int element, atom **glava, atom **rep);

int SkiniIzReda (int *element, atom **glava, atom **rep);

Implementirati gore navedene metode. Napišite rekurzivnu funkciju, koristeći gore navedene funkcije,

Page 2: 1. ZADACI - nasport.pmf.ni.ac.rsnasport.pmf.ni.ac.rs/materijali/1263/Razni zadaci.pdf · 1 1. ZADACI 1.1. Linearne strukture 1. Data je jednostruko povezana lista prirodnih brojeva

2

koja prebacuje elemente sa steka u red, protopipa: void Prebaci (atom **glavaStek, atom **glavaRed, atom **repRed);

Početni stek mora ostati očuvan. Redosled elemenata u redu isti je kao na steku (onaj element koji prvi izlazi sa steka je prvi element koji izlazi i iz reda). Red je na početku prazan.

11. Stringove možemo prikazati kao vezanu listu, čije ćelije su zapisi sa dve komponente: znak, pointer na iduću ćeliju. Napišite potrebnu definiciju tipa podatka STRING. Zatim napišite potprogram koji proverava da li su dva ovako implementirana stringa jednaka, i ako nisu, vraća pointer na prvu ćeliju u drugom stringu u kojoj se pojavljuje razlika.

12. Promatrajmo implementaciju “dinamičkog” steka pomoću polja promenljive dužine. Pretpostavimo da će stek sadržavati celobrojne podatke. Potrebno je napisati funkcije za stavljanje elementa na stek i skidanje elementa sa steka. Ako na steku nema mesta za novi element, stek treba dinamički povećati za 10 novih mesta (i upisati novi element). Takođe, kod skidanja elementa sa steka potrebno je proveriti koliko praznog mesta ima na stogu. Ako ima više od 10 praznih mesta, veličinu steka potrebno je smanjiti za 10. Funkcije trebaju vratiti 1 ako je operacija uspela, a 0 inače. Napišite i deklaraciju tipa podatka STACK.

13. U čvorovima sortirane dvostruko povezane liste nalaze se zapisi o knjigama: šifra knjige (int), naziv knjige (100+1 znak), šifra autora (int) i cena knjige (float). Lista je uzlazno sortirana prema ceni knjige. Potrebno je napisati funkciju koja će iz liste izbaciti knjige s najvišom i najmanjom cenom Napomena: više knjiga može imati istu cenu.

14. Napisati funkciju koja će iz steka izbaciti sve one brojeve koji se pojavljuju dva ili više puta. Funkcija ima sledeći prototip:

void izbaci_duple(Stek *stek);

15. Dat je stek S u kojem se čuvaju podaci tipa char. Na žalost, neki od elemenata steka su bombe (označene sa *). Napišite nerekurzivnu funkciju sa prototipom

void makni_bombe (STACK *S)

koja će iz steka S ukloniti sve bombe, a ostale elemente poređati u ”naopakom” poretku. Na primer, ako su elementi u S redom od vrha prema dnu steka (*, D, *, C, B, A), onda nakon poziva funkcije stek treba izgledati ovako: (A, B, C, D).

16. Napišite funkciju sa prototipom void parnepar(STACK *S1, STACK *S2) koja prima dva steka celih brojeva; po ulasku u funkciju pretpostavite da je S2 prazan. Funkcija treba da prerasporedi elemente steka S1 tako da se po izlasku iz nje u S1 nalaze svi parni, a u S2 svi neparni elementi, u proizvoljnom poretku. Na primer, ako su elementi u S1 bili (3, 1, 4, 1, 2, 6) onda nakon poziva funkcije treba biti S1=(4, 2, 6) i S2=(3, 1, 1).

17. U kontekstu strukture STACK napišite potprogram void

INSERT_SECOND (elementtype x, STACK *S)

koji ubacuje element x u stek S, tako da x bude drugi element odozdo (tj. drugi element od dna steka). Međusobni redosled ostalih elemenata ostaje nepromenjen. Potprogram bi trebalo da bude nezavistan o implementaciji atp. STACK.

18. Napišite nerekurzivan potprogram int SQ(QUEUE *Q) koji pretražuje red od početka do kraja, i pritom izbacuje duplikate elemenata koji su se već pre pojavili u redu. Uz to, broji koliko puta se koji element pojavio u redu i vraća najveći takav broj. Međusobni redosled ostalih (neizbačenih)

Page 3: 1. ZADACI - nasport.pmf.ni.ac.rsnasport.pmf.ni.ac.rs/materijali/1263/Razni zadaci.pdf · 1 1. ZADACI 1.1. Linearne strukture 1. Data je jednostruko povezana lista prirodnih brojeva

3

elemenata ostaje nepromenjen. Pretpostavljamo da je na podacima tipa elementtype definisano uređenje “<=”. Potprogram treba biti nezavisan o implementaciji atp QUEUE;

19. Napisati funkciju koja ispisuje elemente zadane sortirane liste (u koju se zapisuju celi brojevi int) koji su manji od zadanog broja n.

20. Napisati funkciju koja iz zadane jednostruko povezane liste u koju se zapisuju celi brojevi (int) briše parne elemente.

21. U dvostruko povezanu listu smeštaju se celobrojni podaci (long). Napisati funkciju koja će imati prototip int izbaciN(zapis **glava, zapis **rep, int N); koja će iz liste izbaciti zadnjih N elemenata. Ako u listi ima manje od N elemenata, funkcija ih treba izbaciti sve. Funkcija treba vratiti stvarni broj izbačenih elemenata.

22. Jednostruko povezana lista u memoriji sadrži statističke podatke o svim dosadašnjim nastupima jednog tenisera na turnirima. Element liste sadrži šifru turnira (int) i broj pobeda na tom turniru (int). Napisati rekurzivnu funkciju koja će vratiti ukupan broj pobeda tog tenisera na svim turnirima. Prototip funkcije je zadan i nije ga dozvoljeno mijenjati: int broj_pobeda(cvor *glava);

23. Napisati funkciju koja će na osnovu ulaznih stekova stek1 i stek2 stvoriti novi stek koristeći pritom sledeće pravilo da se za novi element u novom steku uvek odabere manji od elemenata na vrhu stekova stek1 i stek2. Ukoliko se jedan od stekova isprazni, onda uzeti preostale elemente iz drugog. Ulazni stekovi moraju nakon završetka funkcije ostati nepromijenjeni. Funkcija mora imati prototip Stek *spoji(Stek *stek1, Stek *stek2);

24. Zadate su funkcije za stavljanje i skidanje elemenata iz reda realizovanog listom: int DodajURed (int element, atom **glava, atom **rep); int SkiniIzReda (int *element, atom **glava, atom **rep);

Napišite funkciju, koristeći gore navedene funkcije, koja stvara (i preko argumenata funkcije vraća) novi red koji sadrži samo negativne elemente iz zadanog reda. Funkcija ima protopip:

void RedNegativnih(atom **glavaZadani, atom **repZadani, atom **glavaTrazeni, atom **repTrazeni);

Početni red mora ostati očuvan. Uputstvo: koristiti pomoćni red.

25. U jednostruko povezanu listu čuvaju se podaci o ispitima: matični broj studenta (long), šifra predmeta (int) i ocena (short). Ocena 0 označava da student nije pristupio ispitu (a prijavio ga je). Napisati funkciju koja će iz liste izbaciti sve zapise s ocenom 0. Funkcija mora vratiti broj izbačenih zapisa i mora imati prototip: int izbaci(zapis **glava);

26. Svaki element jedne jednostruko spregnute liste sadrži pokazivač na drugu jednostruko spregnutu listu. Ako je dat pokazivač na prvi element prve liste, koliko ukupno ima elemenata u svim listama.

1.2. Nelinearne strukture 27. Dato je binarno stablo realnih brojeva. Napraviti njegovu kopiju.

28. Data je ciklična lista realnih brojeva. Formirati uređeno binarno stablo od brojeva date liste.

29. Nesortirano binarno stablo sadrži podatke o artiklima (naziv i cenu) i zadato je sledećom strukturom:

Page 4: 1. ZADACI - nasport.pmf.ni.ac.rsnasport.pmf.ni.ac.rs/materijali/1263/Razni zadaci.pdf · 1 1. ZADACI 1.1. Linearne strukture 1. Data je jednostruko povezana lista prirodnih brojeva

4

typedef struct { char naziv[20]; int cena; } Element;

struct cv{ Element element; struct cv *levo, *desno; };

typedef struct cv cvor;

Napisati funkciju čiji je prototip cvor *trazi(cvor *koren, char *naziv); Funkcija treba da vrati pokazivač na čvor koji sadrži artikl s navedenim nazivom ili NULL ukoliko navedeni artikl ne postoji u stablu. Nije dozvoljeno koristiti globalne promenljive. Napraviti metode za pravljenje ovakvog stabla kao i test program koj će omogućiti učitavanje elemenata, pravljenje stabla i traženje zadatog elementa.

30. Binarno stablo sadrži podatke o artiklima (naziv i cenu) i zadato sledećom strukturom: typedef struct {

char naziv[20]; int cena; } Element;

struct cv{ Element element; struct cv *levo, *desno; };

typedef struct cv cvor;

Ukoliko je navedenom strukturom definisano binarno stablo traženja sortirano po ceni, napisati funkciju čiji je prototip int trazi(cvor *koren, float cena); koja će vratiti 1 ukoliko u stablu postoji artikl s traženom cenom, odnosno 0 ako takav artikl ne postoji. Nije dozvoljeno koristiti globalne promenljive. . Napraviti metode za pravljenje ovakvog stabla kao i test program koj će omogućiti učitavanje elemenata, pravljenje stabla i traženje zadatog elementa.

31. Nesortirano binarno stablo sadrži podatke o artiklima (naziv i cenu) i zadato je sledećom strukturom:

typedef struct { char naziv[20]; int cena; } Element;

struct cv{ Element element; struct cv *levo, *desno; };

typedef struct cv cvor;

Napisati funkciju koja vraća 1 ako su sve cene u stablu veće od n, a inače 0. Funkcija mora da ima prototip int SviVeciOdN(cvor *glava, int n); Nije dozvoljeno koristiti globalne promenljive. Napraviti metode za pravljenje ovakvog stabla kao i test program koj će omogućiti učitavanje elemenata, pravljenje stabla i poziv funkcije za proveru cena.

32. Nesortirano binarno stablo sadrži podatke o artiklima (naziv i cenu) i zadato je sledećom strukturom:

typedef struct { char naziv[20]; int cena; } Element;

struct cv{ Element element; struct cv *levo, *desno; };

Page 5: 1. ZADACI - nasport.pmf.ni.ac.rsnasport.pmf.ni.ac.rs/materijali/1263/Razni zadaci.pdf · 1 1. ZADACI 1.1. Linearne strukture 1. Data je jednostruko povezana lista prirodnih brojeva

5

typedef struct cv cvor;

Napisati funkciju čiji je prototip int max_cena(cvor *koren); koja će pronaći najveću cenu u stablu. Nije dozvoljeno koristiti globalne promenljive. Napraviti metode za pravljenje ovakvog stabla kao i test program koj će omogućiti učitavanje elemenata, pravljenje stabla i traženje zadatog elementa.

33. Nesortirano binarno stablo sadrži podatke o artiklima (naziv i cenu) i zadato je sledećom strukturom:

typedef struct { char naziv[20]; int cena; } Element;

struct cv{ Element element; struct cv *levo, *desno; };

typedef struct cv cvor;

Napisati funkciju čiji je prototip int ukupna_cena(cvor *koren); koja će pronaći ukupnu cenu svih artikala u stablu. Nije dozvoljeno koristiti globalne promenljive. Napraviti metode za pravljenje ovakvog stabla kao i test program koj će omogućiti učitavanje elemenata, pravljenje stabla i traženje ukupne cene.

34. Nesortirano binarno stablo sadrži podatke o artiklima (naziv i cenu) te je zadano sledećom strukturom:

typedef struct { char naziv[20]; int cena; } Element;

struct cv{ Element element; struct cv *levo, *desno; };

typedef struct cv cvor;

Napisati funkciju čiji je prototip int dubina(cvor *koren); koja će izračunati dubinu stabla. Nije dozvoljeno koristiti globalne promenljive. Napisati metode za pravljenje ovakvog stabla kao i test program koj će omogućiti učitavanje elemenata, pravljenje stabla i traženje dubine.

35. Nesortirano binarno stablo sadrži podatke o artiklima (naziv i cenu) i zadato je sledećom strukturom:

typedef struct { char naziv[20]; int cena; } Element;

struct cv{ Element element; struct cv *levo, *desno; };

typedef struct cv cvor;

Napisati funkciju čiji je prototip void ispis_na_nivou(cvor *koren, int nivo); koja će ispisati sve čvorove na navedenom nivou. Napomena: Smete koristiti pomoćne funkcije. Napisati metode za pravljenje ovakvog stabla kao i test program koj će omogućiti učitavanje elemenata, pravljenje stabla i ispis elemenata.

36. Nesortirano binarno stablo sadrži podatke o artiklima (naziv i cenu) i zadato je sjedećom strukturom:

Page 6: 1. ZADACI - nasport.pmf.ni.ac.rsnasport.pmf.ni.ac.rs/materijali/1263/Razni zadaci.pdf · 1 1. ZADACI 1.1. Linearne strukture 1. Data je jednostruko povezana lista prirodnih brojeva

6

typedef struct { char naziv[20]; int cena; } Element;

struct cv{ Element element; struct cv *levo, *desno; };

typedef struct cv cvor;

Napisati funkciju čiji je prototip cvor *ogledaloStablo(cvor *koren); koja će svakom čvoru međusobno zameniti levo i desno podstablo. Nije dozvoljeno koristiti globalne promenljive. Napisati metode za pravljenje ovakvog stabla kao i test program koj će omogućiti učitavanje elemenata, pravljenje stabla i zamenu elemenata.

37. U binarno stablo smešta se niz podataka: 27, 52, 19, 17, 71, 23, 20, 5, 69 Treba nacrtati sortirano binarno stablo (levi manji, desni veći) ako je stablo popunjavano redom kako su dolazili podaci.

38. Napisati program koji čvorove binarnog stabla štampa u redosledu koji odgovara nivoima (prvo element koji se nalazi u prvom nivou, pa elemente drugog nivoa i tako redom). Za ispis elemenata stabla po nivoima koristiti red.

typedef struct red{

cvor *el; struct red * sl;

} red; typedef struct cvor { int broj; struct cvor *levo, *desno; } Cvor;

typedef Cvor *Stablo;

39. Napisati metodu koja će vratiti broj čvorova binarnog stabla kod kojih je zbir elemenata levog podstabla veći od zbira elemenata desnog podstabla. typedef struct cvor { int broj; struct cvor *levo, *desno; } Cvor;

typedef Cvor *Stablo;

40. U binarno stablo smeštaju se celobrojni podaci (int) u intervalu [1, X] (gde X prestavlja zbir cifara vašeg matičnog broja - JMBG). Napisati funkciju koja će u stablo dodati novi element (ali samo ako on u stablu već ne postoji). Napisati drugu funkciju koja će za zadato stablo izračunati najveću dubinu. Napisati glavni program u kojem slučajno generisati 20 brojeva u intervalu [1, X]. Koristeći prvu napisanu funkciju, tako dobijene brojeve upisati u binarno stablo. Pomoću druge napisane funkcije izračunati i ispisati najveću dubinu stabla.

41. Napisati funkciju koja će elemente uređenog binarnog stabla prebaciti u sortiran niz. Napisati glavni program za testiranje tražene funkcije.

1.3. Sortiranje 42. Napisati program WordSort koji sortira u neopadajućem poretku po prvoj reči linije datoteke

ulaz.txt (niz linija limitirane dužine) i prepisuje ih na standardni izlaz. Ako je kao argument komandne linije zadat opcioni argument -n , onda izvršiti numeričko sortiranje. Ako je kao argument komandne linije zadat opcioni argument -r , onda promeniti redosled sortiranja u nerastući poredak. Obezbediti da program radi i kad su prisutna oba opciona argumenta -r -n . Može se pretpostaviti da ukupan broj linija nije veći od 1000, kao i da dužina svake linije/reči nije veća od 80 karaktera.

43. Napisati C program koji od dve datoteke, u kojima su linije sortirane u rastućem leksikografskom poretku, formira treću datoteku koja sadrži linije koje postoje u obe datoteke, tako da ona bude,

Page 7: 1. ZADACI - nasport.pmf.ni.ac.rsnasport.pmf.ni.ac.rs/materijali/1263/Razni zadaci.pdf · 1 1. ZADACI 1.1. Linearne strukture 1. Data je jednostruko povezana lista prirodnih brojeva

7

takoće, sortirana u RASTUĆEM leksikografskom poretku. Imena sve tri datoteke se zadaju kao argumenti komandne linije.

1.4. Nesređeni zadaci Zadatak 1. Napisati program za punjenje, brisanje, pretraživanje i ispis dvostruko povezane liste (liste u kojoj svaki čvor uz element sadrži pokazivač na prethodni i sledeći čvor). Element liste sadrži ceo broj i realni broj. Lista se oblikuje prema celom broju (to je ključ), novi element se unosi u listu tako da su celi brojevi sortirani uzlazno, a elementi se brišu i pretražuju po vrednosti celog broja. Funkcija za ispis elemenata u listi mora ispisati obe promenljive koje čine element: ceo broj i realni broj. Zadatak 2. Napisati program za punjenje, brisanje, pretraživanje i ispis jednostruko povezane liste s dva ključa čiji element sadržava cijeli broj (prvi ključ), realni broj (drugi ključ) i niz od 15 znakova. Dakle, u svaki čvor se upisuju: int varijabla,float varijabla, char duljine 15 varijabla, pokazivač na sljedeći element po int varijabli, pokazivač na sljedeći element pofloat varijabli. Listu treba složiti po rastućem cijelom broju i rastućem realnom broju (podaci su zapisani samo jednom), element liste se briše i pretražuje po oba ključa, tj. može se pretraživati i brisati element i po vrijednosti int i po floatvarijable. Funkcija za ispis treba ispisivati element sortirane po oba ključa, po int i po float varijabli, te za svaki element mora ispisati sve tri zapisane varijable (int, float char). Zadatak 3. Napraviti program u kojem se od ulaznih podataka koje čine realni broj i niz od 6 znakova izgradi hrpa, gdje je ključ za oblikovanje hrpe realni broj. Zatim napraviti uzlazno (od najmanjeg prema najvećem elementu) sortiranje podataka prema vrijednosti realnog broja upotrebom sortiranja pomoću hrpe. Ispisati niz ulaznih podataka i niz podataka nakon sortiranja, gdje je potrebno ispisati obje varijable (float i char) u podatku. Zadatak 4. Napraviti program u kojem generator slučajnih brojeva daje niz cijelih brojeva. Broj generiranih cijelih brojeva ne smije biti unaprijed ograničen nego se zadaje na početku izvršavanja programa. Ulazni niz cijelih brojeva treba sortirati pomoću sortiranja umetanjem (insertion sort), sortiranja spajanjem (merge sort) i brzim sortiranjem (quick sort). Usporediti apriorna vremena izvršavanja ovih algoritama. Usporediti aposteriorna vremena sortiranja ovih algoritama na velikom skupu ulaznih nizova različite duljine i odrediti koji je najefikasniji za kraće nizove do 100 brojeva, a koji za nizove dulje od 50000 brojeva. Za usporedbu efikasnosti upotrijebiti sve algoritme sortiranja na identičnim ulaznim podacima. Provjeriti ispravnost različitih algoritama sortiranja uspoređivanjem izlaznih sortiranih nizova. Zadatak 5. Napraviti program u kojem generator slučajnih brojeva daje niz cijelih brojeva. Broj generiranih cijelih brojeva ne smije biti unaprijed ograničen nego se zadaje na početku izvršavanja programa. Ulazni niz cijelih brojeva treba sortirati pomoću mjehuričastog sortiranja (bubble sort), sortiranja hrpom (heap sort) i brzim sortiranjem (quick sort). Usporediti apriorna vremena izvršavanja ovih algoritama. Usporediti aposteriorna vremena sortiranja ovih algoritama na velikom skupu ulaznih nizova različite duljine i odrediti koji je najefikasniji za kraće nizove do 100 brojeva, a koji za nizove dulje od 50000 brojeva. Za usporedbu efikasnosti upotrijebiti sve algoritme sortiranja na identičnim ulaznim podacima. Provjeriti ispravnost različitih algoritama sortiranja uspoređivanjem izlaznih sortiranih nizova. Zadatak 6. Napraviti program u kojem generator slučajnih brojeva daje niz ASCII znakova koji predstavljaju mala i velika slova engleske abecede. Broj generiranih znakova ne smije biti unaprijed ograničen nego se zadaje na početku izvršavanja programa. Ulazni niz slova treba sortirati pomoću sortiranja umetanjem

Page 8: 1. ZADACI - nasport.pmf.ni.ac.rsnasport.pmf.ni.ac.rs/materijali/1263/Razni zadaci.pdf · 1 1. ZADACI 1.1. Linearne strukture 1. Data je jednostruko povezana lista prirodnih brojeva

8

(insertion sort), sortiranja spajanjem (merge sort) i brzim sortiranjem (quick sort). Usporediti apriorna vremena izvršavanja ovih algoritama. Usporediti aposteriorna vremena sortiranja ovih algoritama na velikom skupu ulaznih nizova različite duljine i odrediti koji je najefikasniji za kraće nizove do 100 znakova, a koji za nizove dulje od 50000 znakova. Za usporedbu efikasnosti upotrijebiti sve algoritme sortiranja na identičnim ulaznim podacima. Provjeriti ispravnost različitih algoritama sortiranja uspoređivanjem izlaznih sortiranih nizova. Zadatak 7. Napraviti program u kojem generator slučajnih brojeva daje niz ASCII znakova koji predstavljaju mala i velika slova engleske abecede. Broj generiranih znakova ne smije biti unaprijed ograničen nego se zadaje na početku izvršavanja programa. Ulazni niz slova treba sortirati pomoću Shellovog sortiranja, sortiranja hrpom (heap sort) i brzim sortiranjem (quick sort). Usporediti apriorna vremena izvršavanja ovih algoritama. Usporediti aposteriorna vremena sortiranja ovih algoritama na velikom skupu ulaznih nizova različite duljine i odrediti koji je najefikasniji za kraće nizove do 100 znakova, a koji za nizove dulje od 50000 znakova. Za usporedbu efikasnosti upotrijebiti sve algoritme sortiranja na identičnim ulaznim podacima. Provjeriti ispravnost različitih algoritama sortiranja uspoređivanjem izlaznih sortiranih nizova. Zadatak 8. Usporediti aposteriorna vremena izvršavanja punjenja generiranim slučajnim realnim brojevima jednostruke linearne liste u padajućem nizu za slučajeve izvedbe liste pomoću polja i pomoću pokazivača. Usporediti vremena izvršavanja za kraće nizove (do 100 brojeva) i dugačke znakove (10000 brojeva) tako da se identičnim nizom brojeva pune obje liste. Zadatak 9. Napisati program u kojem se napravi lista pomoću pokazivača čiji su elementi cijeli brojevi. Broj elemenata u listi nije unaprijed zadan već se učita na početku izvršavanja programa. Lista se puni pomoću generatora slučajnih brojeva. Napisati funkciju koja će sortirati listu upotrebom algoritma brzog sortiranja (quick sort). Listu treba sortirati uzlazno (od najmanjeg prema najvećem elementu) i silazno (od najvećeg prema najmanjem elementu). Ispisati početnu listu i sortirane liste. Zadatak 10. Napisati program u kojem se napravi lista pomoću polja čiji su elementi realni brojevi. Broj elemenata u listi nije unaprijed zadan već se učita na početku izvršavanja programa. Lista se puni pomoću generatora slučajnih brojeva. Napisati funkciju koja će sortirati listu upotrebom algoritma brzog sortiranja (quick sort). Listu treba sortirati uzlazno (od najmanjeg prema najvećem elementu) i silazno (od najvećeg prema najmanjem elementu). Ispisati početnu listu i sortirane liste. Zadatak 11. Napisati program koji će iz datoteke pročitati imena i prezimena studenata i upisati ih po abecedi (po prezimenima) u listu čiji je element oblika ime (20 znakova), prezime (20 znakova), broj zadatka (kratki cijeli broj). Broj studenata nije unaprijed zadan nego ovisi o broju zapisa u ulaznoj datoteci. Vrijednost varijable broj zadatka za svaki element liste mora biti od 1 do N (N se zadaje tijekom izvođenja programa i ne smije biti unaprijed zadan) i treba ju upisati (svaki broj samo jednom, bez ponavljanja istih brojeva) u listu koristeći generator slučajnih brojeva (npr. ako je prvi generirani broj 17 tada taj broj ide uz studenta koji je prvi po redu itd). Tako dobivenu listu treba ispisati u obliku: prezime, ime, zadatak. Zadatak 12. Napraviti program koji će veliki broj puta (recimo milijun ili više) generiranjem slučajnih brojeva (koji odgovaraju broju točkica na kockama, dakle od 1 do 6) simulirati bacanje pet jednakih kockica. Iz dobivenih rezultata odrediti vjerojatnost da točno tri kockice padnu tako da pokazuju isti broj točkica (znači da imamo tri jedinice ili tri dvojke ili … tri šestice). Usporediti dobiveni rezultat s rezultatom koji daje teorija vjerojatnosti.

Page 9: 1. ZADACI - nasport.pmf.ni.ac.rsnasport.pmf.ni.ac.rs/materijali/1263/Razni zadaci.pdf · 1 1. ZADACI 1.1. Linearne strukture 1. Data je jednostruko povezana lista prirodnih brojeva

9

Zadatak 13. Napraviti program u kojem će se simulirati izvlačenje tri igraće karte iz špila od 52 karte (boje karata su pik, kara, srce i tref, vrijednosti 2, 3, 4, 5, 6, 7, 8, 9, 10, dečko, dama, kralj i as). Simuliranjem izvlačenja karata za veliki broj pokušaja (recimo 50000 ili više) odrediti vjerojatnost da sve tri izvučene karte imaju istu vrijednost (dakle da se izvuku tri asa, tri kralja , … tri dvojke). Usporediti dobiveni rezultat s rezultatom koji daje teorija vjerojatnosti. Zadatak 14. Napraviti program u kojem generator slučajnih brojeva daje niz ASCII znakova koji odgovaraju malim i velikim slovima engleske abecede. Duljina niza znakova nije unaprijed određena nego se zadaje na početku izvršavanja programa. Dobiveni niz znakova treba sortirati uzlazno upotrebom mjehuričastog sortiranja (bubble sort). Napisati funkciju koja algoritmom binarnog pretraživanja pronalazi da li se i na kojem mjestu u nizu nalazi zadano slovo. Također napisati funkciju koja to isto radi algoritmom linearnog pretraživanja. Usporediti aposteriorna vremena izvršavanja pretraživanja sortiranog niza znakova za linearno i binarno pretraživanje. Također usporediti aposteriorna vremena izvršavanja linearnog pretraživanja nesortiranog niza znakova s vremenom potrebnim za sortiranje mjehuričastim sortom i binarnim pretraživanjem sortiranog niza. Zadatak 15. Na predavanjima smo obrađivali apstraktni tip podataka RJEČNIK i prikazali ga kao podvrstu apstraktnog tipa podataka SKUP za koji su definirane samo četiri osnovne operacije: MAKE_NULL(), INSERT(), DELETE() i MEMBER(). Pokazali smo njegovu izvedbu pomoću binarnog stabla traženja gdje je binarno stablo izvedeno pomoću pokazivača. Napisati funkcije za gornje četiri operacije kada je element rječnika niz znakova duljine 20. Broj elemenata u rječniku nije unaprijed određen nego se zadaje na početku izvršavanja programa ovisno o broju podataka koji se unose u rječnik učitavanjem iz ulazne datoteke. Ti podaci se mogu mijenjati brisanjem postojećih i ubacivanjem novih nizova znakova. Na kraju izvršavanja programa treba sve podatke pospremiti u novu izlaznu datoteku. Zadatak 16. Na predavanjima smo obrađivali apstraktni tip podataka PRIORITETNI RED za koji su definirane četiri osnovne operacije: MAKE_NULL(), EMPTY(), INSERT(), DELETE_MIN() i pokazali kako se može izvesti pomoću hrpe. Napisati funkcije za gornje četiri operacije kada se element prioritetnog reda sastoji od cijelog broja koji označava prioritet (veći broj znači veći prioritet) i niza znakova duljine 6. Broj elemenata u prioritetnom redu nije unaprijed određen nego ovisi o broju podataka koji se učitavaju iz ulazne datoteke. Napisati funkciju MEMBER() koja određuje da li se neki niz znakova nalazi u prioritetnom redu i ako da koji je prioritet tog elementa, a ukoliko se zadani niz ne nalazi u prioritetnom redu treba o tome obavijestiti. Zadatak 17. Na predavanjima smo pokazali tri različita algoritma za računanje vrijednosti polinoma u zadanoj točci (najjednostavnijom upotrebom matematičke definicije polinoma, poboljšanim algoritmom koji posprema međurezultate potenciranja i Hornerov algoritam). Napisati funkcije koje računaju vrijednost polinoma za svaki od ovih algoritama. Red polinoma (maksimalna potencija x-a) i koeficijenti polinoma se unose na početku izvršavanja programa. Usporediti aposteriorna vremena izvršavanja ova tri algoritma na velikom skupu ulaznih podataka koji predstavljaju polinome različite duljine i odrediti kolika je ušteda na vremenu izvršavanja Hornerovog algoritma prema ostala dva algoritma za različite duljine polinoma. Zadatak 18. Napisati program u kojem se napravi lista pomoću pokazivača čiji su elementi cijeli brojevi. Broj elemenata u listi nije unaprijed zadan već se učita na početku izvršavanja programa. Lista se puni pomoću generatora slučajnih brojeva. Napisati funkciju koja će sortirati listu upotrebom algoritma sortiranja umetanjem (Insertion Sort) i funkciju koja će sortirati upotrebom mjehuričastog sortiranja

Page 10: 1. ZADACI - nasport.pmf.ni.ac.rsnasport.pmf.ni.ac.rs/materijali/1263/Razni zadaci.pdf · 1 1. ZADACI 1.1. Linearne strukture 1. Data je jednostruko povezana lista prirodnih brojeva

10

(Bubble Sort). Listu treba sortirati uzlazno (od najmanjeg prema najvećem elementu) i silazno (od najvećeg prema najmanjem elementu). Ispisati početnu listu i sortirane liste, te provjeriti ispravnost sortiranja oba algoritma tako da se usporede elementi sortiranih lista. Zadatak 19. Napisati program u kojem se napravi lista pomoću polja čiji su elementi cijeli brojevi. Broj elemenata u listi nije unaprijed zadan već se učita na početku izvršavanja programa. Lista se puni pomoću generatora slučajnih brojeva. Napisati funkciju koja će sortirati listu upotrebom algoritma sortiranja umetanjem (insertion sort) i funkciju koja će sortirati upotrebom Shellovog sortiranja. Listu treba sortirati uzlazno (od najmanjeg prema najvećem elementu) i silazno (od najvećeg prema najmanjem elementu). Ispisati početnu listu i sortirane liste, te provjeriti ispravnost sortiranja oba algoritma tako da se usporede elementi sortiranih lista. Zadatak 20. Napraviti program u kojem se od ulaznih podataka koje čine niz od 6 znakova i realni broj izgradi hrpa, gdje je ključ za oblikovanje hrpe niz znakova (slaganje po abecedi). Zatim napraviti uzlazno (od najmanjeg prema najvećem elementu) sortiranje podataka upotrebom sortiranja pomoću hrpe. Ispisati niz ulaznih podataka i niz podataka nakon sortiranja, gdje je potrebno ispisati obje varijable (char i float) u podatku. Zadatak 21. Napisati program u kojem se napravi lista pomoću pokazivača čiji su elementi realni brojevi. Broj elemenata u listi nije unaprijed zadan već se učita na početku izvršavanja programa. Lista se puni pomoću generatora slučajnih brojeva. Napisati funkciju koja će sortirati listu upotrebom algoritma sortiranja spajanjem (merge sort). Listu treba sortirati uzlazno (od najmanjeg prema najvećem elementu) i silazno (od najvećeg prema najmanjem elementu). Ispisati početnu listu i sortirane liste. Zadatak 22. Napisati program u kojem se napravi lista pomoću polja čiji su elementi realni brojevi. Broj elemenata u listi nije unaprijed zadan već se učita na početku izvršavanja programa. Lista se puni pomoću generatora slučajnih brojeva. Napisati funkciju koja će sortirati listu upotrebom algoritma sortiranja spajanjem (merge sort). Listu treba sortirati uzlazno (od najmanjeg prema najvećem elementu) i silazno (od najvećeg prema najmanjem elementu). Ispisati početnu listu i sortirane liste. Zadatak 23. Napisati program za zbrajanje dvaju polinoma prikazanih u obliku p(x) = c1xe

1 + c2xe2 + … + cn

xen gdje su eksponenti e1 > e2 > … > en ≥ 0 cijeli brojevi, a koeficijenti ci realni brojevi. Polinome prikazati

vezanom listom uz upotrebu pokazivača tako da i-ta ćelija liste sadrži eksponent ei, koeficijent ci i pokazivač na sljedeću ćeliju. Na početku programa unose se red (maksimalna potencija x-a) i vrijednosti koeficijenata za svaki polinoma. Ispisati dvije početne liste i listu rezultat nastalu zbrajanjem polinoma. Zadatak 24. Napisati program koji izgradi binarno stablo traženja upotrebom polja. Broj čvorova stabla nije unaprijed određen nego se zadaje na početku programa. U čvorove binarnog stabla zapisuju se realni brojevi dobiveni upotrebom generatora slučajnih brojeva. Napisati funkciju koja prebroji listove, funkciju koja prebroji unutrašnje čvorove binarnog stabla i funkciju koja odredi maksimalnu dubinu binarnog stabla. Ispisati stablo u inorder, preorder i postorder algoritmu. Zadatak 25. Napisati program koji izgradi binarno stablo traženja upotrebom pokazivača (svaki čvor sadrži pokazivače na lijevo i desno dijete čvora). Broj čvorova stabla nije unaprijed određen nego se zadaje na početku programa. U čvorove binarnog stabla zapisuju se cijeli brojevi dobiveni upotrebom generatora slučajnih brojeva. Napisati funkciju koja prebroji listove, funkciju koja prebroji unutrašnje čvorove binarnog stabla i funkciju koja odredi maksimalnu dubinu binarnog stabla. Ispisati stablo u inorder algoritmu.

Page 11: 1. ZADACI - nasport.pmf.ni.ac.rsnasport.pmf.ni.ac.rs/materijali/1263/Razni zadaci.pdf · 1 1. ZADACI 1.1. Linearne strukture 1. Data je jednostruko povezana lista prirodnih brojeva

11

Zadatak 26. Napisati program koji izgradi binarno stablo traženja upotrebom polja. Broj čvorova stabla nije unaprijed određen nego se zadaje na početku programa. U čvorove binarnog stabla zapisuju se alfabetski znakovi (samo slova engleske abecede, relacija manji-veći je definirana rasporedom slova u abecedi) dobiveni upotrebom generatora slučajnih brojeva. Napisati funkciju koja prebroji čvorove sa samo jednim djetetom, funkciju koja prebroji čvorove s dvoje djece i funkciju koja odredi minimalnu dubinu binarnog stabla. Ispisati stablo u inorder, preorder i postorder algoritmu. Zadatak 27. Napisati program koji izgradi binarno stablo traženja upotrebom pokazivača (svaki čvor sadrži oznaku i pokazivače na lijevo i desno dijete čvora). Broj čvorova stabla nije unaprijed određen nego se zadaje na početku programa. U čvorove binarnog stabla zapisuju se alfabetski znakovi (samo slova engleske abecede, relacija manji-veći je definirana rasporedom slova u abecedi) dobiveni upotrebom generatora slučajnih brojeva. Napisati funkciju koja prebroji čvorove sa samo jednim djetetom, funkciju koja prebroji čvorove s dvoje djece i funkciju koja odredi minimalnu dubinu binarnog stabla. Ispisati stablo u inorder, preorder i postorder algoritmu. Zadatak 28. Napisati program u kojem se lista cijelih brojeva sortira upotrebom binarnog stabla traženja uzlazno (od najmanjeg prema najvećem elementu) i silazno (od najvećeg prema najmanjem) upotrebom istog binarnog stabla traženja. Lista sadrži cijele brojeve koje daje generator slučajnih brojeva. Broj elemenata liste nije unaprijed određen nego se zadaje na početku programa. Binarno stablo traženja izvesti upotrebom polja, a izvedbu liste izaberite sami (polje ili pokazivači). Ispisati početnu listu i sortiranu listu. Zadatak 29. Napisati program u kojem se lista alfabetskih znakova (samo slova engleske abecede, relacija manji-veći je definirana rasporedom slova u abecedi) sortira upotrebom binarnog stabla traženja uzlazno (od najmanjeg prema najvećem elementu) i silazno (od najvećeg prema najmanjem) upotrebom istog binarnog stabla traženja. Lista sadrži alfabetske znakove koje daje generator slučajnih brojeva. Broj elemenata liste nije unaprijed određen nego se zadaje na početku programa. Binarno stablo traženja izvesti upotrebom pokazivača, a izvedbu liste izaberite sami (polje ili pokazivači). Ispisati početnu listu i sortiranu listu. Zadatak 30. Riješite problem vraćanja novca tako da se uvijek vrati najmanji broj novčanica i napišite odgovarajući program uz pretpostavku da se raspolaže novčanicama od 1000, 500, 200, 100, 50, 20, 10, 5, 2 i 1 kn. Na početku programa se unosi iznos koji treba vratiti, a izlaz programa je ispis vrste i količine novčanica koje se vraćaju.

Zadatak 31. Koristeći Eratostenov algoritam napisati program koji će za bilo koji upisani prirodni broj provjeriti da li jeprim broj te ako nije prikazati ga kao umnožak prim brojeva (dakle n = p1*p2*…*pk gdje su pi prim brojevi). Provjeriti da li je takav prikaz jedinstven, tj. da li postoji neki drugi niz prim brojeva qi za koje umnožak q1*q2*…*qj daje n.

Zadatak 32. Napraviti program u kojem se oblikuje linearna jednostuko povezana lista upotrebom pokazivača u čije su čvorove upisani: realni broj, niz od 15 znakova i cijeli broj. Lista je poredana uzlazno prema vrijednosti realnog broja.Napisati funkciju za pronalaženje i ispis člana liste sa zadanim realnim brojem. Ulazni argumenti su glava liste i cijeli broj,a funkcija treba ispisati sve tri varijable zapisane u čvoru (float, char i int). Funkcija vraća rezultat 0 ako realni broj nijenađen, a 1 ako jest.

Page 12: 1. ZADACI - nasport.pmf.ni.ac.rsnasport.pmf.ni.ac.rs/materijali/1263/Razni zadaci.pdf · 1 1. ZADACI 1.1. Linearne strukture 1. Data je jednostruko povezana lista prirodnih brojeva

12

Zadatak 33. Napisati funkcije za dodavanje i skidanje elementa u stog realiziran poljem. Maksimalan broj zapisa nije unaprijed određen nego se zadaje na početku programa. U glavnom programu izvesti učitavanje podataka za element stoga kao i ispisivanje elementa stoga koji je skinut (npr. unijeti nekoliko elemenata u stog, a zatim skinuti i ispisati svaki element sve dok stog ne ostane prazan). Element stoga čine: cijeli broj (int), niz znakova duljine 20 (char), realni broj (float) i kratki cijeli broj (short). Zadatak 34. Napisati funkcije za dodavanje i skidanje elementa u stog realiziran pokazivačima. Maksimalan broj zapisa nije unaprijed određen nego se zadaje na početku programa. U glavnom programu izvesti učitavanje podataka za element stoga kao i ispisivanje elementa stoga koji je skinut (npr. unijeti nekoliko elemenata u stog, a zatim skinuti i ispisati svaki element sve dok stog ne ostane prazan). Element stoga čine: cijeli broj (int), niz znakova duljine 20 (char), realni broj (float) i niz znakova duljine 15 (char). Zadatak 35. Napraviti program koji će u memoriji oblikovati linearnu listu upotrebom pokazivača. U pojedini čvor liste seupisuje: cijeli broj, niz znakova duljine 30, kratki cijeli broj, realni broj i pokazivač na sljedeći čvor. Napisati funkciju koja će iz liste ispisati sve zapise koji sadrže neku zadanu vrijednost kratkog cijelog broja. Napisati funkciju koja će izračunati prosječnu vrijednost realnog broja u svim čvorovima. Zadatak 36. Napraviti program u kojem se red realizira upotrebom pokazivača. Svaki element reda sadrži cijeli broj, realni broj i niz od 15 znakova. Treba napisati funkciju koja dodaje i funkciju koja briše element iz reda, te funkciju za ispis elementa na kojem se obavlja operacija. Ako je operacija uspjela, funkcija vraća vrijednost 1, a ako nije, vraća 0. Zadatak 37. Napraviti program u kojem se red ostvaruje upotrebom cirkularnog polja. Svaki element reda sadržava cijeli broj i niz znakova duljine 5. Napisati funkciju koja dodaju element u red, funkciju koja briše element iz reda te funkciju za ispis elementa na kojem se obavlja operacija. Ako je operacija uspjela, funkcija vraća vrijednost 1, a ako nije, vraća 0. Zadatak 38. Napraviti program u kojem se od ulaznih podataka koje čine cijeli broj i niz od 6 znakova izgradi hrpa, gdje je ključ za oblikovanje hrpe cijeli broj. Zatim napraviti silazno (od najvećeg prema najmanjem elementu) sortiranje podataka prema vrijednosti cijelog broja upotrebom sortiranja pomoću hrpe. Ispisati niz ulaznih podataka i niz podataka nakon sortiranja, gdje je potrebno ispisati obje varijable (int i char) u podatku. Zadatak 39. Napisati funkciju za punjenje binarnog stabla traženja u čije čvorove treba upisati: cijeli broj, niz od 6znakova i realni broj. Stablo treba sortirati po cijelom broju; lijevo manji, desno veći. Sami izaberite izvedbu binarnog stabla traženja (polje ili pokazivači). Napisati funkciju za ispis elemenata za koju je ulazni argument korijen stabla, a ispistreba biti poredan po vrijednosti cijelog broja od najvećeg do najmanjeg. Napisati funkciju koja ispiše sve elemente binarnog stabla za koje je realni broj veći od neke određene vrijednosti koja se unese u glavnoj funkciji programa tijekom izvršavanja, te funkciju koja ispiše sve elemente binarnog stabla za koje niz znakova počinje nekim određenim slovom koje se zadaje tijekom izvršavanja programa. Zadatak 40. U memoriji napraviti binarno stablo traženja u čije čvorove se upisuju 2 podatka: prvi tipa int i drugi tipafloat. Sami izaberite izvedbu binarnog stabla traženja (polje ili pokazivači). Stablo se sortira prema cjelobrojnom podatku (lijevo manji, desno veći). Ispisati stablo po algoritmu INORDER. Napisati funkcije MIN() i MAX(), čiji su ulazni argument korijen stabla, koje u najmanjem mogućem broju koraka moraju naći i ispisati zapise koji odgovaraju najmanjoj i najvećoj cjelobrojnoj vrijednosti (nije dopušteno pročitati zapise

Page 13: 1. ZADACI - nasport.pmf.ni.ac.rsnasport.pmf.ni.ac.rs/materijali/1263/Razni zadaci.pdf · 1 1. ZADACI 1.1. Linearne strukture 1. Data je jednostruko povezana lista prirodnih brojeva

13

u svim čvorovima). U programu zatim izbrisati čvorove koji odgovaraju tim zapisima te ispisati tako nastalo stablo u INORDER algoritmu. Napisati funkciju koja izračuna i ispiše prosječnu vrijednost varijable tipa float u stablu. Zadatak 41. Napisati program koji će upotrebom velikog broja parova slučajno generiranih (realnih !) brojeva izračunati volumen kugle radijusa R s centrom u središtu koordinatnog sustava (0,0,0). Usporediti dobiveni rezultat s vrijednošću izračunatom po formuli za volumen kugle. Uputa: kugla radijusa R se smjesti unutar kocke stranica 2R. Provjeravati za svaku generiranu točku (x,y,z) koja se mora nalaziti unutar kocke da li se nalazi i unutar kugle te prebrojati koliko se točaka nalazi unutar kugle. Volumen kugle tada odgovara omjeru broja generiranih slučajnih točaka unutar kugle s ukupnim broju generiranih točaka pomnoženom s volumenom kocke. Zadatak 42. Napišite program koji će za bilo koju vrijednost pozitivnog cijelog broja n provjeriti ispravnost sljedećih izraza:

Izračunavanje svake od gornjih suma je potrebno obaviti u posebnoj funkciji, a za svaku od suma je potrebno napisati funkciju koja računa sumu rekurzivnim i nerekurzivnim postupkom.

Zadatak 43. Koristeći Eratostenov algoritam napraviti program koji će za bilo koji upisani prirodni broj N odrediti da li je prim broj. U programu treba koristiti polje bitova, a ne polje cijelih brojeva kao na primjeru napravljenom na vježbama. Maksimalna vrijednost prirodnog broja N nesmije biti ograničena, pa je potrebno koristiti dinamičko rezerviranje memorije - funkcija malloc().

Zadatak 44. Napisati program za izvedbu liste pomoću pokazivača. Elementi liste su cijeli brojevi dobiveni generatorom slučajnih brojeva. Listu je potrebno sortirati uzlazno, te zatim elemente iz te liste prebaciti u druge dvije liste tako da jedna sadrži samo parne, a druga samo neparne brojeve iz početne liste. Ispisati sve liste. Veličina lista nije unaprijed zadana i ograničena, već se određuje tijekom izvršavanja programa.

Zadatak 45. Napisati program u kojem će se usporediti brzine odvijanja soriranja brzim algoritmom (Quick Sort) za četiri različita načina izbora pivot elementa (stožera): 1) kada je stožer uvijek prvi element niza 2) kada je stožer srednji po veličini od prvog, srednjeg i zadnjeg elementa 3) kada je stožer element uzet sa slučajno izabrane pozicije u nizu 4) kada je stožer srednji po veličini od tri elementa uzetih sa slučajno izabranih pozicija. Elementi niza su cijeli brojevi, a duljina niza nije unaprijed zadana ni ograničena, nego se zadaje na početku izvršavanja programa. Provjeriti ispravnost sortiranja u sva četiri slučaja uspoređivanjem sortiranih nizova.

Zadatak 46. Napisati program za izvedbu apstraktnog tipa podataka Rječnik pomoću otvorene rasute (hash) tablice (izvesti pretinac kao listu pomoću pokazivača; vidjeti predavanja). Potrebno je napisati funkcije za operacije MAKE_NULL(), INSERT(), DELETE() i MEMBER(). Elementi rječnika su cijeli brojevi između 1 i 1000 dobiveni generiranjem slučajnih brojeva.

Page 14: 1. ZADACI - nasport.pmf.ni.ac.rsnasport.pmf.ni.ac.rs/materijali/1263/Razni zadaci.pdf · 1 1. ZADACI 1.1. Linearne strukture 1. Data je jednostruko povezana lista prirodnih brojeva

14

Zadatak 47. Napisati program za izvedbu apstraktnog tipa podataka Skup pomoću sortirane vezane liste (lista preko pokazivača; vidjeti predavanja). Potrebno je napisati funkcije za operacije MAKE_NULL(), INSERT(), DELETE(), MEMBER(), MIN(), MAX(), SUBSET(), UNION(), INTERSECTION() i DIFFERENCE(). Elementi skupova su cijeli brojevi između 1 i 100 dobiveni generiranjem slučajnih brojeva.

Zadatak 48. Napisati program koji rješava 0/1 problem ranca (vidjeti predavanja). Zadano je n predmeta (nije unaprijed zadan broj nego se određuje na početku izvršavanja programa) O1, ..., On te njihove težine wi i vrijednosti pi. Kapacitet ranca je c težinskih jedinica. Težine i vrijednosti predmeta, te kapacitet ranca su pozitivne realne veličine. Program treba odrediti koje predmete treba staviti u ranac tako da njihova ukupna vrijednost bude maksimalna. Predmeti se uzimaju cijeli ili se ne uzimaju.

Zadatak 49. Napisati program za izvedbu apstraktnog tipa podataka Skup pomoću bit-vektora. Potrebno je napisati funkcije za operacije MAKE_NULL(), INSERT(), DELETE(), MEMBER(), MIN(), MAX(), SUBSET(), UNION(), INTERSECTION() i DIFFERENCE(). Elementi skupova su cijeli brojevi između 1 i N (gdje je N broj koji nije unaprijed ograničen i zadaje se na početku izvođenja programa) dobiveni generiranjem slučajnih brojeva. Zadatak 50. Napisati program koji rješava kontinuirani problem ranca (vidjeti predavanja). Zadano je n predmeta (nije unaprijed zadan broj nego se određuje na početku izvršavanja programa) O1, ..., On te njihove težine wi i vrijednosti pi. Kapacitet ranca je c težinskih jedinica. Težine i vrijednosti predmeta, te kapacitet ranca su pozitivne realne veličine. Program treba odrediti koje predmete i koji njihov dio treba staviti u ranac tako da njihova ukupna vrijednost bude maksimalna.

1) Napisati program koji učita 10 nizova znakova duljine do 20 znakova. Svi unešeni znakovi su samo alfabetski standardni ASCII znakovi (mala i velika slova). Sortirati te nizove znakova po abecedi i ispisati ih. Uputa: prebaciti sve unešene znakove u velika ili mala slova prije sortiranja i tako ih sortirati i ispisati. 2) Napisati program koji će upotrebom velikog broja generiranih parova slučajnih brojeva izračunati površinu kruga radijusa r s centrom u središtu koordinatnog sustava (0,0). Usporediti dobiveni rezultat s izračunatom pravom vrijednošću površine kruga. Uputa: krug radijusa r smjestiti unutar kvadrata stranica duljine 2r. Provjeravati za svaku generiranu točku (x,y) koja se mora nalaziti unutar kvadrata da li se nalazi i unutar kruga. Površina kruga tada odgovara omjeru broja točaka unutar kruga prema ukupnom broju točaka pomnoženim s površinom kvadrata. 3) Napišite program koji će za bilo koju vrijednost cijelog broja n provjeriti ispravnost sljedećih izraza:

Izračunavanje svake od gornjih suma je potrebno obaviti u posebnoj funkciji, a za svaku od suma je potrebno napraviti funkciju koja računa sumu rekurzivnim i nerekurzivnim postupkom.

Page 15: 1. ZADACI - nasport.pmf.ni.ac.rsnasport.pmf.ni.ac.rs/materijali/1263/Razni zadaci.pdf · 1 1. ZADACI 1.1. Linearne strukture 1. Data je jednostruko povezana lista prirodnih brojeva

15

4) Napisati funkcije za sortiranje metodom umetanja (Insertion Sort) i mjehuričastim sortiranjem (Bubble Sort) koje sortiraju elemente silazno (od najvećeg prema najmanjem). Sortira se polje generiranih slučajnih cijelih brojeva, proizvoljnog broja elemenata N koji se zadaje na početku programa (koristiti dinamičko rezerviranje memorije za spremanje polja - funkcija malloc). Pronaći u koliko se koraka sortira polje u najgorem slučaju za oba algoritma i odrediti koji je brži za vrlo dugačke nizove brojeva (koristiti biblioteku <sys/timeb.h> i funkciju ftime(struct timeb*) za mjerenje vremena izvršavanja sortiranja, kako je objašnjeno na predavanjima). 5) Koristeći Eratostenov algoritam objašnjen na vježbama, napraviti program koji će za bilo koji upisani prirodni broj x (maksimalan broj nije unaprijed zadan - polje treba rezervirati dinamički upotrebom funkcije malloc) odrediti da li je prim broj i ako nije prikazat ga kao umnožak prim brojeva (bez ostatka, tj. u obliku x=p1*p2*...*pk). 6) Napisati program u kojem se dvije liste cijelih brojeva izvedene pomoću polja i unaprijed zadane duljine 15, pune slučajno generiranim brojevima od 0 do 100 tako da su sortirane od najmanjeg prema najvećem elementu (uzlazno). Te dvije liste zatim treba spojiti u jednu duljine 30, koja je također sortirana od najmanjeg prema najvećem elementu. Sve liste je potrebno ispisati. Uputa: jedna od mogućnosti izvedbe programa je umetanje novog elementa u listu tako da se pretragom od početka liste nađe prva pozicija u listi čija je vrijednost elementa veća od vrijednosti novog elementa i tada se ubaci novi element na poziciju ispred nađene. Spajanje dviju listi izvesti tako da se uspoređuju prvi neprebačeni elementi obje liste i manji od njih se upiše na prvo slobodno mjesto spojene liste. Sljedeća mogućnost je upotreba nekog od algoritama sortiranja koji smo radili na vježbama: sortiranje umetanjem ili mjehuričasto sortiranje. 7) Napisati program u kojem se dvije liste cijelih brojeva izvedene pomoću pokazivača i duljina koje se zadaju prije unošenja elemenata, pune slučajno generiranim brojevima od 0 do 100 tako da su sortirane od najmanjeg prema najvećem elementu (uzlazno). Te dvije liste zatim treba spojiti u jednu, koja je također sortirana od najmanjeg prema najvećem elementu. Uputa: umetanje novog elementa u listu izvesti tako da se krene od početka liste i vrijednost novog elementa se uspoređuje s vrijednostima u listi dok se ne nađe mjesto na koje treba ubaciti novi element. 8) U memoriji oblikovati vezanu listu (pomoću pokazivača). U pojedini čvor liste upisati: - matični broj osobe (int) - prezime (30 znakova) - ime (30 znakova) - godina rođenja (short) - pokazivač na sljedeći čvor Unos podataka ostvariti učitavanjem iz ulazne datoteke. Elemente liste složiti po ključu matični broj, tako da su uzlazno sortirani. Napisati funkciju koja će iz liste ispisati sve zapise o osobama rođenim određene godine koja se unosi tijekom izvršavanja programa. 9) Napisati funkcije za dodavanje i skidanje elementa u stog realiziran poljem u koje stane najviše MAXZ zapisa. U glavnom programu izvesti učitavanje podataka za element stoga s tastature kao i ispisivanje elementa stoga koji je skinut (npr. unijeti nekoliko elemenata u stog, a zatim skinuti i ispisati svaki element sve dok stog ne ostane prazan). Element stoga je zapis oartiklu koji se prodaje u dućanu: –šifra artikla (int) –naziv artikla (25 znakova) –cijena (float)

Page 16: 1. ZADACI - nasport.pmf.ni.ac.rsnasport.pmf.ni.ac.rs/materijali/1263/Razni zadaci.pdf · 1 1. ZADACI 1.1. Linearne strukture 1. Data je jednostruko povezana lista prirodnih brojeva

16

10) Strukturu podataka red realizirati uz upotrebu pokazivača. Svaki element reda sadrži naziv (20 znakova) i vrijednost (realni broj). Treba napisati funkciju koja dodaje i funkciju koja briše element iz reda, u kojima treba ispisati element na kojem se obavlja operacija. Također napisati funkciju koja ispiše sve elemente u redu. 11) Napraviti program koji sortira niz realnih brojeva proizvoljne duljine (koja se zadaje na početku izvođenja programa) uzlazno (od najmanjeg prema najvećem) i silazno (od najvećeg prema najmanjem) upotrebom binarnog stabla traženja i obilaskom tog stabla algoritmom obilaska koji ispisuje elemente u sortiranom redoslijedu. Usporediti vrijeme izvršavanja sortiranja za ovaj algoritam i algoritam sortiranja umetanjem (Insertion Sort) mjerenjem vremena izvršavanja za dugačke nizove brojeva upotrebom biblioteke <sys/timeb.h> i funkcije ftime(struct timeb*) za mjerenje vremena, kako je objašnjeno na predavanjima. 12) Napisati funkciju za punjenje memorijski rezidentnog binarnog stabla u čije čvorove treba upisati: matični broj (cijeli broj) i prezime osobe (15+1 znakova). Stablo treba sortirati po matičnom broju: lijevo manji, desno veći. Napisati funkciju za ispis elemenata za koju je ulazni argument korijen stabla, gdje ispis treba biti poredan uzlazno po matičnom broju. Napisati funkciju koja ispiše matični broj za zadano prezime osobe. 13) Napisati program koji od ulaznog polja slučajno generiranih cijelih brojeva izgradi minimalnu hrpu (u korijenu je minimalni element), te ispiše polje u kojem su spremljeni elementi hrpe. Zatim napisati funkciju za silazno sortiranje (od najvećeg prema najmanjem elementu) polja cijelih brojeva upotrebom sortiranja pomoću hrpe. Sortira se polje generiranih slučajnih cijelih brojeva, proizvoljnog broja elemenata N koji se zadaje na početku programa (koristiti dinamičko rezerviranje memorije za spremanje polja - funkcija malloc). Usporediti vrijeme izvršavanja sortiranja pomoću hrpe i sortiranja umetanjem (Insertion Sort) mjerenjem vremena potrebnog za sortiranje identičnog niza ulaznih podataka i odrediti koji je brži za vrlo dugačke nizove brojeva (koristiti biblioteku <sys/timeb.h> i funkciju ftime(struct timeb*) za mjerenje vremena izvršavanja sortiranja, kako je objašnjeno na predavanjima). 14) Napisati program koji od ulaznog polja alfabetskih znakova (samo slova engleske abecede, dakle ASCII znakovi koji odgovaraju slovima; sami izaberite na koji način se unose podaci: s tastature, iz ulazne datoteke, generator slučajnih brojeva ...) proizvoljne duljine, koja se unosi na početku izvršavanja programa (koristiti funkciju malloc() za rezerviranje memorije za polje), izgradi hrpu, te ispiše polje u kojem su spremljeni elementi hrpe. Također napraviti funkciju koja sortira polje takvih znakova upotrebom sortiranja pomoću hrpe i ispisati sortirano polje. 15) Napisati funkciju za silazno sortiranje (od najvećeg prema najmanjem elementu) ulaznog polja slučajno generiranih cijelih brojeva duljine N algoritmom sortiranja spajanjem (Merge Sort). Duljina polja se zadaje na početku izvršavanja programa i upotrebom funkcije malloc() rezervira se memorija za polje. Usporediti vrijeme izvršavanja algoritama sortiranja spajanjem i sortiranja umetanjem (Insertion Sort) na primjeru dugačkog niza brojeva (ulazni niz slučajno generiranih brojeva kopirati u drugo polje koje će biti ulazni niz za sortiranje umetanjem). Usporediti sortirana polja i utvrditi da li su oba algoritma dala identičan (točan) rezultat. 16) Napisati funkciju za silazno sortiranje (od najvećeg prema najmanjem elementu) ulaznog polja slučajno generiranih cijelih brojeva duljine N algoritmom Shell-ovog sortiranja. Duljina polja se zadaje na početku

Page 17: 1. ZADACI - nasport.pmf.ni.ac.rsnasport.pmf.ni.ac.rs/materijali/1263/Razni zadaci.pdf · 1 1. ZADACI 1.1. Linearne strukture 1. Data je jednostruko povezana lista prirodnih brojeva

17

izvršavanja programa i upotrebom funkcije malloc() rezervira se memorija za polje. Usporediti vrijeme izvršavanja algoritama Shell-ovog sortiranja i sortiranja umetanjem (Insertion Sort) na primjeru dugačkog niza brojeva (ulazni niz slučajno generiranih brojeva kopirati u drugo polje koje će biti ulazni niz za sortiranje umetanjem). Usporediti sortirana polja i utvrditi da li su oba algoritma dala identičan (točan) rezultat. 17) Napisati funkciju za silazno sortiranje (od najvećeg prema najmanjem elementu) ulaznog polja slučajno generiranih cijelih brojeva duljine N algoritmom brzog sortiranja (Quick Sort). Duljina polja se zadaje na početku izvršavanja programa i upotrebom funkcije malloc() rezervira se memorija za polje. Usporediti vrijeme izvršavanja algoritama brzog sortiranja i sortiranja umetanjem (Insertion Sort) na primjeru dugačkog niza brojeva (ulazni niz slučajno generiranih brojeva kopirati u drugo polje koje će biti ulazni niz za sortiranje umetanjem). Usporediti sortirana polja i utvrditi da li su oba algoritma dala identičan (točan) rezultat. 18) Napisati program u kojem se apstraktni tip podataka skup izvodi pomoću vezane liste (vidjeti predavanja). Elementi skupova su cijeli brojevi (sami izaberite način na koji se određuju ulazni elementi za skupove). Liste ostvariti pomoću pokazivača. Napisati funkcije za uniju dva skupa Union(), presjek dva skupa Intersection() i razliku dva skupa Difference(). Napisati funkciju za ispis elemenata skupa kojom se ispisuju ulazni skupovi i rezultati gornje tri funkcije. 19) Napisati program koji rješava 0/1 problem ranca (vidjeti predavanja). Zadano je n predmeta (nije unaprijed zadan broj nego se određuje na početku izvođenja programa) O1, ..., On te njihove težine wi i vrijednosti pi. Kapacitet ranca je c težinskih jedinica. Težine i vrijednosti predmeta, te kapacitet ranca su realne pozitivne veličine. Odrediti koje predmete treba uzeti u ranac tako da njihova ukupna vrijednost bude maksimalna ? Predmeti se ne mogu dijeliti, nego se uzimaju ili ne. Zadatak 1. Napisati program u kojem se napravi lista pomoću pokazivača čiji su elementi cijeli brojevi. Broj elemenata u listi nije unaprijed zadan već se učita na početku izvršavanja programa. Lista se puni pomoću generatora slučajnih brojeva. Napisati funkciju koja će sortirati listu upotrebom algoritma sortiranja spajanjem (merge sort). Listu treba sortirati uzlazno (od najmanjeg prema najvećem elementu) i silazno (od najvećeg prema najmanjem elementu). Ispisati početnu listu i sortirane liste. Zadatak 2. Napisati program u kojem se napravi lista pomoću polja čiji su elementi cijeli brojevi. Broj elemenata u listi nije unaprijed zadan već se učita na početku izvršavanja programa. Lista se puni pomoću generatora slučajnih brojeva. Napisati funkciju koja će sortirati listu upotrebom algoritma sortiranja spajanjem (merge sort). Listu treba sortirati uzlazno (od najmanjeg prema najvećem elementu) i silazno (od najvećeg prema najmanjem elementu). Ispisati početnu listu i sortirane liste. Zadatak 3. Napisati program za zbrajanje dvaju polinoma prikazanih u obliku p(x) = c1xe

1 + c2xe2 + … + cn xe

n gdje su eksponenti e1 > e2 > … > en ≥ 0 cijeli brojevi, a koeficijenti ci realni brojevi. Polinome prikazati vezanom listom uz upotrebu pokazivača tako da i-ta ćelija liste sadrži eksponent ei, koeficijent ci i pokazivač na sljedeću ćeliju. Na početku programa unose se red (maksimalna potencija x-a) i vrijednosti koeficijenata za svaki polinoma. Ispisati dvije početne liste i listu rezultat nastalu zbrajanjem polinoma.

Page 18: 1. ZADACI - nasport.pmf.ni.ac.rsnasport.pmf.ni.ac.rs/materijali/1263/Razni zadaci.pdf · 1 1. ZADACI 1.1. Linearne strukture 1. Data je jednostruko povezana lista prirodnih brojeva

18

Zadatak 4. Napisati program koji izgradi binarno stablo traženja upotrebom polja. Broj čvorova stabla nije unaprijed određen nego se zadaje na početku programa. U čvorove binarnog stabla zapisuju se cijeli brojevi dobiveni upotrebom generatora slučajnih brojeva. Napisati funkciju koja prebroji listove, funkciju koja prebroji unutrašnje čvorove binarnog stabla i funkciju koja odredi maksimalnu dubinu binarnog stabla. Ispisati stablo u inorder algoritmu. Zadatak 5. Napisati program koji izgradi binarno stablo traženja upotrebom pokazivača (svaki čvor sadrži pokazivače na lijevo i desno dijete čvora). Broj čvorova stabla nije unaprijed određen nego se zadaje na početku programa. U čvorove binarnog stabla zapisuju se cijeli brojevi dobiveni upotrebom generatora slučajnih brojeva. Napisati funkciju koja prebroji listove, funkciju koja prebroji unutrašnje čvorove binarnog stabla i funkciju koja odredi maksimalnu dubinu binarnog stabla. Ispisati stablo u inorder algoritmu. Zadatak 6. Napisati program koji izgradi binarno stablo traženja upotrebom polja. Broj čvorova stabla nije unaprijed određen nego se zadaje na početku programa. U čvorove binarnog stabla zapisuju se cijeli brojevi dobiveni upotrebom generatora slučajnih brojeva. Napisati funkciju koja prebroji čvorove sa samo jednim djetetom, funkciju koja prebroji čvorove s dvoje djece i funkciju koja odredi minimalnu dubinu binarnog stabla. Ispisati stablo u inorder algoritmu. Zadatak 7. Napisati program koji izgradi binarno stablo traženja upotrebom pokazivača (svaki čvor sadrži pokazivače na lijevo i desno dijete čvora). Broj čvorova stabla nije unaprijed određen nego se zadaje na početku programa. U čvorove binarnog stabla zapisuju se cijeli brojevi dobiveni upotrebom generatora slučajnih brojeva. Napisati funkciju koja prebroji čvorove sa samo jednim djetetom, funkciju koja prebroji čvorove s dvoje djece i funkciju koja odredi minimalnu dubinu binarnog stabla. Ispisati stablo u inorder algoritmu. Zadatak 8. Napisati program u kojem se lista cijelih brojeva sortira upotrebom binarnog stabla traženja uzlazno (od najmanjeg prema najvećem elementu) i silazno (od najvećeg prema najmanjem) upotrebom istog binarnog stabla traženja. Lista sadrži cijele brojeve koje daje generator slučajnih brojeva. Broj elemenata liste nije unaprijed određen nego se zadaje na početku programa. Binarno stablo traženja izvesti upotrebom polja, a izvedbu liste izaberite sami (polje ili pokazivači). Ispisati početnu listu i sortiranu listu. Zadatak 9. Napisati program u kojem se lista cijelih brojeva sortira upotrebom binarnog stabla traženja uzlazno (od najmanjeg prema najvećem elementu) i silazno (od najvećeg prema najmanjem) upotrebom istog binarnog stabla traženja. Lista sadrži cijele brojeve koje daje generator slučajnih brojeva. Broj elemenata liste nije unaprijed određen nego se zadaje na početku programa. Binarno stablo traženja izvesti upotrebom pokazivača, a izvedbu liste izaberite sami (polje ili pokazivači). Ispisati početnu listu i sortiranu listu. Zadatak 10. Riješite problem vraćanja novca tako da se uvijek vrati najmanji broj novčanica i napišite odgovarajući program uz pretpostavku da se raspolaže novčanicama od 1000, 500, 200, 100, 50, 20, 10, 5, 2 i 1 kn. Na početku programa se unosi iznos koji treba vratiti, a izlaz programa je ispis vrste i količine novčanica koje se vraćaju. Zadatak 11. Izraditi program za punjenje, brisanje, pretraživanje i ispis dvostruko povezane liste (liste u kojoj svaki čvor sadrži pokazivač na prethodni i sljedeći čvor). Element liste sadržava cijeli broj i niz od 15 znakova. Lista se oblikuje prema cijelom broju (to je ključ), novi element se unosi u listu tako da su cijeli

Page 19: 1. ZADACI - nasport.pmf.ni.ac.rsnasport.pmf.ni.ac.rs/materijali/1263/Razni zadaci.pdf · 1 1. ZADACI 1.1. Linearne strukture 1. Data je jednostruko povezana lista prirodnih brojeva

19

brojevi sortirani uzlazno, a elementi se brišu i pretražuju po vrijednosti cijelog broja. Funkcija za ispis elemenata u listi mora ispisati obje varijable koje čine element: cijeli broj i niz znakova. Zadatak 12. Izraditi program za punjenje, brisanje, pretraživanje i ispis jednostruko povezane liste s dva ključa čiji element sadržava cijeli broj (prvi ključ), realni broj (drugi ključ) i niz od 15 znakova. Dakle, u svaki čvor se upisuju: int varijabla, float varijabla, char duljine 15 varijabla, pokazivač na sljedeći element po int varijabli, pokazivač na sljedeći element po float varijabli. Listu treba složiti po rastućem cijelom broju i rastućem realnom broju (podaci su zapisani samo jednom), element liste se briše i pretražuje po oba ključa, tj. može se pretraživati i brisati element i po vrijednosti int i pofloat varijable. Funkcija za ispis treba ispisivati element sortirane po oba ključa, po int i po float varijabli, te za svaki element mora ispisati sve tri zapisane varijable (int, float char). Zadatak 13. Napraviti program u kojem se od ulaznih podataka koje čine cijeli broj i niz od 10 znakova izgradi hrpa, gdje je ključ za oblikovanje hrpe cijeli broj. Zatim napraviti uzlazno (od najmanjeg prema najvećem elementu) sortiranje podataka prema vrijednosti cijelog broja upotrebom sortiranja pomoću hrpe. Ispisati niz ulaznih podataka i niz podataka nakon sortiranja, gdje je potrebno ispisati obje varijable (int i char) u podatku. Zadatak 14. Napraviti program u kojem generator slučajnih brojeva daje niz cijelih brojeva. Broj generiranih cijelih brojeva ne smije biti unaprijed ograničen nego se zadaje na početku izvršavanja programa. Ulazni niz cijelih brojeva treba sortirati pomoću sortiranja umetanjem (insertion sort), sortiranja spajanjem (merge sort) i brzim sortiranjem (quick sort). Usporediti apriorna vremena izvršavanja ovih algoritama. Usporediti aposteriorna vremena sortiranja ovih algoritama na velikom skupu ulaznih nizova različite duljine i odrediti koji je najefikasniji za kraće nizove do 100 brojeva, a koji za nizove dulje od 10000 brojeva. Zadatak 15. Napraviti program u kojem generator slučajnih brojeva daje niz cijelih brojeva. Broj generiranih cijelih brojeva ne smije biti unaprijed ograničen nego se zadaje na početku izvršavanja programa. Ulazni niz cijelih brojeva treba sortirati pomoću mjehuričastog sortiranja umetanjem (bubble sort), sortiranja hrpom (heap sort) i brzim sortiranjem (quicksort). Usporediti apriorna vremena izvršavanja ovih algoritama. Usporediti aposteriorna vremena sortiranja ovih algoritama na velikom skupu ulaznih nizova različite duljine i odrediti koji je najefikasniji za kraće nizove do 100 brojeva, a koji za nizove dulje od 10000 brojeva. Zadatak 16. Napraviti program u kojem generator slučajnih brojeva daje niz ASCII znakova koji predstavljaju mala i velika slova engleske abecede. Broj generiranih znakova ne smije biti unaprijed ograničen nego se zadaje na početku izvršavanja programa. Ulazni niz slova treba sortirati pomoću sortiranja umetanjem (insertion sort), sortiranja spajanjem (merge sort) i brzim sortiranjem (quick sort). Usporediti apriorna vremena izvršavanja ovih algoritama. Usporediti aposteriorna vremena sortiranja ovih algoritama na velikom skupu ulaznih nizova različite duljine i odrediti koji je najefikasniji za kraće nizove do 100 znakova, a koji za nizove dulje od 10000 znakova. Zadatak 17. Napraviti program u kojem generator slučajnih brojeva daje niz ASCII znakova koji predstavljaju mala i velika slova engleske abecede. Broj generiranih znakova ne smije biti unaprijed ograničen nego se zadaje na početku izvršavanja programa. Ulazni niz slova treba sortirati pomoću mjehuričastog sortiranja (bubble sort), sortiranja hrpom (heap sort) i brzim sortiranjem (quick sort). Usporediti apriorna vremena izvršavanja ovih algoritama. Usporediti aposteriorna vremena sortiranja ovih

Page 20: 1. ZADACI - nasport.pmf.ni.ac.rsnasport.pmf.ni.ac.rs/materijali/1263/Razni zadaci.pdf · 1 1. ZADACI 1.1. Linearne strukture 1. Data je jednostruko povezana lista prirodnih brojeva

20

algoritama na velikom skupu ulaznih nizova različite duljine i odrediti koji je najefikasniji za kraće nizove do 100 znakova, a koji za nizove dulje od 10000 znakova. Zadatak 18. Usporediti aposteriorna vremena izvršavanja punjenja generiranim slučajnim cijelim brojevima jednostruke linearne liste u padajućem nizu za slučajeve izvedbe liste pomoću polja i pomoću pokazivača. Usporediti vremena izvršavanja za kraće nizove (do 50 brojeva) i dugačke znakove (5000 brojeva). Zadatak 19. Napisati program u kojem se napravi lista pomoću pokazivača čiji su elementi cijeli brojevi. Broj elemenata u listi nije unaprijed zadan već se učita na početku izvršavanja programa. Lista se puni pomoću generatora slučajnih brojeva. Napisati funkciju koja će sortirati listu upotrebom algoritma brzog sortiranja (quick sort). Listu treba sortirati uzlazno (od najmanjeg prema najvećem elementu) i silazno (od najvećeg prema najmanjem elementu). Ispisati početnu listu i sortirane liste. Zadatak 20. Napisati program u kojem se napravi lista pomoću polja čiji su elementi cijeli brojevi. Broj elemenata u listi nije unaprijed zadan već se učita na početku izvršavanja programa. Lista se puni pomoću generatora slučajnih brojeva. Napisati funkciju koja će sortirati listu upotrebom algoritma brzog sortiranja (quick sort). Listu treba sortirati uzlazno (od najmanjeg prema najvećem elementu) i silazno (od najvećeg prema najmanjem elementu). Ispisati početnu listu i sortirane liste.

Zadatak 21. Koristeći Eratostenov algoritam napisati program koji će za bilo koji upisani prirodni broj provjeriti da li jeprim broj te ako nije prikazati ga kao umnožak prim brojeva (dakle n = p1*p2*…*pk gdje su pi prim brojevi). Provjeriti da li je takav prikaz jedinstven, tj. da li postoji neki drugi niz prim brojeva qi za koje umnožak q1*q2*…*qj daje n.

Zadatak 22. Napraviti program u kojem se oblikuje linearna jednostuko povezana lista upotrebom pokazivača u čije su čvorove upisani: cijeli broj, niz od 15 znakova i realni broj. Lista je poredana uzlazno prema vrijednosti cijelog broja.Napisati funkciju za pronalaženje i ispis člana liste sa zadanim cijelim brojem. Ulazni argumenti su glava liste i cijeli broj,a funkcija treba ispisati sve tri varijable zapisane u čvoru (int, char i float). Funkcija vraća rezultat 0 ako cijeli broj nijenađen, a 1 ako jest. Zadatak 23. Napisati funkcije za dodavanje i skidanje elementa u stog realiziran poljem. Maksimalan broj zapisa nije unaprijed određen nego se zadaje na početku programa. U glavnom programu izvesti učitavanje podataka za element stoga kao i ispisivanje elementa stoga koji je skinut (npr. unijeti nekoliko elemenata u stog, a zatim skinuti i ispisati svaki element sve dok stog ne ostane prazan). Element stoga čine: cijeli broj (int), niz znakova duljine 20 (char), realni broj (float) i kratki cijeli broj (short). Zadatak 24. Napisati funkcije za dodavanje i skidanje elementa u stog realiziran pokazivačima. Maksimalan broj zapisa nije unaprijed određen nego se zadaje na početku programa. U glavnom programu izvesti učitavanje podataka za element stoga kao i ispisivanje elementa stoga koji je skinut (npr. unijeti nekoliko elemenata u stog, a zatim skinuti i ispisati svaki element sve dok stog ne ostane prazan). Element stoga čine: cijeli broj (int), niz znakova duljine 20 (char), realni broj (float) i niz znakova duljine 15 (char). Zadatak 25. Napraviti program koji će u memoriji oblikovati linearnu listu upotrebom pokazivača. U pojedini čvor liste seupisuje: cijeli broj, niz znakova duljine 30, kratki cijeli broj, realni broj i pokazivač na sljedeći čvor. Napisati funkciju koja će iz liste ispisati sve zapise koji sadrže neku zadanu vrijednost kratkog cijelog broja. Napisati funkciju koja će izračunati prosječnu vrijednost realnog broja u svim čvorovima.

Page 21: 1. ZADACI - nasport.pmf.ni.ac.rsnasport.pmf.ni.ac.rs/materijali/1263/Razni zadaci.pdf · 1 1. ZADACI 1.1. Linearne strukture 1. Data je jednostruko povezana lista prirodnih brojeva

21

Zadatak 26. Napraviti program u kojem se red realizira upotrebom pokazivača. Svaki element reda sadrži cijeli broj, realni broj i niz od 15 znakova. Treba napisati funkciju koja dodaje i funkciju koja briše element iz reda, te funkciju za ispis elementa na kojem se obavlja operacija. Ako je operacija uspjela, funkcija vraća vrijednost 1, a ako nije, vraća 0. Zadatak 27. Napraviti program u kojem se red ostvaruje upotrebom cirkularnog polja. Svaki element reda sadržava cijeli broj i niz znakova duljine 5. Napisati funkciju koja dodaju element u red, funkciju koja briše element iz reda te funkciju za ispis elementa na kojem se obavlja operacija. Ako je operacija uspjela, funkcija vraća vrijednost 1, a ako nije, vraća 0. Zadatak 28. Napraviti program u kojem se od ulaznih podataka koje čine cijeli broj i niz od 10 znakova izgradi hrpa, gdje je ključ za oblikovanje hrpe cijeli broj. Zatim napraviti silazno (od najvećeg prema najmanjem elementu) sortiranje podataka prema vrijednosti cijelog broja upotrebom sortiranja pomoću hrpe. Ispisati niz ulaznih podataka i niz podataka nakon sortiranja, gdje je potrebno ispisati obje varijable (int i char) u podatku. Zadatak 29. Napisati funkciju za punjenje binarnog stabla traženja u čije čvorove treba upisati: cijeli broj, realni broj i nizod 15 znakova. Stablo treba sortirati po cijelom broju; lijevo manji, desno veći. Sami izaberite izvedbu binarnog stabla traženja (polje ili pokazivači). Napisati funkciju za ispis elemenata za koju je ulazni argument korijen stabla, a ispis trebabiti poredan po vrijednosti cijelog broja od najmanjeg do najvećeg. Napisati funkciju koja ispiše sve elemente binarnog stabla za koje je realni broj manji od neke određene vrijednosti koja se unese u glavnoj funkciji programa tijekom izvršavanja, te funkciju koja ispiše sve elemente binarnog stabla za koje niz znakova počinje nekim određenim slovom koje se zadaje tijekom izvršavanja programa. Zadatak 30. U memoriji napraviti binarno stablo traženja u čije čvorove se upisuju 2 podatka: prvi tipa int i drugi tipafloat. Sami izaberite izvedbu binarnog stabla traženja (polje ili pokazivači). Stablo se sortira prema cjelobrojnom podatku (lijevo manji, desno veći). Ispisati stablo po algoritmu INORDER. Napisati funkcije MIN() i MAX(), čiji su ulazni argument korijen stabla, koje u najmanjem mogućem broju koraka moraju naći i ispisati zapise koji odgovaraju najmanjoj i najvećoj cjelobrojnoj vrijednosti (nije dopušteno pročitati zapise u svim čvorovima). U programu zatim izbrisati čvorove koji odgovaraju tim zapisima te ispisati tako nastalo stablo u INORDER algoritmu. Napisati funkciju koja izračuna i ispiše prosječnu vrijednost varijable tipa float u stablu. Zadatak 31. Napisati program koji će iz datoteke pročitati imena i prezimena studenata i upisati ih po abecedi (po prezimenima) u listu čiji su elementi oblika ime (20 znakova), prezime (20 znakova). Broj studenata nije unaprijed zadan nego ovisi o broju zapisa u ulaznoj datoteci. Elemente te liste treba prekopirati i složiti u red upotrebom generatora slučajnih brojeva (npr. prvi generirani broj je 13, tada je prvi element reda student koji je na poziciji 13 u listi, pa drugi generirani broj 7 daje da je drugi student u redu onaj koji je 7 u listi itd) tako da se svaki student pojavljuje na samo jednom mjestu u redu. Elementi reda su oblika ime (20 znakova), prezime (20 znakova), zadatak (short). Vrijednost varijable zadatak (kratki cijeli broj) za svaki element reda mora biti od 1 do N (N se zadaje tijekom izvođenja programa i ne smije biti unaprijed zadan) i treba ju upisati (svaki broj samo jednom, bez ponavljanja istih brojeva) u red također koristeći generator slučajnih brojeva (npr. ako je prvi generirani broj 17 tada taj broj ide uz studenta koji je prvi u reduitd). Tako dobiven red treba ispisati u obliku: ime, prezime, zadatak.

Page 22: 1. ZADACI - nasport.pmf.ni.ac.rsnasport.pmf.ni.ac.rs/materijali/1263/Razni zadaci.pdf · 1 1. ZADACI 1.1. Linearne strukture 1. Data je jednostruko povezana lista prirodnih brojeva

22

Zadatak 32. Napraviti program koji će veliki broj puta (recimo milijun ili više) generiranjem slučajnih brojeva (koji odgovaraju broju točkica na kockama, dakle od 1 do 6) simulirati bacanje šest jednakih kockica. Iz dobivenih rezultata odrediti vjerojatnost da točno četiri kockice padnu tako da pokazuju isti broj točkica (znači da imamo četiri jedinice ili četiri dvojke ili … četiri šestice). Usporediti dobiveni rezultat s rezultatom koji daje teorija vjerojatnosti. Zadatak 33. Napraviti program u kojem će se simulirati izvlačenje šest igraćih karata iz špila od 52 karte (boje karata su pik, kara, srce i tref, vrijednosti 2, 3, 4, 5, 6, 7, 8, 9, 10, dečko, dama, kralj i as). Simuliranjem izvlačenja karata za veliki broj pokušaja (recimo milijun) odrediti vjerojatnost da od šest izvučenih karata četiri imaju istu vrijednost (dakle da se izvuku četiri asa, četiri kralja , … četiri dvojke). Usporediti dobiveni rezultat s rezultatom koji daje teorija vjerojatnosti. Zadatak 34. Napraviti program u kojem generator slučajnih brojeva daje niz ASCII znakova koji odgovaraju malim i velikim slovima engleske abecede. Duljina niza znakova nije unaprijed određena nego se zadaje na početku izvršavanja programa. Dobiveni niz znakova treba sortirati uzlazno upotrebom mjehuričastog sortiranja (bubble sort). Napisati funkciju koja algoritmom binarnog pretraživanja pronalazi da li se i na kojem mjestu u nizu nalazi zadano slovo. Također napisati funkciju koja to isto radi algoritmom linearnog pretraživanja. Usporediti aposteriorna vremena izvršavanja pretraživanja sortiranog niza znakova za linearno i binarno pretraživanje. Također usporediti aposteriorna vremena izvršavanja linearnog pretraživanja nesortiranog niza znakova s vremenom potrebnim za sortiranje mjehuričastim sortom i binarnim pretraživanjem sortiranog niza. Zadatak 35. Na predavanjima smo obrađivali apstraktni tip podataka RJEČNIK i prikazali ga kao podvrstu apstraktnog tipa podataka SKUP za koji su definirane samo četiri osnovne operacije: MAKE_NULL(), INSERT(), DELETE() i MEMBER(). Pokazali smo njegovu izvedbu pomoću binarnog stabla traženja gdje je binarno stablo izvedeno pomoću pokazivača. Napisati funkcije za gornje četiri operacije kada je element rječnika niz znakova duljine 30. Broj elemenata u rječniku nije unaprijed određen nego se zadaje na početku izvršavanja programa ovisno o broju podataka koji se unose u rječnik učitavanjem iz ulazne datoteke. Ti podaci se mogu mijenjati brisanjem postojećih i ubacivanjem novih nizova znakova. Na kraju izvršavanja programa treba sve podatke pospremiti u novu izlaznu datoteku. Zadatak 36. Na predavanjima smo obrađivali apstraktni tip podataka PRIORITETNI RED za koji su definirane četiri osnovne operacije: MAKE_NULL(), EMPTY(), INSERT(), DELETE_MIN() i pokazali kako se može izvesti pomoću hrpe. Napisati funkcije za gornje četiri operacije kada se element prioritetnog reda sastoji od cijelog broja koji označava prioritet (veći broj znači veći prioritet) i niza znakova duljine 10. Broj elemenata u prioritetnom redu nije unaprijed određen nego ovisi o broju podataka koji se učitavaju iz ulazne datoteke. Napisati funkciju MEMBER() koja određuje da li se neki niz znakova nalazi u prioritetnom redu i ako da koji je prioritet tog elementa, a ukoliko se zadani niz ne nalazi u prioritetnom redu treba o tome obavijestiti. Zadatak 37. Na predavanjima smo pokazali tri različita algoritma za računanje vrijednosti polinoma u zadanoj točci (najjednostavnijom upotrebom matematičke definicije polinoma, poboljšanim algoritmom koji posprema međurezultate potenciranja i Hornerov algoritam). Napisati funkcije koje računaju vrijednost polinoma za svaki od ovih algoritama. Red polinoma (maksimalna potencija x-a) i koeficijenti polinoma se unose na početku izvršavanja programa. Usporediti aposteriorna vremena izvršavanja ova tri algoritma na velikom skupu ulaznih podataka koji predstavljaju polinome različite duljine i odrediti kolika je

Page 23: 1. ZADACI - nasport.pmf.ni.ac.rsnasport.pmf.ni.ac.rs/materijali/1263/Razni zadaci.pdf · 1 1. ZADACI 1.1. Linearne strukture 1. Data je jednostruko povezana lista prirodnih brojeva

23

ušteda na vremenu izvršavanja Hornerovog algoritma prema ostala dva algoritma za različite duljine polinoma. Zadatak 38. Napisati program u kojem se napravi lista pomoću pokazivača čiji su elementi cijeli brojevi. Broj elemenata u listi nije unaprijed zadan već se učita na početku izvršavanja programa. Lista se puni pomoću generatora slučajnih brojeva. Napisati funkciju koja će sortirati listu upotrebom algoritma sortiranja umetanjem (insertion sort) i funkciju koja će sortirati upotrebom mjehuričastog sortiranja (bubble sort). Listu treba sortirati uzlazno (od najmanjeg prema najvećem elementu) i silazno (od najvećeg prema najmanjem elementu). Ispisati početnu listu i sortirane liste. Zadatak 39. Napisati program u kojem se napravi lista pomoću polja čiji su elementi cijeli brojevi. Broj elemenata u listi nije unaprijed zadan već se učita na početku izvršavanja programa. Lista se puni pomoću generatora slučajnih brojeva. Napisati funkciju koja će sortirati listu upotrebom algoritma sortiranja umetanjem (insertion sort) i funkciju koja će sortirati upotrebom mjehuričastog sortiranja (bubble sort). Listu treba sortirati uzlazno (od najmanjeg prema najvećem elementu) i silazno (od najvećeg prema najmanjem elementu). Ispisati početnu listu i sortirane liste. Zadatak 40. Napraviti program u kojem se od ulaznih podataka koje čine niz od 10 znakova i realni broj izgradi hrpa, gdje je ključ za oblikovanje hrpe niz znakova (slaganje po abecedi). Zatim napraviti uzlazno (od najmanjeg prema najvećem elementu) sortiranje podataka upotrebom sortiranja pomoću hrpe. Ispisati niz ulaznih podataka i niz podataka nakon sortiranja, gdje je potrebno ispisati obje varijable (char i float) u podatku.