Professional Documents
Culture Documents
Uvod U C
Uvod U C
C++ je objektno orjentirani programski jezik kojim su pisani mnogi današnji programi koje srećete u
svakodnevnom radu na računaru. Jezik je nastao osamdesetih godina 20.tog stoleća kao naprednija verzija C-
a. Postoji više verzija prevodioca (kompajlera) za C++, a najpoznatiji su: Dev C++; Microsoft Visual C++ i
Borland C++ Builder.
Prvi projekt
Kada ste instalirali Dev-C++ pokrenite ga i idite na File -> New -> Project. Odaberite ''Empty Project'' pa ga
imenujte kao ''Prvi_program'' (tako bez razmaka). Označite dolje desno C++ Project i uključite kvačicu na
''Make Default Language''. Kliknite na OK, zatim na Save .
Kada ste to napravili, idite na File -> New -> Source File i kliknite na Yes. S time ste dobili file gdje ćete
pisati vaš C++ kod.
#include <iostream>
using namespace std;
int main ()
{
cout << "Hello World!";
return 0;
}
Sada taj kod treba iskompajlirati. To ćete učiniti tako da pritisnete tipku F9 na tipkovnici. Program će se
kompajlirati i pokrenuti.
1
Program će se pojaviti i odmah nestati tako da nećete uspjeti vidjeti ništa. To možete riješiti tako da između
cout << ''Hello World'!'; i return 0; upišete
char a;
cin >> a;
Ovako pomoću cahr a; i cin >> a; deklariramo varijablu a i program očekuje da unesemo vrednost te
varijable pa se ne gasi.
#include <iostream>
Program zahtjeva od prevodioca da u program uključi biblioteku iostream koja je standardna ulazno/izlazna
biblioteka koja nam omogućuje ispis na ekranu.
Svi elementi standardne C++ biblioteke su deklarirani u ovome što piše namespace sa imenom std.
int main ()
Svaki program mora imati ni manje ni više nego jednu main funkciju. Sav kod unutar main zagrada se
izvršava. Int pretstavlja Integer (celi broj) što govori da će program pri završetku izvođenja programa vratiti
celi broj.
Ovo ispisuje Hello World! na ekran. Cout pretstavlja standardni ispisni tok. Mogli ste taj kod napisati i ovako
cout << ''Hello World“ <<endl;
A možete i jednostavno nastaviti rečenicu u novi red tako da napišete
Endl pretstavlja End Line (kraj linije) odnosno ispis u novi red. Tako bi svaka rečenica koju napišete bila u
redu ispod.
return 0;
Tom naredbom glavni program javlja operacijskom sistemu da je program uspešno završen.
Komentari
Kod je potrebno ponekad komentarisati kako se nebi izgubili u kodu, ili jednostavno kao potsetnik nečega.
2
Ovako možete komentirisati kod bez da taj tekst utiče na izvršavanje programa.
#include <iostream>
using namespace std;
int main ()
{
cout << "Hello World!"; // komentiram samo jednu liniju
char a;
cin >> a;
return 0;
}
Svaki program napisan u C-u ili C++ ima svoj izgled (strukturu).
U nastavku ćemo pokazati koji su elementi jedno programa napisanog u C++ programskom jeziku:
#include <cstdlib>
#include <iostream>
using namespace std;
int main()
{
deklaracija varijabli;
naredbe programa;
system ("PAUSE");
return 0;
}
Linije programa koje počinju s znakom # programske naredbe su pretprocesorske naredbe C programa
prevodiocu (kompajleru) koje se izvršavaju pre kompajliranja. Prevodilac ili kompajler je zaseban program
koji je "zadužen" za prevođenje naredbi programskog jezika u strojni jezik.
Naredba #include <iostream> poziva datoteku iostream.h koja sadrži skup naredbi zaduženih za
komunikaciju s programom, a <cstdlib> cstdlib.h koja sadrži opis funkcija ulaza-izlaza za C++.
Unutar vitičastih zagrada nalaze se deklaracije varijabli te slede naredbe programa koje čine naredbe za ulaz,
računanje i ispis rezultata.
Naredbom using namespace std; obavještavamo prevodioca da ćemo koristiti standardne nazive naredbi. Ta
se naredba može zameniti i naredbom #include <stdio> na početku programa. Prva linija programa, main,
definiše funkciju ili grupu zavisnih programskih naredbi. Funkcije su sastavni delovi programa u C++u te se
ta glavna ili osnovna zove main. Većina programa sadrži još nekoliko dodatnih funkcija koje imaju svoje
ime. Svaka naredba u programu završava sa točkom-zarezom ( ; ), osim uslovne naredbe (if-else).
Naredbom system ("PAUSE"); zaustavljamo program dok ne pritisnemo neku tipku. To nam je važno
prilikom izvođenja programa. Naredba return 0; najčešće stoji na kraju programa, a ustvari govori da
3
funkcija main() ne vraća vrednost. Uz program poželjno je pisati i komentar tako da onaj ko čita program
može shvatiti o čemu se radi. Komentari se pišu unutar sledećih znakova /* */ ili se bilo gde u redu upišu
znakovi za dve kose crte // Naredbe programa nalaze se unutar vitičastih.
#include <cstdlib>
#include <iostream>
using namespace std;
int main()
{
int a,b,c; /*deklaracija varijabli*/
a=5;
b=3;
c=a+b; //racunanje
cout << c; //ispis zbroja
system ("PAUSE");
return 0;
}
#include <cstdlib>
#include <iostream>
using namespace std;
int main()
{
cout << "Pozdrav";
cout << " ";
cout << " 2. razredu ";
cout << endl;
system ("PAUSE");
return 0;
}
4
Naredba cout
Naredbom cout ispisujemo tekst, vrednosti matematičkih izraza i vrednosti varijabli u programu. Tekst koji
želimo ispisati navodimo unutar navodnika, a varijable čije vrednosti želimo ispisati pišemo iza naredbe. Na
primer, naredbom
cout<<"Pozdrav";
cout <<2+2;
cout<< a;
#include <cstdlib>
#include <iostream>
using namespace std;
int main()
{
cout << "Pozdrav";
system ("PAUSE");
return 0;
}
#include <cstdlib>
#include <iostream>
using namespace std;
int main()
{
int a;
cout<< "Unesi broj: "; /*ispis poruke*/
cin >>a; /*unos broja*/
cout << " Kvadrat broja a je "<<a*a; /*ispis kvadrata*/
cout << endl; /*ispis praznog retka*/
system ("PAUSE");
return 0;
}
5
Formatirani upis i ispis
Upoznali smo naredbe za upis i ispis cin i cout. One ne zahtijevaju nikakvu posebnu naznaku po kojem će se
formatu vršiti unos i ispis podataka i koriste se u slučajevima kada nam format zapisa nije važan. Međutim
postoje situacije kada moramo navoditi format zapisa.
Funkcija koja je zadužena za spremanje podataka u određene varijable zove se scanf. Ona se može koristiti
za različite tipove podataka koji se na različite načine spremaju u memoriju. Zbog toga je potrebno funkciji
scanf opisati koji tip podataka želimo čitati. Opći oblik funkcije scanf je:
opis_formata sačinjava niz znakova koji sadrže jedan ili više opisanih formata. Opis formata se sastoji od oznake
postotka (%) iza kojeg slijedi slovo, koje opisuje tip podatka koji se upotrebljava. Jedan ili više opisa formata je
smješteno između dvostrukih navodnika, a najčešće korišteni opisi formata nalaze se u priloženoj tablici.
Sledeći neophodni deo funkcije scanf je adresa na koju će podaci biti spremljeni. Potrebno je napomenuti da
je potrebno navesti adresu varijable pomoću znaka &. Svaka varijabla u C++u ima specifičnu adresu u
memoriji.
Potrebno je voditi računa da se ova funkcija koristi za definirani oblik i tip podatka koji je potrebno uneti.
Međutim, ako ulazni podatak ne odgovara ulaznom formatu, ponašanje funkcije je nepredvidivo što rezultira
pogrešnim izvođenjem programa.
Stoga je važno da vodite računa o pravilnom zapisivanju opisa formata kojeg koristite.
Suprotnost funkciji scanf, koja daje vrednost varijabli, je funkcija printf, koja pokazuje vrednost varijabli na
ekranu. Poziv funkcije printf izgleda:
6
printf ("opis_formata",varijabla,varijabla,...);
#include <cstdlib>
#include <iostream>
using namespace std;
int main()
{
float a,b,c,d;
printf ("\nUnesi prvi broj");
scanf("%f",&a);
printf("\nUnesi drugi broj");
scanf("%f",&b);
c=a+b;
d=a*b;
printf ("\n Proizvod je %f , a zbir %f ",d,c);
system ("PAUSE");
return 0;
}
7
Primer 2: Napiši program kojim će te uneti radijus kruga i izračunati opseg i površinu kruga.
#include <cstdlib>
#include <iostream>
using namespace std;
int main()
{
const float pi=3.14159;
float r,o,p;
printf(" \n Unesi radijus kruga = ");
scanf ("%f",&r);
p=r*r*pi;
o=2*r*pi;
printf(" \n Poršina kruga je %f = ",p);
printf(" \n Opseg kruga je %f = ",o);
system ("PAUSE");
return 0;
}
U naredbi scanf i printf se može pisati više formata zapisa zajedno što znači da unosimo i ispisujemo više
vrednosti varijabli istovremeno.
Formati zapisa, u naredbi scanf se mogu odvojiti razmakom ili zarezom što uslovljava i način upisa (na
primer s razmakom unosimo 2 3 , a zarezom 2,3)
#include <cstdlib>
#include <iostream>
using namespace std;
int main()
{
int a,b,c;
printf("\nUnesi dva broja= ");
scanf("%d %d",&a,&b);
c=a+b;
printf ("\n Zbir brojeva %d %d je %d ",a,b,c);
system ("PAUSE");
return 0;
}
#include <cstdlib>
#include <iostream>
8
using namespace std;
int main()
{
int a,b,c;
printf("\nUnesi dva broja= ");
scanf("%d,%d",&a,&b);
c=a+b;
printf ("\n Zbir brojeva %d %d je %d ",a,b,c);
system ("PAUSE");
return 0;
}
Objašnjenje:
Broj mesta rezervisan za ispis detaljnije se reguliše brojem ispred formata.
Na primjer za ispis celih brojeva možemo napisati:
printf ("\n Zbir brojeva %3d %2d je %4d ",a,b,c); gdje stoji da će za prvi broj u ispisu biti rezervisana 3
mesta, za drugi 2, za rezultat 4 mesta.
Za ispis decimalnih brojeva možemo napisati:
printf ("\n Zbir brojeva %.4f %.2f je %.3f ",a,b,c);
gdje %f znači da se radi o decimalnim brojevima, .4 označava da će za ispis decimalnog dela prvog broja
biti rezervisana 4 mesta, za decimalni deo drugog 2, a za decimalni deo trećeg broja 3 mesta.
9
Varijable
Što su varijable?
Varijable postoje u svakom programskom jeziku. Varijable u programu su promjenjive veličine. Mogu biti:
- brojčane (celi ili decimalni broj)
- znakovne
Najbolje je da se svaka varijabla koja se koristi u programu deklariše na početku programa, ali u C++ se
može deklarisati bilo gdje u programu. Deklaracija se sastoji od tipa podatka i jednog ili više imena varijabli.
Osim deklaracije ponekad je varijable potrebno i inicijalizirati tj. postaviti na početnu vrednost, najčešće je to
0, ali može biti i 1 (na primjer kod množenja brojeva). Ako se varijabla ne postavi na početnu vrednost ona
će biti nepredvidiva tj. početna vrednost može biti bilo koji broj pa će program krivo raditi (računati).
Imena varijabli
Sva imena varijabli trebaju započinjati slovom engleskog alfabeta ili znakom _. Za ostatak imena koriste se
slova ili brojevi. Znakovi interpunkcije, odnosno kontrolni znakovi se ne smiju koristiti. Za prepoznavanje
imena varijabli bitna su prva 32 znaka. Broj znakova iznad 32 se zanemaruje. Postoje razlike između malih i
velikih slova tj. program ih prepoznaje kao različite znakove u imenima varijabli.
Varijabla broj deklarirana je kao celi broj. Varijabla znak deklarisana je kao znak tj. ona može biti bilo koje
slovo ili broj, ali brojevi koji su deklarisani kao znak ne mogu se oduzimati, zbrajati, množiti i deliti niti nad
njima mogu vršiti bilo koje matematičke operacije.
Varijabla temp deklarisana je kao decimalni broj.
Evo primera kako rečenicu iz prošlog primera upisati u varijablu i zatim pomoću varijable ispisati istu na
ekran.
#include<iostream>
using namespace std;
main()
{
string recenica;
recenica = "Hello World!";
cout << recenica;
char a;
cin >> a;
return 0;
}
10
Dakle sa
string recenica
deklarišemo da će varijabla ''recenica'' biti string odnosno skup nekakvih znakova. String je tip podatka.
Zapamtite samo da se svaka varijabla mora deklarisati pre pridruživanja vredosti.
Sa ovim ispisujemo varijablu. Primetite da nema navodnika. Ako želite nešto pored toga napisati što nije
sadržano u varijabli možete to napisati ovako.
Dakle prvo ide varijabla ''recenica'' bez navodnika, zatim opet stavljamo strelice za ispis i u navodnike
pišemo nastavak rečenice. Primjetite razmak između navodnika i slova W u drugoj rečenici. To smo napravili
tako da reči ne budu spojene jer će se ispisati u isti red. Prisetite se da ako želite u novi red ispisati nešto
možete to napraviti sa ''<<endl''. Također u novi red možete ići ako napišete negde u navodnicima \n, npr.
#include<iostream>
using namespace std;
main()
{
int a, b, rezultat;
a = 7;
b = 12;
rezultat = a + b;
cout << "Zbir ta dva broja je " << rezultat;
char x;
cin >> x;
return 0;
}
Kao što string označava niz znakova, tako int označava integer odnosno ceo broj. Znači sve što će biti
pridodano varijablama a, b i rezultat će biti ceo broj (nikakvi decimalni brojevi, slova, drugi znakovi nego
11
samo ceo broj).
Primjetite da smo ovdje protiv nestajanja prozora koristili drugu varijablu da ne bi došlo do konflikta.
Deklarisati varijable možete ovako kao u primeru a možete i svaku posebno na ovaj način:
int a;
int b;
int rezultat;
Nakon deklarisanja varijabli sledi naravno pridodavanje vrednosti tim varijablama. Pridodajemo varijabli a
broj 7, varijabli b broj 12 a varijabla rezultat je onaj zbroj koji daju varijable a i b. U ovom slučaju 7 + 12 =
19. Znači varijabli "rezultat" se pridružuje vrednost 19.
int a = 7;
int b = 12;
int rezultat = a + b;
#include<iostream>
using namespace std;
main()
{
int a, b, rezultat;
cout << "Unesite prvi broj: ";
cin >> a;
cout << "Unesite drugi broj: ";
cin >> b;
rezultat = a + b;
cout << "Zbir ta dva broja je " << rezultat;
char x
cin >> x;
return 0;
}
Dakle, ovo je skoro isto kao i prethodni primer samo što ovde imamo
cin >> a;
Program očekuje da ćete napisati neki broj i kada vi napišete taj broj on će ga spremiti u varijablu "a". Isto
tako i za varijablu "b".
12
Signed i Unsigned
Ovo koristimo za varijable sa predznakom i bez predznaka.
Ako stavite
unsigned int a;
onda varijabli "a" nećete moći pridružiti broj sa predznakom (npr. -12) a ako umesto unsigned napišete
signed ili ostavite bez toga onda ćete moći upisati predznak.
Doseg varijabli
Varijable mogu biti globalne ili lokalne. Globalne varijable su one varijable koje su deklarisane u glavnom
telu source koda, izvan svih funkcija dok su lokalne varijable one varijable koje su deklarisane u funkciji ili
bloku.
main()
{
int a, b, rezultat;
a = 2;
b = 5;
rezultat = a + b;
cout << rezultat;
char x;
cin >> x;
return 0;
}
int a, b, rezultat;
main()
{ a = 2;
b = 5;
rezultat = a + b;
cout << rezultat;
char x;
cin >> x;
return 0;
}
13
Globalnim varijablama se može pristupiti bilo gde u kodu, čak i u funkcijama dok je lokalnim varijablama
moguće pristupiti samo unutar vitičastih zagrada { i }
NAPOMENA: sve varijable moraju početi sa slovom ili donjom crticom _ . Ne smeju početi brojevima niti
ičim drugim. Osim toga, sve varijable u svom nazivu smeju imati samo slova, brojeve (od drugog mjesta na
dalje), i crtice (_), a ne smeju sadržati razmake, navodnike i slične simbole.
asm, auto, bool, break, case, catch, char, class, const, const_cast, continue, default, delete, do, double,
dynamic_cast, else, enum, explicit, export, extern, false, float, for, friend, goto, if, inline, int, long, mutable,
namespace, new, operator, private, protected, public, register, reinterpret_cast, return, short, signed, sizeof,
static, static_cast, struct, switch, template, this, throw, true, try, typedef, typeid, typename, union, unsigned,
using, virtual, void, volatile, wchar_t, while, and, and_eq, bitand, bitor, compl, not, not_eq, or, or_eq, xor,
xor_eq
Još jedna napomena: C++ je case sensitive jezik, odnosno osetljiv na velika i mala slova. Tako da recenica i
RecEnica nije ista varijabla.
14
Tipovi podataka
Svaki tip podatak zauzima određenu veličinu (memoriju) u računaru i ima određeni doseg ili opseg. U
sledećoj tablici je prikaz vrsta podataka, veličine u bitovima koju taj podatak zauzima u memoriji računara i
opseg u kojem se može nalaziti u programskom jeziku C.
Osnovni tip celog broja je int. On može imati negativnu ili pozitivnu vrednost unutar prikazanih granica. Tip
podatka long koristi se kada nam je za varijablu potrebno veće područje. Tipovi podataka mogu biti
predznačni signed i to znači da je u jednom bitu smeštena informacija o tome da li je broj pozitivan ili
negativan. Neke varijable ne mogu nikada poprimiti negativnu vrednost pa ih deklariramo kao nepredznačne
ili unsigned.
Realni brojevi imaju decimalni deo. Zovemo ih još i floating-point (plivajući zarez) brojevima. Ime su dobili
po načinu predstavljanja takvih brojeva u memoriji računara. Taj tip podatka naziva se float. Tipovi podataka
doble i long double su poput tipa float, jedino omogućavaju da se smesti veći broj znakova sa većom
preciznošću..
Za znakovni tip podataka koristimo se sa char (što je isto kao i signed char). Ukoliko želimo koristiti
kompletan set znakova treba upotrebiti unsigned char. Kada baratamo s rečima i rečenicama možemo
koristiti i tip - string (niz znakova).
Često se javlja potreba da kod izvođenja programa želimo zadržati sadržaj ekrana da pročitamo rezultate
izvođenje programa. Za to će nam poslužiti naredba getch() koja učita jedan znak i nastavlja program, bez
pritiska na tipku Enter. Često se koristi kao poslednja naredba u programu,a nalazi se u datoteci
funkcija conio.h
15
Konstante (nepromenjive)
Varijable su promenjive dok su konstante izrazi sa fiksnim, nepromenjivim vrednostima. Ključna reč u
deklarisanju i inicijalizaciju konstante je const iza koje sledi tip konstante i njena vrednost.
Primeri konstanti:
Morate inicirati konstantu kada je napravite, i ne možete joj prirdružiti novu vrednost kasnije. Posle kada je
konstanta inicirana njena vrednost je nepromenjiva.
Literal konstanta je vrednost upisana direktno u program kada god je to potrebno. Npr.
godine je varijabla tipa integer, a 24 je literal konstanta. Ne možete pridružiti vrednost na 24, i ta vrednost ne
može biti promenjena.
U ovom primeru, broj 15 je Literal konstanta. Kod bi bio puno jednostavniji za čitanje i jednostavniji za
održavati ako biste tu vrednost zamenili simboličnom konstantom.
Ako kasnije odlučite promeniti broj studenata po ucionici, mozete to uciniti tako da definišete konstantu
ucenika_po_ucionici bez potrebe za izmenama u svakom delu koda gde ste koristili tu vrednost.
16
Primetite da ucenika_po_ucionici nema konkretni tip (int, char itd.). Svaki put kad preprocesor vidi reč
ucenika_po_razredu upisaće broj 15 u tekst.
Zbog toga što se preprocesor pokreće pre kompajlera, kompjuter nikad ne vidi vašu konstantu, vidi broj 15.
U ovom primeru se isto deklariše simbolična konstanta imenovana ucenika_po_ucionici, ali ovaj put
ucenika_po_ucionici je napisano kao unsigned int (bez predznaka, celi broj)
Aritmetički operatori
Operator je simbol koji predstavlja specifičnu akciju. Već smo kod primjera zbrajanja koristili operator "+".
Osim operatora + imamo još nekoliko aritmetičkih operatora.
Aritmetički operatori jednako dobro rade sa negativnim brojevima kao i sa pozitivnim, sa izuzetkom modulus
operatora, rade sa celim brojevima jednako dobro kao i sa brojevima sa pomičnim zarezom.
Neki programski jezici imaju eksponent operator, što nije slučaj kod C++. Umesto toga C++ ima ugrađenu
funkciju pow koja je definirana u standardnoj biblioteci cmath
pow funkcija ima dva arumenta. Prvi argument je baza (glavni broj), a drugi broj je eksponent.
Pogledajmo primer:
#include <iostream>
#include <cmath> // ukljucili smo biblioteku cmath
using namespace std;
17
int main()
{
double baza, eksponent, rezultat;
cout << "Unesite broj ";
cin >> baza;
cout << "Unesite eksponent ";
cin >> eksponent;
rezultat = pow(baza, eksponent);
cout << "Rezultat = " << rezultat;
char x;
cin >> x;
return 0;
}
Prvo novo što morate primetiti je to da smo uključili biblioteku cmath. Zatim smo deklarisali broj, eksponent
i rezultat kao double tip. (Zbog ogromnih brojeva ako npr. upišete 10 na 10-u). Zatim smo im sa cin >>
pridružili vrijednosti, te su te vrednosti zapravo parametri u funkciji pow .
Matematičke funkcije
x++
++x
x poprimiti vrednost 2.
18
Međutim u matematičkom izrazu vrlo je važno na kojem mestu pišemo inkrement jer on utiče na konačan
rezultat. Pogledajmo primer
Neka je x=5
Napišemo li u programu: y=++x to znači da će se prvo x uvećati za jedan a zatim pridružiti varijabli y.
Rezultat je: x=6 i y=6
Ako napišemo y=x++, tada se prvo x pridruži varijabli y pa se x-u doda jedan. Rezultat je: y=5, x=6.
Odnosni operatori
U programskom jeziku C++ kao i u mnogim drugim programskim jezicima postoje odnosni operatori. Takvi
operatori se npr. koriste ako želite napraviti program koji će iz baze podataka odrediti osobe sa više od 30
godina i slično.
Odnosne naredbe
Kao i aritmetički operatori, odnosni operatori su binarni tj. uspoređuju dva operanda. Naredba sa dva
operanda i odnosnim operatorom zove se odnosna naredba (eng. relational expression.)
Rezultat odnosne naredbe je Boolean vrednost odnosno istinu ili laž (true ili false).
U ovoj tablici se koriste konkretne ( literal ) vrednosti koje ne mogu biti promenjene. 4 je konkretna vrednost
(konstanta), i ona se ne može menjati .
19
Isprobajmo sada ovaj kod koji umesto konstanti koristi varijable
#include <iostream>
using namespace std;
int main()
{
int a = 4, b = 5;
cout << (a > b) << endl;
cout << (a >= b) << endl;
cout << (a == b) << endl;
cout << (a <= b) << endl;
cout << (a < b) << endl;
char x;
cin >> x;
return 0;
}
Ovaj program će ispisati:
0
0
0
1
1
S time da 0 predstalja laž (false) a 1 istinu (true).
Logički operatori
Moguće je u testu kombinovati više od jednog uslova. To postižemo upotrebom jednog od tri logička operatora
prikazana u slijedećoj tablici:
Operator Značenje
&& I (AND), svi uslovi moraju biti istiniti da bi rezultat uslova bio istinit
|| ILI (OR), najmanje jedan od uslova mora biti istinit da bi rezultat uslova bio istinit
! NE (NOT), negacija uslova
Primer 1:
(a==c)&&(a>d)
rezultat je istinit samo ukoliko je a jednak c i a veći od d. Programski jezik C radi tako da ukoliko je prvi
uslov (sa leve strane) lažan, drugi uslov se neće testirati, jer je I izraz lažan, ukoliko je jedan od uslova lažan.
Primer 2:
(a==c)||(a>d)
rezultat je istinit ukoliko je bilo koji od uslova istinit. Ukoliko je prvi uslov istinit, nije potrebno dalje
testiranje, rezultat je svakako istinit.
20
Naredba IF
Naredbu IF koristimo onda kada želimo izvršiti neki kod samo ako je vrednost nekog odnosnog izraza
istinita.
Evo primera:
#include<iostream>
using namespace std;
main()
{
string password;
cout << "Unesite password: ";
cin >> password;
if(password=="G2105Z") {
cout << "Password tacan!"; }
char x;
cin >> x;
return 0;
}
Definisali smo string password, sa cin naredbom upisali ono što korisnik upiše u varijablu password, zatim
slijedi provera sa IF naredbom.
Naravno nije IF naredba ograničena samo na proveravanje tačnosti. Možete koristiti sve odnosne operatore
koje smo objasnili u prošlom tutorijalu. Npr:
#include <iostream>
using namespace std;
int main()
{
int godine;
cout << "Koliko imate godina? ";
cin >> godine;
if (godine < 18 ) {
cout << "Maloletni ste!"; }
char x;
cin >> x;
return 0;
}
U svrhu učenja isprobajte sve odnosne operatore. Npr. probajte napisati mali program koji će proveriti da li je
broj deljiv sa 2 (bez ostatka).
21
If i if..else naredbe
if (uslovni izraz){
naredba ili blok naredbi;
}
Uslov može biti jednostavan relacijski izraz ili kombinacija izraza spojenih s logičkim operatorima. Izraz
mora biti unutar okruglih zagrada. Naredba if radi tako da se ispita uslov i u skladu sa istinitom ili lažnom
vrednošću uslovnog izraza izvršavaju naredbe. Ukoliko je izraz istinit, naredba ili blok naredbi, koje slede, se
izvršavaju. Ukoliko želimo koristiti blok naredbi, one moraju biti zatvorene unutar vitičastih zagrada.
Primer 1: Unesi broj. Ako je unešeni broj pozitivan ispiši njegov prethodnik, a ako je negativan ispiši njegov
sledbenik.
#include <cstdlib>
#include <iostream>
using namespace std;
int main()
{
int a;
printf ("Unesi broj:");
scanf ("%d",&a);
if (a>0)
printf("\nPrethodnik je %d",a-1);
if (a<0)
printf("\nSledbenik je %d",a+1);
system ("PAUSE");
return 0;
}
Primer 2: Napiši program kojim će se uneti tri realna broja i ispisati najmanji.
#include <cstdlib>
#include <iostream>
using namespace std;
int main()
{
float a,b,c,min;
printf("Unesi brojeve");
scanf("%f %f %f", &a,&b,&c);
min=a;
if (b<min)
min=b;
if (c<min)
min=c;
22
printf ("\n Najmanji je %f",min);
system ("PAUSE");
return 0;
}
if (uslovni izraz){
naredba ili blok naredbi;
}
else{
alternativna naredba ili blok naredbi;
}
Izjave if...else je moguće ugrađivati jednu u drugu. U sledećem primeru zelena petlja je ugrađena u plavu.
Primer 1: Uneti dva broja. Ako je prvi veći od drugog ispisati njihov zbir, a ako nije (prvi veći od drugog)
ispisati njihov proizvod.
23
#include <cstdlib>
#include <iostream>
using namespace std;
int main()
{
int a,b;
cout<<"Unesite brojeve: ";
cin >>a>>b;
if (a>b)
cout<<"\nZbir je"<<a+b;
else
cout <<"\nProizvod je "<<a*b;
system ("PAUSE");
return 0;
}
Primer 2:
#include <iostream>
using namespace std;
int main()
{
int godine;
cout << "Koliko imate godina? ";
cin >> godine;
if (godine <= 17 ) {
cout << "Maloletni ste!"; }
else {
cout << "Stari ste"; }
char x;
cin >> x;
return 0;
}
Naredba switch
Ova naredba služi za proveravanje više uslova odjednom i izvršavanja onoliko radnji koliko je uslova
zadovoljeno odnosno tačno.
Ova naredba je korisna ukoliko trebamo proveriti više "stvari" a da ne petljamo sa if i else if petljom.
24
Format ove naredbe je:
switch (varijabla){
case mogucnost1:
naredba;
break;
case mogucnost2:
naredba;
break;
...
}
switch (varijabla){
case mogucnost1:
Ovaj deo proverava da li je varijabla iz prvog reda jednaka nizu znakova (u ovom slucaju) mogucnost1.
Obavezno : (dvotočka) na kraju.
naredba;
Ovde upisujemo naredbu ili više njih koje će se izvršavati ukoliko je zadovoljen uslov.
break;
case mogucnost2:
naredba;
break;
Ovo je samo primer kako treba postaviti drugi uslov, tako ćemo dodavati i ostale.
Ukoliko želimo da postavimo neki defaultni uslov tj. naredbe koje će se izvršiti ukoliko
ni jedan uslov nije zadovoljen onda ćemo dodati sledeće:
default:
naredbe;
Ovdje na kraju ne ide break; zato što se podrazumeva da će default kod biti na kraju tj. zadnji uslov i da neće
biti više uslova.
25
Ovo sve malo zvuči zamršeno al na konkretnom primeru će to jednostavnije izgledati.
#include<iostream.h>
int main()
{
int broj=0;
switch (broj){
//provjerava da li je broj=1
case 1:
//ako postoji ispisuje 'Broj je 1!!!'
cout<<"Broj je 1!!!"<<endl;
break;
case 2:
cout<<"Broj je 2!!!"<<endl;
break;
Evo sad za one koji misle da je lakse sa if petljama ispetljati vise uslova:
switch (x) {
case 1:
cout << "x je 1";
break;
case 2:
cout << "x je 2";
break;
default:
cout << "x je nepoznato";
}
if (x == 1) {
cout << "x je 1";
}
else if (x == 2) {
cout << "x je 2";
}
else {
cout << "x je nepoznato";
}
26
Vidimo jednu if i jednu else if petlju - zamislite da moramo ispitati 50 vrednosti tek onda bi bilo petljanja.
Zato toplo preporučujem naredbu switch kod ispitivanja više razlicitih vrednosti. Dok kod jednostavnih tu je
naravno if i if else.
Naredba while
Sintaxa:
while (uslov)
{
naredbe;
}
npr:
broj=1;
while (broj<5)
{
broj=broj+1; // proizvoljna naredba
}
#include<iostream.h>
int main ()
{
int broj=1;
while (broj<5)
{
broj=broj+1; //ovo se moze napisati i broj+=1;
}
cout<<"Ovo je broj: "<<broj<<endl;
return 0;
}
27
Primer : Za niz od 5 različitih brojeva ispiši zbir.
#include <cstdlib>
#include <iostream>
using namespace std;
int main()
{
int i, broj,s=0;
cout <<"Program za sabiranje 5 unesenih brojeva ";
i=1; /*postavljanje varijable i na vrijednost 1 */
while (i<=5) /* petlja se vrti dok je varijabla i<=5 */
{
cout <<"\n Unesi "<<i<<". broj = ";
cin >> broj; /* unos broja */
s=s+broj; /* pribrajanje unesenog broja varijabli s(suma)*/
i=i+1; /*povećavanje kontrolne varijable za 1 te vraćanje na ispitivanje uvjeta u while*/
}
cout<<"\n Zbir unesenih brojeva je "<<s<<"\n";
system ("PAUSE");
return 0;
}
Petlja do-while
Za razliku od while petlje ova petlja se izvede bar jednom jer se uslov ispituje na kraju. Naredbe unutar petlje
se izvršavaju dok je uslov istinit (dok ne postane lažan). Kada uslov postane lažan završava se petlja i
program se nastavlja izvođenjem prve naredbe iza zagrade petlje.
do{
blok naredbi;
} while (uslov);
Obratite pažnju da se tačka-zarez koja označava kraj naredbe zapisuje iza while uslova.
#include <cstdlib>
#include <iostream>
using namespace std;
int main()
{
int p, N, zbroj=0;
cout<<" \nUnesi broj N= ";
cin>>N;
p=1;
28
do {
zbroj = zbroj + p;
p=p+2;
} while (p<=N);
cout<< "\nZbir neparnih brojeva od 1 do " << N<< " iznosi "<< zbir<<"\n";
system ("PAUSE");
return 0;
}
Naredba For
Kod while petlje smo imali da inicijlizaciju, uslov i promenu vrednosti imamo na više razlicitih mesta, dok je
kod for petlje to sve sadržano u jednom redu koda tj. između malih zagrada.
Format naredbe:
for (inicijalizacija; uslov; promena vrednosti) naredba;.
ili korišćenjem blokova:
for (inicijalizacija; uslov; promjena vrednosti) {
naredbe;
}
uslov mora biti logicki izraz, dok inicijalizacija i promena vrednosti mogu biti bilo kakvi izrazi. Petlja ce se
izvršavati dok je uslov tačan.
Npr:
//Brojac unatrag
#include <iostream.h>
int main ()
{
for (int i=10; i>0; i--) {
cout << i << ", ";
}
cout << "PALI!";
return 0;
}
10,
9,
8,
29
7,
6,
5,
4,
3,
2,
1,
PALI!
#include <cstdlib>
#include <iostream>
using namespace std;
int main()
{
int i;
for (i=1; i<=20; i++)
{
cout <<i << "\n";
}
cout<<"Nakon petlje i je "<< i<<"\n";
system ("PAUSE");
return 0;
}
#include <cstdlib>
#include <iostream>
using namespace std;
int main()
{
int i;
for (i=20;i<=450; i+=2) /*početna vrednost kontrolne varijable je 20 i u svakom koraku povećava za 2*/
{
cout <<i << "\n";
}
system ("PAUSE");
return 0;
}
30
Primer 3: Ispiši sve prirodne brojeve između 1 i N, koji su deljivi sa 3.
#include <cstdlib>
#include <iostream>
using namespace std;
int main()
{
int N;
cout<<"Unesi broj N = ";
cin >>N;
cout<<"Brojevi djeljivi s 3 do "<<N<<" su \n";
for (int i=1;i<=N; i++)
{
if( i%3==0)
{
cout<<i<<"\n";
}
}
system ("PAUSE");
return 0;
}
31
Funkcije
Funkcija u glavni program vraća jednu ili ni jednu vrednost ovisno o tipu funkcije.
Za prenos vrednosti u nadređeni program koristi se naredba return;.
Funkcija se poziva na sledeći način: ime_funkcije (stvarna lista_argumenata);
Funkcije se mogu pozivati u izrazima, petljama, ili kao argumenti u pozivima drugih funkcija. Svaka
korišćena funkcija se mora najaviti pre poziva.
Primjer1: Napiši program kojim će se pomnožiti cela dva broja i ispisati rezultat.
Za množenje celih brojeva napiši funkciju.
#include <iostream>
#include <math.h>
using namespace std;
#include <iostream>
#include <math.h>
using namespace std;
int najmanji (int x, int y, int z) /*funkcija za određivanje najmanjeg*/
{
int min;
min=x;
if (y<min)
min=y;
if(z<min)
min=z;
return min;
}
int main()
{
int p,a,b,c;
cout << " Unesi brojeve (npr. 5 6 8)==>"; /*upis brojeva*/
cin >>a>>b>>c;
p=najmanji (a,b,c); /*poziv funkcije*/
cout << " Najmanji je : "<<p<<"\n" ;
system ("PAUSE");
return 0;
}
Nizovi su skupine podataka koji predstavljaju jednu celinu. Niz ima svoje ime, tip i veličinu tj. zauzima
određeni prostor u memoriji računara. Niz se sastoji od članova niza koji imaju svoju vrednost i mesto.
Nizove u procesu programiranja koristimo kada želimo raditi s više podataka koji su organizovani u redove i
kolone, istog su tima i imena. Međusobno se razlikuju po svom mestu i svojoj vrednosti. Stoga ih je lakše
premeštati, sortirati i s njima vršiti različite računske operacije.
33
U definisanom nizu, svi podaci moraju biti istog tipa. Nije moguće u istom nizu mešati brojeve i znakove.
Svaki član u nizu ima svoje mesto. To mesto zovemo INDEKS. Osim mesta, član niza ima i svoju vrednost.
Na primer: Ako kažemo da želimo definisati niz imena A koji će imati 7 članova i čiji će članovi biti celi
brojevi, onda ćemo u programu to napisati ovako: int A[7].
Grafički prikazano to izgleda ovako :
Vidimo da svaki član niza ima svoje mesto (indeks) i vrednost. Indeksi idu od 0-6 i zapisani su unutar
uglastih zagrada.
Tako na primer vrednost prvog člana niza A[0] iznosi 2, drugog ,A[1], iznosi 3 itd. Uočimo da članovi niza
idu od 0 - N-1 gdje je N broj koji govori koliko ima članova niza.
Postoje jednodimenzionalni, dvodimenzionalni i višedimenzionalni nizovi.
Jednodimenzionalni nizovi
Jednodimenzionalni nizovi imaju samo jedan niz podataka. Na primjer niz A prikazan u tablici ima 7
članova. Svi članovi su celi brojevi i nalaze se poređani jedan iza drugoga (u nizu).
Kako bi program mogao raditi s nizom, na početku programa potrebno je rezervisati memoriju u računaru. To
se radi naredbom za deklaraciju koja se zapisuje:
int a[10] – da je deklarisan niz celih brojeva koji se zove a i ima ukupno 10 članova, a indeksi idu od 0 do 9
float X[8] – da je deklarisan niz decimalnih brojeva koji se zove X i ima ukupno 8 članova , a indeksi idu od
0 do 7
char b[30] - da je deklarisan niz od 30 znakova
Važno je uvek rezervisati više prostora nego što će se u programu koristiti jer će inače program neće raditi
ispravno. Na primer ako deklarišemo niz od 10 članova, a unesemo 20 program neće moći prihvatiti
preostalih 10 članova niza te neće moći ispravno raditi.
Niz se može zadati unutar programa ili unosom s tastature (naredbom cin ili scanf). Ako se vrednosti članova
niza zadaju unutar programa navode se unutar vitičastih zagrada npr: naredbom A[6]={2,34,1,67,99,7}; je
zadan niz A kojeg čini 6 celih brojeva.
Kada se vrednosti članova niza unose preko tastature (naredbom cin) koristi se petlja for. Petljom for unose
se jedna po jedan član niza, povećavanjem kontrolne varijable za jedan. U nastavku je deo programskog koda
koji pokazuje unos članova niza pomoću petlje for.
34
for (i=0;i<N;i++) {
cin>>X[i];
}
for (i=0;i<N;i++) {
cout>>X[i];
}
Primer 1: Unesi N članova niza X pomoću for petlje te ih zatim ispiši takođe petljom for.
#include <cstdlib>
#include <iostream>
using namespace std;
int main()
{
int i,N;
int X[10]; /*deklaracija niza od 10 celih brojeva*/
cout<<"Zadaj 0<N<10 = "; /*broj N mora biti manji od 10 jer je deklarisan niz od maksimalno 10 članova*/
cin >>N;
for (i=0;i<N;i++) /*upis članova niza*/
{
cin>>X[i]; /*upis i-tog člana niza*/
}
#include <cstdlib>
#include <iostream>
using namespace std;
int main()
{
int polje[100];
int N,i, j, min;
cout<<"Unesi N:";
cin>>N;
for(i = 0; i < N; i++){
cout<< "\nUnesite polje[" << i << "] = ";
35
cin>> polje[i];
}
min=polje[0];
// traženje najmanjeg
for(i = 0; i < N; i++)
if(polje [i] < min){
min = polje[i];
}
cout<< "\n Najmanji je:"<<min;
system ("PAUSE");
return 0;
Dvodimenzionalni nizovi
A[0,0] = 2
A[0,1] = 4
A[0,2] = 5
A[0,3] = 6
A[1,0] = 0
A[1,1] = 3
A[1,2] = 9
A[1,3] = 7
int A[2][4]={{2,4,5,6},{0,3,9,7}};
gde prvi broj označava broj redova, a drugi broj kolona. Kao i kod jednodimenzionalnih nizova prvi red i
kolona imaju redni broj (index) 0.
Dvodimenzionalni niz, se u praksi koristi za rešavanje problema sortiranja niza (od najvećeg do najmanjeg ili
od najmanjeg do najvećeg). U nastavku je primer sortiranja niza korišćenjem jednodimenzionalnog niza.
Primer: Unesi niz od N celih brojeva te ispiši sortiran niz od najmanjeg do najvećeg.
36
#include <cstdlib>
#include <iostream>
using namespace std;
int main()
{
int A[100];
int N,i, j, temp;
cout<<"Unesi N:";
cin>>N;
for(i = 0; i < N; i++){
cout<< "\nUnesite polje[" << i << "] = ";
cin>> A[i];
}
// sortiranje niza (od najmanjeg do najvećeg)
for(i = 0; i < N-1; i++)
for(j = i+1; j < N; j++)
if(A [i] > A[j]){
temp = A[i];
A[i] = A[j];
A[j] = temp;
}
for(i = 0; i<N; i++)
cout<< A[i] << "\n";
system ("PAUSE");
return 0;
}
OBJAŠNJENJE:
47 78 17 53 61
A[0] A[1] A[2] A[3] A[4]
Za i=0, j će poprimiti vrednosti 1,2,3 i 4, što znači da će se element niza A[0] uspoređivati s ostalim
elementima. Svaki put kad neki drugi element bude manji od elementa A[0], doći će do zamene vrednosti.
i j
0 1 A[0]>A[1] Nejednakost nije tačna
47>78 pa ne treba ništa raditi
0 2 A[0]>A[2] Nejednakost je tačna pa
47>17 se zamene vrednosti -
sada je A[0]=17,
A[2]=47
0 3 A[0]>A[3] Nejednakost nije tačna
17>53 pa ne treba ništa raditi
0 4 A[0]>A[4] Nejednakost nije tačna
17>61 pa ne treba ništa raditi
Nakon prvog prolaza na prvom mestu u nizu nalazi se najmanji element. Niz sada izgleda:
37
17 78 47 53 61
A[0] A[1] A[2] A[3] A[4]
i j
1 2 A[1]>A[2] Nejednakost je tačna pa
78>47 se zamene vrednosti -
sada je A[1]=47,
A[2]=78
1 3 A[1]>A[3] Nejednakost nije tačna
47>53 pa ne treba ništa raditi
1 4 A[1]>A[4] Nejednakost nije tačna
47>61 pa ne treba ništa raditi
17 47 78 53 61
A[0] A[1] A[2] A[3] A[4]
i j
2 3 A[2]>A[3] Nejednakost je tačna pa
78>53 se zamene vrednosti -
sada je A[2]=53,
A[3]=78
2 4 A[2]>A[4] Nejednakost nije tačna
53>61 pa ne treba ništa raditi
17 47 53 78 61
A[0] A[1] A[2] A[3] A[4]
i j
3 4 A[3]>A[4] Nejednakost je tačna pa
78>61 se zamene vrednosti -
sada je A[3]=61,
A[4]=78
Petlje su završene, a samim tim i postupak sortiranja, niz koji će biti ispisan izgleda:
17 47 53 61 78
A[0] A[1] A[2] A[3] A[4]
Sortiranje je završeno!
38
Najefikasniji način predstvljanja podataka je u obliku tabela ili matrica.
Ovi zadaci u programu se predstavljaju kao dvodimenzionalni niz.
Matricu tj. tabelu možemo predstaviti na slijedeći način:
SLIKA:
i=1, n - i ide od 1 do n
j=1, m - j ide od 1 do m
n=3
m=3
i=1
j=2
npr:
int niz[20], i, j;
Nizovi znakova
39
Za rad s nizom znakova možemo koristiti tip string ili char. Tip string se koristi u slučaju ako radimo s
rečima ili rečenicama, dok tip char radi samo s jednim znakom. Definišemo li polje ili niz znakova tipa char,
takođe ćemo moći raditi s rečima ili rečenicama.
Pri radu s tipom string na početku programa potrebno je izvršiti deklaraciju varijabli naredbom;
string ime_varijable;
Budući da varijabla string prilikom unosa unese znakove jedne reči, postoji posebna naredba za unos cele
rečenice:
getline(cin, ime_varijable);
#include <cstdlib>
#include <iostream>
#include <string>
using namespace std;
int main()
{
string ime; /*deklaracija stringa (niza znakova)*/
cout <<"Unesi svoje ime =";
cin >> ime;
cout <<"Tvoje ime je "<<ime;
cout<<"\n"; /*prelazak u novi red*/
system ("PAUSE");
return 0;
}
Primer 2: Unesi rečenicu " Danas učim programiranje u C++." pa je nakon unosa ispiši.
#include <cstdlib>
#include <iostream>
#include <string>
using namespace std;
int main()
{
string recenica; /*deklaracija stringa (niza znakova) za varijablu recenica*/
cout <<"Unesi recenicu = ";
getline(cin,recenica); /*unos rečenice pomoću naredbe getline*/
cout <<recenica;
cout<<"\n";
system ("PAUSE");
return 0;
}
Niz znakova možemo i definisati kao jednodimenzionalni nizi čiji su elementi znakovi (char).
Znakovni niz se deklariše kao i svaki jednodimenzionalni niz, navođenjem tipa char, imena niza i njegove
40
dužine.
Kod određivanja dužine niza znakova treba voditi računa o tome da niz znakova završava nul znakom (\0)
koji zauzima jedno mesto niza.
Niz se inicijalizira tako da se njegov sadržaj navodi unutar dvostrukih navodnika ( " " ).
Za učitavanje i ispis znakovnih nizova mogu se koristiti standardni načini učitavanja i ispisivanja elemenata
jednodimenzionalnog niza
(cout , cin , printf(), scanf() u kombinaciji s petljom for).
Osim ovog načina mogu se koristiti i funkcije:
- gets() - koja omogućuje unošenje niza znakova sa standardnog ulaza.
- puts() - koja omogućava ispis niza znakova na standardni izlaz.
(Obe funkcije nalaze u biblioteci stdio.h)
Primer 1: Napiši program kojim se unosi niz znakova i ispisuje dužina učitanog niza.
#include <cstdlib>
#include <iostream>
#include <string>
using namespace std;
int main()
{
char a[80];
int i=0;
printf("upisite niz znakova: ");
gets(a);
while (a[i+1]!='\0')
i++;
printf("upisali ste niz: ");
puts(a);
printf("Duzina mu je %d znakova",i+1);
system ("PAUSE");
return 0;
}
Strukture
Struktura je kombinacija skupa istih ili različitih tipova podataka koje formira sam korisnik, prema vlastitim
potrebama.
U C++u se struktura zapisuje:
struct ime_strukture
{
najava članova strukture;
};
gde je struct ključna reč koja označava početak najave strukture, ime_strukture koju najavljujemo, a unutar
vitičastih zagrada navodimo sve čalnove (varijable) koje želimo kreirati strukturom.
Varijable strukture mogu se navesti :
a) odmah iza strukture
41
struct ime_strukture
{
najava članova strukture;
} lista strukturnih varijabli;
Članovima strukturne varijable pristupa se preko imena strukturne varijable i strukturne tačke (.) operatora.
U nastavku je primer programa u kojem se unose podaci za: ime, prezime, matični broj, prosek i datum
rođenja za sve učenike jednog razreda (najviše 40). Nakon unosa svih podataka traži se učenik s najboljim
prosekom te se na kraju programa ispisuju svi podaci za učenika koji ima najbolji prosek.
Objašnjenje: U programu su definisane dve strukture: datum i ucenik. Struktura datum služi za unos datuma
rođenja učenika i sastoji se od dana, meseca i godine rođenja. Druga struktura se zove ucenik i sadrži 2 niza
znakova (za ime i prezime), matični broj i prosek ocena. Niz (polje) razred se sastoji od struktura tipa
učenik.
Na primer poziv za ispis varijable razred[0].rodjendan.godina će dati za ispis godine rođenja za 1. učenika,
a razred[1].prosek će dati ispis proseka za 2. učenika.
#include <cstdlib>
#include <iostream>
#include <string>
using namespace std;
struct datum
{
int dan;
int mesec;
int godina;
};
struct ucenik
{
char ime[15];
char prezime[15];
int maticni;
float prosek;
struct datum rodjendan;
}razred[40]; /*polje razred čiji su članovi strukture tipa ucenik*/
int main()
{
int n,i,k;
float max;
cout<<"\nKoliko ima ucenika? ";
cin>>n;
if (n>40)
cout<<"Broj ucenika ne moze biti >40";
else
{
42
for(i=0;i<n;i++) /*unos podataka za pojedinog učenika u polje razred*/
{
cout<<"\nIme: ";
cin>>razred[i].ime;
cout<<"\nPrezime: ";
cin>>razred[i].prezime;
cout<<"\nMaticni u imeniku: ";
cin>>razred[i].maticni;
cout<<"\nProsek: ";
cin>>razred[i].prosek;
cout<<"\nRodjen dan: ";
cin>>razred[i].rodjendan.dan;
cout<<"\nRodjen mesec: ";
cin>>razred[i].rodjendan.mesec;
cout<<"\nRodjen godina: ";
cin>>razred[i].rodjendan.godina;
}
max=razred[0].prosek; /*određivanje najboljeg proseka*/
k=0;
for(i=0;i<n;i++)
if (max<razred[i].prosek)
{
max=razred[i].prosek;
k=i;
}
/*ispis najboljeg*/
cout<<"\nNajbolji je "<<razred[k].ime<<" " <<razred[k].prezime;
cout<<"\nMaticni broj "<<razred[k].maticni;
cout<<"\nRodjen "<<razred[k].rodjendan.dan<<razred[k].rodjendan.mesec<< razred[k].rodjendan.godina;
cout<<"\nS prosekom "<<razred[k].prosek;
}
system ("PAUSE");
return 0;
}
U nastavku je isti primer, ali uz korišćenje naredbi za formatirani ulaz i izlaz (printf i scanf).
#include <cstdlib>
#include <iostream>
#include <string>
using namespace std;
struct datum
{
int dan;
int mesec;
int godina;
};
43
struct ucenik
{
char ime[15];
char prezime[15];
int maticni;
float prosek;
struct datum rodjendan;
}razred[40]; /*polje razred koje se sastoji od struktura ucenik*/
int main()
{
int n,i,k;
float max;
printf("\nKoliko ima ucenika? ");
scanf("%d",&n);
if (n>40)
printf("Broj ucenika ne moze biti >40");
else
{
for(i=0;i<n;i++) /*unos podataka za svakog učenika u polje razred*/
{
printf("\nIme: ");
scanf("%s",razred[i].ime);
printf("\nPrezime: ");
scanf("%s",razred[i].prezime);
printf("\nMaticni u imeniku:");
scanf("%d",&razred[i].maticni);
printf("\nProsek: ");
scanf("%f",&razred[i].prosek);
printf("\nRodjen dan: ");
scanf("%d",&razred[i].rodjendan.dan);
printf("\nRodjen mesec: ");
scanf("%d",&razred[i].rodjendan.mesec);
printf("\nRodjen godina: ");
scanf("%d",&razred[i].rodjendan.godina);
}
max=razred[0].prosjek; /*određivanje najboljeg prosjeka*/
k=0;
for(i=0;i<n;i++)
if (max<razred[i].prosek)
{
max=razred[i].prosek;
k=i;
}
/*ispis najboljeg*/
printf("\nNajbolji je %s %s",razred[k].ime,razred[k].prezime);
printf("\nMaticni broj %d",razred[k].maticni);
printf("\nRodjen %d.%d.
44
%d",razred[k].rodjendan.dan,razred[k].rodjendan.mesec,razred[k].rodjendan.godina);
printf("\nS prosekom %.2f",razred[k].prosek);
}
system ("PAUSE");
return 0;
}
Datoteke
Datoteke omogućuju pohranjivanje velike količine podataka koji se mogu koristiti nezavisno o programu.
Datoteke mogu biti tekstualne ili binarne. U nastavku će biti opisane tekstualne datoteke.
Primer1: Otvaranje datoteke primer.txt i upis teksta "Ovo je primer pisanja teksta u datoteku". Datoteka će
se nalaziti u radnoj mapi tvrdog diska te se može pročitati izlaskom iz C++ a i pokretanjem programa Blok za
pisanje (NotePad).
#include <iostream>
#include <fstream>
using namespace std;
int main () {
ofstream test; /*deklaracija datoteke test - opcija:upisivanje podataka*/
test.open ("primer.txt"); /*otvaranje datoteke primer.txt u radnoj mapi na tvrdom disku*/
test << "Ovo je primer pisanja teksta u datoteku \n"; /*upis teksta u datoteku*/
test.close(); /*zatvaranje datoteke*/
system ("PAUSE");
return 0;
}
#include <iostream>
#include <fstream>
#include <string>
using namespace std;
int main () {
string redak; /*deklaracija tekstualne varijable red*/
45
ifstream test ("primer.txt"); /*deklaracija datoteke test - opcija:čitanje podataka iz datoteke*/
if (test.is_open()) /*ispitivanje da li je datoteka ispravno otvorena*/
{
while (! test.eof() ) /*čitaj dok nije kraj datoteke (End Of File)*/
{
getline (test,red); /*uzmi iz datoteke test jedan red teksta i stavi ga u varijablu red*/
cout << redak << endl; /*ispis teksta reda na monitor računara*/
}
test.close();
}
else cout << "Ne mogu otvoriti datoteku"; /*ispis ako uslov test.is_open() nije ispunjen*/
system ("PAUSE");
return 0;
}
Želimo li koristiti formatirani upis/spis podataka u datoteku koristiti ćemo naredbe fscanf() i fprintf().
Pre otvaranja datoteke programu ćemo naredbom FILE *identifikator; najaviti da ćemo raditi s datotekom.
Identifikator je naziv datoteke koji ćemo koristiti u programu, a zvezdica govori da se radi o pokazivaču.
Datoteku ćemo otvoriti funkcijom fopen(), a nakon uporabe zatvoriti funkcijom fclose();.
Te se funkcije zapisuju:
fopen("ime_datoteke","način_otvaranja");
fclose(identifikator);
Ime datoteke zadaje se po istom pravilu kao i naziv varijable, a način otvaranja datoteke (tekstualne)
određuje njene mogućnosti. Tako na primer može postojati datoteka koja se može samo čitati ili u koju se
mogu samo zapisivati podaci. Načini otvaranja se beleže slovom (r, w, r+) i detaljnije su opisani u tablici.
Način
Objašnjenje
otvaranja
"r" Otvara tekstualnu datoteku za čitanje. Ako datoteka ne postoji javlja grešku.
"w" Otvara tekstualnu datoteku za pisanje u nju.
"a" Otvara tekstualnu datoteku za dodavanje novih podataka na njen kraj.
"r+" Otvara tekstualnu datoteku za čitanje i pisanje. Ako ne postoji javlja grešku.
Otvara tekstualnu datoteku za čitanje i pisanje. Ako datoteka ne postoji kreira je. Ako datoteka
"w+"
postoji, svi podaci iz nje biće izbrisani pre upisivanja novih.
Otvara tekstualnu datoteku za dodavanje novih podataka na njen kraj. Ako datoteka ne postoji
"a+"
biće kreirana
if(f==NULL)
{
printf("Greska pri otvaranju");
exit(1);
}
Ako je uslov (f==NULL) ispunjen na računaru će se ispisat poruka "Greška pri otvaranju".
Primer 1: Napišite program koji u radnoj mapi kreira datoteku test1.txt i u nju smešta prvih 100 celih
brojeva.
(Napomena: nakon izvođenja programa izađite i u radnoj mapi proverite da li imate datoteku test1.txt.
Njen sadržaj možete pročitati s programom Blok za pisanje (NotePad))
#include <cstdlib>
#include <iostream>
using namespace std;
int main()
{
FILE *f;
int i;
system ("PAUSE");
return 0;
}
Primer 2: Napišite program koji će pročitati sadržaj iz datoteke iz prošlog zadatka i ispisati njen sadržaj na
monitoru računara.
#include <cstdlib>
#include <iostream>
using namespace std;
int main()
{
47
FILE *f;
int a;
system ("PAUSE");
return 0;
}
Objekti i klase
http://msdn.microsoft.com/en-us/beginner/cc963989.aspx
U C++u definisanje klasa slično je definisanju struktura u programskom jeziku C, s tim da je ključna
48
reč class, a ne struct. U klasama je također potrebno zadati varijable koje će biti dostupne celom programu.
Takve varijable zovemo javne i u C++ se zapisuju s public.
Primer 1: U ovom primeru kreirana je klasa koja se zove Primer i koja sadrži funkciju Ispis().
Funkcija Ispis() ispsuje tekst "Ispis teksta na monitor racunara koriscenjem klase Ispis" na monitoru
računara.
#include <iostream>
using namespace std;
class Primer /*deklaracija klase koja se zove Primer i koja u sebi sadrži funkciju Ispis()*/
{
public:
void Ispis()
{
cout << "Ispis teksta na monitor racunara koriscenjem klase Ispis\n" << endl;
}
};
int main()
{
Primer test; /*deklaracija objekta imena test prema "nacrtu"u klasi Primer*/
test.Ispis(); /*poziv funkcije Ispis() nad objektom test*/
system ("PAUSE");
return 0;
}
49
PODSETNIK
if - else
if (izraz)
naredba1;
else
naredba2;
Naredba grananja
Ako je izraz == true onda se izvršava naredba1 a ako nije onda se izvršava naredba2
else grana je opciona
Primer:
if (mesec == 12) {
godina++;
mesec = 1;
} else
mesec ++;
switch
switch (izraz) {
...
default: niz_naredbi;
default - izvršava se kada vrednost izraza nije nijedna od zadatih, nije obavezan
Najčešće se svaki niz naredbi završava sa naredbom break;
50
Primer:
switch(getchar()) {
case 'X':
case 'x':
scanf("%d", &x);
break;
case 'Y':
case 'y':
scanf("%d", &y);
break;
default:
printf("Greska");
Ciklusi
Kontrolisano ponavljanje naredbe u zavisnosti od nekog uslova.
Eksplicitno zavrsavanje ciklusa (naredba break)
Ciklusi u jeziku C++ while, do while i for
Ako je uslov ispunjen ulazimo u petlju kada se naredba izvrši opet proveramo uslov da odlucimo da li ćemo
opet ući u petlju ili ćemo produziti dalje sa izvršavanjem.
while
while (uslov)
naredba;
51
Primeri:
while(n > 0)
printf("%d", n--);
Beskonacna petlja
while (true)
...
do while
do
naredba;
while (uslov);
Primer:
do {
x++;
y += 2;
for
naredba;
int n, max;
scanf("%d", &n);
int tren;
scanf("%d", &tren);
if (i == 0)
max = tren;
max = tren;
printf("%d", max);
Primer:
// Prva petlja
while (true) {
i = 4;
break;
i = 3;
53
continue;
// Druga petlja
while (true) {
i = 3;
continue;
i = 4;
break;
Resenje: druga
Zadatak za uvežbavanje: Odrediti i ispisati sumu brojeva koji se unose sa tastature sve dok se ne unese 0.
54