Više o Roster Softu
Sve usluge
Sva gotova rešenja
Svi članci

27. Prioritet operatora i redosled izvršavanja izraza u C++

U prethodnim lekcijama upoznali smo aritmetičke operatore, operatore poređenja, logičke operatore, operatore dodele, kao i inkrement i dekrement. Naučili smo kako da sabiramo i množimo brojeve, upoređujemo vrednosti, proveravamo uslove i menjamo sadržaj promenljivih. Međutim, šta se dešava kada u jednom izrazu koristimo više različitih operatora? Pogledajmo jednostavan primer: int rezultat = 5 + 3 […]

Mala škola C++Lekcija 27 od 30
U prethodnim lekcijama upoznali smo aritmetičke operatore, operatore poređenja, logičke operatore, operatore dodele, kao i inkrement i dekrement. Naučili smo kako da sabiramo i množimo brojeve, upoređujemo vrednosti, proveravamo uslove i menjamo sadržaj promenljivih. Međutim, šta se dešava kada u jednom izrazu koristimo više različitih operatora? Pogledajmo jednostavan primer:
int rezultat = 5 + 3 * 2;
Da li će rezultat biti 16 ili 11? Ako računamo sleva nadesno, mogli bismo prvo sabrati 5 i 3, a zatim rezultat pomnožiti sa 2. Dobili bismo 16. Ali C++ ne grupiše ovaj izraz na taj način. Množenje ima viši prioritet od sabiranja, pa se izraz tumači kao:
int rezultat = 5 + (3 * 2);
Zato je rezultat 11. Ovo jednostavno pravilo postaje mnogo važnije kada kombinujemo aritmetičke, logičke i relacione operatore, kao i operatore dodele. U ovoj lekciji detaljno ćemo objasniti prioritet operatora (operator precedence), asocijativnost (associativity) i redosled evaluacije (evaluation order). Naučićemo kako C++ tumači složene izraze, kako zagrade utiču na rezultat i zbog čega dva naizgled slična izraza mogu proizvesti potpuno različite vrednosti. Posebnu pažnju posvetićemo tipičnim fakultetskim zadacima i greškama koje se često pojavljuju na kolokvijumima i ispitima.

Šta ćemo naučiti u ovoj lekciji?

Nakon završetka lekcije znaćete da:
  • Objasnite šta je prioritet operatora.
  • Razlikujete prioritet i asocijativnost operatora.
  • Razumete razliku između grupisanja izraza i redosleda evaluacije.
  • Koristite zagrade za jasno definisanje matematičkih izraza.
  • Pravilno kombinujete aritmetičke, relacione i logičke operatore.
  • Objasnite kako se tumače izrazi sa operatorima &&, || i !.
  • Razumete prioritet operatora dodele.
  • Prepoznate problematične izraze sa inkrementom i dekrementom.
  • Primenite kratkospojnu evaluaciju logičkih izraza.
  • Samostalno rešavate složenije zadatke sa više operatora.

1. Šta je prioritet operatora?

Prioritet operatora određuje kako se operatori grupišu u izrazu kada nisu korišćene zagrade koje bi drugačije odredile strukturu izraza. U matematici već poznajemo pravilo da množenje i deljenje imaju prednost nad sabiranjem i oduzimanjem. Na primer:
[ 5 + 3 times 2 = 11 ]
Isto pravilo važi i u C++ jeziku.
#include <iostream>
using namespace std;

int main() {
    int rezultat = 5 + 3 * 2;

    cout << "Rezultat: " << rezultat;

    return 0;
}
Rezultat:
Rezultat: 11
Zašto? Zato što se izraz grupiše ovako:
5 + (3 * 2)
Najpre izračunavamo vrednost proizvoda 3 i 2, a zatim je sabiramo sa 5.

Šta ako želimo drugačiji rezultat?

Koristićemo zagrade:
int rezultat = (5 + 3) * 2;
Sada je rezultat 16. Zagrade nam omogućavaju da jasno odredimo kako se izraz grupiše.
Hijerarhija prioriteta operatora u programskom jeziku C++

2. Pregled prioriteta operatora u C++

C++ ima više nivoa prioriteta operatora. Za početak je najvažnije da razumemo redosled operatora koje smo do sada naučili. U sledećoj tabeli prikazani su najvažniji operatori, od višeg ka nižem prioritetu. | Prioritet | Operatori | Značenje | |—|—|—| | 1 — najviši | x++, x-- | Postfiksni inkrement i dekrement | | 2 | ++x, --x, !, unarni +, unarni - | Prefiksni i unarni operatori | | 3 | *, /, % | Množenje, deljenje, ostatak | | 4 | +, - | Sabiranje i oduzimanje | | 5 | <, <=, >, >= | Relacioni operatori | | 6 | ==, != | Jednakost i nejednakost | | 7 | && | Logičko I | | 8 | || | Logičko ILI | | 9 | =, +=, -=, *=, /=, %= | Operatori dodele | Ovo je pojednostavljena tabela namenjena početnicima. C++ ima i druge operatore, kao što su bitovski operatori, operator uslovnog izraza ?:, operatori pomeranja bitova, operator pristupa članovima i drugi. Njih ćemo obrađivati u odgovarajućim lekcijama. Važno je zapamtiti da veći prioritet određuje čvršće grupisanje operatora, ali ne znači automatski da se svaki operand tog operatora izračunava pre svih ostalih operanada u izrazu.

3. Aritmetički operatori i njihov prioritet

Aritmetički operatori predstavljaju najjednostavniji primer prioriteta. Pogledajmo:
int rezultat = 20 - 4 * 3;
Izraz se grupiše kao:
20 - (4 * 3)
Dobijamo:
20 - 12 = 8

Primer sa više operatora

#include <iostream>
using namespace std;

int main() {
    int rezultat = 10 + 20 / 5 * 2 - 3;

    cout << rezultat;

    return 0;
}
Rezultat:
15
Kako dolazimo do rezultata? Prvo se grupišu deljenje i množenje, koji imaju isti prioritet i levu asocijativnost:
10 + ((20 / 5) * 2) - 3
Računamo:
20 / 5 = 4
4 * 2 = 8
10 + 8 - 3 = 15
Konačan rezultat je 15.

Važna napomena o celobrojnom deljenju

Pogledajmo:
int rezultat = 5 + 7 / 2;
Pošto su oba operanda deljenja celobrojna:
7 / 2 = 3
Zato je:
5 + 3 = 8
Ako želimo decimalni rezultat, možemo koristiti:
double rezultat = 5 + 7.0 / 2;
Rezultat je 8.5. Ovo pokazuje da rezultat ne zavisi samo od prioriteta operatora već i od tipova podataka.

4. Asocijativnost operatora

Šta se dešava kada dva operatora imaju isti prioritet? Tada je važna njihova asocijativnost. Asocijativnost određuje način grupisanja operatora istog prioriteta. Većina aritmetičkih operatora grupiše se sleva nadesno.

Primer — oduzimanje

int rezultat = 20 - 5 - 3;
Izraz se grupiše ovako:
(20 - 5) - 3
Rezultat:
15 - 3 = 12
Ne grupiše se ovako:
20 - (5 - 3)
jer bi tada rezultat bio 18.

Primer — deljenje

int rezultat = 100 / 10 / 2;
Grupisanje je:
(100 / 10) / 2
Rezultat je 5.

Primer — operator dodele

Operator dodele ima desnu asocijativnost.
int a, b, c;

a = b = c = 10;
Izraz se grupiše kao:
a = (b = (c = 10));
Sve tri promenljive dobijaju vrednost 10.

Poređenje

Izraz Grupisanje Rezultat
20 - 5 - 3 (20 - 5) - 3 12
100 / 10 / 2 (100 / 10) / 2 5
2 * 3 * 4 (2 * 3) * 4 24
a = b = 10 a = (b = 10) Obe promenljive su 10
Uticaj zagrada na redosled izračunavanja izraza u C++

5. Prioritet nije isto što i redosled evaluacije

Ovo je jedno od najvažnijih pravila u celoj lekciji. Studenti često pretpostavljaju da se operator sa višim prioritetom uvek izvršava prvi. Međutim, prioritet određuje strukturu izraza, dok pravila evaluacije određuju kada se izračunavaju pojedini operandi i kada nastupaju njihove promene stanja. Pogledajmo:
int rezultat = funkcijaA() + funkcijaB() * funkcijaC();
Zbog prioriteta operatora izraz se grupiše kao:
int rezultat = funkcijaA() +
               (funkcijaB() * funkcijaC());
Ali to ne garantuje da će funkcijaB() i funkcijaC() biti pozvane pre funkcijaA(). Redosled evaluacije operanada aritmetičkih operatora uglavnom nije određen.

Demonstracija

#include <iostream>
using namespace std;

int funkcijaA() {
    cout << "A ";
    return 2;
}

int funkcijaB() {
    cout << "B ";
    return 3;
}

int funkcijaC() {
    cout << "C ";
    return 4;
}

int main() {
    int rezultat =
        funkcijaA() + funkcijaB() * funkcijaC();

    cout << "nRezultat: " << rezultat;

    return 0;
}
Numerički rezultat je 14, ali redosled ispisa slova A, B i C ne treba unapred pretpostavljati. Zato je u ozbiljnom programiranju važno razlikovati grupisanje operatora od redosleda pozivanja funkcija. Ako nam je potreban tačno određen redosled, bolje je da pozive napišemo u odvojenim naredbama.
int a = funkcijaA();
int b = funkcijaB();
int c = funkcijaC();

int rezultat = a + b * c;
Sada je redosled pozivanja funkcija jasan.

6. Zagrade i njihova uloga

Zagrade su najjednostavniji način da složeni izraz učinimo jasnijim. Primer:
int rezultat = 5 + 3 * 2;
Rezultat je 11. Ali:
int rezultat = (5 + 3) * 2;
Rezultat je 16.

Više nivoa zagrada

Pogledajmo:
int rezultat = ((10 + 5) * 2) - (12 / 3);
Prvo izračunavamo izraze u unutrašnjim zagradama:
10 + 5 = 15
12 / 3 = 4
Zatim:
15 * 2 = 30
Na kraju:
30 - 4 = 26
Rezultat je 26. Zagrade nisu korisne samo kada menjamo uobičajeno grupisanje. One mogu učiniti kod preglednijim čak i kada nisu matematički neophodne. Na primer:
bool uslov = (godine >= 18) && (imaDozvolu == true);
Ovaj zapis je čitljiviji od izraza bez zagrada, iako se u ovom slučaju grupisanje ne menja.
Množenje se izvršava pre sabiranja u C++ izrazu

7. Prioritet relacionih operatora

Relacioni operatori služe za poređenje vrednosti. To su:
<
<=
>
>=
Oni imaju niži prioritet od aritmetičkih operatora. Pogledajmo:
bool rezultat = 5 + 3 > 7;
Izraz se grupiše kao:
bool rezultat = (5 + 3) > 7;
Prvo računamo zbir:
5 + 3 = 8
Zatim proveravamo:
8 > 7
Rezultat je true.

Kompletan primer

#include <iostream>
using namespace std;

int main() {
    int a = 5;
    int b = 3;

    bool rezultat = a + b > 7;

    cout << boolalpha;
    cout << rezultat;

    return 0;
}
Rezultat:
true
Manipulator boolalpha omogućava da se logičke vrednosti ispisuju kao true i false, umesto kao 1 i 0.

8. Relacioni operatori i operatori jednakosti

Operatori jednakosti su:
==
!=
Oni imaju niži prioritet od operatora <, <=, > i >=. Pogledajmo:
bool rezultat = 5 < 10 == true;
Izraz se grupiše kao:
bool rezultat = (5 < 10) == true;
Prvo se proverava:
5 < 10
Rezultat je true. Zatim se poredi:
true == true
Konačan rezultat je true.

Česta greška — lančana poređenja

U matematici možemo napisati:
[ 1 < x < 10 ]
Međutim, u C++ jeziku sledeći izraz ne znači isto:
1 < x < 10
On se grupiše kao:
(1 < x) < 10
Prvi deo daje logičku vrednost true ili false, koja se zatim konvertuje u 1 ili 0 radi sledećeg poređenja. Pošto su i 0 i 1 manji od 10, ceo izraz će u ovom primeru biti tačan bez obzira na vrednost promenljive x, pod pretpostavkom da je njeno poređenje sa 1 ispravno definisano. Ispravno zapisujemo:
x > 1 && x < 10
Ovo je posebno važno kod zadataka koji proveravaju da li se broj nalazi u određenom intervalu.

9. Prioritet logičkih operatora

Logički operatori omogućavaju kombinovanje više uslova. Do sada smo upoznali:
!
&&
||
Njihov prioritet je:
  1. ! — logička negacija.
  2. && — logičko I.
  3. || — logičko ILI.
Pogledajmo primer:
bool rezultat = true || false && false;
Izraz se grupiše kao:
bool rezultat = true || (false && false);
Prvo posmatramo:
false && false = false
Zatim:
true || false = true
Konačan rezultat je true.

Primer sa zagradama

Ako napišemo:
bool rezultat = (true || false) && false;
rezultat je false. Dakle, zagrade mogu potpuno promeniti značenje logičkog izraza.

Pregled

Izraz Rezultat
true || false && false true
(true || false) && false false
!false && true true
!(false && true) true
!true || false false
Prioritet logičkih operatora NE, I i ILI u C++

10. Kratkospojna evaluacija — short-circuit evaluation

Logički operatori && i || imaju još jednu veoma važnu osobinu. To je kratkospojna evaluacija.

Operator &&

Kod operatora &&, ako je prvi operand netačan, drugi se ne evaluira. Primer:
int x = 0;

bool rezultat = (x != 0) && (10 / x > 2);
Pošto je:
x != 0
netačno, drugi deo izraza se ne evaluira. Zbog toga ne dolazi do deljenja nulom.

Operator ||

Kod operatora ||, ako je prvi operand tačan, drugi se ne evaluira. Primer:
int x = 5;

bool rezultat = (x > 0) || (x++ > 10);
Pošto je prvi uslov tačan, drugi se ne evaluira. Zato promenljiva x ostaje 5.

Kompletan primer

#include <iostream>
using namespace std;

int main() {
    int x = 5;

    bool rezultat = (x > 0) || (x++ > 10);

    cout << boolalpha;
    cout << "Rezultat: " << rezultat << endl;
    cout << "x = " << x << endl;

    return 0;
}
Rezultat:
Rezultat: true
x = 5
Ovo pravilo je izuzetno korisno za pisanje bezbednih uslova.

11. Operatori dodele imaju nizak prioritet

Operator dodele = ima niži prioritet od većine operatora koje smo do sada učili. Primer:
int x;

x = 5 + 3 * 2;
Izraz se grupiše kao:
x = (5 + (3 * 2));
Rezultat je 11.

Kombinovana dodela

int x = 10;

x += 5 * 2;
Ovo znači da promenljivoj x dodajemo proizvod 5 i 2. Rezultat je 20.

Primer sa više dodela

int a, b, c;

a = b = c = 5 + 3;
Prvo se računa vrednost izraza 5 + 3, a zatim se ona dodeljuje promenljivama. Sve tri promenljive dobijaju vrednost 8.

12. Inkrement, dekrement i prioritet operatora

U prethodnoj lekciji naučili smo razliku između prefiksnog i postfiksnog inkrementa. Sada ćemo videti kako se oni ponašaju u izrazima.

Primer 1 — prefiksni inkrement

int x = 5;

int rezultat = ++x * 2;
Prvo se promenljiva povećava na 6. Rezultat je:
12

Primer 2 — postfiksni inkrement

int x = 5;

int rezultat = x++ * 2;
Izraz x++ daje prethodnu vrednost 5. Zato je:
rezultat = 10
Nakon naredbe x ima vrednost 6.

Primer 3 — inkrement i sabiranje

int x = 4;

int rezultat = 10 + ++x;
Rezultat je 15, a x postaje 5.

Primer 4 — postfiksni dekrement

int x = 8;

int rezultat = x-- + 2;
Rezultat je 10, a x postaje 7.

Važno upozorenje

Nemojte kombinovati više promena iste promenljive u izrazu bez razumevanja pravila sekvenciranja. Na primer:
int x = 5;

int rezultat = x++ + ++x;
Ovaj izraz ima nedefinisano ponašanje. Ne postoji jedan garantovan rezultat. Najbolja praksa je da složene promene promenljivih razdvojimo u više naredbi.

13. Interaktivni kalkulator prioriteta operatora

Pogledajmo kako zagrade i prioritet utiču na rezultat matematičkog izraza.
Promenite vrednosti i uporedite rezultate
Grupisanje izraza

5 + (3 × 2)

Rezultat

11

Simulator koristi decimalnu aritmetiku JavaScript-a za prikaz primera. U C++ jeziku tipovi podataka i opseg vrednosti mogu uticati na rezultat.

14. Tipični fakultetski zadaci

Zadatak 1 — aritmetički izraz

Odrediti rezultat:
int rezultat = 8 + 4 * 3 - 6 / 2;
Grupisanje:
8 + (4 * 3) - (6 / 2)
Računamo:
8 + 12 - 3 = 17
Rezultat je 17.

Zadatak 2 — zagrade

Odrediti rezultat:
int rezultat = (8 + 4) * (3 - 1);
Računamo:
12 * 2 = 24
Rezultat je 24.

Zadatak 3 — logički izraz

Odrediti rezultat:
bool rezultat = 5 > 3 && 2 < 1 || 10 == 10;
Grupisanje:
bool rezultat =
    ((5 > 3) && (2 < 1)) || (10 == 10);
Dobijamo:
true && false || true
Zatim:
false || true
Rezultat je true.

Zadatak 4 — kombinovana dodela

int x = 10;

x += 2 * 3;
x -= 4;
Prvo:
x = 10 + 6 = 16
Zatim:
x = 16 - 4 = 12
Konačna vrednost je 12.

Zadatak 5 — inkrement i dekrement

int x = 5;

int a = ++x;
int b = x--;
int c = x + 2;
Pratimo vrednosti:
Naredba x a b c
int x = 5; 5 — — —
a = ++x; 6 6 — —
b = x--; 5 6 6 —
c = x + 2; 5 6 6 7
Konačne vrednosti:
x = 5
a = 6
b = 6
c = 7
Operator dodele u C++ pridružuje vrednosti zdesna nalevo

15. Praktični projekat — kalkulator složenih izraza

Napravimo program koji omogućava korisniku da unese tri broja i uporedi rezultate izraza sa različitim grupisanjem. Program će izračunati:
a + b * c
i:
(a + b) * c

Kompletan program

#include <iostream>
using namespace std;

int main() {
    double a, b, c;

    cout << "Unesite a: ";
    cin >> a;

    cout << "Unesite b: ";
    cin >> b;

    cout << "Unesite c: ";
    cin >> c;

    if (!cin) {
        cout << "Neispravan unos.";
        return 1;
    }

    double rezultat1 = a + b * c;
    double rezultat2 = (a + b) * c;

    cout << "n--- REZULTATI ---n";

    cout << "a + b * c = "
         << rezultat1 << endl;

    cout << "(a + b) * c = "
         << rezultat2 << endl;

    return 0;
}

Primer izvršavanja

Unesite a: 5
Unesite b: 3
Unesite c: 2

--- REZULTATI ---
a + b * c = 11
(a + b) * c = 16
Ovaj program pokazuje koliko zagrade mogu uticati na rezultat.

Dodatni zadatak

Proširite program tako da računa i sledeće izraze:
a * b + c
a * (b + c)
(a + b + c) / 3
Proverite da li različito grupisanje menja rezultat i objasnite zbog čega.

16. Najčešće greške početnika

Greška 1 — pretpostavka da se sve računa sleva nadesno

int x = 5 + 3 * 2;
Rezultat nije 16, već 11.

Greška 2 — pogrešno korišćenje zagrada

int x = (5 + 3 * 2);
Ove zagrade ne menjaju grupisanje unutrašnjeg izraza. Ako želimo rezultat 16, pišemo:
int x = (5 + 3) * 2;

Greška 3 — mešanje prioriteta i redosleda evaluacije

Prioritet operatora ne garantuje redosled evaluacije svih operanada.

Greška 4 — lančana poređenja

Pogrešno:
if (1 < x < 10)
Ispravno:
if (x > 1 && x < 10)

Greška 5 — pogrešno grupisanje logičkih operatora

a || b && c
grupiše se kao:
a || (b && c)
Ako želimo drugačije ponašanje, koristimo zagrade.

Greška 6 — opasni izrazi sa inkrementom

int rezultat = x++ + ++x;
Ovakav izraz ima nedefinisano ponašanje.

Greška 7 — zanemarivanje tipova podataka

double rezultat = 5 / 2;
Rezultat je 2.0, a ne 2.5, jer se prvo izvršava celobrojno deljenje. Ispravno:
double rezultat = 5.0 / 2;

Greška 8 — nepotrebno složeni izrazi

Kod poput:
int rezultat = a + b * c - d / e + f % g;
može biti ispravan, ali nije uvek najčitljiviji. Kada je izraz složen, često je bolje koristiti dodatne zagrade ili pomoćne promenljive.

17. Kako pravilno rešavati ispitne zadatke?

Kada na kolokvijumu dobijete složen izraz, preporučuje se sledeći postupak:
  1. Proverite koje promenljive i tipovi podataka učestvuju u izrazu.
  2. Uočite zagrade i odredite strukturu izraza.
  3. Prepoznajte operatore višeg i nižeg prioriteta.
  4. Proverite asocijativnost operatora istog prioriteta.
  5. Ako izraz menja promenljive, proverite pravila sekvenciranja.
  6. Izračunajte vrednosti jednostavnijih podizraza.
  7. Proverite moguće celobrojno deljenje i konverzije tipova.
  8. Tek na kraju odredite konačan rezultat.
Posebno je važno da ne pokušavate da izračunate numerički rezultat izraza koji ima nedefinisano ponašanje.
Bezbedno izračunavanje izraza bez nejasnih sporednih efekata

18. Zaključak

U ovoj lekciji naučili smo kako C++ tumači složene izraze koji sadrže više operatora. Najvažnije je zapamtiti:
  • Prioritet određuje grupisanje operatora.
  • Asocijativnost određuje grupisanje operatora istog prioriteta.
  • Redosled evaluacije nije isto što i prioritet.
  • Zagrade omogućavaju jasno definisanje strukture izraza.
  • Množenje, deljenje i modulo imaju viši prioritet od sabiranja i oduzimanja.
  • Relacioni operatori imaju viši prioritet od operatora jednakosti.
  • Operator && ima viši prioritet od ||.
  • Operatori dodele imaju nizak prioritet.
  • Logički operatori && i || koriste kratkospojnu evaluaciju.
  • Složeni izrazi sa višestrukim promenama iste promenljive mogu imati nedefinisano ponašanje.
Razumevanje prioriteta operatora nije samo važno za polaganje ispita — ono predstavlja osnovu za pisanje tačnog, čitljivog i pouzdanog C++ koda.

19. Mini-test — proverite svoje znanje

Pokušajte da odgovorite bez pokretanja programa. Pitanje 1. Koliko iznosi rezultat?
int x = 5 + 3 * 2;
a) 16 b) 11 c) 13 Pitanje 2. Koliko iznosi rezultat?
int x = (5 + 3) * 2;
a) 11 b) 16 c) 13 Pitanje 3. Koliko iznosi rezultat?
int x = 20 - 5 - 3;
a) 12 b) 18 c) 22 Pitanje 4. Koji operator ima viši prioritet? a) + b) * c) = Pitanje 5. Koliko iznosi rezultat?
bool x = true || false && false;
a) true b) false Pitanje 6. Kako se grupiše izraz?
a = b = 10;
a) (a = b) = 10 b) a = (b = 10) Pitanje 7. Koliko iznosi rezultat?
int x = 5;
x += 2 * 3;
a) 21 b) 11 c) 30 Pitanje 8. Da li prioritet operatora uvek određuje redosled evaluacije operanada? a) Da. b) Ne. Pitanje 9. Šta nije u redu sa sledećim izrazom?
int x = 5;
int y = x++ + ++x;
a) Izraz uvek daje 12. b) Izraz ima nedefinisano ponašanje. c) Izraz uvek daje 11. Pitanje 10. Koliko iznosi rezultat?
double x = 5 / 2;
a) 2.5 b) 2.0 c) 3.0

Rešenja mini-testa

Proverite odgovore nakon što završite test. Prikaži rešenja

20. Zadaci za samostalnu vežbu

Zadatak 1 — aritmetički operatori Odrediti rezultat:
int x = 10 + 5 * 2;
Zadatak 2 — zagrade Odrediti rezultat:
int x = (10 + 5) * 2;
Zadatak 3 — deljenje i množenje Odrediti rezultat:
int x = 100 / 5 * 2;
Zadatak 4 — logički operatori Odrediti rezultat:
bool x = true && false || true;
Zadatak 5 — relacioni operatori Odrediti rezultat:
bool x = 5 + 3 > 7;
Zadatak 6 — kombinovana dodela Odrediti konačnu vrednost promenljive:
int x = 10;

x += 3 * 2;
x -= 4;
Zadatak 7 — inkrement Odrediti konačne vrednosti:
int x = 5;

int a = ++x;
int b = x++;
Zadatak 8 — interval Napisati ispravan C++ uslov koji proverava da li se broj nalazi između 10 i 20, uključujući obe granice. Zadatak 9 — složeni izraz Odrediti rezultat:
int x = 5 + 3 * 4 - 12 / 3;
Zadatak 10 — analiza ispravnosti Objasniti zašto sledeći izraz nije bezbedan:
int x = 5;

int rezultat = x++ + ++x;

21. Domaći zadatak — kalkulator prioriteta operatora

Napraviti C++ program koji omogućava korisniku da unese tri broja i uporedi rezultate različitih matematičkih izraza. Program treba da izračuna:
a + b * c
(a + b) * c
a * b + c
a * (b + c)
(a + b + c) / 3
Zatim treba da prikaže sve rezultate i objasni zašto se pojedini rezultati razlikuju. Dodatni zahtevi:
  • Koristiti tip double.
  • Proveriti ispravnost unosa.
  • Prikazati rezultate u preglednom formatu.
  • Dodati bar jedan primer sa logičkim operatorima.
  • Koristiti zagrade tamo gde poboljšavaju čitljivost.
Dodatni izazov: Omogućiti korisniku da izabere jedan od ponuđenih izraza i da program prikaže postupak njegovog izračunavanja.

Najava naredne lekcije

U sledećoj lekciji prelazimo sa operatora na jednu od najvažnijih oblasti programiranja — upravljanje tokom izvršavanja programa. Tema 28 — Uslovna naredba if u C++: donošenje odluka u programu Naučićemo kako program može da donosi odluke na osnovu određenih uslova, kako se koristi naredba if i kako da pišemo programe koji različito reaguju na različite ulazne podatke.
Vaša privatnost nam je važna

Koristimo neophodne kolačiće da bi sajt i forme za upit ispravno radili, a uz vašu dozvolu i opcionalne kolačiće za analitiku, personalizaciju i marketing. Saznajte više.