Osnovne algoritamske strukture - petlje

Sjedište: CARNET - Arhiva 2021 Loomen
E-kolegij: Informatika 3 PMG - Gimnazija Đakovo
Knjiga: Osnovne algoritamske strukture - petlje
Otisnuo/la: Gost (anonimni korisnik)
Datum: petak, 1. studenoga 2024., 02:28

Opis

Često se u procesu programiranja pojavljuje potreba za ponavljanjem dijelova programa. Na primjer, postoji li potreba za unošenjem 10 brojeva, naredbu za unošenje treba pisati deset puta. Praktičnije je potrebne
naredbe napisati jedanput, a pri izvođenju programa pozvati ih željeni broj puta

1. Uvod

Često se u procesu programiranja pojavljuje potreba za ponavljanjem dijelova programa. Na primjer, postoji li potreba za unošenjem 10 brojeva, naredbu za unošenje treba pisati deset puta. Praktičnije je potrebne
naredbe napisati jedanput, a pri izvođenju programa pozvati ih željeni broj puta.

Za ponavljanje dijelova programa koristimo se naredbama ponavljanja koje još nazivamo i programskim petljama.
Naredbe ponavljanja sastavni su dio svakoga programskog jezika. Možemo ih podijeliti prema različitim kriterijima.
S obzirom na broj ponavljanja, dijelimo ih na:

  • petlje u kojima je poznat broj ponavljanja i
  • petlje u kojima broj ponavljanja ovisi o uvjetu.

2. Petlja s poznatim brojem ponavljanja

Ta se naredba primjenjuje u zadatcima u kojima je broj ponavljanja unaprijed poznat.

U pseudojeziku možemo je zapisati kao:
za b = p do k činiti
    naredba (blok_naredbi)
Varijabla b je kontrolna varijabla ili brojač. Ona nadzire broj prolazaka petljom, a njezina se vrijednost automatski povećava za jedan svakim prolaskom kroz petlju – od početne vrijednosti (p) do krajnje vrijednosti (k).
Tijek izvršavanja naredbe s poznatim brojem ponavljanja je sljedeći:

  1. Vrijednost kontrolne varijable b postavlja se na početnu vrijednost p.
  2. Provjerava se je li vrijednost kontrolne varijable manja ili jednaka završnoj vrijednosti k Ako je rezultat istina, izvodi se blok naredaba, a vrijednost kontrolne varijable b uveća se za 1. Program se zatim vraća na početak petlje, te se ona ponavlja od početka 2. koraka.
  3. Ako je vrijednost kontrolne varijable b veća od završne vrijednosti k, blok naredaba se preskače i program se nastavlja prvom naredbom iza bloka.

2.1. Petlja s poznatim brojem ponavljanja u Pythonu

Petlju s poznatim brojem ponavljanja u Pythonu zapisujemo na sljedeći način:
for i in range ( n ):
    naredba (blok_naredbi)
Tako zapisana naredba for ponovit će se n puta, s time da je početna vrijednost kontrolne varijable i jednaka 0. To znači da se vrijednost kontrolne varijable mijenja od 0 do n – 1.

Primjer 1:
Dio programa
for i in range (10):
    print(i)
na zaslon će ispisati brojeve 0, 1, 2… 9.

Naredba for može se zapisati i u obliku:
for i in range (početna, završna, korak):
    naredba (blok_naredbi)
U tom slučaju vrijednost kontrolne varijable mijenjat će se od vrijednosti početna do vrijednosti završna – 1, i to za vrijednost korak.

Primjer 2:
Dio programa
for i in range (1, 10, 2):
    print(i)
na zaslon će ispisati brojeve 1, 3, 5, 7 i 9.

2.2. Primjeri jednostavnih algoritama

Primjer 1.
Algoritam
zbroj = 0
za i = 1 do 5 činiti
    zbroj = zbroj + i
izlaz (zbroj)
ispisuje zbroj brojeva od 1 do n.

Zadatak 1. Algoritam iz prethodnog primjera zapiši u Pythonu i provjeri ga.

Primjer 2.
Algoritam
br = 0
ulaz ( n)
za i = 1 do n činiti
    ako je i mod 3 == 0 onda
        br = br + 1
izlaz (br)
ispisuje koliko ima brojeva djeljivih s brojem 3 u intervalu od 1 do n.

Zadatak 2. Algoritam iz prethodnog primjera zapiši u Pythonu i provjeri ga.

Zadatak 3. Poboljšaj ovaj algoritam tako da zadaš gornju i donju granicu intervala te broj s kojime treba provjeriti djeljivost.

Primjer 3.
Algoritam
zbroj = 0
ulaz (broj_ucenika)
za i = 1 do broj_ucenika činiti
{
    ulaz (ocjena)
    zbroj = zbroj + ocjena
}
srednja_ocjena = zbroj/broj_ucenika
izlaz (srednja_ocjena)
ispisat će srednju ocjenu iz nekog predmeta ili testa za zadani broj učenika.

Primjer 4.
Algoritam
najveći = 0
ulaz ( n)
za i = 1 do n činiti
{
    ulaz (bodovi)
    ako je bodovi > najveći onda
        najveći = bodovi
}
izlaz (najveći)
ispisat će najveći ostvareni broj bodova na nekom testu ili natjecanju.

Zadatak 4. Algoritme iz primjera 3 i 4 zapiši u Pythonu i provjeri ih.

2.3. Pitanja, vježbe i zadatci

  1. Kad se koristimo naredbama ponavljanja?
  2. U kojim se primjerima koristimo naredbama ponavljanja s poznatim brojem ponavljanja?
  3. Na jednom primjeru objasni način izvršavanja naredbe ponavljanja spoznatim brojem ponavljanja.
  4. Kolika treba biti vrijednost varijable n da bi se sljedeća petlja izvela točno 25 puta?
        za b = 10 do n činiti...
  5. Koja će vrijednost biti spremljena u varijabli m nakon izvođenja sljedećeg algoritma?
    m = 2 a
    za b = 0 do 5 činiti
        ako je b mod 2 == 1 onda m = m + 2
  6. Osmisli i napiši algoritam koji će za uneseni broj n ispisati sve brojeves kojima je djeljiv. Ispravnost algoritma provjeri u Pythonu.
  7. Osmisli i napiši algoritam koji će tražiti unošenje broja učenika, a zatim broj bodova na testu iz informatike za svakog učenika. Algoritam treba izračunati i ispisati srednju vrijednost unesenih bodova, najveći i najmanji ostvaren broj bodova.

3. Petlje u kojima broj ponavljanja ovisi o uvjetu

Postoje problemi u kojima ne možemo znati točan broj ponavljanja. Na primjer, želimo li izračunati zbroj znamenaka nekog broja, a ne znamo koliko ih taj broj ima, moramo pronaći drugi način rješavanja tog problema.
Takvih primjera ima još mnogo. Oni se rješavaju naredbama ponavljanja u kojima broj ponavljanja ovisi o uvjetu.
Petlju s provjerom uvjeta na početku u pseudojeziku možemo zapisati kako slijedi:
dok je (uvjet) činiti
    naredba (blok_naredbi).
Naredba se u ovoj petlji ponavlja sve dok je uvjet istinit. Ako je potrebno ponavljati više od jedne naredbe, one se moraju staviti u blok.

Ova se naredba uglavnom koristi kad:

  • se ne zna točan broj ponavljanja naredaba u petlji
  • ne postoji kontrolna varijabla koja se mijenja ponavljanjem
  • na izvršavanje petlje utječu neki vanjski parametri (npr. unošenje s tipkovnice).

Tijek izvršavanja bloka dok je je sljedeći:

  1. Izračunava se uvjet izvođenja (to je relacijski ili logički izraz i njegov rezultat može biti istina ili neistina).
  2. Ako je rezultat istinit, izvodi se blok_naredbi, a nakon toga se program vraća na naredbu dok je i izvodi od točke 1.
  3. Ako je rezultat neistinit, preskače se blok naredbi i program nastavlja s izvođenjem prvom naredbom iza bloka naredbi dok je.
Primjer 1.
Nakon izvođenja algoritma
k = 3
dok je (k <= 6) činiti
    k = k + 3
izlaz (k)
vrijednost ispisana na zaslonu bit će 9.

Primjer 2.
Algoritam
ulaz (broj)
br = 0
dok je broj <> 0 činiti
    br = br + 1
broj = broj div 10
izlaz (br)
klasičan je primjer beskonačne petlje. U naredbi dok je... nalazi se samo naredba br = br + 1.
To znači da će se vrijednost varijable br povećavati, no vrijednost varijable broj ostat će nepromijenjena  (nikad neće postati nula) i uvjet nikad neće postati neistinit.

3.1. Petlja u kojoj ponavljanje ovisi o uvjetu u Pythonu

Petlja u kojoj ponavljanje ovisi o uvjetu (while) u Pythonu zapisuje se na sljedeći način:
while uvjet:
   naredba (blok_naredbi)
i izvršava se sve dok je zadani uvjet istinit.

Primjer:
Program
n = 1
while (n < 10):
    print ( n)
    n = n + 2
ispisat će brojeve 1, 3, 5, 7 i 9.

Zadatak:

Razmisli i odgovori što će ispisati sljedeći program.
n = 1
while (n < 10):
    print ( n)
n = n + 2

3.2. Primjeri jednostavnih algoritama

Primjer 1.
Algoritam za ispisivanje zbroja znamenaka unesenog broja
ulaz (broj)
zbroj = 0
dok je broj <>0 činiti
{
    zadnja = broj mod 10
    zbroj = zbroj + zadnja
    broj = broj div 10
}
izlaz (zbroj)

Primjer 2.
Algoritam traži unošenje dvaju brojeva i ispisuje najveći broj s kojim su djeljiva oba broja (Euklidov algoritam za traženje najveće zajedničke mjere dvaju brojeva).
ulaz (n, m)
dok je n <> m činiti
    ako je n > m onda
        n = n - m
    inače
       m = m - n
izlaz (m)

Primjer 3.
Algoritam rastavlja uneseni broj na proste faktore.
ulaz ( n)
f = 2
dok je n >= f činiti
  ako je n mod f == 0 onda
  {
    izlaz(f)
    n = n div f
  }
  inače
    f = f + 1

Zadatak: Provjeri algoritme u programskom jeziku Python.

3.3. Pitanja, vježbe i zadatci

  1. Kad se koriste petlje u kojima ponavljanje ovisi o uvjetu? Objasni na primjeru.
  2. Što će ispisati sljedeći algoritam ako je vrijednost varijable broj = 5?
    ulaz (broj)
    f = 1
    b = 1
    dok je b <= broj činiti
    {
       f = f*b
       b = b + 1
    }
    izlaz (f)
    Dobiveno rješenje provjeri u Pythonu.

  3. Što će ispisivati sljedeći algoritam?
    broj = 5
    b = 1
    dok je b <= broj činiti
        izlaz (b*2)
    b = b + 1
    Zbog čega? Dobiveno rješenje provjeri u Pythonu.

    4. Što će se ispisati ako prethodni algoritam zapišemo ovako:

    broj = 5
    b = 1
    dok je b <= broj činiti
    {
        izlaz (b*2)
        b = b + 1
    }
Što se promijenilo?