$$ \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}}} $$

Promenljive

  • Dozvoljeno polaganje
  • Lekcije
  • Nema
  • Vugdelija
  • 7/23/2015

Dosadašnji programi su već korisni, ali su otprilike na nivou upotrebe kalkulatora. Programiranje nudi mnogo više od toga, kao što ćemo uskoro videti. Na primer, ponekad je računanje koje treba da obavimo prilično komplikovano. U takvim slučajevima voleli bismo da ga obavimo postupno.

 

Primer:

Epizoda serije koja traje 25 minuta počela je u 17:07, a završila se u 18:52. Bilo je ukupno pet pauza za reklame, od kojih su prve četiri trajale redom 7, 9, 11 i 12 minuta. Koliko minuta je trajala poslednja pauza za reklame, posle koje ide još samo odjavna špica?

Program koji rešava ovaj problem mogao bi da bude napisan ovako:

 

#include <iostream>
int main()
{
    std::cout << (18*60 + 52) - (17*60 + 7) - 25 - 7 - 9 - 11 - 12;
    
return 0;
}

 

Loša strana ovakvog programa je što moramo sve odjedanput da izračunamo. Osim toga, ovaj program neće biti jasan našim drugarima, a posle nekog vremena (dok rešimo još nekoliko zadataka i malo zaboravimo kako smo tačno razmišljali) neće biti jasan ni nama samima.

Pogledajte sledeći program, koji rešava isti zadatak:

 

#include <iostream>
int main()
{
    
int trajanjeEpizode = 25;
    
int pocEpizode = 17*60+7; // vreme pocetka epizode (pretvoreno u minute)
    
int krajEpizode = 18*60 + 52; // vreme kraja epizode (pretvoreno u minute)
    
int trajanjeReklama = krajEpizode - pocEpizode - trajanjeEpizode;
    
int poslednjaPauza = trajanjeReklama - 7 - 9 - 11 - 12;
    std::cout << 
"Poslednja pauza je trajala " << poslednjaPauza << " minuta.";
    
return 0;
}

 

Verovatno i pored toga što ne razumete sve detalje (int na početku nekih linija programa), možete da razumete ideju, to jest kako se izračunava dužina poslednje pauze, i to lakše nego u prvom programu. U stvari, ovo je sličnije načinu kako bismo rešavali zadatak bez računara, samo što ne moramo ništa da izračunavamo. Dovoljno je da imenujemo međurezultate i napišemo izraze po kojima oni treba da budu izračunati.

Stvar je u tome što program može da pamti razne izračunate vrednosti. Možemo da zamišljamo da se svaka od tih vrednosti čuva u posebnoj kutiji unutar računara i da te kutije imaju imena, da bi se znalo koja je koja kutija. Programeri te kutije zovu promenljive (engl. variables). Ime im je takvo, zato što tokom rada programa možemo da promenimo sadržaje tih kutija i da u njih stavljamo neke druge vrednosti.

 

 

  

 

Postoje različite vrste kutija (promenljivih), koje možemo da koristimo u programima. U svaku vrstu promenljivih može da se smesti samo jedna vrsta podataka. Vrste promenljivih (i podataka) se nazivaju tipovi.

Kad hoćemo da koristimo promenljivu u programu, moramo najpre da najavimo njen tip i ime, da bi računar razumeo šta želimo. Ovo najavljivanje se naziva deklaracija promenljive. Deklaracija se piše ovako:

tip ime;

ili, zajedno sa definicijom:

tip ime = vrednost;

 

U programu navedenom gore, koristili smo tip koji se zove int. U promenljivama tipa int držimo cele brojeve. Dakle, kada u programu napišemo

int x;

time smo računaru rekli da u tom programu hoćemo da koristimo jednu kutiju za cele brojeve (programeri bi rekli: promenljivu celobrojnog tipa, ili celobrojnu promenljivu), koja će se zvati x. Ako ne bismo prijavili (deklarisali) promenljivu pre upotrebe, računar ne bi znao šta znači ime „x“ kada naiđe na njega (u programu razne stvari imaju imena, ne samo promenljive) i to bi nam prijavio kao grešku. Zapis

int x = 3;

znači da uvodimo celobrojnu promenljivu x, i zadajemo da njena vrednost u tom trenutku bude 3. Kasnije u programu, promenljivoj koju smo deklarisali možemo da menjamo vrednost, tako što pišemo, na primer

x = a+b;

 

Na desnoj strani znaka = može da stoji bilo koji izraz čija je vrednost ceo broj (tj. čija je vrednost iste vrste kao promenljiva na levoj strani). Kada se ta vrednost izračuna, ona se smešta u promenljivu x (a prethodni sadržaj promenljive x se gubi). Dakle, promenljive na desnoj strani znaka = se koriste kao vrednosti (koje su smeštene u tim promenljivama), a promenljiva na levoj strani kao prostor u koji će se smestiti rezultat. Tako na primer,

x = x+1;

znači: izračunaj x+1 i dobijenu vrednost stavi u x. Da te zapis "x = x+1" ne bi zbunjivao, nemoj ga čitati: „x je jednako x+1“, nego „x dobija vrednost x+1“ - tako će biti tačnije i jasnije. Zapamti, u jezicima C i C++ (a i mnogim drugim) se znak = koristi za dodelu vrednosti, i ne označava jednakost. Kada želimo da proverimo da li su vrednosti x i 3 jednake, treba da pišemo x==3 (sa dva znaka jednakosti), ali o tome više kasnije.

  

 

 

 

Osim celobrojnih promenljivih, koristićemo i promenljive koje sadrže realne brojeve. Kada prijavljujemo (deklarišemo) realnu promenljivu, pišemo reč double ispred njenog imena, na primer:

double a;

 

 

 

Možda se pitate zašto se za cele i realne vrednosti ne koristi samo jedan tip podataka. Uostalom, celi brojevi su ujedno i realni. Odgovor je logičan, bar sa inženjerskog stanovišta: računar pravi razliku između celih i realnih brojeva jer rad sa celim brojevima može da obavlja jednostavnije i efikasnije nego sa realnim, pa time štedi vreme, prostor i energiju.