Pisanje programa ne znači da će program odmah raditi ispravno.
U stvarnom programiranju greške su potpuno normalan deo razvoja softvera.
Čak i iskusni programeri svakodnevno nailaze na greške.
Razlika je samo u tome što iskusni programeri znaju:
- kako da prepoznaju grešku,
- gde da je traže,
- i kako da je isprave.
Za početnike je veoma važno da shvate jednu ključnu stvar:
Greška nije neuspeh.
Greška je informacija da nešto u programu nije napisano ili izvedeno kako treba.
U C++ programiranju najčešće ćemo se susretati sa dve osnovne vrste grešaka:
- syntax errors (sintaksne greške)
- runtime errors (greške tokom izvršavanja)
Kasnije ćemo upoznati i treću grupu:
- logical errors (logičke greške)
U ovom tekstu fokusiraćemo se na prve dve.
Šta je greška u programu?
Greška predstavlja problem zbog koga program:
- ne može da se kompajlira,
- ne može da se pokrene,
- ili daje neočekivano ponašanje.
Na primer:
- nedostaje tačka-zarez,
- pokušavamo da delimo nulom,
- koristimo nepostojeću promenljivu,
- program se sruši tokom rada.
Sve su to različite vrste grešaka.

Šta je syntax error?
Syntax error je greška u pisanju koda.
Reč:
syntax
odnosi se na pravila jezika.
Kao što u gramatici prirodnog jezika postoje pravila, tako i C++ ima pravila pisanja.
Ako prekršimo ta pravila, kompajler prijavljuje grešku.
Program se tada ne može kompajlirati.
Primer sintaksne greške — nedostaje tačka-zarez
Pogrešno:
#include <iostream>
using namespace std;
int main() {
cout << "Hello"
return 0;
}
Problem:
nedostaje:
;
Ispravno:
cout << "Hello";
Primer sintaksne greške — pogrešno ime
Pogrešno:
coout << "Hello";
Kompajler ne zna šta je:
coout
Ispravno:
cout << "Hello";
Primer sintaksne greške — nedostaje zagrada
Pogrešno:
int main() {
cout << "Test";
Nedostaje završna zagrada:
}
Program neće moći da se kompajlira.
Kako prepoznati syntax error?
Sintaksne greške se pojavljuju tokom kompajliranja.
Code::Blocks ili drugi IDE obično prikazuju:
- crvene poruke,
- broj linije,
- opis problema.
Primer poruke:
expected ';' before return
To znači:
Kompajler očekuje tačka-zarez pre naredbe return.

Najčešće syntax greške početnika
Veoma česte greške:
- zaboravljen
; - pogrešno napisano
cout - pogrešno napisano
cin - nedostaju navodnici
- nedostaje zagrada
- pogrešan naziv promenljive
- zaboravljen
#include <iostream>
Primer:
Pogrešno:
cout << Hello;
Ispravno:
cout << "Hello";
Šta je runtime error?
Runtime error je greška koja se javlja kada se program pokrene.
Za razliku od syntax greške:
- program se uspešno kompajlira,
- ali se problem javlja tokom izvršavanja.
Reč:
runtime
znači vreme izvršavanja programa.
To su greške koje nastaju kada program radi.
Primer runtime greške — deljenje nulom
Primer:
#include <iostream>
using namespace std;
int main() {
int a = 10;
int b = 0;
cout << a / b;
return 0;
}
Program će se kompajlirati.
Ali tokom izvršavanja dolazi do problema.
Deljenje nulom nije dozvoljeno.
Rezultat može biti:
- rušenje programa,
- neočekivana vrednost,
- ili sistemska greška.
Primer runtime greške — pristup neispravnoj memoriji
Kasnije ćemo učiti nizove i pokazivače, ali važno je znati da runtime greške mogu nastati i kada program pokuša da pristupi nevažećoj memoriji.
Na primer:
int niz[3];
cout << niz[100];
Program može:
- raditi nepredvidivo,
- dati pogrešan rezultat,
- ili se srušiti.
Primer runtime greške — loš unos korisnika
Primer:
int broj;
cin >> broj;
Ako korisnik umesto broja unese:
abc
program može ući u grešno stanje.
To je takođe problem tokom izvršavanja.

Syntax vs Runtime — ključna razlika
Syntax error
Problem:
kod nije pravilno napisan
Kada se javlja:
tokom kompajliranja
Da li se program pokreće:
NE
Primer:
cout << "Test"
Runtime error
Problem:
program radi, ali dolazi do problema tokom izvršavanja
Kada se javlja:
tokom rada programa
Da li se program pokreće:
DA
Primer:
10 / 0
Jednostavno pravilo:
Ako program ne može da se pokrene → često je syntax error.
Ako se pokrene pa pukne → često je runtime error.
Kako rešavati syntax greške?
Koraci:
- Pročitati poruku kompajlera
- Pogledati liniju koju IDE označava
- Proveriti:
- tačka-zarez
- zagrade
- navodnike
- nazive promenljivih
- Ispraviti grešku
- Ponovo kompajlirati
Važno:
Greška nekad nije baš na liniji koju IDE prijavi.
Ponekad je problem nekoliko linija iznad.
Kako rešavati runtime greške?
Koraci:
- Pogledati gde se program ruši
- Proveriti ulazne podatke
- Proveriti matematičke operacije
- Proveriti promenljive
- Dodati pomoćne ispise
Primer:
cout << "a = " << a << endl;
cout << "b = " << b << endl;
Na ovaj način možemo lakše videti gde nastaje problem.
Šta je debugging?
Proces pronalaženja i ispravljanja grešaka zove se:
debugging
To je jedan od najvažnijih delova programiranja.
Programiranje nije samo pisanje koda.
Programiranje je i:
- testiranje,
- analiza,
- popravljanje grešaka.
Dobri programeri mnogo vremena provode upravo u debugging procesu.
Kako početnici najčešće reaguju na greške?
Tipična reakcija:
“Program ne radi.”
Ali pravo pitanje je:
- Da li se ne kompajlira?
- Da li se pokrene pa pukne?
- Da li daje pogrešan rezultat?
Ta razlika je veoma važna.
Primer poređenja
Primer 1:
cout << "Hello"
Problem:
syntax error
Zašto:
nedostaje ;
Primer 2:
int x = 10;
int y = 0;
cout << x / y;
Problem:
runtime error
Zašto:
deljenje nulom
Primer 3:
cin >> broj;
korisnik unese:
tekst
Problem:
runtime problem
Najčešće greške početnika
Syntax:
- zaboravljen
; - pogrešan
cout - pogrešan
cin - zagrade
- navodnici
Runtime:
- deljenje nulom
- loš unos
- neispravni podaci
- izlazak van granica niza
- rad sa neinicijalizovanim vrednostima

Zašto je važno razumeti greške?
Ako razumemo vrstu greške:
- brže je rešavamo,
- manje gubimo vreme,
- bolje razumemo program.
Početnici često paniče kada vide crvenu poruku.
Ali te poruke zapravo pomažu.
Kompajler pokušava da objasni problem.
Rezime
U ovom tekstu naučili smo dve važne vrste grešaka:
Syntax errors
Greške u pisanju koda koje sprečavaju kompajliranje.
Runtime errors
Greške koje se pojavljuju tokom rada programa.
Važno je naučiti da razlikujemo ove dve vrste jer je način rešavanja potpuno drugačiji.
Greške nisu znak neuspeha.
One su sastavni deo svakog programiranja.
Mini test
- Kada nastaje syntax error?
a) Tokom kompajliranja
b) Tokom rada programa
c) Nakon gašenja računara - Šta je runtime error?
a) Greška tokom izvršavanja
b) Greška u tastaturi
c) Problem sa monitorom - Šta je syntax error?
a) Loš unos korisnika
b) Greška u pisanju koda
c) Deljenje nulom - Šta radi debugging?
a) Briše program
b) Pronalaženje i ispravljanje grešaka
c) Kompajlira kod - Koji primer je runtime problem?
a)
cout << "Test"
b)
10 / 0
c)
coout << "Test";
Zadaci za vežbu
- Namerno napravi syntax grešku sa nedostajućim
; - Namerno napiši pogrešno
cout - Napravi program sa deljenjem nulom
- Napravi program koji traži broj, pa unesi tekst
- Zapiši razliku između syntax i runtime grešaka
Domaći zadatak
Napravi 3 kratka programa:
Program 1:
jedna syntax greška
Program 2:
jedna runtime greška
Program 3:
ispravna verzija oba programa
Objasni:
- šta je bio problem,
- kada se javio,
- kako si ga rešio.
