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