Sanja Maravic - C++ Predavanja

Embed Size (px)

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 [email protected]

    q mr Robert Pinter [email protected]

    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?

    [email protected]

    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]

    {