среда, 6. мај 2020.

CIKLIČNE ALGORITAMSKE STRUKTURE (1)


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



Нема коментара:

Постави коментар