$$ \newcommand{\floor}[1]{\left\lfloor{#1}\right\rfloor} \newcommand{\ceil}[1]{\left\lceil{#1}\right\rceil} \newcommand{\mod}{\,\mathrm{mod}\,} \renewcommand{\div}{\,\mathrm{div}\,} \newcommand{\metar}{\,\mathrm{m}} \newcommand{\cm}{\,\mathrm{cm}} \newcommand{\dm}{\,\mathrm{dm}} \newcommand{\litar}{\,\mathrm{l}} \newcommand{\km}{\,\mathrm{km}} \newcommand{\s}{\,\mathrm{s}} \newcommand{\h}{\,\mathrm{h}} \newcommand{\minut}{\,\mathrm{min}} \newcommand{\kmh}{\,\mathrm{\frac{km}{h}}} \newcommand{\ms}{\,\mathrm{\frac{m}{s}}} \newcommand{\mmin}{\,\mathrm{\frac{m}{min}}} \newcommand{\smin}{\,\mathrm{\frac{s}{min}}} $$

Scope

  • Dozvoljeno polaganje
  • Lekcije
  • Nema
  • Koši
  • 7/23/2015

Do sada smo se vodili time da kada jednom definišemo promenljivu možemo da je koristimo bilo gde do kraja programa. Postoji specifična situacija u kojoj ovo nije tačno.

 

Prvo ćemo definisati jedan pojam koji će nam pomoći. Sve što se nalazi unutar jednog para vitičastih zagradi { } u našem kodu nazivamo blokom. Na primer u primeru iz prethodne lekcije imamo 5 blokova (5 parova vitičastih zagradi):
 

#include <iostream>

int main()

{

int broj_a, broj_b;

std::cin >> broj_a >> broj_b;

if (broj_b != 0)

{

// ovo se izvrsava samo ako broj_b nije nula

if (broj_a % broj_b == 0)

{

std::cout << "DELJIV";  

}

else

{

std::cout << "NEDELJIV";

}

}

else

{

std::cout << "Drugi broj je 0 pa nema smisla traziti ostatak pri deljenju! ";

}

}

 

Jedna komanda se može nalaziti unutar više blokova koji su jedan unutar drugog. Tako se, na primer, komanda std::cout << "DELJIV"; u prethodnom kodu nalazi unutar sledeća tri bloka:

 

Najmanji od ovih blokova je blok 3.

 

Pravilo koje važi je da svaka promenljiva koju definišemo ostaje aktivna do kraja najmanjeg bloka u kome je definisana.

 

Za promenljive broj_a i broj_b u prethodnom primeru najmanji blok unutar koga su definisane je blok unutar koga je ceo naš program, tako da one ostaju aktivne do kraja programa (obojeni deo u kodu):

 

#include <iostream>

int main()

{

int broj_a, broj_b;

std::cin >> broj_a >> broj_b;

if (broj_b != 0)

{

// ovo se izvrsava samo ako broj_b nije nula

if (broj_a % broj_b == 0)

{

std::cout << "DELJIV";  

}

else

{

std::cout << "NEDELJIV";

}

}

else

{

std::cout << "Drugi broj je 0 pa nema smisla traziti ostatak pri deljenju! ";

}

}

 

Sa druge strane ako definišemo novu promenljivu unutar jednog od if blokova ona će biti aktivna samo do kraja tog bloka. Tako, na primer, ako definišemo promenljivu broj_c u sledećem kodu ona će biti aktivna samo u obojenom delu koda:

 

#include <iostream>

int main()

{

int broj_a, broj_b;

std::cin >> broj_a >> broj_b;

if (broj_b != 0)

{

int broj_c = 0;

// ovo se izvrsava samo ako broj_b nije nula

if (broj_a % broj_b == 0)

{

std::cout << "DELJIV";  

}

else

{

std::cout << "NEDELJIV";

}

}

else

{

std::cout << "Drugi broj je 0 pa nema smisla traziti ostatak pri deljenju! ";

}

}

 

Ako probamo da je iskoristimo kasnije dobićemo poruku o grešci.

 

#include <iostream>

int main()

{

int broj_a, broj_b;

std::cin >> broj_a >> broj_b;

if (broj_b != 0)

{

int broj_c = 0;

// ovo se izvrsava samo ako broj_b nije nula

if (broj_a % broj_b == 0)

{

std::cout << "DELJIV";  

}

else

{

std::cout << "NEDELJIV";

}

}

else

{

broj_c += 1; // GREŠKA!

std::cout << "Drugi broj je 0 pa nema smisla traziti ostatak pri deljenju! ";

}

 

}

 

Dakle, da zaključimo, moramo paziti kod promenljivih koje definišemo unutar nekog manjeg bloka da ne pokušamo da ih koristimo nakon što smo izašli iz tog bloka.