2 - vektori

35
UREDJIVANJE VEKTORA 1. ZADATAK: Uredjivanje vektora (Uredjivanje elemenata vektora u neopadajući niz) Načiniti potprogram tipa SUBROUTINE kojim se dati vektor M (m i , i=1, 2, ... , n), od najviše 100 celih brojeva, uredjuje u neopadajući niz. U glavnom programu treba predvideti da se preko tastature unesu: broj elemenata u datom vektoru i vrednosti svih elemenata, pozvati gornji potprogram i štampati: potrebne opisne tekstove, sve unete podatke i dobijeni uredjeni niz brojeva. Posebni podaci: n = 10, M = [ 8 9 2 5 6 4 6 1 3 7 ]. Rešenje: Izbor algoritma: Uredjivanje elemenata vektora može da se ostavari na više različitih načina. Iako svi ovi, medjusobno različiti algoritmi, daju isti konačan rezultat (uredjen niz brojeva), oni nisu ekvivalentni sa gledišta broja i vrste potrebnih računarskih operacija, veličine memorije koju okupiraju i vremena izvršavanja. Jedan od postupaka da se dati skup brojeva M (m i , i=1, 2, ... , n) uredi u neopadajući niz je sledeći: Prvo: Pronadje se najmanji broj u celom skupu i on se postavi na prvo mesto vektora uredjenih brojeva. Sledeće: U preostalom skupu brojeva pronadje se najmanji, koji se postavi na naredno mesto u vektoru uredjenih brojeva. (Ova faza se izvršava sve dok se izmedju dva, na kraju preostala broja, ne pronadje manji i postavi na mesto (n-1) vektora uredjeanih brojeva.) Završno: Poslednji broj predstavlja najveći broj u datom skupu i on se postavlaja kao n-ti elemenat. Predlog: Načinite program prema gornjem algoritmu.

Upload: h1bosnjak

Post on 08-Nov-2014

75 views

Category:

Documents


4 download

DESCRIPTION

Fortran

TRANSCRIPT

Page 1: 2 - VEKTORI

UREDJIVANJE VEKTORA

1. ZADATAK: Uredjivanje vektora (Uredjivanje elemenata vektora u neopadajući niz)Načiniti potprogram tipa SUBROUTINE kojim se dati vektor M (m i, i=1, 2, ... , n), od najviše 100 celih brojeva, uredjuje u neopadajući niz. U glavnom programu treba predvideti da se preko tastature unesu: broj elemenata u datom vektoru i vrednosti svih elemenata, pozvati gornji potprogram i štampati: potrebne opisne tekstove, sve unete podatke i dobijeni uredjeni niz brojeva. Posebni podaci: n = 10, M = [ 8 9 2 5 6 4 6 1 3 7 ].

Rešenje: Izbor algoritma: Uredjivanje elemenata vektora može da se ostavari na više različitih načina. Iako svi ovi, medjusobno različiti algoritmi, daju isti konačan rezultat (uredjen niz brojeva), oni nisu ekvivalentni sa gledišta broja i vrste potrebnih računarskih operacija, veličine memorije koju okupiraju i vremena izvršavanja. Jedan od postupaka da se dati skup brojeva M (mi, i=1, 2, ... , n) uredi u neopadajući niz je sledeći:

Prvo: Pronadje se najmanji broj u celom skupu i on se postavi na prvo mesto vektora uredjenih brojeva. Sledeće: U preostalom skupu brojeva pronadje se najmanji, koji se postavi na naredno mesto u vektoru uredjenih brojeva. (Ova faza se izvršava sve dok se izmedju dva, na kraju preostala broja, ne pronadje manji i postavi na mesto (n-1) vektora uredjeanih brojeva.)Završno: Poslednji broj predstavlja najveći broj u datom skupu i on se postavlaja kao n-ti elemenat.

Predlog: Načinite program prema gornjem algoritmu.

U paksi se najčešće uredjivanje elemenata vektora ostavaruje preuredjivanjem samog vektora. Više postupaka na tom principu izlaže se u nastavku.

1.1. METOD IZBORA

1.1.1. Uredjivanje metodom izbora (engl. Selection Sort)

Algoritam: Kao osnova za poredjenje usvoji se prvi elemenat vektora M. Poredjenje se, načelno, obavlja sa elementima od m2 do mn. Kada se ustanovi da je neki od elemenata m j manji od m1 obavlja se, u okviru vektora M, zamena njihovih mesta i uloga. Poredjenje se zatim nastavlja od elementa (j+1). Na kraju prvog prolaska kroz vektor neuredjenih elemenata na 1. poziciji će se naći najmanji elemenat skupa.

Page 2: 2 - VEKTORI

Sada se kao osnova za poredjenje usvaja 2. elemenat i postupak se ponavlja. U i-tom prolazu se i-ti najmanji elemenat postavlja na i-to mesto. Poredjenje traje sve dok se ne iskoristi (m-1) elemenat kao osnova za poredjenje. Dijagram toka, koji odgovara opisanom postupku, dat je na slici 4.

Slika 4. Standardni dijagrami toka za glavni program i potprogram kod uredjivanja elemenata vektora u neopadajući niz po metodu izbora ***

Na dijagramu je vidljiva potreba korišćenja pomoćne promenljive Z, u kojoj će se privremeno nalaziti vrednost jednog od elemenata (ovde onog sa višim indeksom) koji medjusobno menjaju mesta.

Program: ************************************************************************* Uredjivanje vektora - metod izbora************************************************************************** M – ne/uredjen vektor* N - broj elemenata*PROGRAM IZBOR*INTEGER*2 N, M(100)OPEN(3, FILE='IZBOR. R')*PRINT *, ' KOLIKO IMA ELEMENATA KOJI SE UREDJUJU (N<=100)'READ *, NPRINT *, ' UNESITE ELEMENTE'READ *, (M(I), I=1, N)WRITE (3, *)' UREDJIVANJE VEKTORA - METOD IZBORA'WRITE (3, '(/, A, //, (10I5))')' Neuredjeni podaci:', (M(I), I=1, N)*CALL SELECT(M, N)WRITE (3, '(/, A, //, (10I5))')' Uredjeni podaci:', (M(I), I=1, N)*CLOSE(3)END

SUBROUTINE SELECT(X, L)*INTEGER*2 X(*), L, I, J, Z*DO 2 I=1, L-1DO 1 J=I+1, LIF(X(I) .GT. X(J)) THENZ=X(J)X(J)=X(I)X(I)=ZEND IF1 END DO2 END DO*

Page 3: 2 - VEKTORI

END

Rezultat: UREDJIVANJE VEKTORA - METOD IZBORANeuredjeni podaci:8 9 2 5 6 4 6 1 3 7Uredjeni podaci:1 2 3 4 5 6 6 7 8 9Postupak uredjivanja: 8 9 2 5 6 4 6 1 3 7----------------------------------------------2 9 8 5 6 4 6 1 3 7 medjurezultat 1 9 8 5 6 4 6 2 3 7 rezultat 1. prolaska ----------------------------------------------8 9 5 6 4 6 2 3 7 medjurezultat 5 9 8 6 4 6 2 3 7 medjurezultat 4 9 8 6 5 6 2 3 7 medjurezultat2 9 8 6 5 6 4 3 7 rezultat 2. prolaska ----------------------------------------------8 9 6 5 6 4 3 7 medjurezultat 6 9 8 5 6 4 3 7 medjurezultat 5 9 8 6 6 4 3 7 medjurezultat 4 9 8 6 6 5 3 7 medjurezultat 3 9 8 6 6 5 4 7rezultat 3. prolaska ----------------------------------------------8 9 6 6 5 4 7 medjurezultat 6 9 8 6 5 4 7 medjurezultat 5 9 8 6 6 4 7 medjurezultat 4 9 8 6 6 5 7 rezultat 4. prolaska ----------------------------------------------8 9 6 6 5 7 medjurezultat 6 9 8 6 5 7 medjurezultat 5 9 8 6 6 7 rezultat 5. prolaska ----------------------------------------------8 9 6 6 7 medjurezultat 6 9 8 6 7 rezultat 6. prolaska ----------------------------------------------8 9 6 7 medjurezultat 6 9 8 7 rezultat 7. prolaska ----------------------------------------------8 9 7 medjurezultat 7 9 8 rezultat 8. prolaska ----------------------------------------------8 9 rezultat 9. prolaska ----------------------------------------------1 2 3 4 5 6 6 7 8 9

1.1.2. Uredjivanje ubrzanim metodom izbora (engl. Selection Sort With Reduced Swap)

Program: ************************************************************************

Page 4: 2 - VEKTORI

* Uredjivanje vektora - ubrzani metod izbora************************************************************************** M - ne/uredjen vektor* N - broj elemenata*PROGRAM UBRZAN*INTEGER*2 N, M(100)OPEN(3, FILE='UBRZAN. R')*PRINT *, ' KOLIKO IMA ELEMENATA KOJI SE UREDJUJU (N<=100)'READ *, NPRINT *, ' UNESITE ELEMENTE'READ *, (M(I), I=1, N)WRITE (3, *)' UREDJIVANJE VEKTORA - UBRZANI METOD IZBORA'WRITE (3, '(/, A, //, (10I5))')' Neuredjeni podaci:', (M(I), I=1, N)*CALL SELEKT(M, N)WRITE (3, '(/, A, //, (10I5))')' Uredjeni podaci:', (M(I), I=1, N)*CLOSE(3)END

SUBROUTINE SELEKT(X, L)*INTEGER*2 X(*), L, I, J, K, Z*I=1DO WHILE(I .LT. L)K=IJ=I+1DO WHILE(J .LE. L)IF(X(K) .GT. X(J)) K=JJ=J+1END DOIF(K .GT. I) THENZ=X(I)X(I)=X(K)X(K)=ZEND IFI=I+1END DO*END

Rezultat: UREDJIVANJE VEKTORA - UBRZANI METOD IZBORANeuredjeni podaci:8 9 2 5 6 4 6 1 3 7Uredjeni podaci:

Page 5: 2 - VEKTORI

1 2 3 4 5 6 6 7 8 9Postupak uredjivanja: 8 9 2 5 6 4 6 1 3 7----------------------------------------------1 9 2 5 6 4 6 8 3 72 9 5 6 4 6 8 3 73 5 6 4 6 8 9 74 6 5 6 8 9 75 6 6 8 9 76 6 8 9 76 8 9 77 9 88 9----------------------------------------------1 2 3 4 5 6 6 7 8 9

1.2. METOD ZAMENE 1.2.1. Uredjivanje metodom mehurića (engl. Bubble Sort) (Jednosmerna zamena suseda)

Algoritam: Pri uredjivanju vektora metodom mehurića susedni brojevi, u nizu, menjaju mesta, ukoliko njihove veličine nisu rasporedjene u traženom (u našem primeru neopadajućem) poretku. Uredjivanje počinje time što se prvi elemenat poredi sa drugim. Ukoliko se elementi ne nalaze u /eljenom poretku (a to znači ako prvi nije manji ili jednak drugom), zamene im se mesta (drugi elemenat postaje prvi, a prvi postaje drugi). Drugi elemenat se, zatim, poredi sa trećim. Ovaj postupak se ponavlja za svaki susedni par vrednosti, do kraja vektora. Posle prvog prolaska najveća vrednost će se naći u elementu vektora sa najvišim indeksom. (Upravo, osnovna ideja ovog pristupa i sastoji se u tome da najveća vrednost ispliva na povšinu.) Kod ovog metoda vektor se pregleda sve dok svi neophodni parovi elemenata vektora ne budu medjusobno uporedjeni i, po potrebi, zamenili mesta.

Program: U cilju izrade programa za rešavanje ovog zadatka podjimo od, očigledno, neizostavnih obaveza, koje se same nameću: ***

Učitati elemente vektoraOdštampati učitane elemente vektoraUrediti po neopadajućem poretkuOdštampati uredjen vektor

Analizirajući navedeni kostur rešenja vidimo da je neophodno detaljnije razraditi fazu urediti: ***

K = broj elemenata vektora - 1IZVRŠAVATI CIKLUS SVE DOK JE K >= 1Premestiti najveću vrednost u poslednji elemenat vektoraSmanjiti K za 1KRAJ CIKLUSA

Page 6: 2 - VEKTORI

Sada obradimo etapu premestiti: ***

Dodeliti 1 indeksu nižeg elementa poredbenog para (J) IZVRŠAVATI CIKLUS SVE DOK JE J <= KUporediti sledeći par i zameniti im mesta (ukoliko je potrebno)Uvećati J za 1KRAJ CIKLUSA

Na kraju, obradimo uporediti i zameniti: *** AKO JE (J)-ti elemenat vektora > (J+1)-og elementa vektoraPomoćna promenljiva = (J)-tom elementu vektora(J)-ti elemenat vektora = (J+1)-om elementu vektora(J+1)-vi elemenat vektora = Pomo'na promenljivaKRAJ USLOVA

Objedinjavanjem ovih razvojnih koraka dobijamo završno rešenje zadatka: ***

Učitati elemente vektoraOdštampati učitane elemente vektoraK = broj elemenata vektora - 1IZVRŠAVATI CIKLUS SVE DOK JE K >= 1Dodeliti 1 indeksu nižeg elementa poredbenog para (J)IZVRŠAVATI CIKLUS SVE DOK JE J <= KAKO JE (J)-ti elemenat vektora > (J+1)-og elementa vektoraPomoćna promenljiva = (J)-tom elementu vektora(J)-ti elemenat vektora = (J+1)-om elementu vektora(J+1)-vi elemenat vektora = Pomo'na promenljivaKRAJ USLOVAUvećati J za 1KRAJ CIKLUSASmanjiti K za 1KRAJ CIKLUSAOdštampati uredjen vektor

Sledeći program predstavlja rešenje ovog zadatka na izloženi način.

************************************************************************* Uredjivanje vektora - metod mehurica * (jednosmerna zamena suseda) ************************************************************************** M - ne/uredjen vektor* N - broj elemenata*PROGRAM MEHUR1*INTEGER*2 N, M(100)OPEN(3, FILE='MEHUR1.R')*PRINT *, ' KOLIKO IMA ELEMENATA KOJI SE UREDJUJU (N<=100)'READ *, N

Page 7: 2 - VEKTORI

PRINT *, ' UNESITE ELEMENTE'READ *, (M(I), I=1, N)WRITE (3, *)' UREDJIVANJE VEKTORA - METOD MEHURICA'WRITE (3, *)' ( jednosmerna zamena suseda )'WRITE (3, '(/, A, //, (10I5))')' Neuredjeni podaci:', (M(I), I=1, N)*CALL BUBBLE(M, N)WRITE (3, '(/, A, //, (10I5))')' Uredjeni podaci:', (M(I), I=1, N)*CLOSE(3)END

SUBROUTINE BUBBLE(X, L)*INTEGER*2 X(*), L, J, K, Y*K=L-1DO WHILE (K .GE.1)J=1DO WHILE (J .LE. K)IF(X(J) .GT. X(J+1)) THENY=X(J)X(J)=X(J+1)X(J+1)=YEND IFJ=J+1END DOK=K-1END DOEND

Rezultat:UREDJIVANJE VEKTORA - METOD MEHURICA( jednosmerna zamena suseda )Neuredjeni podaci:8 9 2 5 6 4 6 1 3 7Uredjeni podaci:1 2 3 4 5 6 6 7 8 9Postupak uredjivanja:8 9 2 5 6 4 6 1 3 7----------------------------------------------8 2 5 6 4 6 1 3 7 92 5 6 4 6 1 3 7 82 5 4 6 1 3 62 4 5 1 3 62 4 1 3 52 1 3 41 2----------------------------------------------1 2 3 4 5 6 6 7 8 9

Zapažanje:

Page 8: 2 - VEKTORI

Klasični postupak uredjivanju vektora metodom mehurića nastavlja sa uporedjivanjem susednih članova i u slučaju kada je dobijeni vektor već uredjen. Predlog: U cilju povećanja efikasnosti gornjeg programa poboljšajte ga tako da se ne vrši uporedjivanje susednih članova u slučaju kada je dobijeni vektor već uredjen. (U tu svrhu upotrebite LOGICAL promenljivu, koja će na početku svakog novog prolaza kroz vektor, imati izabranu vrednost, a promeniće je samo ukoliko u prolazu bude zamena mesta. )

1.2.2. Uredjivanje metodom mehurića (engl. Bubble Sort) (Dvosmerna zamena suseda)

Program: ************************************************************************* Uredjivanje vektora - metod mehurica* ( dvosmerna zamena suseda ) *************************************************************************** M - ne/uredjen vektor* N - broj elemenata*PROGRAM MEHUR2*INTEGER*2 N, M(100)OPEN(3, FILE='MEHUR2.R')*PRINT *, ' KOLIKO IMA ELEMENATA KOJI SE UREDJUJU (N<=100)'READ *, NPRINT *, ' UNESITE ELEMENTE'READ *, (M(I), I=1, N)WRITE (3, *)' UREDJIVANJE VEKTORA - METOD MEHURICA'WRITE (3, *)' ( dvosmerna zamena suseda )'WRITE (3, '(/, A, //, (10I5))')' Neuredjeni podaci:', (M(I), I=1, N)*CALL SHUTLE(M, N)WRITE (3, '(/, A, //, (10I5))')' Uredjeni podaci:', (M(I), I=1, N)*CLOSE(3)END

SUBROUTINE SHUTLE(X, L)*INTEGER*2 X(*), L, I, J, K, D, F, Z*K=L-1D=1I=01 F=0J=1DO WHILE(J .LE. K)I=I+DIF(X(I) .GT. X(I+1)) THENZ=X(I+1)X(I+1)=X(I)

Page 9: 2 - VEKTORI

X(I)=ZF=1END IFJ=J+1END DOD=-DK=K-1IF(L*F. NE.0) GOTO 1*END

Rezultat: UREDJIVANJE VEKTORA - METOD MEHURICA( dvosmerna zamena suseda )Neuredjeni podaci:8 9 2 5 6 4 6 1 3 7Uredjeni podaci:1 2 3 4 5 6 6 7 8 9Postupak uredjivanja: 8 9 2 5 6 4 6 1 3 7----------------------------------------------8 2 5 6 4 6 1 3 7 91 8 2 5 6 4 6 3 72 5 6 4 6 3 7 83 5 6 4 65 4 64 5----------------------------------------------1 2 3 4 5 6 6 7 8 9

1.3. METOD UMETANJA 1.3.1. Uredjivanje metodom umetanja (engl. Insertion Sort)

Algoritam: Uredjivanje elemenata vektora metodom umetanja odgovara postupku igrača karata koji ima želju da uredi dobijene karte, tako što uzima uvek po jednu kartu i rasporedjuje je na odgovarajuće mesto u već uredjeni niz. Pretočeno u računarski program to će značiti da se u j-tom prolazu j-ti elemenat vektora umetne na svoje mesto, pri čemu je zatekao uredjen niz od (j-1)-og elementa.

X(1) X(2) ... X(J-1) X(J) X(J+1) ... X(I-1) X(I)

Slika 6. ***

Algoritam metoda umetanja:Korak 1: [Osnovna iteracija]For I = 2 to L do through Korak 4. od; and STOPKorak 2: [Uzimmanje narednog broja]Set Z = X(I); and J = I - 1Korak 3: [Uporedjivanje sa već uredjenim skupom – traženje mesta]WHILE X(J) > Z AND J >= 1 do set X(J+1) = X(J);

Page 10: 2 - VEKTORI

and J = J - 1 od. Korak 4: [Umetanje]Set X(J+1) = Z.

Program: ************************************************************************* Uredjivanje vektora - metod umetanja************************************************************************** M - ne/uredjen vektor* N - broj elemenata*PROGRAM UMET*INTEGER*2 N, M(100)OPEN(3, FILE='UMET. R')*PRINT *, ' KOLIKO IMA ELEMENATA KOJI SE UREDJUJU (N<=100)'READ *, NPRINT *, ' UNESITE ELEMENTE'READ *, (M(I), I=1, N)WRITE (3, *)' UREDJIVANJE VEKTORA - METOD UMETANJA'WRITE (3, '(/, A, //, (10I5))')' Neuredjeni podaci:', (M(I), I=1, N)*CALL INSERT(M, N)WRITE (3, '(/, A, //, (10I5))')' Uredjeni podaci:', (M(I), I=1, N)*CLOSE(3)END

SUBROUTINE INSERT(X, L)*INTEGER*2 X(1), L, I, J, Z*I=2DO WHILE (I .LE. L)Z=X(I)J=I-1DO WHILE(X(J) .GT. Z. AND. J .GE.1)X(J+1)=X(J)J=J-1END DOX(J+1)=ZI=I+1END DO*END

Rezultat: UREDJIVANJE VEKTORA - METOD UMETANJANeuredjeni podaci:8 9 2 5 6 4 6 1 3 7

Page 11: 2 - VEKTORI

Uredjeni podaci:1 2 3 4 5 6 6 7 8 9

Postupak uredjivanja:Neuredjen niz: 8 9 2 5 6 4 6 1 3 7 ---------------------------------------------- 8 9 2 5 6 4 6 1 3 7 8 9 2 5 6 4 6 1 3 7 2 8 9 5 6 4 6 1 3 7 2 5 8 9 6 4 6 1 3 7 2 5 6 8 9 4 6 1 3 7 2 4 5 6 8 9 6 1 3 7 2 4 5 6 6 8 9 1 3 7 1 2 4 5 6 6 8 9 3 7 1 2 3 4 5 6 6 8 9 7 1 2 3 4 5 6 6 7 8 9----------------------------------------------Uredjen niz: 1 2 3 4 5 6 6 7 8 9

1.3.2. Uredjivanje sa promenljivim korakom (engl. Shell Sort)

Algoritam: Uredjivanje sa promenljivim korakom (koji se smanjuje), predstavlja uopštavanje metoda umetanja u cilju bržeg pomeranja elemenata vektora ka njihovim konačnim pozicijama. Pri uredjivanju L brojeva prvo se odredi veličina koraka J *** k+12 - 1J = ----------2pri čemu je *** k k+12 < L < 2.

Kroz vektor se prolazi odredjenim korakom J sve dok se ne urede elementi koji su medjusobno udaljeni za veličinu koraka. Posle toga se veličina koraka smanjuje na iznos *** J - 1int -------. Đ- 2Poslednja vrednost za J je 1, što predstavlja klasičnan metod umetanja (ali je u tom trenutku vektor već u velikoj meri uredjen).

Program: ************************************************************************* Uredjivanje vektora sa promenljivim korakom *************************************************************************** M - ne/uredjen vektor* N - broj elemenata*PROGRAM PKORAK*INTEGER*2 N, M(100)

Page 12: 2 - VEKTORI

OPEN(3, FILE='PKORAK. R')*PRINT *, ' KOLIKO IMA ELEMENATA KOJI SE UREDJUJU (N<=100)'READ *, NPRINT *, ' UNESITE ELEMENTE'READ *, (M(I), I=1, N)WRITE (3, *)' UREDJIVANJE VEKTORA SA PROMENLJIVIM KORAKOM'WRITE (3, '(/, A, //, (10I5))')' Neuredjeni podaci:', (M(I), I=1, N)*CALL SHELL(M, N)WRITE (3, '(/, A, //, (10I5))')' Uredjeni podaci:', (M(I), I=1, N)*CLOSE(3)END

SUBROUTINE SHELL(X, L)*INTEGER*2 X(*), L, I, J, K, H, ZLOGICAL*2 F*J=1DO WHILE(J .LE. L)J=J+JEND DO1 J=(J-1)/2IF(J. ENJ.0) RETURNK=L-J2 F=. FALSE. DO 3 I=1, KH=I+JIF(X(I) .GT. X(H)) THENZ=X(H)X(H)=X(I)X(I)=ZF=. TRUE. END IF3 END DOIF(F) GOTO 2GOTO 1*END

Rezultat: UREDJIVANJE VEKTORA SA PROMENLJIVIM KORAKOMNeuredjeni podaci: 8 9 2 5 6 4 6 1 3 7Uredjeni podaci: 1 2 3 4 5 6 6 7 8 9Postupak uredjivanja: 8 9 2 5 6 4 6 1 3 7------------------------------------- 1 8 *veličina koraka J=73 9 *82 3 *

Page 13: 2 - VEKTORI

4 6 27 9 *veličina koraka J=14 5 27 8 *8 ------------------------------------- 1 2 3 4 5 6 6 7 8 9

1.4. Metod brzog uredjivanja elemenata vektora (engl. Quick Sort)

Algoritam: Niz se podeli na dva podniza tako, da u prvom podnizu budu elementi koji su manji ili jednaki od elemenata drugog podniza. Izaberimo jedan od krajnjih elemenata u svojstvu razdeonog elementa. Neka je to, na primer, levi. Poredjenje počnimo sa desne strane, (dakle, krećući se u levo, prema razdeonom elementu), ostavljajući na svojim mestima sve one elemente koji nisu manji od razdeonog elementa. Ukoliko je poredbeni elemenat manji od razdeonog elementa obavljamo razmenu mesta elemenata poredbenog para. Sada proces nastavljamo poredjenjem elemenata s leve strane (kerećući se u desno, a kao i pre, prema razdeonom elementu), ostavljajući na svojim mestima sve one elemente koji nisu veći od razdeonog elementa. Ukoliko je poredbeni elemenat veći od razdeonog elementa obavljamo razmenu mesta elemenata poredbenog para. Primetimo, da svaki put, kada menjamo mesta elementima, manji se premešta levo od razdeonog elementa, a veći desno od njega. Ovaj postupak nastavljamo sve dok se svi elementi ne podele u dva podniza: elementi manji ili jednaki razdeonom elementu i elementi veći ili jednaki njemu. Uočimo, da ta dva podniza ne moraju biti uredjena. Sada se ova dva podniza nezavisno uredjuju, (što rekurzivno vodi do nove podele). Uz to i jedan i drugi skup su manji od polaznog.

Program: ************************************************************************* Metod brzog uredjivanja vektora************************************************************************** M - ne/uredjen vektor* N - broj elemenata*PROGRAM BRZI*INTEGER*2 N, M(100)OPEN(3, FILE='BRZI. R')*PRINT *, ' KOLIKO IMA ELEMENATA KOJI SE UREDJUJU (N<=100)'READ *, NPRINT *, ' UNESITE ELEMENTE'READ *, (M(I), I=1, N)WRITE (3, *)' UREDJIVANJE VEKTORA - BRZO UREDJIVANJE'WRITE (3, '(/, A, //, (10I5))')' Neuredjeni podaci:', (M(I), I=1, N)*CALL NJUICK(M, N)WRITE (3, '(/, A, //, (10I5))')' Uredjeni podaci:', (M(I), I=1, N)

Page 14: 2 - VEKTORI

*CLOSE(3)END

SUBROUTINE NJUICK(X, N)*INTEGER*2 X(*), L(100), D(100), I, J, K, M, N, II, JJ, Z*II=1JJ=NK=01 I=IIJ=JJM=-12 IF(X(I) .GT. X(J)) THENZ=X(I)X(I)=X(J)X(J)=ZM=-MEND IFIF(M. ENJ.1) THENI=I+1ELSEJ=J-1END IFIF(I .LT. J) GOTO 2IF(I+1 .LT. JJ) THENK=K+1L(K)=I+1D(K)=JJEND IFJJ=I-1IF(II .LT. JJ) GOTO 1IF(K .GT.0) THENII=L(K)JJ=D(K)K=K-1GOTO 1END IF*END

Rezultat: UREDJIVANJE VEKTORA - BRZO UREDJIVANJENeuredjeni podaci: 8 9 2 5 6 4 6 1 3 7Uredjeni podaci: 1 2 3 4 5 6 6 7 8 9Postupak uredjivanja: 8 9 2 5 6 4 6 1 3 7----------------------------------------------7 9 2 5 6 4 6 1 3 87 8 2 5 6 4 6 1 3 9

Page 15: 2 - VEKTORI

7 3 2 5 6 4 6 1 (8) (9)(1) 3 2 5 6 4 (6) (7) (2) (3) 5 6 4 (4) 6 5 (5) (6) ----------------------------------------------1 2 3 4 5 6 6 7 8 9

2. ZADATAK: Rotacija vektora

Dat je vektor M (mi, i=1, 2, ... , n), od najviše 100 celih brojeva. Načiniti potprogram tipa SUBROUTINE kojim se dati vektor uredjuje u neopadajući niz, a potom načiniti drugi potprogram tipa SUBROUTINE kojim se tako uredjen vektor preuredjuje u nerastući niz. U glavnom programu treba predvideti da se preko tastature unesu: broj elemenata u datom vektoru i vrednosti svih elemenata, pozvati gornje potprograme i štampati: potrebne opisne tekstove, sve unete podatke i dobijeni uredjeni niz brojeva. Posebni podaci: n = 10, M = [ 8 9 2 5 6 4 6 1 3 7 ].

Rešenje: S obzirom da se u svojstvu prvog potprograma može primeniti bilo koji od ranije izloženih potprograma za uredjivanje vektora u neopadajući niz, ovde se daje samo rešenje drugog potprograma tipa SUBROUTINE, koji vrši rotaciju uredjenog vektora oko simetrale vektora, kojom prva komponenta postaje poslednja, druga pretposlednja, itd.

Potprogram: SUBROUTINE REVERS(X, L)*INTEGER*2 X(*), L, I, J, Z*DO 1 I=1, L/2J=L+1-IZ=X(I)X(I)=X(J)X(J)=Z1 END DO*END

Rezultat: ROTACIJA VEKTORA OKO SIMETRALENeuredjeni podaci: 8 9 2 5 6 4 6 1 3 7Uredjeni podaci: 1 2 3 4 5 6 6 7 8 9Rotirani podaci:9 8 7 6 6 5 4 3 2 1

3. ZADATAK: Uredjivanje vektora sa uklanjanjem medjusobno jednakih i nultih elemenata

Page 16: 2 - VEKTORI

Dat je vektor M (mi, i=1, 2, ... , n), od najviše 100 celih brojeva. Načiniti potprogram tipa SUBROUTINE kojim se dati vektor uredjuje u neopadajući niz, a potom načiniti drugi potprogram tipa SUBROUTINE koji iz uredjenog vektora uklanja medjusobno jednake i nulte elemente. U glavnom programu treba predvideti da se preko tastature unesu: broj elemenata u datom vektoru i vrednosti svih elemenata, pozvati gornje potprograme i štampati: potrebne opisne tekstove, sve unete podatke i dobijeni uredjeni niz brojeva. Posebni podaci: n = 10, M = [ -5 2 3 0 -5 1 0 6 6 4 ].

Rešenje: S obzirom da se u svojstvu prvog potprograma može primeniti bilo koji od ranije izloženih potprograma za uredjivanje vektora u neopadajući niz, ovde se daje samo rešenje drugog potprograma tipa SUBROUTINE, koji iz uredjenog vektora uklanja medjusobno jednake i nulte elemente.

Potprogram:

SUBROUTINE REDUK(X, L)*INTEGER*2 X(*), I, J, L*I=1DO WHILE(X(I). ENJ.0)I=I+1END DOJ=1X(J)=X(I)*I=I+1DO WHILE(I .LE. L)IF(X(I). NE.0) THENIF(X(I). NE. X(I-1)) THENJ=J+1X(J)=X(I)END IFEND IFI=I+1END DOL=J*END

Rezultat: UREDJIVANJE VEKTORA SA UKLANJANJEM MEDJUSOBNO JEDNAKIH I NULTIH ELEMENATANeuredjeni podaci: -5 2 3 0 -5 1 0 6 6 4Uredjeni podaci: -5 -5 0 0 1 2 3 4 6 6Redukovani podaci: -5 1 2 3 4 6

4. ZADATAK: Uredjivanje dvocifrenih prirodnih brojeva

Page 17: 2 - VEKTORI

Načiniti program kojim se dati vektor M, nepoznate dužine (nula označava kraj niza), čiji elementi predstavljaju dvocifrene prirodne brojeve, uredjuje u neopadajući niz. U programu treba predvideti da se preko tastature unesu vrednosti elemenata vektora i nula (koja označava kraj niza), zatim obaviti traženo uredjivanje i štampati: potrebne opisne tekstove, sve unete podatke i dobijeni uredjeni niz brojeva. Posebni podaci: M = [ 24 13 18 25 15 30 ].

REŠENJE: Algoritam: Jedan od postupaka da se dati skup dvocifrenih prirodnih brojeva M uredi je da se ustanovi broj pojavljivanja svakog člana u nizu.

Program: ************************************************************************* Uredjivanje dvocifrenih prirodnih brojeva ************************************************************************** N - elemenat niza* K - brojac*PROGRAM DVOCIF*INTEGER*2 N, K(10:99), I, JOPEN(3, FILE='DVOCIF. R')** postavljanje brojaca na nulu*DATA K/90*0/** stampanje zagavlja*WRITE (3, *)' UREDJIVANJE DVOCIFRENIH'WRITE (3, *)' PRIRODNIH BROJEVA'WRITE (3, '(/, A)')' Neuredjeni podaci:'** unosenje elemenata niza*PRINT *, ' UNESITE DVOCIFRENI PRIRODNI BROJ (0 = kraj)'1 READ *, NIF(N .GT.0) THENK(N)=K(N)+1WRITE (3, '(TR11, I3)') NGOTO 1END IF** stampanje uredjenog niza*WRITE (3, '(/, A)')' Uredjeni podaci:'DO 3 I=10, 99IF(K(I) .GT.0) THENDO 2 J=1, K(I)WRITE (3, '(TR11, I3)') I

Page 18: 2 - VEKTORI

2 END DOEND IF3 END DO*CLOSE(3)END

Rezultat: UREDJIVANJE DVOCIFRENIHPRIRODNIH BROJEVANeuredjeni podaci:241318251530Uredjeni podaci:131518242530

5. ZADATAK: “Fuzija” dva uredjena vektora Načiniti potprogram tipa SUBROUTINE kojim se, u celobrojni rastuće uredjen vektor X (x i, i=1, 2, ... , m), (m < 100), umeću, na odgovarajuća mesta, komponente celobrojnog rastuće uredjenog vektora Y (yi, i=1, 2, ... , n), (n < 100), tako da rezultantni vektor X (xi, i=1, 2, ... , m+n) bude neopadajuće uredjen. U glavnom programu treba predvideti da se preko tastature unesu: broj elemenata u svakom vektoru i vrednosti elemenata, pozvati gornji potprogram i štampati: potrebne opisne tekstove, sve unete podatke i dobijeni uredjeni niz brojeva. Posebni podaci: m = 5, X = [ 1 3 5 7 9 ], n = 4, Y = [ 2 4 6 8 ].

REŠENJE: Algoritam: Odredimo dimenziju vektora X kao najveći mogući iznos zbira (m + n), a to je 200.

Slika 5. Algoritam stapanja vektora ***

Uporedimo poslednja dva elementa uredjenih vektora X i Y. Veći, ili jedan od njih (ukoliko su jednaki), smestimo ma mesto (m + n) rezultantnog vektora X. Sada izvršimo poredjenje pretposlednjeg elementa vektora iz kojeg je prethodno uzet elemenat i poslednjeg elementa drugog vektora, itd. Premeštanjem elemenata po navedenom postupku stići ćemo do kraja jednog od vektora. Ukoliko smo stigli do kraja vektora Y naš zadatak stapanja vektora je završen.

Page 19: 2 - VEKTORI

Ukoliko smo stigli do kraja vektora X ostaje nam da preostale elmente vektora Y samo pretočimo u iste lokacije vektora X.

Program: ************************************************************************* Stapanje elemenata dva uredjena vektora *************************************************************************** X - prvi uredjen vektor* M - broj elemenata vektora X* Y - drugi uredjen vektor* N - broj elemenata vektora Y*PROGRAM STAPA*INTEGER*2 M, X(200), N, Y(100)OPEN(3, FILE='STAPA. R')*PRINT *, ' KOLIKO IMA ELEMENATA VEKTOR X (M<=100)'READ *, MPRINT *, ' UNESITE ELEMENTE'READ *, (X(I), I=1, M)PRINT *, ' KOLIKO IMA ELEMENATA VEKTOR Y (N<=100)'READ *, NPRINT *, ' UNESITE ELEMENTE'READ *, (Y(I), I=1, N)WRITE (3, *)' STAPANJE ELEMENATA DVA UREDJENA VEKTORA'WRITE (3, '(/, A, //, (10I5))')' Vektor X:', (X(I), I=1, M)WRITE (3, '(/, A, //, (10I5))')' Vektor Y:', (Y(I), I=1, N)*CALL FUSION(X, M, Y, N)WRITE (3, '(/, A, //, (10I5))')' Rezultat stapanja:', (X(I), I=1, M)*CLOSE(3)END

SUBROUTINE FUSION(X, M, Y, N)*INTEGER*2 X(*), M, Y(*), N, I, J, K*I=MJ=NK=M+NM=K*DO WHILE(I .GT.0.AND. J .GT.0)IF(X(I) .GT. Y(J)) THENX(K)=X(I)I=I-1ELSEX(K)=Y(J)J=J-1

Page 20: 2 - VEKTORI

END IFK=K-1END DO*IF(J. NE.0) THENK=JDO WHILE(K .GE.1)X(K)=Y(K)K=K-12 END DOEND IF*END

Rezultat: STAPANJE ELEMENATA DVA UREDJENA VEKTORAVektor X: 1 3 5 7 9Vektor Y: 2 4 6 8Rezultat stapanja: 1 2 3 4 5 6 7 8 9

Predlog: Rešite gornji zadatak za slučaj da su pojedinačni vektori X i Y neopadajuće uredjeni, a želimo da rezultantni vektor bude rastuće uredjen (što znači da treba ukloniti medjusobno jednake elemente).

6. ZADATAK: “Fuzija” dva uredjena vektora uz korišćenje trećeg vektoraNačiniti program kojim se učitavaju rastuće uredjeni vektori X (xi, i=1, 2, ... , m) i Y (yi, i=1, 2, ... , n) i njihovom fuzijom formira i štampa neopadajuće uredjen vektor Z (z i, i=1, 2, ... , k) (k=m+n).

7. ZADATAK: Uredjivanje vektora – kup sistem************************************************************************* Uredjivanje vektora - kup sistem ************************************************************************* M - ne/urećen vektor* N - broj elemenataPROGRAM KUP*INTEGER*2 N, M(100)OPEN(3, FILE='KUP. R')*PRINT *, ' KOLIKO IMA ELEMENATA KOJI SE UREDJUJU (N<=100)'READ *, NPRINT *, ' UNESITE ELEMENTE'READ *, (M(I), I=1, N)WRITE (3, *)' UREDJIVANJE VEKTORA - KUP SISTEM'WRITE (3, '(/, A, //, (10I5))')' Neurećeni podaci:', (M(I), I=1, N)*CALL HEAP(M, N)WRITE (3, '(/, A, //, (10I5))')' Urećeni podaci:', (M(I), I=1, N)

Page 21: 2 - VEKTORI

*CLOSE(3)END

SUBROUTINE HEAP(X, N)*INTEGER*2 X(*), N, J, L, M, JJ, LL, Z*J=NM=N/2DO LL=1, ML=M-LL+1CALL PP(J, L, X)END DO*DO JJ=1, N-1J=N-JJZ=X(J+1)X(J+1)=X(1)X(1)=ZCALL PP(J, L, X)END DO*END

SUBROUTINE PP(J, L, X)*INTEGER*2 X(*), I, J, K, L, A*I=LA=X(I)1 K=I+IIF(K .GT. J) THENX(I)=ARETURNEND IFIF(K .LT. J) THENIF(X(K+1) .GT. X(K)) K=K+1END IFIF(A .GE. X(K)) THENX(I)=ARETURNEND IFX(I)=X(K)I=KGOTO 1END

UREDJIVANJE VEKTORA - KUP SISTEMNeuredjeni podaci:8 9 2 5 6 4 6 1 3 7Uredjeni podaci:

Page 22: 2 - VEKTORI

1 2 3 4 5 6 6 7 8 98 9 2 5 6 4 6 1 3 7----------------------------------------------8 9 2 5 7 4 6 1 3 68 9 6 5 7 4 2 1 3 69 8 6 5 7 4 2 1 3 68 7 6 5 6 4 2 1 3 97 6 6 5 3 4 2 1 8 96 5 6 1 3 4 2 7 8 96 5 4 1 3 2 6 7 8 95 3 4 1 2 6 6 7 8 94 3 2 1 5 6 6 7 8 93 1 2 4 5 6 6 7 8 92 1 3 4 5 6 6 7 8 9----------------------------------------------1 2 3 4 5 6 6 7 8 9

8. ZADATAK: Uredjivanje elemenata vektora uz najmanji broj zamena mesta Načiniti potprogram tipa SUBROUTINE kojim se dati vektor M (m i, i=1, 2, ... , n), od najviše 100 medjusobno različitih, brojeva, uredjuje u rastući niz, tako da broj zamena bude minimalan. U glavnom programu treba predvideti da se preko tastature unesu: broj elemenata u datom vektoru i vrednosti svih elemenata, pozvati gornji potprogram i štampati: potrebne opisne tekstove, sve unete podatke i dobijeni uredjeni niz brojeva. Objašnjenje: Pod zamenom se podrazumeva medjusobna izmena mesta dva elementa. Tako u vektoru M = [ 1 5 3 2 4 ] su neophodne dve zamene da se dobije rastuće uredjen niz M = [ 1 2 3 4 5 ]. Posebni podaci: n = 10, M = [ 8 9 2 5 6 4 6 1 3 7 ].

9. ZADATAK: "Testerasto" uredjivanje elemenata vektora Načiniti potprogram tipa SUBROUTINE kojim se dati vektor M (m i, i=1, 2, ... , n), od najviše 100 celih, medjusobno različitih, brojeva, uredjuje u testerasti niz, tako da da važi: m1 < m2 > m3 < ... U glavnom programu treba predvideti da se preko tastature unesu: broj elemenata u datom vektoru i vrednosti svih elemenata, pozvati gornji potprogram i štampati: potrebne opisne tekstove, sve unete podatke i dobijeni testerasti niz brojeva. Posebni podaci: n = 10, M = [ 8 9 2 5 6 4 6 1 3 7 ]. Predlog: Prvo urediti niz u rastući, pa zamenom mesta drugog i tredjeg elementa, četvrtog i petog, itd. dobiti traženi rezultat.

10. ZADATAK: Testerasti podniz Načiniti potprogram tipa SUBROUTINE kojim se izdvaja najduži "testerasti" podniz u datom vektoru M (mi, i=1, 2, ... , n), od najviše 100 celih brojeva. 1. sa zupcima okrenutim na suprotne strane: Mi+1 < Mi+2 > Mi+3 < ... > Mi+k , 2. sa zupcima okrenutim na istu – rastuću stranu: Mi+1 < Mi+2 < Mi+3 < ... < Mi+k, 3. sa zupcima okrenutim na istu - opadajuću stranu: Mi+1 > Mi+2 > Mi+3 > ... > Mi+k.

Page 23: 2 - VEKTORI

U glavnom programu treba predvideti da se preko tastature unesu: broj elemenata u datom vektoru i vrednosti svih elemenata, pozvati gornji potprogram i štampati: potrebne opisne tekstove, sve unete podatke i dobijeni podniz. Posebni podaci: n = 10, M = [ 8 9 2 5 6 4 6 1 3 7 ].

11. ZADATAKNačiniti potprogram koji za dati niz realnih brojeva utvrđuje da li među njegovim članovima važi sledeći odnos:X(1) X(2) > X(3) > X(4) X(5) > X(6) > ... Načiniti glavni program koji učitava broj X (ekranski unos) a iz datoteke učitava brojeve i realne članove nizova pa pozivajući gornji potprogram određuje i štampa sve one nizove koji imaju gore navedenu osobinu i koji sadrže broj X. Čitanje datoteke se prekida kada se za broj članova niza pročita vrednost manja od dva ili kada se pročitaju podaci za 10 nizova.

12. ZADATAK: "Plato"Načiniti potprogram tipa SUBROUTINE koji pronalazi i štampa najduži plato u datom, neopadajuće uredjenom vektoru M (mi, i=1, 2, ... , n), od najviše 100 celih brojeva. U glavnom programu treba predvideti da se preko tastature unesu: broj elemenata u datom vektoru i vrednosti svih elemenata, pozvati gornji potprogram i štampati: potrebne opisne tekstove, sve unete podatke i pronadjeni najduži plato u vektoru. Napomena: Niz uzastopnih, a jednakih elemenata vektora naziva se "plato". Na primer, ako jeM(i) < M(i+1) = M(i+2) = ... = M(i+k) < M(i+k+1)onda kažemo da elementi od M(i+1) do M(i+k) obrazuju plato veličine k. Posebni podaci: n = 10, M = [ 8 9 2 5 6 4 6 1 3 7 ].

13. U vektoru H(N) svaki elemenat je 0, 1 ili 2. Permutovati elemente niza tako da su na početku sve nule, a na kraju sve dvojke.

PRETRAŽIVANJE VEKTORA

1. ZADATAK: Pretraživanje uredjenog vektora Načiniti potprogram tipa SUBROUTINE za nalaženje zadate vrednosti Z u rastuće uredjenom vektoru M (mi, i=1, 2, ... , n), od najviše 100 celih brojeva. U glavnom programu treba predvideti da se preko tastature unese tražena vrednost, a da se iz datoteke pročita broj elemenata i vrednosti elemenata vektora, pa pozvati gornji potprogram i štampati: potrebne opisne tekstove, sve učitane podatke i poruku da li je zadata vrednost pronadjena, kao i indeks elementa koji ima traženu vrednost (ukoliko je takva pronadjena). Poseban podatak: Z=7.

REŠENJE: Izbor algoritma: U datoteku je smešten celobrojni, rastuće uredjen vektor M. Postavljen je zahtev da se odredi da li je traženi, celobrojni elemenat Z u sastavu tog vektora ili nije. Jedna od mogućnosti da se reši postavljeni zadatak je da se obavi uporedjivanje zadate vrednosti sa svakim članom vektora. Ukoliko se ustanovi da je Z u sastavu vektora tada treba štampati indeks mesta na kom se nalazi traženi elemenat.

Page 24: 2 - VEKTORI

Predlog: Načinite program prema ovom algoritmu.

1.1. Metod binarnog pretraživanja (engl. Binary Search)Osnovu algoritma binarnog pretraživanja čini provera da li je tražena vrednost jednaka centralnom elementu vektora M (na početku to je elemenat sa indeksom N/2). Ukoliko je to tako, onda je izlazna vrednost baš indeks centralnog elementa. Ako je Z manje (veće) od vrednosti centralnog elementa vektora M onda se odbacuje desna (leva) polovina i postupak se ponavlja samo sa levom (desnom) polovinom vektora.

Algoritam metoda binarnog pretraživanja:Korak 1: Proveriti da li je dužina vektora koji se pretražuje veća od 0. Ukoliko nije, dodeliti

rezultantnom indeksu vrednost 0. Kraj. Korak 2: Proveriti da li je Z jednako vrednosti centralnog elementa vektora M (na početku to je

elemenat sa indeksom N/2). Korak 3: Ukoliko je to tako onda je izlazna vrednost baš indeks centralnog elementa. Kraj. Korak 4: Ako je Z manji (veći) od vrednosti centralnog elementa vektora M onda se odbacuje

desna (leva) polovina i postupak se ponavlja samo sa levom (desnom) polovinom vektora.

Zadatak ćemo rešiti primenom tehnike razvoja algoritma u koracima preciziranja. *** Program za binarno pretraživanje u PDL-u ima sledeći izgled:

beginpočetak := 1 ; kraj := n ;nadjen := false ;WHILE početak < kraj and not nadjen dobeginsrednji := (početak+kraj)/2INTEGER deljenjeif vektor(srednji) = zthen nadjen := trueelseif vektor(srednji) < zthen početak := srednji + 1else kraj := srednji - 1endifendifendend WHILEif nadjenthen print ""traženo Z je", srednji, ". član niza" else print"Z nije nadjeno" endifend

Program: ************************************************************************* Binarno pretrazivanje vektora ************************************************************************** M - uredjen vektor* N - broj elemenata vektora

Page 25: 2 - VEKTORI

* Z - trazena vrednost* LJ - informacija da li je trazena vrednost nadjena*PROGRAM BINAR*INTEGER*2 N, M(100), Z, KLOGICAL*2 LJOPEN(2, FILE='BINAR. U')OPEN(3, FILE='BINAR. R')** unosenje trazene vrednosti*PRINT *, ' UNESITE VREDNOST KOJA SE TRAZI'READ *, Z** citanje datoteke u kojoj je smesten vektor*READ(2, '(I3, /, (10I5))') N, (M(I), I=1, N)** stampanje zaglavlja i ucitanih podataka*WRITE (3, *)' BINARNO PRETRAZIVANJE VEKTORA'WRITE (3, '(/, A, I3, /)') ' Broj clanova niza je:', NWRITE (3, '(3H A(, I3, 2H)=, I5)') (I, M(I), I=1, N)WRITE (3, '(/, A, I5, /)') ' Trazi se Z =', Z** poziv potprograma*CALL SEARCH(M, N, Z, LJ, K)** stampanje trazenog rezultata*IF(LJ) THENWRITE (3, '(A, I4, A)')' Trazeno Z je', K, '. clan niza'ELSEWRITE (3, *)' Z nije nadjeno'END IF*CLOSE(2)CLOSE(3)*END

SUBROUTINE SEARCH(X, N, Z, NADJEN, SREDNI)*INTEGER*2 X(*), N, Z, POCET, KRAJ, SREDNILOGICAL*2 NADJEN*POCET=1KRAJ=NNADJEN=. FALSE. *

Page 26: 2 - VEKTORI

DO WHILE(POCET .LE. KRAJ. AND. . NOT. NADJEN)*SREDNI=(POCET+KRAJ)/2IF(X(SREDNI). ENJ. Z) THENNADJEN=. TRUE. ELSE IF(X(SREDNI) .LT. Z) THENPOCET=SREDNI+1ELSEKRAJ=SREDNI-1END IF*END DO*END

Izgled i sadržaj ulazne datoteke: 101 2 3 4 5 6 6 7 8 9

Rezultat: BINARNO PRETRAZIVANJE VEKTORABroj clanova niza je: 10A( 1)= 1A( 2)= 2A( 3)= 3A( 4)= 4A( 5)= 5A( 6)= 6A( 7)= 6A( 8)= 7A( 9)= 8A( 10)= 9Trazi se Z = 7Trazeno Z je 8. clan niza

2. ZADATAK: Niz u nizu Načiniti potprogram tipa FUNCTION kojim se utvrdjuje koliko je puta celobrojni niz K (k i, i=1, 2, ... , m) sadržan u celobrojnom nizu L (li, i=1, 2, ... , m). U glavnom programu treba predvideti da se preko tastature unesu: broj elemenata u svakom nizu i vrednosti svih elemenata, pozvati gornji potprogram i štampati: potrebne opisne tekstove, sve unete podatke i dobijeni rezultat. Napomena: Podrazumeva se da je broj elmenata u nizu K manji od broja elemenata u nizu L (m < n < 100). Posebni podaci: m = 2, K = [ 1 2 ], n = 7 i L = [ 3 1 2 5 1 1 2 ].

3. ZADATAK: Periodičnost niza Načiniti potprogram tipa FUNCTION kojim se utvrdjuje da li je dati niz M (m i, i=1, 2, ... , n), od najviše 100 celih brojeva, periodičan.

Page 27: 2 - VEKTORI

U glavnom programu treba predvideti da se preko tastature unesu: broj elemenata u datom nizu i vrednosti svih elemenata, pozvati gornji potprogram i štampati: potrebne opisne tekstove, sve unete podatke i dobijeni rezultat. Napomena: Niz M (mi, i=1, 2, ... , n) je periodičan ako (Ek) (Ai) ( k đ i Č i+k < n 6 m i = mi+k). ***Posebni podaci: n = 9, M = [ 1 0 9 1 0 9 1 0 9 ].

4. ZADATAK: Odstranjivanje elemenata vektora Načiniti potprogram tipa SUBROUTINE kojim se iz datog vektora M (m i, i=1, 2, ... , n), od najviše 100 celih brojeva, odstranjuju svi elementi čija je vrednost ravna zadatom celom broju K. U glavnom programu treba predvideti da se preko tastature unese zadata vrednost K, a da se iz datoteke pročita broj elemenata i vrednosti elemenata vektora, pa pozvati gornji potprogram i štampati: potrebne opisne tekstove, sve učitane podatke i poruku da li je zadata vrednost pronadjena, kao i komprimovani vektor (ukoliko je zadata vrednost pronadjena). Posebni podaci: n = 10, M = [ 1 2 3 4 5 6 6 7 8 9 ].

5. Celobrojni vektor M ima početnu dužinu od n elemenata. U ćeliji K se nalazi proizvoljan ceo broj. Načiniti program kojim se iz vektora M izostavljaju svi elementi čija je vrednost jednaka sadržaju ćelije K.

6. Načiniti program kojim se učitavaju vektori K(1), ... , K(NK) i L(1), ... , L(NL), a zatim poziva potprogram BROJ kojim se određuje veličina M koja označava koliko se puta niz K nalazi sadržan u nizu L. Podrazumeva se da je NK < NL. Primer: Ako je K= [ 1, 2] i L= [3, 1, 2, 5, 1, 1, 2] tada treba da se dobije i odštampa M=2.

7. Načiniti program kojim se utvrđuje koliko ima negativnih brojeva u nizu A od n elemenata.