Python iteracije i osnovni algoritmi


U ovoj lekciji naučićeš kako da koristiš iteracije (ponavljanja) za rešavanje jednostavnih algoritamskih problema. Iteracije su jedan od najvažnijih koncepata u programiranju i omogućavaju da ponavljaš deo koda više puta, najčešće pomoću petlji for i while.


1. Šta je iteracija?


Iteracija znači ponavljanje. Računari su veoma efikasni u ponavljanju istih operacija velikom brzinom, pa se iteracije koriste za:

  • sabiranje niza brojeva
  • računanje minimuma/maksimuma
  • brojanje elemenata
  • pretraživanje liste
  • prolazak kroz tekst ili niz karaktera

2. Iteracije kroz opseg brojeva


Najčešći način iteriranja u Pythonu je korišćenjem funkcije range():


for i in range(1, 6):
    print(i)

Ovaj program ispisuje brojeve od 1 do 5. U funkciji range(a, b) početna vrednost je a, a poslednja je b - 1.


3. Sabiranje brojeva — osnovni algoritam


Jedan od prvih algoritama koje programeri uče jeste sabiranje n prvih brojeva:


n = 5
suma = 0

for i in range(1, n + 1):
    suma += i

print("Suma je:", suma)

Ovaj algoritam radi tako što počinje od nule i dodaje sve brojeve od 1 do n.


4. Pronalaženje maksimuma


Algoritam za pronalaženje najvećeg broja u listi:


brojevi = [3, 8, 2, 11, 5]

maksimum = brojevi[0]

for broj in brojevi:
    if broj > maksimum:
        maksimum = broj

print("Najveći broj je:", maksimum)

5. Prebrojavanje elemenata


Primer algoritma koji broji koliko parnih brojeva ima u listi:


brojevi = [1, 2, 4, 7, 10, 13]
brojac = 0

for x in brojevi:
    if x % 2 == 0:
        brojac += 1

print("Broj parnih:", brojac)

6. Mini zadaci — iteracije i algoritmi


  • Napisati program koji sabira sve parne brojeve od 1 do 100
  • Izračunaj proizvod svih brojeva od 1 do n
  • Pronađi najmanji broj u listi unetoj sa tastature
  • Prebroj koliko se puta pojavljuje slovo „a“ u unetom tekstu
  • Proveri da li se određeni broj nalazi u listi

Ova lekcija je priprema za složenije algoritamske zadatke koji se koriste u programiranju, robotici i veštačkoj inteligenciji.


Ugnježdene petlje (Nested loops)

Ugnježdene petlje su petlje koje se nalaze unutar drugih petlji. To znači da se jedna petlja (unutrašnja) izvršava više puta tokom jednog prolaza druge petlje (spoljašnje).

Ovakav način rada je veoma čest u programiranju i koristi se kada:

  • radimo sa tabelama i matricama
  • upoređujemo svaki element sa svakim
  • crtamo obrasce (pravougaonike, trouglove)
  • razvijamo osnovne algoritme

Kako se izvršavaju ugnježdene petlje?

Prvo se izvršava spoljašnja petlja. Za svaki njen prolaz, unutrašnja petlja se izvršava u potpunosti.

Redosled možemo zamisliti ovako:

Spoljašnja petlja → 1. prolaz
    Unutrašnja petlja → svi prolazi
Spoljašnja petlja → 2. prolaz
    Unutrašnja petlja → svi prolazi
...

Zato se unutrašnji kod često izvršava mnogo puta, što je važno za razumevanje algoritama.


Mali vizuelni primer toka


for i in range(3):
    for j in range(2):
        print("i =", i, "j =", j)

Ovde:

  • spoljašnja petlja (i) ide od 0 do 2
  • za svaki i, unutrašnja petlja (j) ide od 0 do 1

Ukupno se print izvršava 3 × 2 = 6 puta.


Kratki praktični primeri

Primer 1: Ispis koordinata


for x in range(1, 4):
    for y in range(1, 3):
        print("(", x, ",", y, ")")

Ovaj primer pokazuje sve moguće parove vrednosti x i y. Koristi se u igrama, matematici i radu sa mrežama.


Primer 2: Pravougaonik od zvezdica


for i in range(3):
    for j in range(5):
        print("*", end="")
    print()

Spoljašnja petlja određuje broj redova, a unutrašnja broj kolona. Rezultat je pravougaonik širine 5 i visine 3.


Primeri ugnježdenih petlji (osnovni algoritmi)

Sledeći primeri prikazuju tipične situacije u kojima se koriste ugnježdene petlje. Primeri su kratki i fokusirani na razumevanje načina izvršavanja.


Primer 1: Manja tabela množenja

Zadatak:
Napisati program koji ispisuje tabelu množenja za brojeve od 1 do 3.

Ulaz:
Nema korisničkog unosa.

Izlaz:

1 2 3
2 4 6
3 6 9

Objašnjenje algoritma

Spoljašnja petlja prolazi kroz redove tabele (brojevi 1–3), dok unutrašnja petlja prolazi kroz kolone. Za svaki par brojeva računa se njihov proizvod.

Rešenje


for i in range(1, 4):
    for j in range(1, 4):
        print(i * j, end=" ")
    print()

Objašnjenje rešenja

  • i predstavlja red
  • j predstavlja kolonu
  • end=" " sprečava prelazak u novi red
  • print() na kraju reda pravi novi red

Vizuelizacija toka (primer)

i = 1 → j = 1, 2, 3 → 1 2 3
i = 2 → j = 1, 2, 3 → 2 4 6
i = 3 → j = 1, 2, 3 → 3 6 9

Primer 2: Ispis koordinata (i, j)

Zadatak:
Ispisati sve parove koordinata (i, j) gde je i od 1 do 3, a j od 1 do 2.

Ulaz:
Nema korisničkog unosa.

Izlaz:

(1, 1)
(1, 2)
(2, 1)
(2, 2)
(3, 1)
(3, 2)

Objašnjenje algoritma

Za svaku vrednost promenljive i, unutrašnja petlja prolazi kroz sve vrednosti j i ispisuje par.

Rešenje


for i in range(1, 4):
    for j in range(1, 3):
        print(f"({i}, {j})")

Objašnjenje rešenja

Spoljašnja petlja kontroliše prvu koordinatu, a unutrašnja drugu. Na taj način dobijamo sve moguće parove.


Primer 3: Jednostavan kvadrat od zvezdica

Zadatak:
Napisati program koji ispisuje kvadrat dimenzije 4×4 od znaka *.

Ulaz:
Nema korisničkog unosa.

Izlaz:

****
****
****
****

Objašnjenje algoritma

Spoljašnja petlja određuje broj redova, dok unutrašnja petlja određuje broj zvezdica u svakom redu.

Rešenje


for i in range(4):
    for j in range(4):
        print("*", end="")
    print()

Objašnjenje rešenja

Unutrašnja petlja ispisuje četiri zvezdice u istom redu, a prazni print() prelazi u novi red.


Obrasci iteracije – osnovni algoritamski alati

U programiranju se određeni načini korišćenja petlji stalno ponavljaju. Te ponavljajuće tehnike nazivamo obrasci iteracije. Njihovo razumevanje je ključno za rešavanje algoritamskih problema.


1. Brojanje unapred i unazad

Zadatak:
Ispisati brojeve od 1 do 5 unapred, a zatim od 5 do 1 unazad.

Ulaz:
Nema korisničkog unosa.

Izlaz:

1 2 3 4 5
5 4 3 2 1

Objašnjenje algoritma

Kod brojanja unapred koristimo rastući opseg, dok kod brojanja unazad koristimo opseg sa negativnim korakom.

Rešenje


for i in range(1, 6):
    print(i, end=" ")

print()

for i in range(5, 0, -1):
    print(i, end=" ")

Objašnjenje rešenja

Funkcija range() omogućava kontrolu početka, kraja i smera kretanja brojeva.


2. Akumulator – sabiranje i brojanje

Zadatak:
Izračunati zbir brojeva od 1 do 5 i prebrojati koliko ih ima.

Izlaz:

Zbir: 15
Broj elemenata: 5

Objašnjenje algoritma

Akumulator je promenljiva koja čuva rezultat koji se postepeno menja tokom prolaska kroz petlju.

Rešenje


zbir = 0
brojac = 0

for i in range(1, 6):
    zbir += i
    brojac += 1

print("Zbir:", zbir)
print("Broj elemenata:", brojac)

Objašnjenje rešenja

  • zbir akumulira sumu brojeva
  • brojac broji koliko puta se petlja izvršila

3. Traženje maksimuma i minimuma

Zadatak:
U listi brojeva pronaći najveću i najmanju vrednost.

Ulaz:

brojevi = [3, 7, 2, 9, 4]

Izlaz:

Maksimum: 9
Minimum: 2

Objašnjenje algoritma

Na početku pretpostavljamo da je prvi element i maksimum i minimum, a zatim ih ažuriramo po potrebi.

Rešenje


brojevi = [3, 7, 2, 9, 4]

maks = brojevi[0]
min = brojevi[0]

for broj in brojevi:
    if broj > maks:
        maks = broj
    if broj < min:
        min = broj

print("Maksimum:", maks)
print("Minimum:", min)

Objašnjenje rešenja

Svaki element se poredi sa trenutnim maksimumom i minimumom, čime se problem rešava jednim prolazom kroz listu.


4. Prekid pri pronalasku (break kao algoritamski alat)

Zadatak:
U listi brojeva pronaći prvi broj veći od 10 i prekinuti petlju.

Ulaz:

brojevi = [4, 7, 12, 5, 20]

Izlaz:

Pronađen broj: 12

Objašnjenje algoritma

Čim se pronađe tražena vrednost, nema potrebe nastavljati petlju. U tom trenutku koristimo break.

Rešenje


brojevi = [4, 7, 12, 5, 20]

for broj in brojevi:
    if broj > 10:
        print("Pronađen broj:", broj)
        break

Objašnjenje rešenja

Komanda break prekida petlju odmah nakon pronalaska traženog elementa, što čini algoritam efikasnijim.


Veza petlji sa algoritmima

Kada govorimo o algoritmima, važno je da razumemo koliko puta se određeni deo koda izvršava. Kod obične petlje, neki kod se ponavlja onoliko puta koliko ima elemenata ili koraka. Međutim, kod ugnježdenih petlji, unutrašnji kod se izvršava za svaki prolaz spoljašnje petlje, što znači da se ukupan broj izvršavanja brzo povećava. Zbog toga algoritmi sa ugnježdenim petljama postaju „sporiji“ kako raste količina podataka.

Pogledaj sledeći primer:


for i in range(3):
    for j in range(3):
        print("Radim")

U ovom slučaju, poruka "Radim" se ispisuje 9 puta, jer se unutrašnja petlja izvršava tri puta za svaki od tri prolaza spoljašnje petlje. Kod jedne petlje, izvršavanje raste postepeno, dok kod ugnježdenih petlji raste znatno brže.


Skriveni mini kviz — Iteracije i osnovni algoritmi

Klikni da proveriš da li razumeš kako rade ugnježdene petlje, obrasci iteracije i kako break utiče na tok algoritma.

Otvori kviz

Mini kviz: Razumevanje iteracija

1. Koliko puta će se ispisati poruka?


for i in range(3):
    for j in range(2):
        print("Python")
        



2. Koja je uloga spoljašnje petlje u ugnježdenim petljama?




3. Šta predstavlja akumulator u algoritmu?




4. Šta će se ispisati?


for i in range(1, 6):
    if i == 3:
        break
    print(i)
        



5. Zašto algoritmi sa ugnježdenim petljama mogu biti sporiji?







Preporučeni zadaci za vežbu

Da bi se gradivo o iteracijama i osnovnim algoritmima bolje utvrdilo, preporučuje se dodatno vežbanje kroz zadatke koji razvijaju algoritamsko razmišljanje. U nastavku su predloženi tipovi zadataka i dodatni resursi.


Zadaci za samostalni rad (Python)

  • Izračunati zbir brojeva od 1 do n pomoću petlje
  • Odrediti najveći i najmanji broj u listi
  • Prebrojati koliko ima pozitivnih, negativnih i nula u nizu brojeva
  • Izračunati proizvod elemenata liste
  • Prebrojati koliko je brojeva parno, a koliko neparno

Ovi zadaci koriste iste iterativne obrasce koji su objašnjeni u ovoj lekciji i ne zahtevaju dodatno gradivo.


Algoritamski zadaci u drugim jezicima (C / C++)

Iako su sledeći primeri napisani u C/C++ jezicima, njihova vrednost je u algoritamskoj logici, koja je potpuno primenljiva i u Python-u. Preporučuje se da učenici:

  • pročitaju zadatak
  • razumeju algoritam
  • pokušaju da ga samostalno prevedu u Python

□ Primeri petlji u C/C++:
Petlje u C/C++ – primeri

□ Primeri ugneždenih petlji (naprednije):
Ugneždene petlje – primeri u C++


Napomena:
Ugneždene petlje su naprednija tema i preporučuju se tek nakon potpunog razumevanja osnovnih iteracija.


Povratak na Python tutorijal

Ako želiš da sagledaš celokupnu strukturu Python tutorijala i vidiš gde se ova lekcija nalazi u odnosu na ostale teme, poseti početnu stranicu:

□ Python – osnovni tutorijal (pregled svih lekcija)