18.01.2015 Views

PDF dokument koji pokriva kompletno gradivo koje se ... - Glavna

PDF dokument koji pokriva kompletno gradivo koje se ... - Glavna

PDF dokument koji pokriva kompletno gradivo koje se ... - Glavna

SHOW MORE
SHOW LESS

Create successful ePaper yourself

Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.

Elektrotehnički fakultet Univerziteta u Beogradu Programiranje 1<br />

U postavci zadatka nije naznačeno, pa <strong>se</strong> – kao razumna pretpostavka – uzima da je najveća dužina<br />

niza <strong>koji</strong> <strong>se</strong> unosi 100 elemenata. Definisan je po<strong>se</strong>ban tip podatka niz za potrebe deklarisanja<br />

promenljivih tipa niza (nizA i nizB).<br />

Ideja za rešenje ovog programskog problema je sledeća: treba analizirati sve uzastopne elemente<br />

niza i brojati koliko uzastopnih elemenata zadovoljava postavljeni kriterijum: traži <strong>se</strong> najduži strogo<br />

rastuće uređen podniz. Drugim rečima, traži <strong>se</strong> podniz kod <strong>koje</strong>g je svaki element veći od<br />

prethodnog. Kad god <strong>se</strong> bude ustanovilo da dati kriterijum nije zadovoljen, treba prekinuti brojanje i<br />

utvrditi da li je novootkriveni (tj. upravo analizirani podniz) duži od prethodno poznatog najdužeg<br />

podniza. Ako jeste, onda novootkriveni podniz treba proglasiti za najduži. U suprotnom treba ga<br />

odbaciti. U postavci zadatka nije precizirano šta treba raditi ako postoji više podnizova iste<br />

(maksimalne) dužine. Zbog toga će u rešenju biti usvojena pretpostavka da prvi takav podniz na <strong>koji</strong><br />

<strong>se</strong> naiđe prilikom obrade treba proglasiti za "pobednika" i njega izdvojiti.<br />

Za potrebe uočavanja traženog podniza u nizu A koristiće <strong>se</strong> dve promenljive: trduz i trind. Njhova<br />

namena je sledeća: trduz označava TRenutnu DUŽinu podniza <strong>koji</strong> <strong>se</strong> analizira, a trind (TRenutni<br />

INDeks) označava indeks u nizu A od <strong>koje</strong>g počinje podniz <strong>koji</strong> <strong>se</strong> analizira. Te dve informacije (gde<br />

počinje podniz i koja je njegova dužina) su dovoljne da bi moglo da <strong>se</strong> izvrši njegovo izdvajanje u<br />

drugi niz. S obzirom na to da traženi podniz može početi od prvog elementa niza A, početna vrednost<br />

za trind treba da bude 1. Takođe, prilikom planiranja treba pretpostaviti da niz A može biti uređen<br />

nerastuće (odnosno naredni element u nizu je jednak ili manji od prethodnog). U tom slučaju ne<br />

postoji podniz dužine dva ili duži <strong>koji</strong> zadovoljava traženi uslov, pa je zbog toga početna vrednost za<br />

trduz postavljena na 1.<br />

Nakon ovog objašnjenja, smisao promenljivih maxduz i maxind je jasna: u njima će <strong>se</strong> pamtiti<br />

dužina najdužeg podniza i indeks u nizu A od <strong>koje</strong>g počinje najduži podniz. Svaki put kada <strong>se</strong> uoči da<br />

traženi poredak nije zadovoljen između dva su<strong>se</strong>dna elementa u nizu A, program proverava da li je<br />

dužina novootkrivenog podniza veća od dužine prethodno poznatog najdužeg podniza. Ako jeste,<br />

program prepisuje vrednosti trduz i trind u maxduz i maxind, respektivno, i time novootkriveni<br />

podniz "proglašava" za najduži podniz. U nastavku, u svakom slučaju (bilo da je novootkriveni podniz<br />

duži od prethodnog najdužeg ili ne) <strong>se</strong> vrednost promenljive trduz postavlja na 1 a vrednost<br />

promenljive trind na indeks elementa niza A <strong>koji</strong> je "prekinuo" traženu <strong>se</strong>kvencu. Time <strong>se</strong> praktično<br />

inicira traženje novog podniza počevši od "prekidnog" elementa, a kao i ranije, pretpostavlja <strong>se</strong> da je<br />

njegova nova dužina 1.<br />

Kada <strong>se</strong> završi FOR ciklus, potrebno je još jednom proveriti da li je novootkriveni podniz duži nego<br />

prethodno otkriven najduži podniz. To je potrebno uraditi u po<strong>se</strong>bnom slučaju kada <strong>se</strong> najduži podniz<br />

nalazi na kraju niza A, odnosno kada je poslednji element podniza ujedno i poslednji element niza A.<br />

Ako je to slučaj, FOR ciklus će doći do poslednjeg elementa niza A, a kako je za njega ispoštovan<br />

traženi poredak, program neće izvršiti granu koja postavlja nove vrednosti za maxind i maxduz. U<br />

slučaju da <strong>se</strong> nakon FOR ciklusa još jednom ne izvrši potrebna provera, stvarni najduži podniz, <strong>koji</strong> <strong>se</strong><br />

nalazi na kraju niza A, bi ostao "neprimećen".<br />

Nakon toga <strong>se</strong> vrši prepisivanje uočenog podniza iz niza A u niz B. Uočeni podniz počinje od onog<br />

elementa niza A <strong>koji</strong> odgovara indeksu zapamćenom u maxind, a dužina tog niza je zapamćena u<br />

maxduz. Zbog toga poslednji element podniza ima indeks maxind+maxduz-1 u nizu A. Slično tome,<br />

elementi <strong>koji</strong> <strong>se</strong> prepisuju u niz B <strong>se</strong> smeštaju počevši od indeksa 1. Kako je ciklus formiran od<br />

brojačke promenljive i koja služi za indeksiranje niza A, odgovarajući indeks niza B <strong>se</strong> dobija<br />

oduzimanjem maxind od tekuće vrednosti promenljive i i dodavanja 1 (da bi prvi element bio pod<br />

indeksom 1).<br />

Materijal za vežbe na tabli i pripremu ispita Strana 50 od 82

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!