CIKLIČNE ALGORITAMSKE STRUKTURE (1)
Ciklična algoritamska struktura je
ona kod koje se koraci mogu izvršiti više puta. Slično kao kod razgranate
sturkture, vrlo lako se može desiti da ne znamo koje će vrednosti korisnik
uneti, ili čak koliko će ih biti.
Ogroman broj zadataka koje rešavamo u programiranju zahteva
da se podatak za podatkom obrađuje na isti način. To sa stanovišta algoritma
znači da se jedni isti koraci ponavljaju više puta. Kao što smo se upoznali sa
različitim tipovima grananja, sada ćemo se upoznati sa nekoliko tipova ciklusa.
Svim koracima kojima definišemo cikluse zajedničko je to što imaju
"strelicu unazad". Na taj način "vraćaju" izvršavanje
algoritma/programa nekoliko koraka unazad čime smo napravili ciklus ili petlju.
Svako ponavljanje ciklusa, naziva se iteracija. Koraci
unutar ciklusa su uvek isti, ali vrednosti sa kojima se radi se menjaju. To je
u stvari i poenta rada sa ciklusima.
Naravno, ovo se podrazumeva, ali da ipak pomenemo - ciklusi
se mogu kombinovati sa svim algoritamskim strukturama. To znači da možemo imati
grananja unutar ciklusa ili cikluse unutar grananja. U stvari, najveći broj
zadataka koji su pred nama će biti upravo takav.
Postoje tri vrste ciklusa : brojački, ciklus sa
preduslovom i ciklus sa postuslovom.
BROJAČKI CIKLUS
Često
se u programu zna (ili se može izračunati) broj ponavljanja ciklusa. To su npr.
situacije kada u programu postoji informacija o broju elemenata niza ili se od
korisnika unapred traži da unese maksimalan broj ponavljanja. Tada je mnogo optimalnije koristiti brojački ciklus.
Ovaj ciklus funkcioniše na pricipu brojačke promenljive,
koja ima definisanu početnu i krajnju
vrednost. U jednom koraku se objedinjuje postavljanje početne vrednosti,
provera da li je dostignuta krajnja vrednost i računanje nove vrednosti
brojača.
Brojački ciklus se u različitim programskim jezicima
optimizuje na različite načine, ali gotovo uvek je razlika u tome da li se
brojačka promenljiva menja u nekom skupu vrednosti redom, npr. 1,2,3,4,5,6… ili
može da se definiše korak po kome će se menjati vrednosti, npr 3,6,9,12,15……
korak je 3.
Grafički prikaz brojačkog ciklusa:
Pogledajte kako se brojački ciklus zadaje u Python-u i
sličnim jezicima.
Na primeru se vidi da se u jednom koraku zadaju tri iskaza.
Prvi je iskaz za inicijalizaciju ciklusa. On se
izvršava samo jednom, pre početka ciklusa. Obično se koristi za postavljanje
početne vrednosti brojačke promenljive.
Drugi iskaz je uslov iteracije. On se izvršava pre
početka svake iteracije. Ako je njegov rezultat true, iteracija će se izvršiti.
U suprotnom, ciklus "iskače" i prelazi se na prvu naredbu koja dolazi
posle ciklusa.
Treći iskaz se izvršava na kraju svake iteracije.
Obično se koristi za promenu vrednosti brojačke promenljive.
Unutar tela ciklusa su komande koje treba da se izvrše više
puta.
Primer 1:
Ispisati prvih 10 prirodnih brojeva.
U ovom zadatku jasno je sledeće:
Potrebni su nam brojevi od 1 do 10.
Ciklus će se izvršiti 10 puta.
Početna vrednost brojačke promenljive biće 1.
Brojevi idu redom, tj. brojačka promenljiva se uvećava za 1.
Iz ciklusa se izlazi kada brojačka promenljiva dobije
vrednost 11, tj. ciklus se izvršava sve dok je brojačka promenljiva <=10.
U
telu ciklusa, komanda koja se izvršava više puta je štampaj broj.
Ovde vidimo da je broj koji se štampa u stvari brojačka
promenljiva. Ona može da se koristi u izrazima sa desne strane, tj. njena
vrednost može da učestvuje u izrazu. Ono što se u brojačkom ciklusu ne sme,
jeste promena brojačke promenljive, tj. da ona stoji sa leve strane izraza.
Tada “veštački” menjamo vrednost brojačke promenljive što dovodi do nekorektnog
izvršavanja programa.
Primer 2:
Nacrtati algoritamsku šemu za izračunavanje sume brojeva
od n do k.
U ovom zadatku jasno je sledeće:
Početna vrednost sume biće nula.
Početna vrednost brojačke promenljive biće broj n koji ćemo učitati.
Krajnja vrednost brojačke promenljive biće broj k koji ćemo učitati.
U telu ciklusa ćemo u svakoj iteraciji na trenutnu vrednost
sume dodavati novi sabirak.
Ono što je novo i neobično u ovom zadatku je konstrukcija S=S+i.
U matematici je ovo nemoguće osim kad je i nula, ali moramo shvatiti da u
programiranju = nije relacioni operator kao u matematici, tj. ne pokazuje da je
leva strana jednaka desnoj. Sada nam je to relacioni operator = =.
= nam je
sada aritmetička naredba, naredba dodele ili
“postaje”.
Setimo se prvih lekcija iz računarstva kada smo govorili o
memoriji. Svi podaci koji se obrađuju u računaru imaju svoju memorijsku
lokaciju koja je adresirana, isto kao što svako od nas ima svoju kućnu adresu.
Računar pronalazi podatke na njihovoj adresi isto kao što nas pronalazi poštar.
U programiranju je ime promenljive u stvari simbolička
adresa memorijske lokacije na kojoj se taj podatak nalazi. Znači, na početku
programa, kada smo napisali S=0, na toj memorijskoj lokaciji upisali smo
početnu vrednost 0.
Kada ciklus počne da se izvršava, početna vrednost brojačke
promenljive je n. U prvoj iteraciji dolazimo do komande S=S+i, tj. S=S+n. Tada
se umesto vrednosti nula koja je bila na početku programa, u memorijsku
lokaciju S upisuje vrednost 0+n tj. n.
Dakle, aritmetička naredba ima sledeći oblik:
promenljiva=izraz, gde se prvo računa vrednost izraza sa desne
strane, pa se ta novodobijena vrednost šalje na memorijsku lokaciju promenljive
sa leve strane.
Stoga i na levoj i na
desnoj strani može stajati ista promenljiva, ali im vrednost nije ista. Sa leve
strane je nova, a sa desne strane stara vrednost.
Konstrukcija izraz= promenljiva nije dozvoljena.
Zadaci za vežbu:
U Word ili sličnom tekstualnom dokumentu odgovori na sledeća
pitanja:
1. Šta je ciklična algoritamska struktura?
2. Šta je iteracija?
3. Šta je brojačka
promenljiva?
4. Ako u zadatku
zadam da treba raditi sa trocifrenim brojevima deljivim sa tri, koliki bi bili
početna i krajnja vrednost brojačke promenljive i korak?
5. Kolika će biti stara, a kolika nova vrednost promenljive
y posle izvršavanja ovih naredbi:
X=5
Y=6
Y=(X+2)2-11
Нема коментара:
Постави коментар