View
260
Download
11
Category
Preview:
DESCRIPTION
Sanja Maravić - c++ predavanja programski jezik c++
Citation preview
5/27/2018 Sanja Maravic - C++ Predavanja
1/801
OBJEKTNO
ORIJENTISANO
PROGRAMIRANJE
5/27/2018 Sanja Maravic - C++ Predavanja
2/801
KO ? GDE?
n Predavaiq mr Sanja Maravi isar sanjam@vts.su.ac.yu
q mr Robert Pinter probi@vts.su.ac.yu
n Oglasna tabla se nalazi na I spratu poredkancelarije 113
n 2+2 asa nedeljno, 6 kredita
5/27/2018 Sanja Maravic - C++ Predavanja
3/801
PREDAVANJA i VEBE
n Prisutnost na predavanjima i vebama je obavezna (5 poena zauredno pohaanje nastave)
n Literatura:
Dragan Miliev, Objektno orijentisano programiranje na jeziku C++,Mikro knjiga 1995.
www.vucpp.vts.su.ac.yu
Brian Overland, C++ jasnim jezikom, Mikro knjiga 2002.
Robert Pinter, Praktikum za predmet OOP i aplikativni program
www.cprogramming.com
5/27/2018 Sanja Maravic - C++ Predavanja
4/801
OBAVEZE
n 1. kolokvijum C++ (oko 7. nastavne nedelje)
n 2. kolokvijum OOP (predzadnje nedelje nastave)
n Kolokvijumi se smatraju poloenim ako studentostvari najmanje 30 poena (min 15 po kolokvijumu)
od maksimalnih 45 poena
n Neophodno je poloiti oba kolokvijuma da bi se
moglo pristupiti polaganju ispitan Popravni kolokvijum zadnje nedelje nastave, moe se
raditi jedan ili oba kolokvijuma
5/27/2018 Sanja Maravic - C++ Predavanja
5/801
ISPIT
n Ko ne poloi I i II kolokvijum ne moe izaina ispit
n
Rad pred raunarom max. 1hn Na ispitu se moe postii od 25 do 50 poena
n Ukupnu ocenu ini ocena na kolokvijumima iocena na ispitu
n Nema usmenog
5/27/2018 Sanja Maravic - C++ Predavanja
6/801
Program koji koristimo
n Microsoft Visual Studio 6
n 1CD+2 CD=1DVD
program help
5/27/2018 Sanja Maravic - C++ Predavanja
7/801
C++ Uvod 1
Uvod u C++
Skalarne promenljive, operatori
ikontrolne strukture
5/27/2018 Sanja Maravic - C++ Predavanja
8/801
C++ Uvod 2
ta je jezik C++ i kako je nastao?
n C++ je objektno orijentisan jezik optenamene.
n
Nastao je kao naslednik jezika C, pa jezadrao i koncepte tradicionalnogprogramiranja.
n Bjarne Stroustrup, programer iz Bell
laboratorija poetkom 80-tih zamislio je C++,tako to je dodao osnovne koncepte OOP-ajeziku C po ugledu na jezik Simula.
5/27/2018 Sanja Maravic - C++ Predavanja
9/801
C++ Uvod 3
ta daju OOP i C++ kao reenje?
n Apstraktni tipovi podataka abstract datatypes
n
Enkapsulacija encapsulationn Nasleivanje inheritance
n Polimorfizam -polymorphism
5/27/2018 Sanja Maravic - C++ Predavanja
10/801
C++ Uvod 4
Struktura C++ programa
n C++ program je skup definicija i deklaracija:q definisanje tipa podataka
q deklarisanje globalnih podataka
q definisanje funkcija (potprogrami)
q definisanje klasaq specijalna funkcija koja se zovemain()
(odavde poinje izvravanje programa).
5/27/2018 Sanja Maravic - C++ Predavanja
11/801
C++ Uvod 5
Hello World++
// Hello World program
#include
int main(void)
{
cout
5/27/2018 Sanja Maravic - C++ Predavanja
12/801
C++ Uvod 6
Komentar
n Komentar sadri tekst koji se ne prevodi namainski jezik.
n Sve to sledi posle znaka "//" ignorie seod strane kompajlera.
n Sve unutar znakova "/*" i "*/" se ignorie.
5/27/2018 Sanja Maravic - C++ Predavanja
13/801
C++ Uvod 7
Primer komentara// Domaci zadatak #1
// Ovaj program je neverovatan!
#include
/* Program izracunava koeficijent
ekspanzije svemira na 27 decimalnih
mesta.
*/
int main() {
cout
5/27/2018 Sanja Maravic - C++ Predavanja
14/801
C++ Uvod 8
Include
n Naredba: #include ubacuje sadraj fajla iostream.h u Va fajlpre no to kompajler pone da radi.
n Definicije koje omoguavaju Vaemprogramu da koristi funkcije i klase koje inestandardnu biblioteku C++ nalaze se u ovom
fajlu.n Moete ukljuiti i sopstvene fajlove:
#include "myfile.h"
5/27/2018 Sanja Maravic - C++ Predavanja
15/801
C++ Uvod 9
C++ pretprocesor
n C++ kompajleri automatski aktivirajupretprocesor koji vodi rauna o naredbi#include i nekim drugim specijalnim
komandama.n Pokretanje pretprocesora odvija se
automatski nije potrebno da Vi neto radite.
5/27/2018 Sanja Maravic - C++ Predavanja
16/801
C++ Uvod 10
Pretprocesiranje
C++ programC++ program Izvrni
programIzvrni
program
C++
Kompajler
C++
KompajlerC++
Pretprocesor
C++
Pretprocesor
Privremeni fajl
(C++ program)
Privremeni fajl
(C++ program)
5/27/2018 Sanja Maravic - C++ Predavanja
17/801
C++ Uvod 11
Pretprocesor
n Linije programa koje poinju karakterom '#'predstavljaju specijalnu instrukciju zapretprocesor.
n Pretprocesor moe da zameni tu liniju nekimdrugim sadrajem:q include: zamenjeno sadrajem fajla
n Druge komande govore pretprocesoru dapotrai simbole u programu i da odradiprocesiranje.
5/27/2018 Sanja Maravic - C++ Predavanja
18/801
C++ Uvod 12
#define (macro) primer
#define square(a) (a * a)
y = square(x);
z = square(y*x);
postaje y = (x * x);
postaje z = (y*x * y*x);
5/27/2018 Sanja Maravic - C++ Predavanja
19/801
C++ Uvod 13
Neki primeri za include
n Osnovni I/O: iostream.h
n I/O manipulacija: iomanip.h
n Standardna biblioteka: stdlib.h
n Podrka za datum i vreme: time.h
5/27/2018 Sanja Maravic - C++ Predavanja
20/801
C++ Uvod 14
Jo jedan C++ program
// C++ sabiranje integera#include
int main() {
int integer1, integer2, sum;
cout > integer1;
cout > integer2;
sum = integer1 + integer2;
cout
5/27/2018 Sanja Maravic - C++ Predavanja
21/801
C++ Uvod 15
Promenljive (varijable)
n Program koristi sledee promenljive:integer1, integer2, sum;
n Promenljive su samo imena za lokacije umemoriji.
n U C++ sve promenljive moraju imati tip (ovone zahtevaju svi jezici).
n U C++ sve promenljive moraju se prvodeklarisatida bi se mogle koristiti.
5/27/2018 Sanja Maravic - C++ Predavanja
22/801
C++ Uvod 16
Promenljive ...
n U C++ deklariu se na sledei nain:tip ime_promenljive;
n tip govori kog tipa je promenljiva
n U C++ postoje sledei tipovi podataka:int char float double
n Moete kreirati i svoje tipove podataka!
5/27/2018 Sanja Maravic - C++ Predavanja
23/801
C++ Uvod 17
Imena promenljivih
n Imena promenljivih u C++:q Slova, cifre i _ (underscore).
q Ime ne sme da pone cifrom.
q Case sensitive (razlikovanje malih i velikih slova)n VTS nije isto to i vts
n Proizvoljna duina imena, ali uzimamo da je
255 limit zbog nekih drugih implementacija.n Imena promenljivih koja su dobro odabrana
asociraju korisniku za ta se koriste!
5/27/2018 Sanja Maravic - C++ Predavanja
24/801
C++ Uvod 18
Imena promenljivih
n Za imena promenljivih ne mogu se koristiti rezervisane rei
whilethrowshortlongexternconst
volatilethisreturnintenumclass
voidtemplateregisterinlineelsechar
virtualswitchpublicifdoublecatch
unsignedstructprotectedgotodocase
unionstaticprivatefrienddeletebreaktypedefsizeofoperatorfordefaultauto
trysignednewfloatcontinueasm
5/27/2018 Sanja Maravic - C++ Predavanja
25/801
C++ Uvod 19
Primeri promenljivih
Varijabla
varijabla_2
2_varijabla
_varijablavarijabla
varijabla 3
new
private
// Vaea
// Vaea
// Nevaea, ne sme biti cifra na poetku
imena
// Vaea, sme biti _ na poetku imena
// Vaee ime, razlikuje se od Varijabla
// Nevaee ime, ne sme biti blanko
// Nevaee ime, rezervisana re
// Nevaee ime, rezervisana re
5/27/2018 Sanja Maravic - C++ Predavanja
26/801
C++ Uvod 20
Tipovi promenljivih
n Integer celobrojni brojevi:
short godina=18; (zauzima 2 bajta) (signed)
int plata=22000; (zauzima 2 bajta) (signed)
long cena=420000; (zauzima 4 bajta) (signed)unsigned int vek=21; (moe primiti samo poz. vrednosti)
5/27/2018 Sanja Maravic - C++ Predavanja
27/801
C++ Uvod 21
Tipovi promenljivih
n Realni brojevi:
float kamata=0.01; (zauzima 4 bajta)
double pi=3.141592654; (zauzima 8 bajtova)
long double rad=4.11E-3; (zauzima 10 bajtova)
n Char slova:char ch_1=A, ch_3= -42; (zauzima 1 bajt) (signed)
unsigned ch_2=2;
5/27/2018 Sanja Maravic - C++ Predavanja
28/801
C++ Uvod 22
n Karakteri koji se ne tampaju:
`\n` // novi red `\10`'\r' // carriage return'\t' // horizontal tab `\9`
'\v' // vertical tab
'\b' // backspace
'\f' // formfeed
5/27/2018 Sanja Maravic - C++ Predavanja
29/801
C++ Uvod 23
Literali (konstante)
n Literali su fiksne (stalne) vrednosti kojeprogram koristi.
n Neki primeri literala:22 3.14159 0x2A
false "Hi Dave" 'c'
n Mogue je inicijalizovati promenljivu takoto joj se pri deklaraciji dodelivrednost:
int foo = 17;
double PI = 3.14159;
char newline = '\n';
5/27/2018 Sanja Maravic - C++ Predavanja
30/801
C++ Uvod 24
Izrazi
n C++ izrazi koriste se za izraavanjeizraunavanja.
n Izrazi ukljuuju operacije i operande na kojese operacija primenjuje.
n Operandi mogu biti promenljive, konstante ilipozivi funkcije.
5/27/2018 Sanja Maravic - C++ Predavanja
31/801
C++ Uvod 25
Matematiki izrazi
n Matematiki izrazi nakon izraunavanjadobijaju numerike vrednosti.
n Neki primeri:1+2
(fahr - 32)*(5/9)
1*(2*(3*(4*5)))
5/27/2018 Sanja Maravic - C++ Predavanja
32/801
C++ Uvod 26
Matematiki operatori
+ - * / %
n Postoje pravila i asocijativnost koji odreujuprioritet operatora i kontroliu kako e se
izrazi izraunati.n Kolika je vrednost sledeeg C++ izraza ?:
2 / 3 / 4 + 5
n Odgovor: bez poznavanja pravila teko jeodgovoriti.
5/27/2018 Sanja Maravic - C++ Predavanja
33/801
C++ Uvod 27
Aritmetike operacije
113%3ostatak deljenja%4.59/2.0deljenje/
6.82*3.4mnoenje*
-0.023.98 - 4oduzimanje-
16.912 + 4.9sabiranje+rezultatprimerimeoperator
Ako su oba broja int:
9/2=4, a ne 4.5!
int x=100;
int y=80;
double rez=x/(double) y; // konverzija tipa 1.25
5/27/2018 Sanja Maravic - C++ Predavanja
34/801
C++ Uvod 28
Pridruenost
n Pridruenost operatora kontrolie redosledizraunavanja izraza koji obuhvata isti operator,na primer:
3 / 4 / 5
n Pridruenost moe biti:q s leva na desno: prvo se primenjuje krajne levi
operator.q s desna na levo: prvo se primenjuje krajnje desni
operator.
5/27/2018 Sanja Maravic - C++ Predavanja
35/801
C++ Uvod 29
Prioritet
n Prioritet odreuje redosled izvravanjaoperatora.q Vii prioritet znai da se operator primenjuje pre
operatora koji ima nii prioritet.n Operatori koji imaju isti prioritet mogu se javiti
u bilo kom redosledu, ali u C++ onaj koji jelevo prvi se izvrava.
5/27/2018 Sanja Maravic - C++ Predavanja
36/801
C++ Uvod 30
C++ pravila za matematike operatore
Znajui pravila, koja je vrednost sledeih izraza?:odgovor je 52 / 3 / 4 + 5
(7*3/4-2)*5 odgovor je 15
nizaks leva na desno+ -
srednjis leva na desno* / %
visoks leva na desno()
prioritetpridruivanjeoperator
5/27/2018 Sanja Maravic - C++ Predavanja
37/801
C++ Uvod 31
Relacioni operatori i operatori jednakosti
n Relacioni operatori i operatori jednakostikoriste se za poreenje vrednosti:
n Relacioni operatori:> vee od
>= vee ili jednako
< manje od
5/27/2018 Sanja Maravic - C++ Predavanja
38/801
C++ Uvod 32
Relacioni operatori i operatori
jednakostin Relacioni operatori imaju nizak prioritet i
pridruuju se s leva na desno.
n Operatori jednakosti imaju nii prioritet odrelacionih i pridruuju se s leva na desno.
n Primeri:17 < x foo == 3.14
godine != 21 x+1 >= 4*y-z
5/27/2018 Sanja Maravic - C++ Predavanja
39/801
C++ Uvod 33
Operatori
n Operator dodele vrednosti "=" koristi se zadodeljivanje vrednosti promenljivoj.
x = 13 - y;
n Dodela vrednosti ima veoma nizak prioritet ipridruuje se s desna u levo.
n Na primer, moe se ovako pisati:
x = y = z + 15;
5/27/2018 Sanja Maravic - C++ Predavanja
40/801
C++ Uvod 34
Prioritet
najnii (poslednji se primenjuje)=
== !=
< >=
+ -
* / %
najvii (prvi se primenjuje)()PrioritetOperator
5/27/2018 Sanja Maravic - C++ Predavanja
41/801
C++ Uvod 35
Primeri relacionih operatora
16.3>=5vee ili jednako>=
05>5vee od>
15
5/27/2018 Sanja Maravic - C++ Predavanja
42/801
C++ Uvod 36
Jo jedan program#include
int main()
{
double fahr,celcius;
cout
5/27/2018 Sanja Maravic - C++ Predavanja
43/801
C++ Uvod 37
const
n Pri deklarisanju promenljive moe se dodatimodifikator const, kako bi se kompajlerusignaliziralo da ta vrednost ne moe biti
promenjena:
const double factor = 5.0/9.0;
const double offset = 32.0;celcius = (fahr - offset)*factor;
5/27/2018 Sanja Maravic - C++ Predavanja
44/801
C++ Uvod 38
ta se deava ako pokuamo da
promenimo const?n Kompajler signalizira ako se pokua
promeniti vrednost konstante:
const foo = 100;
foo = 21;
Error: l-value specifies const object
5/27/2018 Sanja Maravic - C++ Predavanja
45/801
C++ Uvod 39
Zato koristiti const?
n const govori kompajleru da promenljiva nemoe da promeni svoju vrednost.
n Ve znate da promenljiva nikada ne treba dapromeni vrednost!
n Ali, prepustite posao kompajleru da vodirauna o tome da li je mogue promeniti
vrednost promenljive (Vi moda zaboraviteda ne treba da se menja).
5/27/2018 Sanja Maravic - C++ Predavanja
46/801
C++ Uvod 40
Integer vs. floating point math
Matematika sa celobrojnim ili realnimbrojeviman Kako C++ zna da li da koristi matematike
operatore za celobrojne ili realne brojeve?
n Ako je jedan od operanada realan broj, tadase primenjuju operatori za realne brojeve(rezultat je realan broj).
n
Ako su oba operanda celobrojni, tada je irezultat ceo broj (i u sluaju deljenja).
5/27/2018 Sanja Maravic - C++ Predavanja
47/801
C++ Uvod 41
Kviz-Matematiki operatori
Koje vrednosti e se ispisati?
const int pet = 5;
int i = 7;
float x = 7.0;
cout
5/27/2018 Sanja Maravic - C++ Predavanja
48/801
C++ Uvod 42
Logiki operatori
n C++ ima 3 logika operatora za kombinovanjelogikih izraza. Rezultat logike operacije je 0 ili 1.
5
5/27/2018 Sanja Maravic - C++ Predavanja
49/801
C++ Uvod 43
Dopunjena tabela prioriteta
||
&&
++ -- !
najnii (poslednji se primenjuje)=
== !=
< >=
+ -
* / %
najvii (prvi se primenjuje)()
PrioritetOperator
5/27/2018 Sanja Maravic - C++ Predavanja
50/801
C++ Uvod 44
&& operator
n &&je logiki operator, tako da je vrednostizraza true ili false.
( uslov1 && uslov2 )
taan je ako su oba i uslov1 i uslov2 tana.
5/27/2018 Sanja Maravic - C++ Predavanja
51/801
C++ Uvod 45
&& primer
ocena = 'A';
granica = 90;
while ((bodovi
5/27/2018 Sanja Maravic - C++ Predavanja
52/801
C++ Uvod 46
|| operator
n ||je logiki operator, tako da je vrednostizraza true ili false.
( uslov1 || uslov2 )
ako je ili uslov1 ili uslov2 taan.
5/27/2018 Sanja Maravic - C++ Predavanja
53/801
C++ Uvod 47
|| primer
if ((test1==0) || (test2==0))
cout
5/27/2018 Sanja Maravic - C++ Predavanja
54/801
C++ Uvod 48
! operator
n ! je unaran logiki operatorq unaran znai da ima samo jedan operand.
n ! negira svoj operand.
n ! oznaava "ne".
(! uslov)
je taan samo kada je uslovnetaan
5/27/2018 Sanja Maravic - C++ Predavanja
55/801
C++ Uvod 49
! primer
bool gotovo = false;
int i=1;
while (! gotovo) {
cout
5/27/2018 Sanja Maravic - C++ Predavanja
56/801
C++ Uvod 50
Kviz-logiki operatori
!20
10&&5
10||5.5
10&&0
ta je rezultat sledeih logikih operacija?
// daje 0
// daje 1// daje 1
// daje 0
5/27/2018 Sanja Maravic - C++ Predavanja
57/801
C++ Uvod 51
Bit operatori
n C++ ima est operatora koji omoguavaju rad sapojedinanim bitovima.
ekskluzivno ILIx^y
rotiranje udesnox>>2
rotiranje ulevox
5/27/2018 Sanja Maravic - C++ Predavanja
58/801
C++ Uvod 52
Operatori inkrementiranja i
dekrementiranja
k--+10 //daje 15auto dekrement (postfix)--
--k+10 //daje 14auto dekrement (prefix)--
k+++10 //daje 15auto inkrement (postfix)++
++k+10 //daje 16auto inkrement (prefix)++
primerimeoperatorint k=5
Auto inkrement (++) i auto dekrement (--) operatoriomoguavaju zgodan nain da se doda ili oduzme 1numerikoj promenljivoj.
5/27/2018 Sanja Maravic - C++ Predavanja
59/801
C++ Uvod 53
Operatori dodele vrednosti
n = n>>4n>>=4>>=
n = n
5/27/2018 Sanja Maravic - C++ Predavanja
60/801
C++ Uvod 54
Operatori dodele vrednosti
int m,n,p;
m=n=p=100; // m=(n=(p=100));
m=(n=p=100)+2; // m=(n=(p=100))+2;
m+=n=p=10; // m=m+(n=p=10);
5/27/2018 Sanja Maravic - C++ Predavanja
61/801
C++ Uvod 55
Uslovni operator
operand1 ? operand2 : operand3
n Prvo se izraunava operand1 i tretira se kaologiki uslov. Ako je rezultat razliit od nuleonda se izraunava operand2 i to je krajnirezultat. U suprotnom, izraunava seoperand3 i to je krajnji rezultat.
5/27/2018 Sanja Maravic - C++ Predavanja
62/801
C++ Uvod 56
Uslovni operator - primer
int m=1, n=2;
int min=(m
5/27/2018 Sanja Maravic - C++ Predavanja
63/801
C++ Uvod 57
Prosta tip konverzija
(int) 3.14 // konvertuje 3.14 u inti daje 3
(long) 3.14 // konvertuje 3.14 u longi daje 3L
(double) 2 // konvertuje 2 u double i daje 2.0
(char) 122 // konvertuje 122 u chariji je kod 122
(unsigned short) 3.14 // daje 3 kao unsigned short
Primer:
double d=1; // d=1.0
int i=10.5; // i=10
i=i+d; // i=int(double(i)+d)
5/27/2018 Sanja Maravic - C++ Predavanja
64/801
C++ Uvod 58
Tabela prioriteta
5/27/2018 Sanja Maravic - C++ Predavanja
65/801
C++ Uvod 59
Kontrolne strukture
n Ukoliko se ne desi neto specijalno, programse redom izvrava, liniju po liniju kako jenapisan kod.
n Ako elimo da promenimo takav redosledizvravanja, moramo koristiti kontrolnestrukture.
n
Kontrolne strukture obezbeuju dve osnovnefunkcije: selekciju i ponavljanje.
5/27/2018 Sanja Maravic - C++ Predavanja
66/801
C++ Uvod 60
Selekcija
n Selekcione kontrolne strukture omoguavajuizbor izmeu nekoliko pravaca akcije.
n Mora postojati uslov
akcija deava ili ne.n C++ ima nekoliko selekcionih kontrolnih
struktura:
if if/else switch
5/27/2018 Sanja Maravic - C++ Predavanja
67/801
C++ Uvod 61
Kontrolne strukture ponavljanja-
Brojain Brojai omoguavaju da se ponovi niz akcija
(naredbi).
n C++ podrava nekoliko brojaa:
while for do/while
5/27/2018 Sanja Maravic - C++ Predavanja
68/801
C++ Uvod 62
if
n if kontrolna struktura omoguava da seodreena akcija (niz naredbi) preduzmesamo ako je uslov ispunjen (taan):
if (uslov)
akcija;
5/27/2018 Sanja Maravic - C++ Predavanja
69/801
C++ Uvod 63
Uslovi
n uslovkoji se javlja u naredbi if (kao i udrugim kontrolnim strukturama) je Booleantipa - ili je taan (true) ili netaan (false).
n U C++:q vrednost 0 je false (netano)
q sve ostale vrednosti su true (tano)
5/27/2018 Sanja Maravic - C++ Predavanja
70/801
C++ Uvod 64
if primer
if (1)
cout
5/27/2018 Sanja Maravic - C++ Predavanja
71/801
C++ Uvod 65
Relacioni operatori i operatori
jednakosti i uslovin Uobiajeno je da se uslov formira korienjem
C++ relacionih operatora i operatora
jednakosti.n Ovi operatori imaju vrednost true (1) i false
(0).n Tako, izraz x==x ima vrednost true.
a 7
5/27/2018 Sanja Maravic - C++ Predavanja
72/801
C++ Uvod 66
jo if-ova
if (foo)cout =90)
lettergrade = 'A';
if (lettergrade == 'F')
cout
5/27/2018 Sanja Maravic - C++ Predavanja
73/801
C++ Uvod 67
este greke
n Vrlo lako moe se pomeati operator dodelevrednosti "=" sa operatorom jednakosti "==".
n ta nije dobro u sledeem primeru:
if (bodovi=100)
cout
5/27/2018 Sanja Maravic - C++ Predavanja
74/801
C++ Uvod 68
Sloenije naredben Unutar jednog if-a moe se nalaziti jedna
naredba ili sloeniji izraz.
n Sloeniji izraz poinje sa "{", i zavrava sesa "}" i sadri niz naredbi (ili kontrolnih
struktura).if (bodovi>=90) {
cout
5/27/2018 Sanja Maravic - C++ Predavanja
75/801
C++ Uvod 69
Koja re o stilu
n C++ ne vodi rauna o praznim mestima(ukljuujui nove redove), tako da moetekod urediti na mnoge naine.
n Postoji nekoliko uobiajenih naina kojih setreba pridravati.
n Vano je da je kod jednostavan za
razumevanje i da se lako moe menjati!
5/27/2018 Sanja Maravic - C++ Predavanja
76/801
C++ Uvod 70
Neki uobiajeni naini
if (foo>10) {
x=y+100;
cout 10) {
x=y+100;
cout 10)
{
x=y+100;cout 10)
{
x=y+100;
cout 10){x=y+100;cout
5/27/2018 Sanja Maravic - C++ Predavanja
77/801
C++ Uvod 71
if else kontrolna struktura
n if else kontrolna struktura omoguava daspecificirate alternativnu akciju:
if ( uslov)
dejstvo ako je tano
else
dejstvo ako je netano
5/27/2018 Sanja Maravic - C++ Predavanja
78/801
C++ Uvod 72
if else primer
if (bodovi >= 90)
ocena = 'A';
else
ocena = 'F';
5/27/2018 Sanja Maravic - C++ Predavanja
79/801
C++ Uvod 73
Jo jedan primer
if (bodovi>= 99)
ocena = 'A';
else if (bodovi >= 98)
ocena = 'B';
else if (bodovi >= 97)
ocena = 'C';
else if (bodovi >= 96)
ocena = 'D';else
ocena = 'F';
5/27/2018 Sanja Maravic - C++ Predavanja
80/801
C++ Uvod 74
Switch
n Kontrolna struktura switch omoguava izbor izmeu nekolikomogunosti u zavisnosti od vrednosti izraza. Opti oblik naredbeswitch:
switch (izraz) {
case konstanta1:naredbe;
case konstanta2:
naredbe;
Default:naredbe;
}
Opciono, izvrava se ako nijedan od prethodnih izraza neodgovara.
Nakon svakog case-amoe da sledi nijedna,
jedna ili vie naredbi.
5/27/2018 Sanja Maravic - C++ Predavanja
81/801
C++ Uvod 75
Switch - primer
switch (operator) {case +: rezultat=operand1+operand2;
break;case -: rezultat=operand1-operand2;
break;case *: rezultat=operand1*operand2;
break;case /: rezultat=operand1/operand2;
break;
default: cout
5/27/2018 Sanja Maravic - C++ Predavanja
82/801
C++ Uvod 76
while kontrolna struktura
n while kontrolna struktura omoguavaponavljanje ista naredba (ili skup
naredbi) ponavlja se dok je uslov netaan.
while (uslov)
do neto;
Ovosezo
ve
telopetlje"
5/27/2018 Sanja Maravic - C++ Predavanja
83/801
C++ Uvod 77
while opasnosti
n Unutar tela petlje mora doi do promeneneega to utie na uslov condition!
n ako to nije ispunjeno petlja se nikad neokonava (beskonana petlja).q petlja se nikad ne zavrava
n petlja se nikad ne zavravaq
petlja se nikad ne zavrava petlja se nikad ne zavrava.
5/27/2018 Sanja Maravic - C++ Predavanja
84/801
C++ Uvod 78
while primeri=1; n=5;sum=0;while (i
5/27/2018 Sanja Maravic - C++ Predavanja
85/801
C++ Uvod 79
while primer
ocena = 'A';
granica = 90;
while (bodovi < granica) {
ocena = ocena + 1;granica= granica- 10;
}
if (ocena > 'F')
ocena = 'F';
5/27/2018 Sanja Maravic - C++ Predavanja
86/801
C++ Uvod 80
while modifikovan primer
ocena = 'A';
granica = 90;
while (bodovi < granica) {
ocena++;granica -= 10;
}
if (ocena > 'F')
ocena = 'F';
5/27/2018 Sanja Maravic - C++ Predavanja
87/801
C++ Uvod 81
do while
n Kontrolna struktura do while takoeomoguava ponavljanje, ovoga puta uslov senalazi na dnu petlje.q telo petlje izvrava se najmanje jednom
do
neto;
while ( uslov);
5/27/2018 Sanja Maravic - C++ Predavanja
88/801
C++ Uvod 82
do primer
i=1;
do
cout
5/27/2018 Sanja Maravic - C++ Predavanja
89/801
C++ Uvod 83
for petlja
n for kontrolna struktura najee se koristi zapetlje koje ukljuuju brojanje.
n Bilo koja for petlja moe se pisati kao
while (i bilo koji while kao for).
for (inicijalizacija; uslov; azuriranje)
radinesto;
f (i i ij li ij l i j )
5/27/2018 Sanja Maravic - C++ Predavanja
90/801
C++ Uvod 84
for (inicijalizacija; uslov; azuriranje)
n inicijalizacija je naredba koja se izvrava napoetku petlje (i nikada vie).
n telo petlje izvrava se sve dok je uslov
ispunjen.n auriranje se izvrava svaki put kada se
petlja izvri (i pre nego se uslov proveri).
5/27/2018 Sanja Maravic - C++ Predavanja
91/801
C++ Uvod 85
for primer
for (i=1; i
5/27/2018 Sanja Maravic - C++ Predavanja
92/801
C++ Uvod 86
for (ocena = 'A', granica = 90;
bodovi < granica; ocena++;)
granica -= 10;
if (ocena > 'F')
ocena = 'F';
uslov
Jo jedna for petlja
inicijalizacija
auriranje
5/27/2018 Sanja Maravic - C++ Predavanja
93/801
C++ Uvod 87
Primer provere parnosti
for (i=1; i
5/27/2018 Sanja Maravic - C++ Predavanja
94/801
C++ Uvod 88
Jo o for petlji
n Inicijalizacija, uslov ili naredba auriranjamogu ostati prazne.
n Ako se uslov izostavi, petlja se nikad nezavrava!
for (i=0; ;i++)
cout
5/27/2018 Sanja Maravic - C++ Predavanja
95/801
C++ Uvod 89
Jo o for petlji
n Izostavljanjem svih izraza dobija se beskonanapetlja. Kod ovakve petlje pretpostavlja se da je uslovuvek ispunjen.
for(; ;) // beskonacna petlja
nesto;
n Izostavljanjem inicijalizacije i auriranja dobija se forpetlja identina while petlji:
for(; i!=0;) // ekviv.sa: while (i!=0)
nesto; // nesto;
l
5/27/2018 Sanja Maravic - C++ Predavanja
96/801
C++ Uvod 90
Jo o for petlji
for (i=0, j=0; i+j
5/27/2018 Sanja Maravic - C++ Predavanja
97/801
C++ Uvod 91
Mozgalica_1
for ( int broj= 0; broj < 5; broj ++ ){
cout
5/27/2018 Sanja Maravic - C++ Predavanja
98/801
C++ Uvod 92
Mozgalica_2
for ( int broj= 0; broj!= 5; broj ++ ){
cout
5/27/2018 Sanja Maravic - C++ Predavanja
99/801
C++ Uvod 93
Mozgalica_3
beng = 5; boom=0;
while (beng > 0){
boom += beng ;
beng-- ;
}
cout
5/27/2018 Sanja Maravic - C++ Predavanja
100/801
C++ Uvod 94
Mozgalica_4
boom=0; beng=0;
while (beng > 0)
{
boom += beng ;
beng-- ;
}
cout
5/27/2018 Sanja Maravic - C++ Predavanja
101/801
C++ Uvod 95
Mozgalica_5
zbir = 0 ;
broj = 5;
while (broj > 0){
zbir += broj ;
broj++;
}cout
5/27/2018 Sanja Maravic - C++ Predavanja
102/801
C++ Uvod 96
Proveravanje ulaza_1
float ocena=0,maxOcena=0
cout>ocena;
while(ocenamaxOcena)
{
cout
5/27/2018 Sanja Maravic - C++ Predavanja
103/801
C++ Uvod 97
Proveravanje ulaza_2
cout odgovor;
while((odgovor!=D)&&(odgovor!=d)&&(odgovor
!=N)&&(odgovor!=n)){
cout > odgovor;
}Petlja se ponavlja dok kao odgovor ne dobijemoD, d, N ili n!
5/27/2018 Sanja Maravic - C++ Predavanja
104/801
C++ Uvod 98
Detaljna analiza jednog zadatka
n Prvi zadatakn Napisati program u C++ koji ita karaktere unete sa
tastature, sve dok se ne pritisne Enter. Programtreba da prebroji sledee:q Koliko ima velikih slovaq Koliko ima malih slovaq Koliko ima cifaraq Koliko ima ostalih karaktera (koji nisu slova i cifre)q Ukupan broj karaktera
5/27/2018 Sanja Maravic - C++ Predavanja
105/801
C++ Uvod 99
Analiza
itanje karaktera dok se ne pritisne Enter.
==> ciklus, testiranje koda za Enter
1. Broj velikih slova ==> brojanje karaktera od A do Z2. Broj malih slova ==> brojanje karaktera od a do z
3. Broj cifara ==> brojanje karaktera od 0 do 9
4. Broj ostalih karaktera ==>
sabiramo sve ono to nismo obuhvatili takama od 1 do 35. Ukupan broj karaktera ==>
sabiramo sve prethodno
5/27/2018 Sanja Maravic - C++ Predavanja
106/801
C++ Uvod 100
Planiranje
Inicijalizacija brojaaitanje jednog karaktera (ch)Dok (while) nije Enter radi
inkrementiraj (dodaj 1) Ukupan broj
Ako je (if) ch veliko slovo, tada uveaj broj velikih slova za 1else ifch malo slovo, tada uveaj broj malih slova za 1else ifch cifra, tada uveaj broj cifara za 1else uveaj broj ostalih za 1proitaj karakter
while krajIspii rezultate
Kostur programa
5/27/2018 Sanja Maravic - C++ Predavanja
107/801
C++ Uvod 101
Kostur programa
#include // Ime: Darko Popovic
// Grupa: 1G23
// Projekat: Prvi zadatak
// Datum: 13.10.2005.
//// Ovaj program sa standardnog ulaza cita karaktere
// i prebrojava velika slova, mala slova, brojeve,
// ostale karaktere i ukupan broj karaktera.
int main()
{return 0;
}
Deklarisanje promenljivih
5/27/2018 Sanja Maravic - C++ Predavanja
108/801
C++ Uvod 102
Deklarisanje promenljivih
char ch;
int Ukupno = 0;
int VelikaSlova = 0;
int MalaSlova = 0;
int Brojevi = 0;
int Ostalo = 0;
S k lj
5/27/2018 Sanja Maravic - C++ Predavanja
109/801
C++ Uvod 103
Struktura petlje
cout > ch;
while ( ch != \n )
{Ukupno++;
:
cin >> ch;
}
Proveravanje karaktera
5/27/2018 Sanja Maravic - C++ Predavanja
110/801
C++ Uvod 104
Proveravanje karaktera
if (ch >= A && ch = a && ch = 0 && ch
5/27/2018 Sanja Maravic - C++ Predavanja
111/801
C++ Uvod 105
Petlja
cout
5/27/2018 Sanja Maravic - C++ Predavanja
112/801
C++ Uvod 106
Prikazivanje rezultata
cout
5/27/2018 Sanja Maravic - C++ Predavanja
113/801
C++ Funkcije 1
C++ Funkcije
Opseg promenljive
Memorijska oblast
Rekurzija
C++ funkcije
5/27/2018 Sanja Maravic - C++ Predavanja
114/801
C++ Funkcije 2
C++ funkcije
n U drugim jezicima zovu se potprogrami
(subroutines) ili procedure (procedures).
n Sve C++ funkcije moraju da imaju tip (type).
q Ako nije potrebno da funkcija vrati neku vrednosttada funkcija moe da bude tipa void (prazan,nevaei).
C++ funkcije
5/27/2018 Sanja Maravic - C++ Predavanja
115/801
C++ Funkcije 3
C++ funkcije
n C++ funkcija ima listuparametara.
q svaki parametar ima svoj tip.
q Moe da bude funkcija bez parametara.
Model funkcije
5/27/2018 Sanja Maravic - C++ Predavanja
116/801
C++ Funkcije 4
Model funkcije
int add2ints(int a, int b){
return(a+b);
}
Vraeni tip
Ime funkcije parametri
Telo funkcije
Korienje funkcija
5/27/2018 Sanja Maravic - C++ Predavanja
117/801
C++ Funkcije 5
Korienje funkcija
biblioteka matematikih funkcija(Math Library functions)
n C++ sadri biblioteku (library) matematikih
funkcija koje mogu da se koriste.n Morate da znate kako da pozovete (call) ove
funkcije da bi ste mogli da ih koristite.
n Morate da znate koju vrednost vraaju.
Matematike funkcije math
5/27/2018 Sanja Maravic - C++ Predavanja
118/801
C++ Funkcije 6
Matematike funkcije - math
abs Return absolute value of integerparameter
acos Calculate arccosineasin Calculate arcsine
atan Calculate arctangent
atan2 Calculate arctangent, 2 parameters
atofConvert string to double
ceil Return the smallest integer that isgreater or equal to x
cos Calculate cosine
cosh Calculate hyperbolic cosine
exp Calculate exponential
fabs Return absolute value of floating-point
floorRound down valuefmod Return remainder of floating pointdivision
frexp Get mantissa and exponent offloating-point value
labs Return absolute value of long integerparameter
ldexp Get floating-point value frommantissa and exponent
log Calculate natural logarithm
log10 Calculate logarithm base 10modfSplit floating-point value into
fractional and integer partspow Calculate numeric power
sin Calculate sine
sinh Calculate hyperbolic sine
sqrt Calculate square root
tan Calculate tangent
tanh Calculate hyperbolic tangent
double sqrt( double )
5/27/2018 Sanja Maravic - C++ Predavanja
119/801
C++ Funkcije 7
double sqrt( double )
n Kada pozivamo funkciju sqrt (squareroot-kvadratni koren), moramo dadefiniemo da je tipa double.
n Vrednost koju vraa funkcija sqrt takoe jetipa double.
x = sqrt(y);
x = sqrt(100);
x = sqrt(y);
5/27/2018 Sanja Maravic - C++ Predavanja
120/801
C++ Funkcije 8
x sqrt(y);
n yje argument funkcije.
n C++ funkcija ne moe da promeni vrednostargumenta!
n Ako je y imao vrednost 100 pre pozivafunkcije sqrt, vrednost 100 e zadrati inakon poziva funkcije sqrt.
Ispisivanje tabele kvadratnih korena
5/27/2018 Sanja Maravic - C++ Predavanja
121/801
C++ Funkcije 9
Ispisivanje tabele kvadratnih korena
brojeva od 1 do 10int i;
for (i=1;i
5/27/2018 Sanja Maravic - C++ Predavanja
122/801
C++ Funkcije 10
n Kako kompajler zna za funkciju sqrt ?
n Vi morate da mu kaete na sledei nain:
#include
#include
Pisanje funkcije
5/27/2018 Sanja Maravic - C++ Predavanja
123/801
C++ Funkcije 11
Pisanje funkcije
n Na vama je da odluite kako e funkcijaizgledati:
q Povratni tip - return type
q Ime - nameq Tipovi parametara (broj parametara)-types of
parameters
n Na vama je da napiete telo funkcije - kod.
Parametri funkcije
5/27/2018 Sanja Maravic - C++ Predavanja
124/801
C++ Funkcije 12
Parametri funkcije
n Parametri su lokalne promenljive unutar tela
funkcije.
q Kada se pozove funkcija promenljive se prenose
po vrednostiq Funkcija uzima kopiju predatih vrednosti
Primer funkcije
5/27/2018 Sanja Maravic - C++ Predavanja
125/801
C++ Funkcije 13
Primer funkcije
int zbir2broja( int prvibr, int drugibr ){int sum;
sum = prvibr + drugibr;
prvibr = 0;drugibr = 0;
return(sum);}
Testiranje zbir2broja
5/27/2018 Sanja Maravic - C++ Predavanja
126/801
C++ Funkcije 14
Testiranje zbir2brojaint main(void) {
int y,a,b;
cout
5/27/2018 Sanja Maravic - C++ Predavanja
127/801
C++ Funkcije 15
ta se ovde deava?
int zbir2broja(int a, int b){
a=a+b;
return(a);
}
int a,b,y;
y = zbir2broja(a,b);
Lokalne promenljive
5/27/2018 Sanja Maravic - C++ Predavanja
128/801
C++ Funkcije 16
Lokalne promenljive
n Parametri i promenljive deklarisani unutar
definisanja funkcije su lokalni.
n Postoje samo unutar tela funkcije.
n Promenljive vie ne postoje kada funkcijavrati vrednost!
Blok promenljive
5/27/2018 Sanja Maravic - C++ Predavanja
129/801
C++ Funkcije 17
Blok promenljive
n Moete deklarisati promenljive koje postojesamo unutar tela sloenog izraza(blok):
{
int foo;
}
Globalne promenljive
5/27/2018 Sanja Maravic - C++ Predavanja
130/801
C++ Funkcije 18
Globalne promenljive
n Mogue je definisati promenljive vandefinisanja bilo koje funkcije ovo su
globalne promenljive.
n Svaka funkcija moe da pristupi/promeniglobalne promenljive.
n Primer: flag koji ukazuje da li je potrebno
tampati informaciju o debugging-u.
Opseg promenljive
5/27/2018 Sanja Maravic - C++ Predavanja
131/801
C++ Funkcije 19
Opseg promenljive
n Opseg promenljive je deo programa unutarkoga promenljiva ima znaenje (gde postoji).
n Globalna promenljiva ima globalan
(neogranien) opseg.n Opseg delovanja lokalne promenljive ogranien
je na funkciju koja deklarie promenljivu.
n Opseg blok promenljive ogranien je blokom
unutar koga je promenljiva deklarisana.
Blok opseg
5/27/2018 Sanja Maravic - C++ Predavanja
132/801
C++ Funkcije 20
Blok opseg
int main(void) {int y;
{
int a = y;cout
5/27/2018 Sanja Maravic - C++ Predavanja
133/801
C++ Funkcije 21
Gneenje
n U C++:
q Nema gneenja definicije funkcije.n Nije potrebno da znate ko poziva funkciju da bi znali
opseg vaenja njenih promenljivih!
q Gneenje opsega vaenja promenljive unutarblokova.
Ugneeni blokovi
5/27/2018 Sanja Maravic - C++ Predavanja
134/801
C++ Funkcije 22
gvoid foo(void) {
for (int j=0;j
5/27/2018 Sanja Maravic - C++ Predavanja
135/801
C++ Funkcije 23
e o js a ob ast Sto age C assn
Svaka promenljiva imastorage class.q Odreuje period tokom koga promenljiva
postoji u memoriji.
q Neke promenljive stvaraju se samo jednom.
n
Globalne promenljive stvaraju se samo jednom.q Pojedine promenljive stvaraju se vie puta
n Lokalne promenljive stvaraju se svaki put kada se
funkcija pozove.
Memorijska oblast
5/27/2018 Sanja Maravic - C++ Predavanja
136/801
C++ Funkcije 24
j
n auto ovaj specifikator je skoro uveksuvian i oznaava da je ivotni vekdeklarisanog objekta automatski.
n register oznaava zahtev prevodiocu da
deklarisani objekat smesti u neki od registaraprocesora. Ovaj zahtev ne mora da budeprihvaen.
n static moe da se primenjuje samo na
imena objekata, funkcija i anonimnih unija.n extern globalna promenljiva deklarisana
negde drugde.
Specificiranje memorijske oblasti
5/27/2018 Sanja Maravic - C++ Predavanja
137/801
C++ Funkcije 25
p j j
auto int j;
register int i_need_to_be_fast;
static char remember_me;
extern double a_global;
Praktina upotreba memorijske oblasti
5/27/2018 Sanja Maravic - C++ Predavanja
138/801
C++ Funkcije 26
p j
n Lokalne promenljive su po default-u auto.
n Globalne promenljive su static podefault-u.
n Deklarisanjem lokalne promenljive kaostatic znai da e se zapamtiti njena zadnjavrednost (ne unitava se i ponovo stvara svaki
put kada se ue u njenu oblast delovanja).
static primer
5/27/2018 Sanja Maravic - C++ Predavanja
139/801
C++ Funkcije 27
p
int countcalls(void) {
static int count = 0;
count++;
return(count);
}
cout
5/27/2018 Sanja Maravic - C++ Predavanja
140/801
C++ Funkcije 28
p g j
n Oblast vaenja (scope) nekog imena u programu jeonaj deo teksta program u kome se to ime moekoristiti.
n Lokalna imena su imena deklarisana unutar bloka
(sloene naredbe), ukljuujui i krajnji spoljanji blokte funkcije, ili kao formalni argument funkcije.
n Lokalna imena mogu se koristiti samo u bloku u
kome su deklarisana, kao i u blokovima koji su
ugneeni unutar tog bloka, poev od mesta svojedeklaracije.
Lokalna imena - primer
5/27/2018 Sanja Maravic - C++ Predavanja
141/801
C++ Funkcije 29
p
void f (int i) { // i je lokalno ime;
int j,k; // j,k su lokalna imena;
//
{ // ugneeni blok;
char c; // c je lokalno ime u ugneenom bloku;
// ovde su vidljivi i,j,k,c;
}
// ovde c vie ne postoji, vidljivi su i,j,k;
}// ovde i,j,k vie ne postoje;
Globalna imena
5/27/2018 Sanja Maravic - C++ Predavanja
142/801
C++ Funkcije 30
n Oblast vaenja fajla imaju sva imenadeklarisana izvan svih blokova (ukljuujui ispoljanje blokove tela funkcije) i izvan svih
deklaracija klasa. Ova imena se nazivajuglobalnim.
n Oblast vaenja globalnog imena je poev odmesta deklaracije pa sve do kraja fajla u
kome se nalazi deklaracija.
Globalno ime - primer
5/27/2018 Sanja Maravic - C++ Predavanja
143/801
C++ Funkcije 31
p
// ovo se nalazi u nekom programskom fajlu:
int x; // globalni x;
void f () {
int x; // lokalni x, sakriva globalni x;
x=1; // pristup lokalnom x;
{
int x; // lokalni x, sakriva prethodni;
x=2; // pristup drugom lokalnom x;
}
x=3; // pristup prvom lokalnom x;
}
int *pi=&x; // uzima se adresa globalnog x;
Operator : : - pristup globalnom
5/27/2018 Sanja Maravic - C++ Predavanja
144/801
C++ Funkcije 32
p p p gimenu
n Globalnom imenu se moe pristupiti iako je sakrivenonekim lokalnim imenom, navoenjem operatora : : ispredimena:
int x; // globalni x;
void f() {
int x=0; // lokalni x;
x=1; // pristup lokalnom x;
:: x=2; // pristup globalnom x;
}
Specifikator register
5/27/2018 Sanja Maravic - C++ Predavanja
145/801
C++ Funkcije 33
n Oznaava zahtev prevodiocu da deklarisaniobjekat smesti u neki od registara. Zahtev ne
mora da bude prihvaen, pa programer ne
moe da primetiti nikakvu razliku izmeuobjekta koji je deklarisan sa i bez ovogspecifikatora.
for (register int i=0; i
5/27/2018 Sanja Maravic - C++ Predavanja
146/801Opseg vaenja funkcija
5/27/2018 Sanja Maravic - C++ Predavanja
147/801
C++ Funkcije 35
n U C++ govorimo o opsegu vaenja identifikatora(ime).
q moe da bude funkcija ili promenljiva (ili klasa).
n Imena funkcija imaju oblast vaenja fajla -file scopeq sve to sledi nakon definisanja funkcije u istom fajlu moe
koristiti funkciju.
n Ponekad ovo nije pogodno
q elimo da pozovemo funkciju sa vrha fajla a da je
definiemo na kraju fajla.
Prototip funkcije - Function
5/27/2018 Sanja Maravic - C++ Predavanja
148/801
C++ Funkcije 36
Prototypes
n Prototip funkcije moe se korisiti kako bi sekompajleru reklo kako funkcija izgleda.
q Na taj nain funkcija moe da se pozove iakokompaler jo nije video definiciju funkcije.
n Prototip funkcije specificira ime funkcije,
specifikator tipa i tip parametara.
Primer prototipa funkcije
5/27/2018 Sanja Maravic - C++ Predavanja
149/801
C++ Funkcije 37
double sqrt( double);
int add2nums( int, int);
int counter(void);
Primena prototipa
5/27/2018 Sanja Maravic - C++ Predavanja
150/801
C++ Funkcije 38
int counter(void);
int main(void)
{
cout
5/27/2018 Sanja Maravic - C++ Predavanja
151/801
C++ Funkcije 39
n Funkcija moe da poziva sama sebe! Ovo sezove rekurzija.
n Rekurzija je veoma korisna nekokomplikovano izraunavanje esto se moevrlo jednostavno izraziti rekurzijom.
Izraunavanje faktorijela
5/27/2018 Sanja Maravic - C++ Predavanja
152/801
C++ Funkcije 40
int factorial( int x )
{
if (x == 1)
return(1);
elsereturn(x * factorial(x-1));
}
Koncipiranje rekurzivne funkcije
5/27/2018 Sanja Maravic - C++ Predavanja
153/801
C++ Funkcije 41
n Definisanje osnovnog sluaja:q Situacija kada funkcija ne poziva sama sebe.
n Definisanje rekurzivnog koraka:
q Raunanje vraene vrednosti uz pomo samefunkcije.
Osnovni sluaj rekurzije
5/27/2018 Sanja Maravic - C++ Predavanja
154/801
C++ Funkcije 42
n Osnovni sluaj odgovara sluaju u komeznate odgovor (funkcija odmah vraavrednost), ili moe jednostavno da se
izrauna odgovor.n Ako nemate osnovni sluaj ne moete koristiti
rekurziju!
Korak rekurzije
5/27/2018 Sanja Maravic - C++ Predavanja
155/801
C++ Funkcije 43
n Primena poziva rekurzije da se rei
podproblem.
q Parametri moraju biti razliiti (ili nas poziv
rekurzije nee pribliiti reenju).q Generalno, potrebno je da uradite jo neto pored
poziva rekurzije.
Izraunavanje povrine kvadratai k ij
5/27/2018 Sanja Maravic - C++ Predavanja
156/801
C++ Funkcije 44
primenom rekurzijen Napisati rekurzivnu C++ funkciju koja
izraunava povrinu kvadrata dimenzijanxn.
n
nOsnovni sluaj:
n=1 area=1
Rekurzivni korak:
area = n+n-1+area(n-1)
Rekurzivna funkcija za raunanje
5/27/2018 Sanja Maravic - C++ Predavanja
157/801
C++ Funkcije 45
povrine kvadrata
int area( int n)
{
if (n == 1)
return(1);
else
return( n + n - 1 + area(n-1) );
}
Prenos po vrednosti vs.
5/27/2018 Sanja Maravic - C++ Predavanja
158/801
C++ Funkcije 46
prenos po referenci
n Do sada smo radili sa funkcijama koje
uzimaju kopiju onoga to im se prosleuje.q Ovo je prenos po vrednosti.
n Moemo definisati i funkcije koje predajureferencu promenljivoj.
q Ovo je prenos po referenci, funkcija moe direktnoda promeni promenljive pozivaa.
Reference
5/27/2018 Sanja Maravic - C++ Predavanja
159/801
C++ Funkcije 47
n Referenca mora da se inicijalizuje da upuujena drugu promenljivu.
n Pristup do objekta preko reference je
posredan, ali ne zahteva poseban operator ime reference je sinonim za ime objekta na
koji upuuje.
n Referenca se deklarie sa znakom &.
Deklarisanje reference
5/27/2018 Sanja Maravic - C++ Predavanja
160/801
C++ Funkcije 48
n Da bi se deklarisala referenca ispred imena
promenljive mora da stoji &:
int &foo;double &blah;
char &c;
Reference primer
5/27/2018 Sanja Maravic - C++ Predavanja
161/801
C++ Funkcije 49
int count;
int &blah = count;
// blah je ista promenljva kao count
count = 1;
cout
5/27/2018 Sanja Maravic - C++ Predavanja
162/801
C++ Funkcije 50
int i=1; // celobrojni objekat i;int &j=i; // j je referenca tipa int&,
// upuuje na i;
i=3; // menja se i;j=5; // opet se menja i, jer je
// operacija nad j u stvari
// operacija nad i;int *p=&j; // &j je isto to i &i, jer je
// operacija nad j u stvari
// operacija nad i;
j+=1; // isto to i: i+=1;int k=j; // posredan pristup do i preko
// reference;int m=*p; // posredan pristup do i preko
// pokazivaa;
Reference kao parametri funkcije
5/27/2018 Sanja Maravic - C++ Predavanja
163/801
C++ Funkcije 51
n Moe se deklarisati referenca kao parametar funkcije:
void f( int i, int &j) // i se prenosi po vrednosti,
{ // j po referenci;
i++; // stvarni argument se nee promeniti;
j++; // stvarni argument e se promeniti;
}
void main () {
int si=0, sj=0;
f(si,sj);// ovde e si biti jednako 0, a sj jednako 1;
}
q Svaka promena formalnog argumenta reflektovae se na original, stvarniargument.
5/27/2018 Sanja Maravic - C++ Predavanja
164/801
C++ Funkcije 52
n Referenca se prilikom svoje inicijalizacijevrsto vezuje za objekat kojim seinicijalizuje.
n Ova veza se vie nikako ne moe raskinuti,to znai da referenca, do kraja svogivotnog veka, upuuje na jedan isti objekat.
n Svako navoenje neke reference uprogramu, posle trenutka njene inicijalizacije,predstavlja posredan pristup doreferenciranog objekta.
Koristan primer za reference
5/27/2018 Sanja Maravic - C++ Predavanja
165/801
C++ Funkcije 53
void swap( int &x, int &y) {
int tmp;
tmp = x;
x = y;y = tmp;
}
Simbolike konstante
5/27/2018 Sanja Maravic - C++ Predavanja
166/801
C++ Funkcije 54
n Ako ispred imena promenljive stoji rezervisana re const, tadapromenljiva postaje read-only, tj. simbolika konstanta.
n Pri definisanju konstante mora joj se dodeliti neka vrednost:
const int maxSize=128;
const double pi=3.141592654;
n Jednom kada se definie, vrednost konstante ne moe sepromeniti!
maxSize=256; // greka!
n Ukoliko se ne specificira tip konstante, podrazumeva se da jeinteger.
const maxSize=128; //maxSize je tipa int
Nabrajanje - enumeration
5/27/2018 Sanja Maravic - C++ Predavanja
167/801
C++ Funkcije 55
n Nabrajanje predstavlja konani skupdiskretnih vrednosti konstanti tipanabrajanja.
n Objekti tipa nabrajanja mogu se konvertovatiu int, ali ne i obratno.
n Konstante tipa nabrajanja imaju celobrojnevrednosti od 0 pa navie. Svaka sledeakonstanta ima za jedan veu vrednost odprethodne, osim ako joj nije eksplicitnododeljena vrednost u deklaraciji nabrajanja.
Nabrajanje - primer
5/27/2018 Sanja Maravic - C++ Predavanja
168/801
C++ Funkcije 56
enum colors { black, // vrednost 0
red, // vrednost 1
green, // vrednost 2
blue=4, // vrednost 4
violet, // vrednost 5
white=7}; // vrednost 7
int i=white+1; // i ima vrednost 8
enum Bool { false,true}; // logike vrednosti
colors c=8;
Greka! Nabrajanje predstavlja poseban tip, ne moe sepromenljivoj tipa nabrajanja direktno dati vrednost drugogcelobrojnog tipa.
Inline funkcija
5/27/2018 Sanja Maravic - C++ Predavanja
169/801
C++ Funkcije 57
n Funkcije se mogu deklarisati tako da se zahtevanjihovo neposredno ugraivanje u kod na mestupoziva inline .
n Zahtev za neposredno ugraivanje u kod prevodilac
ne mora da ispuni, ali to nema nikakvog uticaja nasemantiku programa.
n Obino se definiu u fajlovima zaglavljima.inline Abs (int n)
{
return n>0 ? n:-n
}
Podrazumevani argumenti
5/27/2018 Sanja Maravic - C++ Predavanja
170/801
C++ Funkcije 58
n Funkcija se moe deklarisati tako da se nekiargumenti u pozivu te funkcije mogu
izostaviti. Tada izostavljeni argumenti imaju
podrazumevane (default) vrednosti.n Podrazumevane vrednosti se u deklaraciji
funkcije navode iza deklaratora argumenta,
navoenjem izraza iza znaka =.
Podrazumevani argumenti - primer
5/27/2018 Sanja Maravic - C++ Predavanja
171/801
C++ Funkcije 59
void f (int, int=3, int=0)
n Funkcija f moe se pozvati sa jednim, dva ilitri stvarna argumenta.
n U telu funkcije, formalni argument za koji jeizostavljen stvarni argument imaepodrazumevanu vrednost navedenu u
deklaraciji formalnog argumenta.
Podrazumevani argumenti - primer
5/27/2018 Sanja Maravic - C++ Predavanja
172/801
C++ Funkcije 60
void f (int, int=3, int=0)
f(1); // 2. i 3. argument imaju podrazumevane vrednosti,
// znai isto to i f(1,3,0)
f(2,4); // 3. argument ima podrazumevanu vrednost,
// znai isto to i f(2,4,0)f(3,7,5);
n Ako neki argument funkcije ima podrazumevanu vrednost, onda i svi
argumenti iza njega moraju imati podrazumevanu vrednost.
void f(int, int=3, int) //greka!!
5/27/2018 Sanja Maravic - C++ Predavanja
173/801
Strukturirani di zajn 1
Strukturirani dizajn(Structured Design)
O emu emo priati...
5/27/2018 Sanja Maravic - C++ Predavanja
174/801
Strukturirani di zajn 2
n Razmotriemo zato je vano da se programstrukturira.
n ta je top-down metod u strukturnomprogramiranju.
n Strukturni dijagrami koriste se za prikazivanjestrukturiranih programa.
Strukturirano programiranje, emu to?
5/27/2018 Sanja Maravic - C++ Predavanja
175/801
Strukturirani di zajn 3
1. Program za reavanje sloenog problemaneminovno e biti znatno veih dimenzija i znatnosloeniji nego jednostavni programi sa kojimasmo se do sada susretali.
2. U takvom sluaju vrlo je vano da se izvristrukturiranje kako bi se program lake razumeo.To se radi podelom programa na manje logikeceline.
3. Veliki i sloen problem izgledae manje sloenako moemo da ga sagledamo iz manjih delovakoji se meusobno uklapaju da formiraju celinu, tj.
ako moemo da vidimo nain na koji jestrukturiran.
Strukturirano programiranje, emu to?
5/27/2018 Sanja Maravic - C++ Predavanja
176/801
Strukturirani di zajn 4
4. Ako moete da vidite kako su manjekomponente povezane u celinu, tada je znatno
jednostavnije da se prati logika programa.5. Ako moete da vidite kako se manje
komponente uklapaju i ako moete da pratite
logiku programa, tada e vam biti znatno lake(ili nekom drugom programeru) da izmeniteprogram ili da otkrijete greke (debug).
6. Ako su programi laki za razumevanje, izmenuili otkrivanje greaka tada tedite vreme i novac
za odravanje programa.
Top down pristup
5/27/2018 Sanja Maravic - C++ Predavanja
177/801
Strukturirani di zajn 5
Metod koji se koristi za dizajniranje strukturiranogprograma.Koraci su sledei:1. Razmotriti problem koji treba da se rei i pristupiti
njegovom reavanju kao reavanju jednoggeneralnog problema.
2. Razloiti glavni zadatak na vei broj manjihzadataka
3. Nastaviti razlaganje svakog od ovih manjih
zadataka sve dok oni ne postanu dovoljno mali zavas da moete da sagledate njihovo reenje (unaem sluaju kodirano u C++).
Primer: pretpostavimo da treba napisati program koji e izraunatikonanu ocenu studenta koju ine ocena na kolokvijumu, ispitu i ocenaza projekat.
5/27/2018 Sanja Maravic - C++ Predavanja
178/801
Strukturirani di zajn 6
Glavni zadatak:
1. Izraunavnje konane ocenePodzadatak prvog nivoa:
1.1 Uitavanje ocena studenata za projekat i kolokvijumPodzadatak drugog nivoa:
1.1.1 Uitavanje ocene za projekat
1.1.2 Uitavanje ocene za kolokvijum1.2 Uitavanje ocene sa ispita1.3 Sabiranje ocene za projekat, kolokvijum i ispit i davanjekonane ocene
1.3.1 Sabiranje ocene projekta, kolokvijuma i ispita1.3.2 Dodeljivanje konane ocene
1.4 Ispisivanje ocena
Redosled izvravanja zadataka
5/27/2018 Sanja Maravic - C++ Predavanja
179/801
Strukturirani di zajn 7
n Redosled kojim e zadaci biti izvreni.
1, 1.1, 1.1.1, 1.1.2, 1.2, 1.3, 1.3.1, 1.3.2, 1.4
Strukturni dijagrami
5/27/2018 Sanja Maravic - C++ Predavanja
180/801
Strukturirani di zajn 8
Strukturni dijagrami omoguavaju nam dailustrujemo strukturni dizajn. Oni pokazuju:
1. Zadaci formiraju hijerarhijsku strukturu uformi drveta.
2. Kako su pojedine komponente meusobnopovezane.
3. Kako se podaci prenose od jedne
komponente do druge.
Strukturni dijagram za na primer
5/27/2018 Sanja Maravic - C++ Predavanja
181/801
Strukturirani di zajn 9
Izraunavanje konane ocene
Uitavanje ocene
za kolokvijum iprojekat
Uitavanjeocena sa ispita Sabiranje ocenai konvertovanje Ispis ocena
Uitavanje ocenaza kolokvijum
Uitavanje ocenaza projekat
Sabiranje ocena Konvertovanjeocena
1
1.1 1.2 1.3 1.4
1.1.1 1.1.2 1.3.1 1.3.2
kolOcenaprojOcena
kolOcena projOcena
oceneoceneispitOcena
a
a
bb
ocene
a kolOcena, projOcena, ispitOcena b - krajOcena
Strukturni dijagram
5/27/2018 Sanja Maravic - C++ Predavanja
182/801
Strukturirani di zajn 10
U hijerarhiji prikazanoj na dijagramun Glavni zadatak bie glavni program (main
funkcija u kodu).
n Podzadaci prvog nivoa bie potprogrami (ilifunkcije vie o ovome kasnije).
n Podazadaci drugog nivoa bie takoepotprogrami (ili ugnedene funkcije).
Praenje putanje izvravanja zadataka
5/27/2018 Sanja Maravic - C++ Predavanja
183/801
Strukturirani di zajn 11
n Kako bi pratili redosled kojim se zadaciizvravaju pratite putanju izvravanju kojaje na strukturnom dijagramu predstavljenalinijama.
n Poinje na 1, ide ka 1.1, ide ka 1.1.1,vraa se na 1.1, vraa se na 1 ponovo,zatim ide ka 1.2, vraa se na 1, ide na1.3, dalje ide ka 1.3.1, vraa se na 1.3, ide
na 1.3.2, vraa se na 1.3, vraa se na 1,ide na 1.4 i na kraju vraa se na 1. Sadasu svi zadaci zavreni.
Veze i protokpodataka
5/27/2018 Sanja Maravic - C++ Predavanja
184/801
Strukturirani di zajn 12
n Linije na dijagramu pokazuju koji potprogramisu povezani i koji podaci se razmenjujuizmeu potprograma.
n
Podaci koji se razmenjuju izmeupotprograma nazivamo promenljivama astrelice ukazuju na smer protoka.
Ulazne i izlazne promenljive
5/27/2018 Sanja Maravic - C++ Predavanja
185/801
Strukturirani di zajn 13
n Posmatrajmo promenljivu kolOcena.n Ovu promenljivu stvara potprogram 1.1.1
(uitavanjem sa tastature i iz fajla)n Izlazi iz potprograma 1.1.1 i ulazi u potprogram 1.1,
dakle ona je izlaz za 1.1.1 i ulaz za 1.1n Potprogram 1.1.1 (ulazi: nema, izlazi: kolOcena)n Potprogram 1.1 (ulazi: kolOcena, projOcena; izlazi:
kolOcena, projOcena)
Stablo poziva
5/27/2018 Sanja Maravic - C++ Predavanja
186/801
Strukturirani di zajn 14
n Drugi nain da vidimo izvravanje glavnog programaje da ga posmatramo kao seriju poziva.
n Glavni program poziva potprograme 1.1, 1.2, 1.3 i1.4.
n Potprogram 1.1 zatim poziva 1.1.1 i 1.1.2n Potprogram 1.3 poziva 1.3.1 i 1.3.2
n Tokom poziva, promenljive se predaju izmeupotprograma.
Izvravanje potprograma
5/27/2018 Sanja Maravic - C++ Predavanja
187/801
Strukturirani di zajn 15
n Pogledajmo ta se deava u potprogramu1.3.1
n Potprogram 1.3.1 (ulazi: kolOcena,projOcena, ispitOcena; izlazi: krajOcena).
n Dajmo potprogramu 1.3.1 ime koje e vieukazivati na to ta on radi, npr. zbirOcene.
Potprogram 1.3.1 zbirOcene
5/27/2018 Sanja Maravic - C++ Predavanja
188/801
Strukturirani di zajn 16
Potprogram: zbirOcene
Ulazi: kolOcena, projOcena, ispitOcena
Izlaz: krajOcena
Izvravanje:
neka jekrajOcena= (kolOcena + projOcena) + (ispitOcena/80*60)
Potprogram 1.1.1 unesiKolOcena
5/27/2018 Sanja Maravic - C++ Predavanja
189/801
Strukturirani di zajn 17
Potprogram: unesiKolOcena
Ulazi: nema
Izlazi: kolOcenaIzvravanje:
ispii Unesi ocenu sa kolokvijuma
proitaj kolOcena
Glavni program (main)
5/27/2018 Sanja Maravic - C++ Predavanja
190/801
Strukturirani di zajn 18
Program: mainUlazi: kolOcena, projOcena, ispitOcena, krajOcena, ocena
Izlazi: nema
Izvravanje
Ispii ovo je glavni program
Pozovi potprogram 1.1
Pozovi potprogram 1.2
Pozovi potprogram 1.3
Pozovi potprogram 1.4
Saveti za kreiranje strukturiranih
dijagrama
5/27/2018 Sanja Maravic - C++ Predavanja
191/801
Strukturirani di zajn 19
dijagrama
Dobro strukturirani dijagram je onaj kod koga je:Veliina potprograma je priblino ista, ni jedan ne bi
trebalo da je suvie velik ili suvie mali.
1. Potprogram najnieg nivoa moe lako da seimplementira (npr. napie kod u C++).2. Ni na jednom nivou nema previe potprograma
(optimalan broj je od 5 do 7).3. Struktura je simetrina.
main
Primer 1
5/27/2018 Sanja Maravic - C++ Predavanja
192/801
Strukturirani di zajn 20
sub1 sub 7 sub8sub2 sub3 sub4 sub5 sub6
sub9
Problem sa dijagramom:Previe potprograma i svi su na prvom nivou.
main
Primer 2
5/27/2018 Sanja Maravic - C++ Predavanja
193/801
Strukturirani di zajn 21
sub1sub2
Sub1.1
Sub1.1.1
Sub1.1.1.1
Sub1.1.1.1.1
Problem sa dijagramom:Nije simetrian. Sa leve strane ini sekao da sav posao odrauje
potprogram najnieg nivoa.Ostali potprogrami samo prenose onoto je odraeno (u svakodnevnomivotu ovo esto sreemo).
Izbalansiran strukturiran dijagram
5/27/2018 Sanja Maravic - C++ Predavanja
194/801
Strukturirani di zajn 22
main
sub1 sub2 sub3
Sub1.1 Sub1.2 Sub2.1 Sub2.2 Sub3.1 Sub3.2
Primer 3
Kratak pregled
5/27/2018 Sanja Maravic - C++ Predavanja
195/801
Strukturirani di zajn 23
n Velik i sloen program mora biti strukturiran kakobi bio laki za razumevanje.
n Top-down metod je metod kod koga se glavnizadatak razbija na manje zadatke koji mogu dase izvre.
n Strukturni dijagram prikazuje program u formidrveta.
Kratak pregled
5/27/2018 Sanja Maravic - C++ Predavanja
196/801
Strukturirani di zajn 24
n Dijagram prikazuje hijerarhijsku strukturukomponenata programa i veze meu njima.
n Strukturni dijagram takoe pokazuje kako sepodaci razmenjuju izmeu komponenata.
n Ovi podaci mogu biti ili ulazne ili izlaznepromenljive.
n Program predstavljen balansiranim strukturnimdijagramom daje efikasnija reenja nego onaj
koji je nesimetrian.
Prikaz treeg pravila (razlaganje svakog od zadataka dok ne postane dovoljnomali da se moe sagledati reenje).
5/27/2018 Sanja Maravic - C++ Predavanja
197/801
Strukturirani di zajn 25
3pravilo
3pravilo3pravilo
5/27/2018 Sanja Maravic - C++ Predavanja
198/801
String 1
String
Pregledn Nakon brojeva stringovi su sledei
5/27/2018 Sanja Maravic - C++ Predavanja
199/801
String 2
n Nakon brojeva, stringovi su sledei
najee korieni tipovi podataka umnogim programima.
n Stringovi se deklariu koristei tippodataka string.
n Noviji kompajleri kao npr. Visual C++ 6.0deklariu string promenljive na sledeinain:
#include
string myName = Marko Jankovic;
Stariji kompajleri
5/27/2018 Sanja Maravic - C++ Predavanja
200/801
String 3
n Stariji kompajleri deklariu string promenljivu kao nizkaraketra.
n Npr. Borland Turbo C++
n #include
n char myName[20] = Petar Ivic;
Tip podataka string
5/27/2018 Sanja Maravic - C++ Predavanja
201/801
String 4
n String tip nije primitivni (osnovni) tip podatakakao npr. char, int ili float.
n Definie se u biblioteci i deo je ANSIstandarda za C++.
n Ako e u programu biti primenjen tip podatastring obavezno se mora ukljuiti uzaglavlju programa.
Unoenje stringa
5/27/2018 Sanja Maravic - C++ Predavanja
202/801
String 5
n I/O formatstring movieName;
cin >> movieName;
Ako korisnik ukuca Star Trek IX
Izlaz e biti samo Star, jer prazno mesto (space)ukazuje na kraj stringa.
Naredba,
getline(cin,movieName);prikazae ceo string Star Trek IX
Ispisivanje stringa
5/27/2018 Sanja Maravic - C++ Predavanja
203/801
String 6
n Ako deklariete stringstring movie = The Lion King;
cout
5/27/2018 Sanja Maravic - C++ Predavanja
204/801
String 7
n U mnogim sluejevima vano je odrediti duinustringa, npr.
string film = The Lion King;
film.length();
cout
5/27/2018 Sanja Maravic - C++ Predavanja
205/801
String 8
n Moete izdvojiti podstring iz datog stringa, kao inapraviti novi string spajajui vie podstringova.Primer:
string film = The Lion King ;
string sub = film.substr(0,8);n Ovom naredbom izdvajamo prvih 8 karaktera koji
ine string poevi od poetka stringa koji je napoziciji 0.
n Izdvojeni podstring je The Lionn Napomena: brojanje poinje od 0 kod stringova
Povezivanje stringova
5/27/2018 Sanja Maravic - C++ Predavanja
206/801
String 9
string film = The Lion King ;string version = 1. 2.;string v1 = version.substr(0,1);
string v2 = version.substr(2,2);string thismovie = film + + v1 + v2;zatimcout
5/27/2018 Sanja Maravic - C++ Predavanja
207/801
String 10
n Napisati program koji izdvaja ime kursaCOIT11133 iz sledee URL adrese.
http://infocom/Courses/2003/T2/COIT11133/
5/27/2018 Sanja Maravic - C++ Predavanja
208/801
Zadatak
5/27/2018 Sanja Maravic - C++ Predavanja
209/801
String 12
n Napisati program koji prikazuje inicijale osobeije se ime i prezime nalaze u dva razliitastringa.
Reenje#include #include
5/27/2018 Sanja Maravic - C++ Predavanja
210/801
String 13
#include
using namespace std;void main(void){
string fname,sname;cout > fname;cout > sname;string initfname = fname.substr(0,1);string initsname = sname.substr(0,1);
cout
5/27/2018 Sanja Maravic - C++ Predavanja
211/801
String 14
string s1 = "Programming";string s2 = "C++";
if(s1==s2)
cout s2)
cout
5/27/2018 Sanja Maravic - C++ Predavanja
212/801
String 15
n Naredbaif(s1==s2) vraa vrednost true ako su oba stringa ista.if(s1>s2) vraa vrednost true ako je s1 vei od s2.if(s1
5/27/2018 Sanja Maravic - C++ Predavanja
213/801
String 16
n ta radi sledei blok?if(s1>s2)
{
stemp = s1;s1 = s2;
s2 = stemp;
}
Poreenje stringovastring s1 = Prog. A;
string s2 = Prog B;
5/27/2018 Sanja Maravic - C++ Predavanja
214/801
String 17
string s2 = Prog. B ;
string stemp;
if(s1.substr(0,4)==s2.substr(0,4))
cout s2.substr(0,4))
{
cout
5/27/2018 Sanja Maravic - C++ Predavanja
215/801
String 18
n Napisati if naredbe koje proveravaju da li ovedve email adrese u sebi sadre vts.su.ac.yu,tj. da li imaju isto ime domena?
j.sin02@vts.su.ac.yu
b.sam@ vts.su.ac.yun Pomo: deklarisati adrese kao dva stringa,
pronai njihovu duinu i porediti podstringovekoji slede posle @.
Reenje#include #include
5/27/2018 Sanja Maravic - C++ Predavanja
216/801
String 19
using namespace std;void main(void){
string add1 ="j.sin02@ vts.su.ac.yu ";string dom =" vts.su.ac.yu ";string add2 =b.sam@ vts.su.ac.yu ";int lenAdd1 = add1.length();int lenAdd2 = add2.length();if((add1.substr(lenAdd1-12,12)== dom)&&(add1.substr(lenAdd1-12,12)== dom))
cout
5/27/2018 Sanja Maravic - C++ Predavanja
217/801
ta je niz?n Niz je skup promenljivih od kojih su sve istog
5/27/2018 Sanja Maravic - C++ Predavanja
218/801
Nizovi I 2
tipa. Ne moete imati niz koji sadri npr. icelobrojne promenljive i promenljive tipa
karakter.
n Svaki element niza je referenciran indeksom. U
memoriji, niz je skup kontinualnih memorijskihlokacija, to znai da su one povezane u
neprekidnoj sekvenci.
n Ako znate adresu prvog elementa niza, moeteizraunati adresu drugog, treeg, etvrtog itd.
elementa.
Primer nizaint a[6] = {2,4,7,9,8,3};
5/27/2018 Sanja Maravic - C++ Predavanja
219/801
Nizovi I 3
n Niz celih brojeva koji se zove a .
n Broj 6 unutar zagrada ukazuje na veliinu niza.
n Niz je inicijalizovan navoenjem skupa od 6 vrednostiunutar vitiastih zagrada.
n Prvom elementu niza pristupa se indeksom a[0],drugom sa a[1], treem a[2] itd. Naredba
cout
5/27/2018 Sanja Maravic - C++ Predavanja
220/801
Nizovi I 4
nVano je znati razliku izmeu npr. petog elementa ielement niza 5
nPeti element niza je a[4] i njegova vrednost je 8nElement niza 5 je a[5] i ima vrednost 3
Indeks niza vrednost elementa niza(index or subscript)
389742
a[5]a[4]a[3]a[2]a[1]a[0]
Aritmetika sa nizoviman Mogue je vriti aritmetike operacije sa
5/27/2018 Sanja Maravic - C++ Predavanja
221/801
Nizovi I 5
elementima niza koristei notaciju sa indeksima.Sledei izrazi su tani:
cout
5/27/2018 Sanja Maravic - C++ Predavanja
222/801
Nizovi I 6
n Jedan nain da se niz inicijalizuje je da se koristilista inicijalizacije, npr.,
int seta[4] = {3,5,4,6}
int setb[4] = {0} //postavlja sve vrednosti na 0.
n Drugi nain je primena for petlje, npr.,
int setc[10];
for (int i=0;i
5/27/2018 Sanja Maravic - C++ Predavanja
223/801
Nizovi I 7
n Ne moete odrediti veliinu niza nakon to programpone da se izvrava. Potrebno je da je deklariete iinicijalizujete pre izvrenja programa. Sledee nijedozvoljeno:
int size;
cin >> size;
int array[size];
for(int i =0; i
5/27/2018 Sanja Maravic - C++ Predavanja
224/801
Nizovi I 8
n Dobra je praksa deklarisati konstantnucelobrojnu promenljivu za veliinu niza.
const int arraysize = 100;
array[arraysize];for(int i=0; i
5/27/2018 Sanja Maravic - C++ Predavanja
225/801
Nizovi I 9
int main()
{
const int size = 10;
float total=0, scores[size];
for (int i = 0; i
5/27/2018 Sanja Maravic - C++ Predavanja
226/801
Nizovi I 10
Pretpostavimo da imamo niz
int a[5] = {5,4,3,2,1};
sadraj niza ne moete prikazati naredbom
cout
5/27/2018 Sanja Maravic - C++ Predavanja
227/801
Nizovi I 11
n Do sada smo deklarisali stringove kaopromenljive tipa string (string data type).
n Ali string moe da se posmatra i kao jedan
niz niz karaktera. Npr.,
string film = Star Wars;
je isto to i
char film[9] = Star Wars;
Manipulisanje stringovima kaonizovima karaktera
5/27/2018 Sanja Maravic - C++ Predavanja
228/801
Nizovi I 12
Moemo da uradimo sledee
string film = Star Wars";
int len = film.length();for (int i = 0; i < len ; i++)
cout
5/27/2018 Sanja Maravic - C++ Predavanja
229/801
Nizovi I 13
int len = 0, numspace = 0;
len = film.length();
for(int i=0;i
5/27/2018 Sanja Maravic - C++ Predavanja
230/801
Nizovi I 14
karakterima koriste se za brojanje cifara islova u stringu.
n Napisati kratak program koji e prebrojati
cifre i slova u stringu The Lion King 2
5/27/2018 Sanja Maravic - C++ Predavanja
231/801
Niz stringovan Lista imena je jedan primer za niz stringova.
5/27/2018 Sanja Maravic - C++ Predavanja
232/801
Nizovi I 16
Primer:string maillista[3] = {Ana,Luka,Ema }
Primetite da ovo nisu nizovi karaktera nego tip string.
maillista[0]=Ana , maillista[1]=Luka, maillista[2] = Ema
anA
k auL
amE
Primer niz stringovastring mailist[5];
5/27/2018 Sanja Maravic - C++ Predavanja
233/801
Nizovi I 17
cout
5/27/2018 Sanja Maravic - C++ Predavanja
234/801
Primer: ocene studenatastring names[5]={""}; // inicijalizovanje null stringa
float marks[5] = {0}; // sve vrednosti postavljene su na nula
5/27/2018 Sanja Maravic - C++ Predavanja
235/801
Nizovi I 19
for(int i=0;i>marks[i];
}
cout
5/27/2018 Sanja Maravic - C++ Predavanja
236/801
Nizovi I 20
n Napisati kratak program u kome se dva nizastringova koriste za uvanje imena i kontakt
telefona 5 osoba i lista se prikazuje na
ekranu.
Reenjestring names[5]={""}, telephone[5]={""};
for(int i=0;i
5/27/2018 Sanja Maravic - C++ Predavanja
237/801
Nizovi I 21
{cout
5/27/2018 Sanja Maravic - C++ Predavanja
238/801
Nizovi I 22
bilo kog tipa.
n Sa numeriim tipovima nizova mogu se vriti
aritmetike operacije.
n Stringovima se moe manipulisati kao nizomkaraktera. isspace(), isdigit i isalpha su funkcije koje
se mogu koristiti za obradu karaktera u string ili
karakter nizu (string ili char niz).
Pregledn String nizovi razlikuju se od niza karaktera. Svaki
j di i l t ij k kt t i M
5/27/2018 Sanja Maravic - C++ Predavanja
239/801
Nizovi I 23
pojedini element nije karakter nego string. Moguse posmatrati kao skup nizova unutar veeg niza.
n Moda e te u programu morati da radite sa viepovezanih nizova, kao npr.dva niza za unoenja
imena studenata i njihovih odgovarajuih ocena.n Smetanje podataka u niz olakava vam
manipulisanje podacima.
Ni i
5/27/2018 Sanja Maravic - C++ Predavanja
240/801
Nizovi II 1
NizoviII deo
O emu emo priati?
Nizovi su korisne strukture za skladitenje velike
k lii d t k iji Ti d i
5/27/2018 Sanja Maravic - C++ Predavanja
241/801
Nizovi II 2
koliine podataka u memoriji. Tim podacimamoemo manipulisati na mnoge naine.
Videemo kako moemo
n Traiti odreenu vrednost unutar niza
n Traiti i zameniti neku vrednost u nizun Dodati vrednosti na kraj niza
n Videemo kako primeniti nizove u statistikim
izra
unavanjima
Pretraga niza
n Pretraga niza podrazumeva prolazak kroz niz od
j tk k k j i j k
5/27/2018 Sanja Maravic - C++ Predavanja
242/801
Nizovi II 3
njegovog poetka ka kraju i proveravanje svakogelementa niza da li njegova vrednost odgovaraodabranoj.
n Vrednost koju odaberemo da traimo u nizunazivamo klju key.
n Vrednost moe biti numerika, string ili grupakaraktera.
Primer pretrage niza#include bool search(int array[],int key);
t i t i 100 Ni j i i ij li
5/27/2018 Sanja Maravic - C++ Predavanja
243/801
Nizovi II 4
const int size = 100;void main(void){
int array[size], key=0;bool found = false;
for(int i=0;i
5/27/2018 Sanja Maravic - C++ Predavanja
244/801
Nizovi II 5
bool search(int array[], int key){
for(int i = 0;i
5/27/2018 Sanja Maravic - C++ Predavanja
245/801
Nizovi II 6
void searchAndReplace(string names[]);const int size = 5;void main(void){
string names[size]= {"Thomas","Sing","Andrew","Deepka","Peter"};cout
5/27/2018 Sanja Maravic - C++ Predavanja
246/801
Nizovi II 7
Deepka saDeepak.void searchAndReplace(string names[]){
for(int i=0;i
5/27/2018 Sanja Maravic - C++ Predavanja
247/801
Nizovi II 8
n Izmeniti program umetanjem koda koji etraiti od korisnika da unese jedno ime koje
e se traiti i zameniti, a zatim vri pretragu i
zamenu.
Reenje
string names[size]= {"Thomas","Sing","Andrew","Deepka","Peter"};
String name replaceName;
5/27/2018 Sanja Maravic - C++ Predavanja
248/801
Nizovi II 9
String name, replaceName;cout
5/27/2018 Sanja Maravic - C++ Predavanja
249/801
Nizovi II 10
Izmenjena: searchAndReplace funkcija
void searchAndReplace(string names[], string name, stringreplaceName)
{
for(int i=0;i
5/27/2018 Sanja Maravic - C++ Predavanja
250/801
Nizovi II 11
scores
n Niz nije popunjen do kraja. Njegova duina je 6.
n Kako bi ga dopunili dodajemo vrednosti na
njegov krajn Moramo voditi rauna o dve stvari:
1. Koja je sledea pozicija koja se popunjava.
2. Da li je niz pun?
U ovom primeru sledea pozicija koja se popunjavaje scores[4].
49810
Primer dodavanja#include #include
bool appendScore(int scores[] int score int &nextSlot);t i t i 6
5/27/2018 Sanja Maravic - C++ Predavanja
251/801
Nizovi II 12
bool appendScore(int scores[], int score, int &nextSlot);const int size = 6;void main(void){
int scores[size]={10,8,9,4}, score=0;bool full = false;
int nextSlot = 4;while(!full){
cout
5/27/2018 Sanja Maravic - C++ Predavanja
252/801
Nizovi II 13
if(nextSlot==size-1){
cout
5/27/2018 Sanja Maravic - C++ Predavanja
253/801
Nizovi II 14
n Moemo odrediti sledee za skup:q 1. maximum
q 2. minimum
q 3. srednju vrednost
q 4. mode broj koji se najee pojavljuje
Nalaenje uestalosti vrednosti
#include
void findFreq(int scores[] int frequency[]);
Niz vrednostimin =1, max = 6 vrednost
5/27/2018 Sanja Maravic - C++ Predavanja
254/801
Nizovi II 15
void findFreq(int scores[], int frequency[]);const int size = 20;void main(void){
int scores[size] =
{1,2,2,3,4,2,5,2,3,4,2,4,5,1,1,6,3,1,2,6};int frequency[7] = {0},mode = 0;findFreq(scores, frequency);for(int i=1;i
5/27/2018 Sanja Maravic - C++ Predavanja
255/801
Nizovi II 16
Svrha funkcije: nai broj pojavljivanja 1, 2, 3 itd u nizuscores[].
void findFreq(int scores[], int frequency[])
{
for(int i=0;i
5/27/2018 Sanja Maravic - C++ Predavanja
256/801
Nizovi II 17
n Napisati funkciju aveScore() koja koristi nizscores da odrediti srednju vrednost podataka.
n aveScores() vraa vrednost float average.
Reenje
float aveScores(int scores[]);
void main(void) Ove linije koda
5/27/2018 Sanja Maravic - C++ Predavanja
257/801
Nizovi II 18
void main(void){
int scores[size] = {1,2,2,3,4,2,5,2,3,4,2,4,5,1,1,6,3,1,2,6};int frequency[7] = {0},mode = 0;float average = 0.0;
average = aveScores(scores);cout
5/27/2018 Sanja Maravic - C++ Predavanja
258/801
Nizovi II 19
float aveScores(int scores[])
{
float total = 0.0;
for(int i = 0; i
5/27/2018 Sanja Maravic - C++ Predavanja
259/801
Nizovi II 20
n Napisati funkciju findMode() za odreivanje
moda (najvee frekvencije podataka) i
ubaciti poziv funkcije u main.
n findMode() prima niz frequency[] kao ulaznipodatak a vraa mode
Reenje
float findMode(int frequency[]);void main(void){
5/27/2018 Sanja Maravic - C++ Predavanja
260/801
Nizovi II 21
{int scores[size] = {1,5,6,3,4,2,6,5,3,5,2,4,5,6,6,6,3,1,2,6};int frequency[7] = {0},mode = 0;float average = 0.0;average = aveScores(scores);
cout
5/27/2018 Sanja Maravic - C++ Predavanja
261/801
Nizovi II 22
float findMode(int frequency[]){ int mode = 0;
for(int i = 1; imode)mode = i;
return mode;}
Nalaenje najveeuestalosti
Ni i
5/27/2018 Sanja Maravic - C++ Predavanja
262/801
Nizovi III 1
NizoviIII deo
C++ nizovin Niz je skup elemenata iste vrste poreanih
u memoriji
5/27/2018 Sanja Maravic - C++ Predavanja
263/801
Nizovi III 2
u memoriji.
n Svi elementi niza moraju biti istog tipa.
q moe biti niz tipa int, double, char,
q
indeks ukazuje na poziciju elementa u nizu.q dimenzija - broj elemenata, unapred definisan,
tokom izvrenja programa ne moe se menjati.
n Moemo ukazati na pojedinani element
navodei njegovu poziciju (indeks) u nizu.
Deklarisanje jednog niza
ime tipa ime niza[velicina];
5/27/2018 Sanja Maravic - C++ Predavanja
264/801
Nizovi III 3
_ p _ [ ]
ime_tipa moe biti bilo koji tip C++ promenljive.
ime_niza moe biti bilo koje dozvoljeno ime promenljive.
velicina moe biti izraz.
Memorija i nizovi4 bytes
aki int jedu
ine4ba
jta
5/27/2018 Sanja Maravic - C++ Predavanja
265/801
Nizovi III 4
int dan[7];dan[0]
dan[1]
dan[6]
svakiintje
ime tipa
ime niza
veliina,
(duina niza)
C++ nizovi poinju od 0 !!!!!!!
n Prvi element niza je nulti element!
5/27/2018 Sanja Maravic - C++ Predavanja
266/801
Nizovi III 5
Prvi element niza je nulti element!n Ako definiemo niz od n elemenata, poslednji
element je n-1.
n Ako pokuamo da pristupimo elementu na
poziciji n dolazi do greke!
Indeks niza
n Redni broj elementa u nizu zovu se indeks
5/27/2018 Sanja Maravic - C++ Predavanja
267/801
Nizovi III 6
Redni broj elementa u nizu zovu se indeks.dan[i]
ime niza
indeks
n Indeks niza moe da bude bilo koji izraz
napisan pomou integera. Sledei izrazi su
tani:
dan[17] dan[i+3] dan[a+b+c]
Primer niza1.int komad[10]; // niz od 10 elemenata, svi su int tipa
komad[3]=77; // dodela vrednosti 4. elementu,
// brojanje kree od 0
5/27/2018 Sanja Maravic - C++ Predavanja
268/801
Nizovi III 7
// j j
2. const int size = 3;
double Average (int nums[size])
{ double average = 0;
for (register i = 0; i < size; ++i)
average += nums[i];
return average/size;
}
Primer niza
int main(void){
5/27/2018 Sanja Maravic - C++ Predavanja
269/801
Nizovi III 8
{
int facs[10];
for (int i=0;i
5/27/2018 Sanja Maravic - C++ Predavanja
270/801
Nizovi III 9
int foo[5] = { 1,8,3,6,12};// foo[0]=1, foo[1]=8, foo[2]=3, foo[3]=6, foo=[4]=12
double d[4] = { 0.707, 0.707};
// d[0]=0.707, d[1]=0.707 ostali imaju vrednost 0!!!
int a [ ]={1,2,3};// a [0]=1, a [1]=2, a [2]=3 dimenzija postaje 3!!!
char s[] = { 'R', 'P', 'I' };// nije potrebno specificirati velicinu niza pri
inicijalizaciji
Ispis niza
Moe se predati niz kao parametar.Nije potrebno specificirati duinu niza!
5/27/2018 Sanja Maravic - C++ Predavanja
271/801
Nizovi III 10
void stampaj_niz(int a[], int duzina)
{for (int i=0;i
5/27/2018 Sanja Maravic - C++ Predavanja
272/801
Nizovi III 11
n Funkcija stampaj_niz deklarisana je daobrauje samo celobrojne vrednosti.
n Moemo napisati drugu funkciju za ispis nizakoji sadri podatke tipa double.
stampaj_niz() za double
void stampaj_niz(double a[], int duzina){
5/27/2018 Sanja Maravic - C++ Predavanja
273/801
Nizovi III 12
{
for (int i=0;i
5/27/2018 Sanja Maravic - C++ Predavanja
274/801
Nizovi III 13
void stampaj_niz(double a[], int duzina);
void stampaj_niz(int a[], int duzina);
n
Moe se definisati vie razliitih funkcija sa istimimenom preklapanje imena funkcije functionoverloading.
n Funkcije sa preklopljenim imenom moraju dovoljno da
se razlikuju po tipovima svojih formalnih argumenata.
Preklapanje imena funkcija -overload
n Pravila za korienje overload tehnike:q Funkcije imaju razliit broj parametara
5/27/2018 Sanja Maravic - C++ Predavanja
275/801
Nizovi III 14
jq Funkcije imaju razliit broj parametara
q Funkcije se razlikuju bar za jedan tip parametara
int Abs( int n)
{ return n
5/27/2018 Sanja Maravic - C++ Predavanja
276/801
Nizovi III 15
g jchar str[]=ZDRAVO;
q Na ovaj nain str se definie kao niz od 7 karaktera: 6 slova
i null karaktera /0 (ubacuje ga kompajler).
char str[]={Z,D,R,A,V,O};q str se definie kao niz od 6 karaktera.
Niz nizova
n Moete napraviti niz nizova:
int a[2][2];for (int i=0;i
5/27/2018 Sanja Maravic - C++ Predavanja
277/801
Nizovi III 16
for (int i=0;i
5/27/2018 Sanja Maravic - C++ Predavanja
278/801
Nizovi III 17
A[2][3]A[2][2]A[2][1]A[2][0]Red 2
A[1][3]A[1][2]A[1][1]A[1][0]Red 1
A[0][3]A[0][2]A[0][1]A[0][0]Red 0
Kol 3Kol 2Kol 1Kol 0
2-D organizacija u memoriji
char A[4][3];A[0][0]
A[0][1]A[0][2]A[0]
{
Recommended