cpp predavanja

Upload: dusan-aleksic

Post on 03-Apr-2018

228 views

Category:

Documents


0 download

TRANSCRIPT

  • 7/28/2019 Cpp Predavanja

    1/334

    1

    Uvod

    2

    Literatura

    Laslo Kraus: Programski jezik C++ sa reenimzadacima, Akademska misao

  • 7/28/2019 Cpp Predavanja

    2/334

    3

    Programski jezik C

    Jezik opte namene

    Ima karakteristike

    viih programskih jezika

    strukturirani tipovi podataka

    upravljake strukture

    niih programskih jezika (simbolikih programskih jezika)

    rad sa bitovima

    korienje procesorskih registara

    pristup podacima pomou adrese operatore orijentisane ka hardveru raunara

    4

    Razvoj programskog jezika C

    C je projektaovao Dennis Ritchie

    1972 u Bell-ovim laboratorijama

    Cilj razvoja novog jezika

    jezika nezavisan od raunara

    karakteristike vieg programskog jezika

    korienje umesto simbolikih mainskih jezika koji suzavisni od raunara

    Standardizovan 1989

    standard izdao American National Standards Institute

    ANSI C

  • 7/28/2019 Cpp Predavanja

    3/334

    5

    Razvoj programskog jezika C++

    1980 su dodate klase, jezik je nazvan C sa klasama

    Dalja proirenja jezika:

    virtuelne funkcije (isto to i redefinisanje u Javi, ali nije sasvimisto to i apstraktna funkcija, koja je istavirtuelna funkcija)

    preklapanje operatora

    1983/84 je nazvan C++

    ime oznaava da C++ nije novi programski jezik, ve proirenjejezika C

    preko 95% jezika C je usvojeno bez izmena u C++

    promenjeni su neki detalji radi obezbeivanja konzistentnosti novihkoncepcija u C++

    Autor C++ je Bjarne Stroustrup, njegova knjiga The C++Programming Languagekoriena je kao definicija jezika pre negoto je standardizovan

    6

    Razvoj programskog jezika C++

    Dalji razvoj

    viestruko nasleivanje

    apstraktne klase

    generike klase

    rukovanje izuzecima

    1991 objavljena knjiga The Annotated C++ ReferenceManual, autori su Margaret A. Elis i Bjarne Stroustrup,

    ANSI standard je izdat 1997, jezik je proiren:

    provera tipa objekta u toku izvrenja programa

    razraene generike funkcije i klase

    definisana biblioteka gotovih klasa i funkcija koje se esto

    koriste

  • 7/28/2019 Cpp Predavanja

    4/334

    7

    Obrada programa na jeziku C++

    pod operativnim sistemom MS Windows

    Unoenje izvornog teksta programa u datoteku.Ekstenzije datoteka su:

    .c, ako je napisana u jeziku C

    .cpp, ako je napisana u jeziku C++

    Prevoenje izvornog teksta programa

    ekstenzija datoteke je .obj

    Povezivanje prevedenog oblika programa sa potrebnimkorisnikim i sistemskim potprogramima u izvrni oblik

    ekstenzija datoteke je .exe

    Izvravanje programa

    8

    Prikazivanje algoritma

    Algoritam je opis koraka koji se izvravaju u toku nekeobrade

    Opis algoritma

    govornim jezikom

    grafiki pomou dijagrama toka

    pomou pseudojezika

    pomou programskog jezika

    Najjasnije je grafiko predstavljanje

    Vrste dijagrama toka

    standardni dijagram toka

    strukturirani dijagram toka

  • 7/28/2019 Cpp Predavanja

    5/334

    9

    Standardni dijagram toka

    Orijentisani graf koji ima jednu poetnu i jednu zavrnutaku

    10

    Strukturirani dijagram toka

    Podrava principe strukturiranog programiranja

  • 7/28/2019 Cpp Predavanja

    6/334

    11

    Tipovi podataka

    12

    Elementi jezika C

    Skup znakova

    Leksiki simboli

    Beli znaci

    Naredbe

    Direktive pretprocesora

  • 7/28/2019 Cpp Predavanja

    7/334

    13

    Skup znakova

    Mala i velika slova engleskog alfabeta

    razlikuju se mala i velika slova

    Deset decimalnih cifara

    Vei broj znakova interpunkcije

    14

    Leksiki simboli

    Leksiki simboli su nedeljivi nizovi znakova

    identifikatori

    konstante

    slubene rei

    operatori

    separatori

    Leksiki simboli se piu spojeno ili razdvojeno belimznacima

  • 7/28/2019 Cpp Predavanja

    8/334

    15

    Beli znaci

    Beli znaci su

    razmak

    tabulacija

    vertikalna tabulacija

    prelazak u novi red

    prelazak na novu stranicu

    16

    Komentari

    Komentar u jednom redu

    // Proizvoljan tekst do kraja reda

    Komentar u proizvoljnom broju redova

    /*

    tekst napisan u proizvoljnom broju redova

    */

    /* moe i unutar jednog reda */

    Komentari se mogu smatrati belim znacima

  • 7/28/2019 Cpp Predavanja

    9/334

    17

    Naredbe

    Naredbe su nizovi leksikih simbola

    Vrste naredbi

    deklarativne naredbe slue za definisanje podataka,potprograma (funkcija), ...

    izvrne naredbe izvode elementarne obrade

    18

    Direktive pretprocesora

    Pretprocesor je deo prevodioca koji koji priprema izvornitekst programa pre samog prevoenja

    Direktive pretprocesora su uputstva kojima se utie natok prevoenja programa

    Nisu deo programa tj. nisu naredbe

    Piu se u posebnim redovima, prvi ne-beli znak je # Naredbe se ne piu u istom redu sa direktivom

    Primer direktive pretprocesora:

    #define PI 3.14

  • 7/28/2019 Cpp Predavanja

    10/334

    19

    Identifikatori

    Identifikatori slue za oznaavanje

    podataka

    simbolikih konstanti

    tipova podataka

    potprograma (funkcija)

    oznake koje su odredita za naredbe skoka

    Identifikatori se sastoje od velikih i malih slova, cifara iznaka donja crta "_" (u Javi moe i "$!)

    prvi znak ne moe biti cifra

    mogu da budu proizvoljno dugaki

    po standardu najmanje 31 znak je znaajan

    20

    Primeri identifikatora

    Ispravni identifikatori

    alfa

    a

    b356

    c5a

    ime_i_prezime

    imeIprezime

    Neispravni identifikatori

    3a // poinje cifrom

    int // rezervisana re

    x-z // operator nije dozvoljen

  • 7/28/2019 Cpp Predavanja

    11/334

    21

    Tipovi podataka

    Tipovi podataka odreuju osobine podatka:

    skup moguih vrednosti podatka

    operacije koje mogu da se urade sa podatkom

    Podaci se predstavljaju

    vrednostima (konstantama)

    identifikatorima

    22

    Podaci predstavljeni konstantama

    Ne mogu da se promene u toku izvravanja programa

    Konstante predstavljene identifikatorima se nazivajusimbolike konstante

    Konstante ne zauzimaju prostor u memoriji, ugraene sudirektno u naredbe programa

    Pod terminom "podatak" nee se nadalje podrazumevatikonstante

  • 7/28/2019 Cpp Predavanja

    12/334

    23

    Podaci predstavljeni identifikatorima

    Zauzimaju prostor u memoriji

    Vrednost podatka se smeta u prostor u memoriji

    Vrste podataka na osnovu mogunosti promene

    Promenljivi podaci su najei oblik podataka koji sekoriste

    Nepostojani podaci su podaci koji mogu da se menjajuizvan kontrole programa

    npr. hardverski registri perifernih ureaja

    Nepromenljivi podaci su podaci koji ne mogu da se

    menjaju Razlika izmeu #define and const deklaracije kompajler

    prepoznaje identifikator deklarisan kao const

    const int KONST=96;

    24

    Prosti i sloeni podaci

    Prosti (skalarni, nestrukturirani) podaci ne mogu da sedele na manje delove koji mogu nezavisno da seobrauju (nemaju strukturu)

    Sloeni (strukturirani) podaci se sastoje od vieelemenata koji mogu biti prosti ili sloeni

  • 7/28/2019 Cpp Predavanja

    13/334

    25

    Prosti tipovi podataka

    U jeziku C postoje samo numeriki (prosti) tipovipodataka

    celobrojni

    realni

    Logiki tip podataka je uveden u C++

    spada u grupu celobrojnih tipova

    26

    Celobrojni tipovi podataka

    Celobrojni tipovi su char i int sa svojim varijantama

    int je osnovni celobrojni tip

    oznaen je (ima pozitivne i negativne vrednosti)

    najbolje odgovara hardveru raunara

    obino je duine jedne mainske rei raunara

    char je mali celobrojni podatak dovoljan da primi jedanznak iz skupa znakova koji se koriste na raunaru

    standardom nije precizirano da li je oznaen

    Modifikatori pomou kojih se dobijaju varijante tipova su

    short

    long

    unsigned

  • 7/28/2019 Cpp Predavanja

    14/334

    27

    Varijante tipa char

    char tipino ima duinu jednog bajta

    tipini opsezi vrednosti su

    od 128 do 127 ako je oznaen

    od 0 do 255 ako je neoznaen

    kodovi znakova su pozitivni

    unsigned char je neoznaena varijanta tipa char

    tipini opseg vrednosti je od 0 do 255

    signed char je oznaena varijanta tipa char

    tipini opseg vrednosti je od 128 do 127

    28

    Varijante tipa int

    Varijante su oznaene

    Neoznaene varijante se dobijaju dodavanjemmodifikatora unsigned

    Oznaene varijante

    short int, tipina duina je 16 bita

    int, tipina duina je 16 ili 32 bita

    long int, tipina duina je 32 bita

    Neoznaene varijante

    unsigned short int

    unsigned int

    unsigned long int

  • 7/28/2019 Cpp Predavanja

    15/334

    29

    Skraeno pisanje varijanti tipa int

    U varijantama tipa int sa modifikatorima moe seizostaviti re int

    Ekvivalentno je korienje

    short i short int

    long i long int

    unsigned short i unsigned short int

    unsigned long i unsigned long int

    30

    Realni tipovi podataka

    float je realni podatak u jednostrukoj tanosti

    broj tanih decimalnih cifara je 6 do 7

    double je realni podatak u dvostrukoj tanosti

    broj tanih decimalnih cifara je 15 do 16

    long double je realni podatak u viestrukoj tanosti

    Raunari obino podravaju IEEE standard za brojeveIEEE 754

  • 7/28/2019 Cpp Predavanja

    16/334

    31

    Standard IEEE 754, opsezi brojeva

    2,2210308 1,7910308(2252)2102321022double

    1,171038 3,401038(2223)21272126floatpriblini opsegmaxmin

    Sa normalizovanom mantisom (eksponent 0)

    4,9410324 2,2210308(1252)2102221074double

    1,401045 1,751038(1223)21262149float

    priblini opsegmaxmin

    Sa denormalizovanom mantisom (eksponent = 0)

    32

    Logiki tip podataka

    Uveden je u C++

    Celobrojni tip

    Tipbool ima dve vrednosti

    false je logika neistina

    true je logika istina

  • 7/28/2019 Cpp Predavanja

    17/334

    33

    Celobrojne konstante

    Piu se u numerikim sistemima

    decimalnom

    oktalnom

    heksadecimalnom

    34

    Decimalne celobrojne konstante

    Prva cifra ne moe da bude 0

    Moe se pisati predznak + ili

    bez predznaka se podrazumeva +

  • 7/28/2019 Cpp Predavanja

    18/334

    35

    Konstante u oktalnom numerikom sistemu

    Osnova sistema je 8

    Cifre su od 0 do 7

    Prva cifra oktalne konstante mora da bude 0

    Znak broja je odreen prvim bitom broja u binarnomnumerikom sistemu

    Primeri

    01

    0145

    36

    Konstante u heksadecimalnom numerikom

    sistemu Osnova sistema je 16

    Cifre su od 0 do 9 i slova A, B, C, D, E, F

    mogu se koristiti mala ili velika slova

    heksadecimalna konstanta poinje sa 0x ili 0X

    Znak broja je odreen prvim bitom broja u binarnom

    numerikom sistemu

    Primeri

    0x1a

    0XCF05

    0x2F3B

    0xFFFFFFFF

  • 7/28/2019 Cpp Predavanja

    19/334

    37

    Konstante varijanti celobrojnih tipova

    Konstante su tipa int ako je celobrojna konstantaunutar opsega tipa int, inae je tipa long int

    Sufiks u ili U slui za neoznaene celobrojne konstante

    Primeri: 1u, 06U, 0xFFu

    Sufiks l ili L slui za celobrojne konstante tipa longint

    Primeri za oznaeni tip long int:

    1l, 024L, 0xFFL

    Primeri za neoznaeni tip long int:

    1ul, 024UL, 0xFFUL

    38

    Realne konstante

    Piu se u decimalnom numerikom sistemu

    Za vrlo velike i vrlo male brojeve koristi se zapis samantisom i eksponentomE

    Mantisa je decimalni broj sa decimalnom takom

    mora da ima bar jednu cifru

    Moe da se koristi malo ili veliko slovo e ili E

    Pojedini delovi mogu da nedostaju

    Da bi se razlikovale od ceolbronih konstanti mora dapostoji ili decimalna taka ili E ili e

  • 7/28/2019 Cpp Predavanja

    20/334

    39

    Realne konstante

    Podrazumeva se tip double

    Za tip float dodaje se F ili f na kraju

    Za tip long double dodaje se L ili l na kraju

    Primeri:1.23 1.2E5 1e5 .2e3 .10.1F 3.1e3f

    Primeri neispravnih realnih konstanti:1,23 1.a2

    40

    Znakovne konstante

    Piu se izmeu jednostrukih navodnika

    Primeri:'A' 'a' '3'

    U jeziku C++ su tipa char, a u jeziku C su tipa int

  • 7/28/2019 Cpp Predavanja

    21/334

    41

    Pridruivanje identifikatora tipovima podataka

    Tipovima se mogu dodeliti sopstveni identifikatorinaredbom opteg oblika

    typedef opis_tipa naziv_tipa;

    opis_tipa je tip kojem se dodeljuje identifikator

    moe biti i tip koji je prethodno uveden naredbomtypedef

    naziv_tipa je identifikator koji se dodeljuje tipu iji je

    opis naveden

    Primeri:

    typedef unsigned int pozitivan;

    typedef pozitivan neoznacen;

    Tipovi pozitivan i neoznacen su nova imena

    Podaci ovih tipova su u stvari istog tipa unsigned int

    42

    Definisanje podataka

    Promenljivi podaci se definiu deklarativnom naredbomopteg oblika

    tip podatak = vrednost,podatak, ... ;

    tip je opis tipa

    podatak je identifikator podatka

    Podatku moe da se dodeli poetna vrednostnavoenjem = vrednost

    ako se ne dodeli poetna vrednost podatak e imati nekusluajnu vrednost zateenu u memoriji!

    neki podaci dobijaju poetnu vrednost 0

    Dodeljivanje poetne vrednosti naziva se inicijalizacija

    Vrednost koja se dodeljuje naziva se inicijalizator

  • 7/28/2019 Cpp Predavanja

    22/334

    43

    Primeri definisanja podataka

    int i=0, pocetak, kraj=10;

    float duzina = 101.5;

    typedef unsigned int pozitivan;

    typedef pozitivan neoznacen;

    pozitivan alfa=0, beta=100;

    neoznacen a=alfa+beta;

    44

    Definisanje nepostojanih podataka

    Nepostojani podaci su promenljivi podaci ija vrednostmoe da se promeni u toku izvravanja programa izvankontrole programa

    Definiu se modifikatorom volatile na poetkunaredbe

    Primer:volatile int znak, v=4;

  • 7/28/2019 Cpp Predavanja

    23/334

    45

    const

    U jeziku C sa const se definiu nepromenljivi podaci

    nepromenljivi podatak mora da se inicijalizuje

    ne moe da mu se promeni vrednost u toku izvravanjaprograma

    nije konstanta, tj. ne moe da se koristi na mestu gde sezahtevaju konstante

    U jeziku C++ sa const se definiu simbolike

    konstante

    mogu da se koriste na mestima gde se oekuju konstante

    Primeri

    const int DIMENZIJA=100;

    const double e=2.71828182845905;

    const long dan=24L * 60 * 60;

    46

    Simbolike konstante u jeziku C

    Definiu se direktivom define iji je opti oblik:

    #define IME_KONSTANTE vrednost_konstante

    IME_KONSTANTE je identifikator, obino se pie velikim

    slovima

    vrednost_konstante je konstanta standardnog tipa

    U jeziku C++ mogu da se koriste i simbolike konstantedefinisane direktivom define

    Primeri

    #define MIN 0

    #define MAX 1000

    #define PI 3.14159

  • 7/28/2019 Cpp Predavanja

    24/334

    47

    Nabrojane konstante

    Nabrojane konstante su simbolike konstante

    Dodeljuju im se vrednosti eksplicitno ili implicitno poredosledu

    Opti oblik naredbe je

    enumime_nabrajanja {

    IME_KONSTANTE=vrednost,

    ...

    IME_KONSTANTE=vrednost}

    Nabrojane simbolike konstante su formalno tipa int

    48

    Nabrojane konstante

    ime_nabrajanja je identifikator nabrajanja koji moe

    da se izostavi

    IME_KONSTANTEje identifikator konstante

    svi identifikatori moraju biti razliiti

    vrednost je vrednost koja se dodeljuje konstanti i

    moe da se izostavi konstanta kojoj nije eksplicitno dodeljena vrednost dobija

    vrednost za jedan veu u odnosu na prethodnu konstantuu nabrajanu

    ako prvoj konstanti nije dodeljena vrednost ona dobijavrednost 0

  • 7/28/2019 Cpp Predavanja

    25/334

    49

    Nabrojane konstante

    Nabrojane konstante mogu da se koriste kao novi tip

    u jeziku C mora se pisati i re enum

    u C++ moe se koristiti ime_nabrajanja bez enum

    ako ne postoji podatak sa tim imenom, inae se morapisati i enum

    50

    Nabrojane konstante

    Da ne bi morala da se pie re enumu jeziku C moese koristiti naredba typedef oblika

    typedef enum

    {

    IME_KONSTANTE= vrednost,

    IME_KONSTANTE= vrednost,

    ...

    } Ime_tipa;

    ime_nabrajanja koje se pie iza rei enumse u

    ovom sluaju najee izostavlja, ali moe da se napie

  • 7/28/2019 Cpp Predavanja

    26/334

    51

    Primeri za nabrojane konstante

    enum{ NE, DA };

    enumKONSTANTE { C1=5, C2, C3=10, C4 };

    enummeseci { JAN=1,FEB,MAR,APR,MAJ,JUN,

    JUL,AVG,SEP,OKT,NOV,DEC };

    typedef enum

    { PON=1,UTO,SRE,CET,PET,SUB,NED } Dani;

    typedef enummeseci Meseci;

    Dani dan1 = PON;(bez enum)

    Dani dan2 = PON + 2;

    enummeseci mesec = JAN;(sa enum)

    Meseci mesec1 = FEB;

    52

    Ulaz i izlaz podataka

    Preko tastature podaci se unose kao nizovi znakova tj. utekstualnom obliku

    Na ekranu se podaci prikazuju u tekstualnom obliku

    Podaci u memoriji raunara su u binarnom obliku

    Prilikom unoenja podataka preko tastature tastature

    radi se ulazna konverzija

    Prilikom prikazivanja podataka na ekranu radi se izlaznakonverzija

  • 7/28/2019 Cpp Predavanja

    27/334

    53

    Ulaz i izlaz podataka u jeziku C

    Za ulaz i izlaz podataka postoje biblioteke funkcije(potprogrami)

    Funkcija scanf se koristi za itanje podataka preko

    glavnog ulaza (tastature) i ulaznu konverziju podataka

    Funkcija printf se koristi za pisanje podataka preko

    glavnog izlaza (ekran) uz primenu izazne konverzije

    Deklaracije funkcija scanf i printf nalaze se u

    stdio.h

    54

    Skretanje glavnog ulaza i glavnog izlaza

    Moe da se uradi skretanje glavnog ulaza (tastature) iglavnog izlaza (ekran) i da to postanu datoteke

    Pokretanje programa, glavni ulaz je tastatura, a glavniizlaz je ekran

    ime_programa

    Pokretanje programa sa skretanjem glavnog ulaza iglavnog izlaza

    ime_programa glavni_izlaz

  • 7/28/2019 Cpp Predavanja

    28/334

    55

    Ulazna konverzija

    Opti oblik funkcije scanf je:

    scanf(format, &arg1, &arg2, ... , &argN);

    format je tekstualni podatak oblika "tekst" kojiodreuje ulazne konverzije koje se koriste

    pojedinane konverzije su oblika %nq

    % je oznaka za poetak konverzije

    n su dopunski parametri konverzije

    q je oznaka za vrstu konverzije

    &arg su adrese promenljivih ije se vrednosti uitavaju arg su identifikatori podataka koji se uitavaju

    & je operator za dohvatanje adrese podatka

    56

    Ulazna konverzija

    Ulazni podaci su razdvojeni belim znakom, tj. podatak jeniz znakova izmeu dva bela znaka

    itanje podatka se zaustavlja na prvom znaku izaproitanog podatka

    Broj znakova u jednom podatku

    moe da bude proizvoljan moe da se nevede parametrom n (unutar %nq)

    u ovom sluaju ne mora da beli znak izmeu dva podatka

    Vrste ulaznih konverzija

    za celobrojne podatke

    za realne brojeve

  • 7/28/2019 Cpp Predavanja

    29/334

    57

    Konverzije za celobrojne podatke

    Konverzije za tip int su: i, d, u, o, x

    i je decimalna, oktalna ili heksadecimalna konverzija

    zavisno od oblika podatka na osnovu pravila pisanja

    d je decimalna konverzija

    u je decimalna konverzija za tip unsigned int

    o je oktalna konverzija (bez obzira na vodeu 0)

    x je heksadecimalna konverzija (bez obzira na 0x)

    Za tipove short dodaje se znak h ispred oznake

    konverzije: hi, hd, hu, ho, hx

    Za tipove long dodaje se znak l ispred oznakekonverzije: li, ld, lu, lo, lx

    58

    Konverzije za realne podatke

    Konverzije za tip float su: f, e, g

    ulazne konverzije su iste, izlazne se razlikuju

    Za tip double dodaje se znak l ispred oznake

    konverzije: lf, le, lg

    Za tip long double dodaje se znak L ispred oznake

    konverzije: Lf, Le, Lg

  • 7/28/2019 Cpp Predavanja

    30/334

    59

    Tok konverzije

    scanf(format, &arg1, &arg2, ... , &argN);

    Analizira se format sleva udesno, znakovi razmaka i

    tabulacije se

    Kad se naie na opis konverzije vri se konverzija irezultat se dodeljuje sledeem podatku iz liste

    itanje se zavrava kad se naie na kraj formata ili akose desi greka

    Programer obezbeuje da broj opisa konverzije i brojpodataka budu isti

    ako je broj podataka vei od broja opisa, prekobrojnipodaci nee dobiti vrednost

    ako je broj opisa vei od broja podataka posledice sunepredvidive

    60

    Dodatni znaci u formatu

    U opisu konverzije mogu postojati dodatni znaci

    ita se po jedan znak za svaki dodatni iz opisakonverzije

    moraju da budu isti

    ne radi se dodela vrednosti

    Ako je dodatni znak %, piu se dva znaka %% umestojednog, jer jedan znak oznaava poetak opisakonverzije

  • 7/28/2019 Cpp Predavanja

    31/334

    61

    Primer uitavanja

    int i;

    float f;

    double d;

    scanf("%i%f%lf", &i, &f, &d);

    62

    Izlazna konverzija

    Opti oblik fukncije scanf je:

    printf(format, izraz1, ... , izrazN);

    format je tekstualni podatak oblika "tekst" koji

    odreuje izlazne konverzije koje se koriste

    pojedinane konverzije su oblika % -+0#n.kq

    prvi znak % je oznaka za poetak konverzije znaci -+0#n.k su dopunski parametri konverzije i ne

    moraju da postoje

    poslednji znak q je oznaka za vrstu konverzije

    izrazi su numeriki izrazi ije se vrednosti ispisuju

  • 7/28/2019 Cpp Predavanja

    32/334

    63

    Dopunski parametri konverzije -+0 #n.kq

    znak n je celobrojna decimalna konstanta

    oznaava najmanji broj znakova za ispisivanje

    ako je potrebno ispisuje se vie znakona od n, inae se saleve strane dodaju prazni znaci

    znak k razdvojen takom oznaava tanost prikazivanja

    podataka koja zavisi od vrste konverzije

    znak - oznaava poravnanje uz levu stranu

    znak + oznaava da treba da se ispie znak + ispred

    pozitivnog broja

    znak razmaka oznaava da treba da se ostavi jednoprazno mesto umesto znaka +

    znak 0 oznaava da se u sluaju ravnanja na desnu ivicu

    sa leve strane umesto praznih znakova ispisuju nule

    znak # oznaava alternativni nain ispisivanja koji zavisi

    od vrste konverzije

    64

    Parametar konverzije *

    Umesto dopunskih parametara n i k moe da se staviznak *

    kao irina polja za ispisivanje uzima se vrednost sledeegcelobrojnog izraza meu argumentima funkcije printf

  • 7/28/2019 Cpp Predavanja

    33/334

    65

    Konverzije za celobrojne podatke

    Konverzije za tip int su: i, d, u, o, x, X

    Sve konverziju osim u se primenjuju za tipove int i

    unsigned int, a u se primenjuju za unsigned int

    i, d oznaavaju decimalnu konverziju

    o oznaava oktalnu konverziju

    vodea 0 se ispisuje ako postoji znak # u opisu konverzije

    x, X oznaavaju heksadecimalnu konverziju, pri emu se

    cifre oznaene slovima se ispisuju malim ili velikim slovima vodei 0x se ispisuje ako postoji znak # u opisu konverzije

    Za tipove short dodaje se znak h, a za long znak lispred oznake konverzije: hi, hd, hu, ho, hx, hX,odnosno li, ld, lu, lo, lx, lX

    Tanost k oznaava najmanj broj cifara

    dodaju se vodee nule ako je potrebno

    66

    Konverzije za realne podatke

    Konverzije za tip double su: f, e, E, g, G

    f oznaava konverzije oblika ccc.cccccc k oznaava broj decimalnih mesta, podrazumevano je 6, a

    za k=0 se ne ispisuje ni decimalna taka

    # oznaava obavezno ispisivanje decimalne take

    e, E oznaavaju konverziju u eksponencijalni oblik

    c.ccccccexx ili c.ccccccExx k oznaava ukupan broj cifara, podrazumeva se 6, a jedna

    nenulta cifra je uvek ispred decimalne take

    # oznaava obavezno ispisivanje decimalne take

    konverzije g, G su iste kao e, E ako je eksponent veiod 4 ili vei ili jednak od tanosti, inae su iste kao f

    Za tip long double dodaje se znak L ispred oznake

    konverzije: Lf, Le, LE, Lg, LG Konverzije za tip float su iste kao za double

    tanost k treba da je primerena tipu float

  • 7/28/2019 Cpp Predavanja

    34/334

    67

    Tok konverzije

    printf(format, izraz1, ... , izrazN);

    Analizira se format sleva udesno, znakovi koji nisu

    deo opisa konverzije ispisuju se kako su navedeni

    Kad se naie na opis konverzije vri se konverzijasledeeg izraza i rezultat se ispisuje

    Ispisivanje se zavrava kad se doe do kraja formata

    Programer obezbeuje da broj opisa konverzije i brojpodataka budu isti

    ako je broj podataka vei od broja opisa, prekobrojnipodaci se nee ispisati

    ako je broj opisa vei od broja podataka posledice sunepredvidive

    Posledice su nepredvidive ako se ne slau vrstakonverzije i tip podatka

    68

    Znaci u formatu

    Znak \n oznaava prelazak u novi red

    Ako je potrebno ispisati dodatni znak %, piu se dvaznaka %% umesto jednog, jer jedan znak oznaava

    poetak opisa konverzije

  • 7/28/2019 Cpp Predavanja

    35/334

    69

    Primeri ispisivanja

    printf("Dobar dan!\n");

    printf("Zapremina lopte poluprecnika %7.3f je %g\n",

    r, v);

    printf("Zbir brojeva %d i %d je %d\n", m, n, m+n);

    printf("Srednja vrednost je %*.*f\n", m, n, s);

    70

    Primer programa

    Program ispisuje: Pozdrav svima!

    #include

    main()

    {

    printf("Pozdrav svima!");

    }

  • 7/28/2019 Cpp Predavanja

    36/334

    71

    Primer programa

    Primer programa koji uitava dva cela broja, sabira ih iispisuje rezultat

    #include

    main()

    {

    int a, b;

    printf("unesite dva cela broja: ");

    scanf("%d%d", &a, &b);int c = a + b;

    printf("Zbir unetih brojeva: %d\n", c);

    }

    72

    Operatori

  • 7/28/2019 Cpp Predavanja

    37/334

    73

    Operatori i izrazi

    Operator je radnja koja se izvrava nad operandima idaje rezultat

    Izraz je proizvoljno sloeni sastav operanada i operatora

    Izrazi su:

    konstanta

    podatak

    operator izraz

    izraz operator

    izraz operator izraz

    izraz ? izraz : izraz

    ( izraz )

    74

    Tipovi operatora na osnovu broja operanada

    Unarni

    Binarni

    Ternarni

  • 7/28/2019 Cpp Predavanja

    38/334

    75

    Vrste operatora

    Adresni operatori

    Aritmetiki operatori

    Relacijski operatori

    Operatori nad bitima

    Logiki operatori

    Operatori za dodelu vrednosti

    Operator zarez

    izraunava prvi operand i odbacuje rezultat, a zatim izraunava

    drugi operandi vraa tu vrednost. Poeljno kada su potrebniboni efekti.

    Primer:

    int a = 1, b=2;

    i = a += 2, a + b; // increases a by 2, then stores a = 5 into i

    76

    Operatori

    >

    212

    + -213

    * / %214

    .* ->*215

    ! ~ ++a --a + - * &

    (tip) sizeof new delete116

    a++ a-- static_cast

    const_cast dynamic_cast

    reinterpret_cast typeid

    117

    [] () . ->218

    ::1, 219

    OperatoriSmergrupisanja

    Brojoperanada

    Prioritet

  • 7/28/2019 Cpp Predavanja

    39/334

    77

    Operatori

    < >=211

    == !=210

    ,21

    throw12

    = += -= *= /= %=

    &= ^= |= =

    23

    ?:34

    ||25

    &&26

    |27

    ^28

    &29

    OperatoriSmergrupisanja

    Brojoperanada

    Prioritet

    78

    Unarni aritmetiki operatori + i -

    + vrednost operanda bez promenene znaka

    vrednost operanda sa promenjenim znakom

    Prefiksni operatori

    Prioritet je 16

    Grupisanje je zdesna ulevo

  • 7/28/2019 Cpp Predavanja

    40/334

    79

    Unarni aritmetiki operatori ++ i --

    ++ uveavanje za jedan

    umanjivanje za jedan

    Operatori mogu biti prefiksni i postfiksni

    Za postfiksne operatore

    prioritet je 17

    smer grupisanja nije definisan

    Za prefiksne operatore

    prioritet je 16 smer grupisanja je zdesna ulevo

    ++k // k=k+1

    k++ // k=k+1

    j = --k // k=k1, j=k

    j = k-- // j=k, k=k-1

    80

    Binarni aritmetiki operatori

    + zbir

    razlika

    * proizvod

    / kolinik

    % ostatak deljenja dva broja

    Grupisanje je sleva udesno

    Prioritet je:

    14 za *, /, %

    13 za +, -

  • 7/28/2019 Cpp Predavanja

    41/334

    81

    Primeri osnovnih operacija

    int a = 1 + 1; // a = 2

    int b = a * 3; // b = 6

    int c = b / 4; // c = 1

    int g = b % 4; // g = 2

    int d = c - a; // d = -1

    int e = -d; // e = 1

    double a = 1 + 1; // a = 2

    double

    b = a * 3; // b = 6double c = b / 4; // c = 1.5

    //double g = b % 4; //greka, definisan za celobrojne tipove

    double d = c - a; // d = -1

    double e = -d; // e = 1

    82

    Boni efekat

    Boni efekat je promena vrednosti nekog operandaoperatora u toku izvravanja operatora

    Primer

    j = --k; // k = k - 1, j = k

    --k; // k = k - 1

  • 7/28/2019 Cpp Predavanja

    42/334

    83

    Aritmetiki operatori dodeljivanja

    izraz1 = izraz2;

    izraz1 operator= izraz2;

    //izraz1 = izraz1 operator izraz2;

    Operatori su

    +=

    -=

    *=

    /=%=

    Prioritet je 3

    Grupisanje zdesna ulevo

    84

    Primeri aritmetikih operatora za dodeljivanje

    a = b = c = d + 5;

    b = b % c;

    b %= c;

    d = d + e * f;

    d += e * f;

    a = b++ + 3*(c=d-3);

    //a = b++ + 3*c=d-3;// greka

  • 7/28/2019 Cpp Predavanja

    43/334

    85

    Lvrednost

    Lvrednostje vrednost koja oznaava podatak umemoriji, odnosno moe da se nalazi na levoj strani

    operatora za dodelu vrednosti

    Neki operatori se primenjuju samo na lvrednosti

    operandi operatora ++, --, &

    operandi na levoj strani operatora za dodelu vrednosti

    Rezultat nekih operatora je lvrednost

    operatora za posredni pristup * i indeksiranje [ ]

    prefiksnih operatora ++ i -

    svih operatora za dodelu vrednosti

    rezultat ternarnog operatora ?: je lvrednost ako su drugii trei operand isttog tipa i ako su oba lvrednosti

    86

    Primeri za lvrednosti

    ++ ++k; // ++(++k) ili k=k+2

    --k*=5; // (--k)*=5 ili k=(k-1)*5

    k++ ++; // greka

    d*=e+=f; // e=e+f, d=d*e

    (d*=e)+=f; // d=d*e, d=d+f ili d=d*e+f

    x=y=5; // x=(y=5) ili y=5, x=y

    ++(p/=q); // p=p/q, p=p+1 ili p=p/q+1

    ++p/=q; // p=p+1, p=p/q ili p=(p+1)/q

    long x=5;

    int a,b;

    x ? a : b = 1; // x ? a=1 : b=1

    x ? x : b = 1; // greka

    x ? 2 : b = 1; // greka

  • 7/28/2019 Cpp Predavanja

    44/334

    87

    Konverzija tipa

    Binarni operatori se izvravaju nad operandima istihtipova

    Za operande razliitih tipova radi se automatskakonverzija

    Oprez: kompajler ne upozorava tako striktno kao kod Jave mogue nenamerne greke.

    Pravilo za automatska konverziju tipa: tip operandajednostavnijeg tipa se pretvori u tip operanda sloenijeg

    tipa i posle toga se izraunava rezultat operatora Neoznaena varijanta istog tipa je sloenija od oznaene

    varijante

    88

    Automatska konverzija tipa

    ako je jedan operand tipa long double, i drugi sepretvori u tip long double;

    inae, ako je jedan operand tipa double, i drugi sepretvori u tip double;

    inae, ako je jedan operand tipa float, i drugi se

    pretvori u tip float; inae, ako je bilo koji od operanada tipa char ilishort pretvori se u tip int,ili ako je jedan operand tipa unsigned char iliunsigned short pretvori se u tip unsigned, (popotrebi se oba pretvore u tip int ili unsigned;

  • 7/28/2019 Cpp Predavanja

    45/334

    89

    Automatska konverzija tipa - nastavak

    posle, ako je jedan operand tipa unsigned long, idrugi se pretvori u tip unsigned long;

    inae, ako je jedan operand tipa long, i drugi sepretvori u tip long;

    inae, ako je jedan operand tipa unsigned, i drugi sepretvori u tip unsigned

    Tip rezultata je uvek bar tip int ili unsigned

    Primeri5/4*3. // (5/4)*3.= 1*3. = 1.*3. = 3.

    3.*5/4 // (3.*5)/4= (3.*5.)/4= 15./4= 15./4.= 3.75

    90

    Automatska konverzija tipa kod dodele vrednosti

    Tip operanda sa desne strane se pretvara u tip operandasa leve strane oprez!

    Realni podatak se konvertuje u celobrojni odsecanjemrazlomljenog dela

    Pretvaranje kraeg celobrojnog podatka u dui

    za oznaene tipove proiruje se predznak

    za neoznaene tipove dodaju se nule sa leve strane

  • 7/28/2019 Cpp Predavanja

    46/334

    91

    Konverzija logikog tipa u C++

    Automatska konverzija u izrazima iz tipabool u

    numeriki tip (ne moe u Javi!)

    false se konvertuje u celobrojnu vrednost 0

    true se konvertuje u celobrojnu vrednost 1

    Dodela vrednosti numerikog podatka promenljivoj tipabool

    vrednost 0 se pretvara u false

    vrednost razliita od 0 se pretvara u true

    Na mestima gde se oekuju logike vrednosti mogu dase piu numeriki podaci

    Primer:

    int i;

    if( i ) ...

    92

    Eksplicitna konverzija tipa

    Pretvaranje u eljeni tip se radi unarnim prefiksnim castoperatorom (unutar zagrada se napie ime tipa u koji sepretvara)

    ( ime_tipa )

    Primeri:

    (double)a

    (unsigned int) a+b //((unsigned int)a)+b

  • 7/28/2019 Cpp Predavanja

    47/334

    93

    Relacijski operatori (operatori poreenja)

    > Vee

    < Manje>= Vee ili jednako

    , =, 5; // 8==(13>5), 8==1, false

    a < b < 5; // (a

  • 7/28/2019 Cpp Predavanja

    48/334

    95

    Logiki operatori

    ! Logika negacija

    Prefiksni unarni operator

    Prioritet je 16

    Grupisanje zdesna ulevo

    && Logiko i

    || Logiko ili

    Binarni operator Prioritet operatora && je 6, a operatora || je 5

    Grupisanje je sleva udesna

    96

    Tabela logikih operatora

    falsetrue

    truefalse~

    truetruetrue

    truefalsefalse

    truefalse||

    truefalsetrue

    falsefalsefalse

    truefalse&&

  • 7/28/2019 Cpp Predavanja

    49/334

    97

    Uslovni izraz ?:

    Opti oblik je

    uslov ? izraz1 : izraz2

    Primeri

    (a > b) ? a : b // max(a, b)

    (x

  • 7/28/2019 Cpp Predavanja

    50/334

    99

    Logike operacije po bitima

    Prefiksni unarni operator

    ~ komplementiranje po bitima (prioritet 16)

    Binarni operatori

    & logika "i" operacija nad bitima (prioritet 9)

    | logika "ili" operacija nad bitima (prioritet 8)

    ^ logika "iskljuivo ili" operacija nad bitima (prioritet 7)

    100

    Logike operacije po bitima

    01

    10~

    111

    100

    10|

    101

    000

    10&

    011

    100

    10^

  • 7/28/2019 Cpp Predavanja

    51/334

    101

    Primeri za operatore nad bitima

    37001001011000001010

    15^ 0000111115& 00001111

    42001010104200101010

    47001011114311010101

    15| 0000111142~ 00101010

    4200101010

    102

    Operatori za pomeranje po bitima

    Binarni operatori za pomeranje levog operanda zaonoliko bita koliko iznosi desni operand

    > pomeranje udesno

    nema >>> kao u Javi jer postoje oznaeni i neoznaeni

    tipovi

    Prioritet je 11

    Grupisanje je sleva udesno

    Rezultat je nedefinisan ako je desni operand negativan ilije vei od broja bita u levom operandu

  • 7/28/2019 Cpp Predavanja

    52/334

    103

    Operatori za pomeranje po bitima

    Pri pomeranju ulevo sa desne strane se dodaju nule

    Pri pomeranju udesno sa leve strane se dodaju

    za neoznaene (unsigned) tipove dodaju se nule

    (logiko pomeranje)

    za oznaene tipove dodaju se biti koji su jednakipredznaku opearnda (aritmetiko pomeranje)

    104

    Operatori po bitima i dodela vrednosti

    Za binarne operatore za rad po bitima postoje i operatoriza dodelu vrednosti

    &=

    ^=

    |=

    =

    Prioritet je 3

    Grupisanje zdesna ulevo

  • 7/28/2019 Cpp Predavanja

    53/334

    105

    Primeri za pomeranje ulevo

    vrednost 2; // a = 0...0 00001000 (tj. a=8)

    a >>= 4; // a = 0...0 00000000 (tj. a=0)

    int b = -8; // b = 1...1 11111000

    b = b >> 2; // b = 1...1 11111110 (tj. b=-2)

    b >>= 1; // b = 1...1 11111111 (tj. b=-1)

    b >>= 1; // b = 1...1 11111111 (b ostaje -1)

  • 7/28/2019 Cpp Predavanja

    54/334

    107

    Pomeranje udesno za neoznaene tipove

    vrednost >> broj_bita_za_koliko_se_pomera;

    Sa leve strane se dodaju nule

    Biti sa desne strane se gube

    Primer:unsigned k = 0xFFFFFFFF; // k je najvei unsigned

    k = k >> 1; // 0x7FFFFFFF

    k >>= 23; // 0x000000FF (k je 255)

    108

    Primeri za operacije nad bitima

    022222 & 055555 // =000000, operator po bitima

    022222 && 055555 // =true, logiki operator

  • 7/28/2019 Cpp Predavanja

    55/334

    109

    Niz izraza

    Izrazi mogu da se sastave u niz izraza pomou binarnogoperatora zarez (,), pri emu se niz izraza ponaa kao

    jedan izraz Binarni operator zarez (,) je prioriteta 1 i grupie se

    sleva udesno

    Primer

    a=5, b+=13, c++

    x=3, y*=x+3, x--, z-=x*3- --y

    Zbog smera grupisanja i izrazi se izraunavaju slevaudesno u sluaju da ima vie uzastopnih operatora zarez

    Rezultat koji vraa niza izraza je vrednost poslednjegizraza (krajnji desni koji se poslednji izraunava)

    110

    Korienje zagrada

    Zagrade slue za definisanje redosleda izraunavanja(prioriteta) i za pisanje jasnijih izraza

    a >> b + 3; // prvo se b uveava za 3,

    // zatim se sadraj a pomera udesno

    // ("+" ima vei prioritet od ">>")

    a >> (b + 3); // ekvivalentno gornjem

    (a >> b) + 3; // prvo se sadraj a pomera udesno,

    // zatim se uveava za 3

  • 7/28/2019 Cpp Predavanja

    56/334

    111

    Veliina podataka

    Operator sizeof je prefiksni unarni operator koji

    izraunava veliinu memorije, izraenu u bajtovima, koja

    je potrebna za smetanje podatka nekog tipa

    Operand je izraz ili identifikator tipa

    Ako je operand identifikator tipa stavlja se u zagradama

    Primeri

    sizeof(char)

    sizeof(long double)

    Tip rezultata je size_t koji je celobrojni tip definisannaredbom typedef u fajlu

    Standardom nije precizirano kojeg celobrojnog tipa jesize_t

    112

    Biblioteke funkcije

    Funkcije na osnovu svojih argumenata daju rezultate

    Funkcije mogu da imaju neogranien broj argumenata

    Opti oblik pozivanja funkcije jeidentifikator_funkcije(argument, ... , argument)

    Ako su argumenti izrazi, izraunavaju se pre pozivanja

    funkcije po proizvoljnom redosledu

    U sastavu jezika je standardna biblioteka sa velikimbrojem standardnih funkcija

    Funkcije su deklarisane u datotekama zaglavlja(header), i imaju ekstenziju *.h

  • 7/28/2019 Cpp Predavanja

    57/334

    113

    Korienje bibliotekih funkcija

    Na poetku datoteke sa izvornim kodom se napiedirektiva include sa imenom *.h datoteke koja e se

    koristiti

    Opti oblik je

    #include

    114

    Biblioteka matematikih funkcija

    Matematike funkcije su deklarisane u datoteci

  • 7/28/2019 Cpp Predavanja

    58/334

    115

    Naredbe

    116

    Naredbe

    Naredba je osnovna jedinica obrade u programu

    Proste naredbe ne mogu da se podele na manje delovekoji su takoe naredbe

    Sloene naredbe su strukture narebi (upravljakestrukture) koje odreuju redosled izvravanja naredbi u

    strukturi. Dele se na: sekvence

    selekcije

    cikluse (petlje)

    Upravljake naredbe ne vre obradu, ve prenose tokupravljanja na neko drugo mesto (skokovi)

  • 7/28/2019 Cpp Predavanja

    59/334

    117

    Naredbe

    Deklarativne naredbe deklarisanje tipova podataka

    Izvrne naredbe

    118

    Prosta naredba

    Opti oblik je

    izraz;

    Prazna naredba se koristi kada sintaksa jezika zahtevanaredbu, a nije potrebna nikakva obrada

    ;

  • 7/28/2019 Cpp Predavanja

    60/334

    119

    Sekvenca (blok)

    Niz naredbi koje se izvravaju jedna za drugom

    Opti oblik sekvence je

    {

    naredba1

    naredba2

    ...

    naredbaN

    }

    Moe da se pie i u jednom redu

    { naredba1 naredba2 ... naredbaN }

    Moe da bude prazna { }

    120

    Primer sekvence

    int a, b;

    ...

    {

    int t;

    t = a;

    a = b;

    b = t;

    }

    ili u jednom redu

    { t=a; a=b; b=t; }

  • 7/28/2019 Cpp Predavanja

    61/334

    121

    Doseg identifikatora (oblast vaenja)

    Oblast vaenja je deo programa u kojem identifikatormoe da se koristi

    Blokovski doseg za identifikatore deklarisane unutarbloka: identifikator moe da se koristi od mesta gde jedeklarisan do kraja bloka u kojem je deklarisan

    Primer

    {

    int x = 5;

    double y = x / 2.;

    printf("x=%d, y=%f\n", x, y);

    }

    122

    Uklapanje dosega

    Unutar jednog bloka (spoljanji) moe da se nalazi drugiblok (unutranji)

    U unutranjem bloku mogu da se koriste identifikatoridefinisani u spoljanjem bloku, oni su globalni zaunutranji blok

    Identifikatori definisani u unutranjem bloku su lokalniza taj blok, i ne mogu da se koriste izvan njega

    U unutranjem bloku se moe definisati identifikator kojiima isto ime kao i identifikator iz spoljanjeg bloka, i nataj nain identifikator iz spoljanjeg bloka postajenevidljiv u unutranjem bloku

  • 7/28/2019 Cpp Predavanja

    62/334

    123

    Primer uklapanja dosega

    {

    double x = 0.5;

    printf("x=%f\n", x);{

    int x=0;

    {

    int a=1, b=2;

    x = a * b;

    }

    printf("x=%d\n", x);

    }printf("x=%f\n", x);

    }

    x=0.500000

    x=2

    x=0.500000

    124

    Selekcije

    if-else

    switch

  • 7/28/2019 Cpp Predavanja

    63/334

    125

    Osnovna selekcija if-else

    Uslovno izvravanje jedne od dve mogue naredbe

    Opti oblik

    if(uslov)

    naredba1

    else

    naredba2

    uslov je izraz logikog tipa

    naredba je jedna naredba ili blok naredbi deo else nije obavezan

    Izvravanje

    ako uslov vrati vrednost true izvrava se naredba1

    inae se izvrava naredba2 (ako else deo postoji)

    126

    Primeri za if

    if(a < b) a = 0;

    else b = 0;

    if(a > b)

    {

    t=c; c=a; a=t;

    }

    else

    {

    t=c; c=b; b=t;

    }

    if(a > b) { t=a; a=b; b=t; }

  • 7/28/2019 Cpp Predavanja

    64/334

    127

    Uklapanje selekcije if-else

    if(uslov1)

    if(uslov2)

    naredba1

    else

    naredba2

    Deo else se uvek odnosi na poslednji if ispred

    njega

    128

    Primer za uklapanje selekcije if-else

    if(i == 10)

    {

    if(j < 20) a = b;

    if(k > 100) c = d;

    else a = c; // ovaj else se odnosi na uslov if(k > 100)

    }

    else a = d; // ovaj else se odnosi na uslov if(i == 10)

  • 7/28/2019 Cpp Predavanja

    65/334

    129

    if else if

    if(uslov1)

    naredba1;

    else if(uslov2)

    naredba2;

    else if(uslov3)

    naredba3;

    else if(uslov4)

    naredba4;

    else

    naredba5;

    if(uslov1)

    naredba1;

    else

    if(uslov2)

    naredba2;

    else

    if(uslov3)

    naredba3;

    else

    if(uslov4)

    naredba4;

    else

    naredba5;

    130

    Naredba switch

    Grananje u vie putanja zavisno od vrednosti izraza

    Opti oblikswitch(izraz)

    {

    case vrednost1:

    niz_naredbi1

    case vrednost2:

    niz_naredbi2

    ...

    default:

    niz_naredbiD

    ...

    case vrednostN:

    niz_naredbiN

    }

  • 7/28/2019 Cpp Predavanja

    66/334

    131

    Naredba switch

    izraz je celobrojni izraz

    Svaka od vrednosti je celobrojna konstanta

    Ne sme se ponoviti ista vrednost u istom switch

    Sa break se zavrava switch

    Ako ne postoji break nastavlja se izvravanje sledeegcase

    Deo default je opcioni i oznaava mesto na koje se skaeako vrednost izraza nije jednaka nijednoj od vrednosti u

    oznakama case

    132

    Prekidanje naredbe switch

    Naredba switch se moe prekinuti naredbom break,i taj oblik naredbe switch se ee koristi

    switch(izraz)

    {

    case vrednost1: niz_naredbi1;

    break;

    case vrednost2: niz_naredbi2;

    break;

    ...

    default: niz_naredbiN;

    break;

    ...

    case vrednostN: niz_naredbiN;

    break;

    }

  • 7/28/2019 Cpp Predavanja

    67/334

    133

    Primer za switch

    switch(i + j * k)

    {

    case 0: printf("Unseite 3 cela broja:");

    scanf("%d%d%d", &i, &j, &k);

    case 7:

    case 3:

    case 5: a = i + j * k;

    b = i j / k;

    default: c = a * b;

    case12: printf("Rezultati su: %d %d %d", a, b, c );

    }

    134

    Uklopljena naredba switch

    switch (izraz_spoljasnjeg_switch)

    {

    case 1:

    switch (izraz_unutrasnjeg_switch)

    {

    case 0: a=0;

    break;

    case 1: b=0;

    break;

    }

    break;

    case 2:

    ...}

  • 7/28/2019 Cpp Predavanja

    68/334

    135

    Poreenje if i switch

    switch proverava samo jednakost, a if proizvoljan

    logiki izraz

    switch je efikasniji od ugnjedenih if else if

    136

    Ciklusi (petlje)

    Izvravanje (ponavljanje) jedne naredbe ili bloka naredbipotreban broj puta, zavisno od uslova

    Naredbe ciklusa (petlje)

    while

    do while

    for

  • 7/28/2019 Cpp Predavanja

    69/334

    137

    Petlja while

    Opti oblik while petlje

    while(uslov)telo_petlje

    uslov je proizvoljan logiki izraz

    telo_petlje je jedna naredba (moe biti i prazna

    naredba) ili blok naredbi

    telo_petlje se ponavlja sve dok uslov ima

    vrednost true

    while petlja je sa izlazom na vrhu, ako uslov imavrednost false pri prvoj proveri, ne ulazi se u petlju, tj.telo_petlje se ne izvrava nijednom

    138

    Primer za while petlju

    int n = 5; // Za n=0 petlja se ne bi izvrila nijednom

    while(n > 0)

    {

    printf("Vrednost n je %d\n", n);

    n--;

    }

    Vrednost n je 5Vrednost n je 4Vrednost n je 3Vrednost n je 2

    Vrednost n je 1

  • 7/28/2019 Cpp Predavanja

    70/334

    139

    Primeri za while petlju: zbir n brojeva

    int s=0, i=1;

    while(i

  • 7/28/2019 Cpp Predavanja

    71/334

    141

    Primer za do while

    int n = 5; // Za n=0 petlja bi se izvrila jednomdo

    {printf("Vrednost n je %d\n", n);

    n--;

    }

    while(n > 0);

    Vrednost n je 5

    Vrednost n je 4Vrednost n je 3Vrednost n je 2Vrednost n je 1

    Za n=0 rezultat bi bioVrednost n je 0

    142

    Krae napisan primer za do while

    int n = 5;

    do

    printf("Vrednost n je %d\n", n);

    while(--n > 0);

    Vrednost n je 5Vrednost n je 4Vrednost n je 3Vrednost n je 2Vrednost n je 1

  • 7/28/2019 Cpp Predavanja

    72/334

    143

    do while petlja: zbir kvadrata n brojeva

    int s=0, i=1;

    do

    {s += i * i;

    i++;

    }

    while(i

  • 7/28/2019 Cpp Predavanja

    73/334

    145

    Petlja for

    inicijalizacija je izraz

    izvrava se samo jednom na poetku pre ulaska u petlju

    obino inicijalizuje jednu ili vie promenljivih petlje uslov je logiki izraz, proverava se pre izvravanja tela

    petlje ako je vrednost true izvrava se telo petlje

    ako je false ne izvrava se telo petlje i izlazi se iz petlje

    obino zavisi od upravljake promenljive petlje

    telo_petlje je jedna naredba ili blok naredbi

    iteracija je izraz

    izvrava se posle tela petlje

    obino menja jednu ili vie upravljakih promenljivih petlje

    Petlja se nastavlja proverom uslova i izvravanjem telapetlje i iteracije sve dok je uslov taan

    146

    Naini pisanja for petlje

    for(inicijalizacija; uslov; iteracija) naredba

    for(inicijalizacija; uslov; iteracija)

    naredba

    for(inicijalizacija; uslov; iteracija) {

    naredba1

    ...naredbaN

    }

    for(inicijalizacija; uslov; iteracija)

    {

    naredba1

    ...

    naredbaN}

  • 7/28/2019 Cpp Predavanja

    74/334

    147

    Nain pisanja

    Smatra se loim programerskim stilom ako se u jedan ilivie delova petlje: inicijalizacija, uslov,

    iteracija, stavljaju radnje koje se ne odnose naopsluivanje petlje

    148

    Primeri za for

    for(i=pocetak; i

  • 7/28/2019 Cpp Predavanja

    75/334

    149

    Primer za for

    int n;

    for(n=5; n>0; n--)

    printf("Vrednost n je %d\n", n);

    Vrednost n je 5Vrednost n je 4Vrednost n je 3Vrednost n je 2Vrednost n je 1

    150

    Deklaracija promenljive unutar for petlje

    Upravljaka promenljiva petlje se esto deklarie unutarpetlje u delu inicijalizacija

    Takva promenljiva postoji samo unutar petlje

    for(int n=5; n>0; n--)

    printf("Vrednost n je %d\n", n);

  • 7/28/2019 Cpp Predavanja

    76/334

    151

    Vie upravljakih promenljivih for petlje

    U inicijalizaciji se moe deklarisati i inicijalizovati vieupravljakih promenljivih petlje

    U iteraciji se moe menjati vie promenljivih Izrazi u inicijalizaciji i iteraciji se razdvajaju zarezima

    for(int a=1, b=4; a

  • 7/28/2019 Cpp Predavanja

    77/334

    153

    for petlja bez inicijalizacije i iteracije

    Delovi for petlje inicijalizacija ili iteracija, ili oba dela,

    mogu da se izostave

    boolean kraj = false;

    int i = 0;

    for( ; !kraj; ) {

    printf("i je %d", i);

    if(i == 5)kraj = true;

    i++;

    }

    154

    Beskonana for petlja

    for( ; ; ) {

    // ...

    if(uslov)

    break;

    // ...

    }

  • 7/28/2019 Cpp Predavanja

    78/334

    155

    Ugnedene for petlje

    for(int i=0; i

  • 7/28/2019 Cpp Predavanja

    79/334

    157

    Prolazni podaci

    Stvaraju se naredbom za definisanje

    dodeljuje im se prostor u memoriji

    inicijalizator se svaki put izvrava

    imaju sluajnu vrednost ako nisu inicijalizovani

    unitavaju se pri naputanju dosega njihovog identifikatora

    Primer

    {

    int t=0;

    int a;

    ...

    }

    158

    Modifikatori za prolazne podatke

    Dodaju se na poetku naredbe za definisanje

    auto

    moe se dodati da bi se naglasila prolaznost podataka, izato se prolazni podaci nazivaju i automatski podaci

    register

    sugerie prevodiocu da se podaci smeste u brzeprocesorske registre

    koriste se npr. za promeljive koje se koriste u najdubljojpetlji kad postoji nekoliko uklopljenih petlji

    nije sigurno da e prevodilac to i uraditi

  • 7/28/2019 Cpp Predavanja

    80/334

    159

    Primeri korienja modifikatora

    {

    register int t=0;

    auto int a;

    ...

    }

    160

    Trajni podaci (static)

    Stvaraju se prilikom prvog pozivanja naredbe zadefinisanje

    Inicijalizatori se izvravaju samo jednom

    Ako inicijalizatori ne postoje promenljive imaju poetnuvrednost nula

    Unitavaju se pri zavravanju programa

    Da bi podatak postao trajni, na poetak naredbe zadefinisanje dodaje se modifikator static

    Ovi podaci se zovu i statiki podaci

  • 7/28/2019 Cpp Predavanja

    81/334

    161

    Primer definisanja statikih podataka

    {

    static int t=0; // Inicijalizacija je suvina

    static int a;

    ...

    }

    162

    Privremeni podaci

    Slue za odlaganje meurezultata sloenih izraza

    Stvara ih prevodilac tako da programer ne zna zanjihovo postojanje

    Unitavaju se automatski kad vie nisu potrebni

  • 7/28/2019 Cpp Predavanja

    82/334

    163

    Razlika dosega i trajnosti podatka

    Doseg odreuje deo programa u kojem podatak moeda se koristi

    Trajnost odreuje vreme koliko dugo podatak postoji

    Trajni podaci postoje i kad se izvravaju delovi programaizvan njihovog dosega, ali u tim delovima programer nemoe da ih koristi

    Za privremene podatke doseg i trajnost se u izvesnomsmislu poklapaju

    164

    Mesto definisanja podataka

    Podatke je najbolje definisati najblie mestu gde sekoriste

    npr. unutar najmanjeg bloka koji obuhvata sva mesta nakojima se podatak koristi

    Tipovi podataka, npr. definisani sa typedef, obino se

    koriste u veem delu programa definiu se u *.h fajlu ili na poetku fajla

  • 7/28/2019 Cpp Predavanja

    83/334

    165

    Naredbe skoka

    Slue za prekidanje izvravanja redosleda naredbi i

    nastavljanje na definisanom mestu, tj. slue zapreskakanje naredbi

    break

    continue

    return

    Naredbe skoka nemaju strukturu, pa nisu upravljakestrukture

    Naredbe skoka ne vre nikakvu obradu pa nisu prostenaredbe

    166

    Naredba break

    Slui za iskakanje iz upravljake strukture

    preskakanje preostalih naredbi unutar naredbe switch iskakanje na prvu naredbu iza naredbe switch

    prevremeni zavretak petlje (for, while, do) i skakanje

    na prvu naredbu iza naredbe

    uobiajeno je da se iz petlje izlazi na osnovu uslova

    Prekida samo jednu upravljaku strukturu

  • 7/28/2019 Cpp Predavanja

    84/334

    167

    Selekcija alternativnih grana

    int godina, mesec, broj_dana;

    ...

    switch(mesec){

    case 1: case 3: case 5: case 7:

    case 8: case 10: case 12:

    broj_dana = 31; break;

    case 4: case 6: case 9: case 11:

    broj_dana = 30; break;

    case2:

    broj_dana = 28 + (godina%4==0 && godina%100!=0

    || godina%400==0); break;

    default:

    broj_dana = -1; break;

    }

    168

    Izlazak iz for petlje sa break

    for(int i=0; i

  • 7/28/2019 Cpp Predavanja

    85/334

    169

    Izlazak iz while petlje sa break

    int i=0;

    while(i

  • 7/28/2019 Cpp Predavanja

    86/334

    171

    break u uklopljenim strukturama

    for(int i=0; i

  • 7/28/2019 Cpp Predavanja

    87/334

    173

    Naredba continue

    Naredba continue se obino nalazi unutar naredbe

    if ili switch, inae se naredbe iza continue nikad

    ne bi izvravale Primer

    petlja

    {

    ...

    if(uslov)

    continue;

    ...

    }

    174

    Primer za continue

    for(int i=0; i

  • 7/28/2019 Cpp Predavanja

    88/334

    175

    Skok sa proizvoljnim odreditem

    Opti oblik naredbe goto je:

    goto oznaka;

    Oznaka je odredite skoka

    pie se po pravilima pisanja za identifikator

    oznaka ima funkcijski doseg

    Naredba na koji se skae obeleava se oznakom koja sepie ispred naredbe

    oznaka: naredba

    Odredite skoka moe biti na bilo kojem mestu

    uskakanje u blok nije zabranjeno, ali treba smatrati kao dajeste

    naredba goto se moe koristiti npr. da se prekine vie

    uklopljenih struktura

    176

    Primer za goto

    for(...){

    for(...){

    for(...){

    ...

    if(propast) goto greska;

    ...

    }

    }

    }

    greska: // obrada greke

  • 7/28/2019 Cpp Predavanja

    89/334

    177

    Naredba return

    Opti oblik

    tip ime_metode(lista_parametara) {

    ...

    if(uslov) return [vrednost];

    ...

    }

    Slui za izlazak iz metode

    Posle naredbe return kontrola se vraa pozivaocu metode Naredba if je se najee pie ako naredba return nije

    poslednja naredba u metodi, inae se naredbe iza naredbereturn nikad ne bi izvravale

    vrednost ne postoji ako je tip metode void, inae postoji

    178

    Nizovi

  • 7/28/2019 Cpp Predavanja

    90/334

    179

    Nizovi

    Sloeni (strukturirani) tipovi podataka

    Slue za predstavljanje vektora, matrica,viedimenzionalnih nizova

    Predstavljaju niz podataka istog tipa koji se nazivajuelementi niza

    Elementi niza se identifikuju pomou rednog broja unutarniza koji se naziva indeks

    Indeksiranje uvek poinje od nule, tj. prvi element nizauvek ima indeks 0

    180

    Nizovi

    Imaju jednu ili vie dimenzija

    Jednodimenzionalni niz (vektor) ima skalarne elemente

    Dvodimenzionalni niz (matrica) je niz iji su elementijednodimenzionalni nizovi

  • 7/28/2019 Cpp Predavanja

    91/334

    181

    Definisanje nizova

    Opti oblik je:tip identifikator_niza [duina1][duina2]...[duinaN]

    Duina mora da bude konstantan izraz

    Primer

    float vektor[50], matrica[10][20], x;

    Elemenit niza vektor imaju indekse od 0 do 49

    Dvodimenzionalni niz matrica ima 10 vrsta i 20 kolona,indeksi vrsta su od 0 do 9, a kolona od 0 do 19

    182

    Inicijalizacija niza

    Pri definisanju niza mogu da se navedu poetne vrednostitj. inicijalizatori

    Nizovi sa inicijalizatorima su uvek trajni

    Inicijalizator niza je oblika:

    { vrednost1, vrednost2, ... vrednostN }

    Primeri:int dani[12] = {31,28,31,30,31,30,31,31,30,31,30,31};

    int dani[] = {31,28,31,30,31,30,31,31,30,31,30,31};

    long a1[5] = { 1, 2, 3 };

    long a2[5] = { 1, 2, 3, 0, 0 }; // iste vrednosti ima i niz a1

    long a3[5] = { 1, 2, 3, 4, 5, 6 }; // greka

    const int tablica[] = { 1, 5, 3, 4, 2 };

  • 7/28/2019 Cpp Predavanja

    92/334

    183

    Inicijalizacija dvodimenzionalnih nizova

    int tab_dan[2][12] =

    {

    {31,28,31,30,31,30,31,31,30,31,30,31},

    {31,29,31,30,31,30,31,31,30,31,30,31},

    };

    int tab_dan[2][13] =

    {

    {0,31,28,31,30,31,30,31,31,30,31,30,31},

    {0,31,29,31,30,31,30,31,31,30,31,30,31},

    };

    184

    Inicijalizacija dvodimenzionalnih nizova

    short kvadrat1[4][4] =

    { {0,1,2}, {3,4}, {5,6,7,8}, {9} };

    short kvadrat2[4][4] =

    { {0,1,2,0}, {3,4,0,0}, {5,6,7,8}, {9,0,0,0} };

    short kvadrat3[4][4] = { 0,1,2,3,4,5,6,7,8,9 };

    short kvadrat4[4][4] =

    { {0,1,2,3}, {4,5,6,7}, {8,9,0,0}, {0,0,0,0} };

  • 7/28/2019 Cpp Predavanja

    93/334

    185

    Predstavljanje dvodimenzionalnog niza

    [0][3][0][2][0][1][0][0]

    [1][3][1][2][1][1][1][0]

    int matrica[3][4];

    Prvi indeks odreuje vrstu a drugi kolonu

    [2][3][2][2][2][1][2][0]

    186

    Pristupanje elementima niza

    Elementu se pristupa pomou indeksa tj. rednog brojaunutar niza

    Pristup elementima niza naziva se indeksiranje

    Koristi se binarni operator []

    Prvi operand je niz i pie se ispred operatora, a drugi je

    indeks i pie se "unutar" operatora []

    niz[indeks]

    indeks moe da bude proizvoljan celobrojni izraz

    Operator za indeksiranje je prioriteta 18 i grupie sesleva udesno

  • 7/28/2019 Cpp Predavanja

    94/334

    187

    Pristupanje elementima niza

    Skalarni element niza je lvrednost

    Operatorom za dodelu vrednosti = ne moe se sadrajjednog niza preneti u drugi niz

    Niz moe da se koristi kao operand operatora [] isizeof

    Primeri

    vektor[1] = 155;

    vektor[i+(j-1)*n] = a+b*c;

    matrica[i][j] = vektor[i+j];

    188

    Identifikatori nizovnih tipova

    Opti oblik je

    typedef tip identifikator_tipa [d1]...[dN];

    Primer

    typedef double Niz[10];

    Niz p, q[3];

    p[7] = q[0][9];

    double p[10];

  • 7/28/2019 Cpp Predavanja

    95/334

    189

    Veliina niza

    Veliina memorije koju zauzima neki niz dobija seunarnim operatorom sizeof

    Primeri:

    typedef double Niz[10];

    Niz p, q[3];

    p[7] = q[0][9];

    sizeof(double) // 8

    sizeof(Niz) // 10 x 8 = 80sizeof(q) // 3 x 10 x 8 = 240

    sizeof(q[1]) // 10 x 8 = 80

    sizeof(q[2][7]) // 8

    190

    Pokazivai (pointeri) i reference

  • 7/28/2019 Cpp Predavanja

    96/334

    191

    Pokazivai

    Operativna memorija je niz adresnih lokacija koje sunumerisane celim brojevima 0, 1, 2, ... , m-1, gde je m

    kapacitet memorije

    Brojevi pridrueni memorijskim lokacijama nazivaju seadrese

    Najmanja memorijska lokacija koja moe da se adresiraje obino jedan bajt

    Pokazivaje prost podatak u koji moe da se smesti

    adresa neke lokacije u memoriji

    Pokaziva obino zauzima 2 ili 4 bajta

    192

    Operator za dohvatanje adrese &

    (upuiva) Adresa nekog podatka u memoriji moe da se dobije

    pomou prefiksnog unarnog operatora &

    Operator je prioriteta 16 i grupie se zdesna ulevo

    Operand operatora & mora da bude lvrednost, tj.podatak koji se nalazi u memoriji

  • 7/28/2019 Cpp Predavanja

    97/334

    193

    Operator za dohvatanje podatka *

    (pokaziva)

    Podatak u memoriji se moe dohvatiti na osnovu njegoveadrese primenom prefiksnog unarnog operatora *

    Operator je prioriteta 16 i grupie se zdesna ulevo

    Operand operatora * mora da bude adresa nekogpodatka u memoriji i ne mora da bude lvrednost

    Rezultat je podatak sa navedenom adresom i predstavljalvrednost

    Dohvatanje podatka posredno, pomou adrese, nazivase indirektno adresiranje.

    194

    Definisanje pokazivaa

    Opti oblik je:

    tip * identifikator_pokazivaa

    Tip je standardni tip ili tip definisan sa typedef

    Primer:

    int *p; int* p;

    Jedno tumaenje: poto je *p tipa int, p jepokaziva na int

    Definisanje vie pokazivaa istom naredbom

    short *p1, *p2;

  • 7/28/2019 Cpp Predavanja

    98/334

    195

    Generiki pokaziva

    Generiki pokazivaje pokaziva kod kojeg nije odreentip pokazivanog podatka

    Definie se stavljanjem slubene rei void umesto tipa

    Primer:

    void* p;

    196

    Primeri

    double a, *pa=&a;

    double b, *pb;

    pb = &b;

    Nije bitno to a i b nisu dobili vrednosti

  • 7/28/2019 Cpp Predavanja

    99/334

    197

    Primeri

    int x=1, y=2, z[7];

    int *pi; // pi je pokaziva na int

    void *pj; // pj je generiki pokaziva

    pi = &x; // pi pokazuje na x

    y = *pi; // y je sada 1

    pj = pi; // pj pokazuje na x

    *pi = 0; // x je sada 0

    *pj = 3; // greka, pj je generiki pok.*(int*)pj = 3; // x je sada 3

    pi = &z[0]; // pi sada pokazuje na z[0]

    pj = &z[5]; // pj sada pokazuje na z[5]

    198

    Primeri

    int x=1;

    int *pi; // pi je pokaziva na int

    void *pj; // pj je generiki pokaziva

    pi = &x; // pi pokazuje na x

    pj = pi; // pj pokazuje na x

    *pj = 3; // greka u prevodjenju

    *(int*)pj = 3; // x je sada 3

    *(double*)pj = 1.5; // prevodi se

    *(double*)pi = 2.5; // prevodi se

    U zadnja dva primera pokaziva pokazuje na tip podatka

    koji zauzima 4 bajta u memoriji, a upisuje se podatak kojizauzima 8 bajtova

  • 7/28/2019 Cpp Predavanja

    100/334

    199

    Nepromenljivi podaci i promenljivi pokazivai

    Dosad su korieni promenljivi pokazivai napromenljive podatke

    Definisanje promenljivog pokazivaa nanepromenljive podatke

    const tip *p;

    Tumaenje: p je pokaziva (*) na nepromenljive(const) podatke tipa tip

    Vrednost pokazivaa se moe promeniti

    Pomou pokazivaa se ne moe promeniti vrednostpodatka na koji pokazuje

    200

    Promenljivi podaci i nepromenljivi pokazivai

    Definisanje nepromenljivog pokazivaa napromenljive podatke

    tip *const p = &k;

    Tumaenje: p je nepromenljivi (const) pokaziva (*)na podatke tipa tip

    Vrednost pokazivaa se ne moe promeniti

    Pomou pokazivaa se moe promeniti vrednostpodatka na koji pokazuje

  • 7/28/2019 Cpp Predavanja

    101/334

    201

    Nepromenljivi podaci i nepromenljivi pokazivai

    Definisanje nepromenljivog pokazivaa nanepromenljive podatke

    const tip *const p = &k;

    Tumaenje: p je nepromenljivi (const) pokaziva (*)na nepromenljive (const) podatke tipa tip

    Vrednost pokazivaa se ne moe promeniti

    Pomou pokazivaa se ne moe promeniti vrednostpodatka na koji pokazuje

    202

    Pokazivai sa modifikatorom volatile

    (nepostojani podaci) Mogunosti su:

    volatile tip* (objekat je volatile)

    tip *volatile (pointer je volatile)

    volatile tip *volatile (oba volatile)

    volatile tip *const (volatile objekat,

    const pokaziva)

    const tip *volatile

  • 7/28/2019 Cpp Predavanja

    102/334

    203

    Dodele vrednosti pokazivaima

    Pokazivau na promenljive podatke mogu da se dodelesamo adrese promenljivih podataka

    Pokazivau na nepromenljive podatke mogu da sedodele adrese nepromenljivih i promenljivih podataka

    Pokazivau na nepostojane podatke mogu da se dodeleadrese nepostojanih i promenljivih podataka

    Eksplicitnom konverzijom mogu da se prekre ovapravila, ali je u tom sluaju odgovoran programer

    204

    Primeri

    int a=2,*pa=&a, *const kpa=&a;//pok.je const

    const int b=5, *pkb=&b, *const kpkb=&b;

    pkb = pa;

    *pkb = 4; // greka

    kpa = pa; // greka

    pa = kpkb; // greka pravilo 1 sa// prethodne strane

    pa = (int*)kpkb; // Ne preporuuje se

    *pa = 4; // Menja se nepromenljivi

    // podatak b

    int c=1, *const kpc=&c;

    pa = kpc;

  • 7/28/2019 Cpp Predavanja

    103/334

    205

    Prikazivanje vrednosti pokazivaa

    Zavisi od jezika C na datom raunaru

    U scanf i printf se koristi vrsta konverzije %p

    Primer:#include

    main ()

    {

    int x, *px;

    px = &x;

    printf("%p\n", px);

    }

    Rezultat je npr: 0x07ff35cd

    206

    Identifikatori pokazivakih tipova

    Opti oblik je:

    typedef tip * identifikator_tipa

    Primer:typedef double* Pdouble;

    double a, b;

    Pdouble pa, pb, pc;

    pa = &a;

    pb = &b;

    scanf("%lf%lf", pa, pb)

    pc = (*pa < *pb) ? pa : pb;

    printf("%g", *pc);

  • 7/28/2019 Cpp Predavanja

    104/334

    207

    Adresna aritmetika

    Dozvoljene su operacije

    dodela vrednosti jednog pokazivaa drugom

    dodavanje celobrojnog podatka na vrednost pokazivaa i

    oduzimanje celobrojnog podatka od vrednosti pokazivaa

    oduzimanje i uporeivanje dva pokazivaa

    uporeivanje pokazivaa i nule

    208

    Dodela vrednosti

    Ako su razliiti tipovi pokazivaa obavezno je kastovanje

    Kastovanje nije obavezno ako se dodeljuje vrednostpokazivau generikog tipa (void*)

    Primer:

    int a;

    void* gp = &a;

    int* pi = gp; // greka

    int* pj = (int*)gp;

  • 7/28/2019 Cpp Predavanja

    105/334

    209

    Dodavanje celobrojnog podatka

    Mogu se primeniti operatori: +, ++, +=, -, --, -=

    Ne mogu se primeniti gornji operatori na pokazivagenerikog tipa (void*)

    Jedinica mere pri sabiranju i oduzimanju je veliinapokazivanih podataka

    Ako pokaziva p pokazuje na neki element niza, tada:

    posle p+1 ili p++ pokaziva pokazuje na naredni

    element niza

    posle p-1 ili p-- pokaziva pokazuje na prethodni

    element niza

    210

    Operacije izmeu dva pokazivaa

    Za dva pokazivaa istog tipa (razliitog od void*) koji

    pokazuju na elemente istog niza, dozvoljeno je:

    oduzimanje operatorom

    uporeivanje relacijskim operatorima =

    Dozvoljeno je uporeivanje dva pokazivaa istog tipa

    (ukljuujui i void*) relacijskim operatorima ==, != rezultat je da li pokazivai pokazuju na isti podatak

    Dozvoljeno je uporeivanje dva pokazivaa istog tipa(ukljuujui i void*) sa nulom

    rezultat je da li pokaziva pokazuju na neki podatak

    moe se umesto nule koristiti simbolika konstanta NULL,

    definisana u i

  • 7/28/2019 Cpp Predavanja

    106/334

    211

    Pokazivai i nizovi

    Identifikator niza predstavlja poetnu adresu niza

    Identifikator niza je nepromenljivi pokaziva na podatkeiji je tip jednak tipu elementa niza

    Primer:

    int a[10];

    Moe se smatrati da je identifikator a tipaint* const, i da je inicijalizovan poetnom adresombloka memorije veliine 10 podataka tipa int

    212

    Pokazivai i nizovi

    Ako su:a identifikator niza,i indeks,

    prema adresnoj aritmetici, tj. na osnovu sabiranjapokazivaa i celih brojeva, sledee je ekvivalentno:

    &a[i]

    a + i

    i + aa[i] *(a + i) *(i + a) i[a]

    Izraz i[a] treba izbegavati

  • 7/28/2019 Cpp Predavanja

    107/334

    213

    Primer za pokazivae i nizove

    int a[10], *pa, *pb, x, y;

    pa = &a[4]; // pa pokazuje na a[4]

    x = *(pa + 3); // x = a[7]*pa++; // *(pa++), poveava se pokaziva, pokazuje na a[5]

    pa++; // poveava se pokaziva, pokazuje na a[6]

    (*pa)++; // poveava se pokazivani podatak

    pb = &a[2]; // pb pokazuje na a[2]

    if (pb < pa) // uporeivanje pokazivaa, rezultat je "tano"

    {

    ...

    }

    214

    Primer: izraunavanje skalarnog proizvoda

    double a[10], b[10], s=0;

    ...

    // Prvi nain, pomou indeksa

    for (int i=0; i

  • 7/28/2019 Cpp Predavanja

    108/334

    215

    Smetanje dvodimenzionalnih nizova u memoriju

    Operativna memorija je jednodimenzionalnaenum{ m=3, n=4 };

    int b[m][n];

    Gornja matrica se u memoriju smeta na sledei nain

    [0][3][0][2][0][1][0][0]

    [1][3][1][2][1][1][1][0]

    [2][3][2][2][2][1][2][0]

    2,1 2,21,3 2,01,1 1,20,3 1,0 2,30,20,10,0

    216

    Adresna aritmetika za dvodimenzionalni niz

    enum{ m=3, n=4 };

    int b[m][n];

    2,1 2,21,3 2,01,1 1,20,3 1,0 2,30,20,10,0

    Tip identifikatora b je pokaziva na niz od etiri integer-a

    b &b[0] je adresa poetka prve vrste matriceb+1 &b[1] je adresa poetka druge vrste matrice

    Pristupanje elementu dvodimenzionalnog niza

    b[i][j] *((int*)b + n*i + j)

    b[i][j] *((int*)(b+i) + j)

    U izraunavanju indeksa ne uestvuje prva dimenzija nizam

  • 7/28/2019 Cpp Predavanja

    109/334

    217

    Smetanje viedimenzionalnih nizova u memoriju

    enum{ p=2, q=2, r=3 };

    int c[p][q][r];

    1,1,0 1,1,11,0,1 1,0,20,1,2 1,0,00,1,0 0,1,1 1,1,20,0,20,0,10,0,0

    Gornji trodimenzionalni niz se u memoriju smeta nasledei nain

    [1][0][2][1][0][1][1][0][0]

    [1][1][2][1][1][1][1][1][0]

    [0][0][2][0][0][1][0][0][0]

    [0][1][2][0][1][1][0][1][0]

    218

    Adresna aritmetika za trodimenzionalni niz

    enum{ p=2, q=2, r=3 };

    int c[p][q][r];

    1,1,0 1,1,11,0,1 1,0,20,1,2 1,0,00,1,0 0,1,1 1,1,20,0,20,0,10,0,0

    Tip identifikatora c je pokaziva na matricu od dve vrste

    i tri kolone iji su elementi integer-i

    c &c[0] je adresa poetka prve matrice

    c+1 &c[1] je adresa poetka druge matrice

    Pristupanje elementu trodimenzionalnog niza

    c[i][j][k] *((int*)c + q*r*i + r*j + k)

    U izraunavanju indeksa ne uestvuje prva dimenzijaniza p

  • 7/28/2019 Cpp Predavanja

    110/334

    219

    Tipovi identifikatora nizova

    // Definisane su konstante k, m, n, p, q, r

    int a[k]; // a je tipa int*

    int b[m][n]; // b je tipa int**

    int c[p][q][r]; // c je tipa int***

    220

    Statika dodela memorije

    Statika dodela memorije nizu

    const int m = 100;

    int a[m];

    Deo memorije u koji se smetaju statiki definisanipodaci naziva se statika zona memorije

    Za nizove se mora znati veliina niza

    Ako se ne zna veliina niza mora se definisati niz sanajveom oekivanom duinom

    Moe doi do nepotrebne potronje memorije

  • 7/28/2019 Cpp Predavanja

    111/334

    221

    Dinamika dodela memorije

    Memorijski prostor se moe traiti od operativnogsistema u vreme izvravanja programa

    Dinamika zona memorije je deo memorije koji sedinamiki dodeljuje u vreme izvravanja programa

    Podaci u dinamikoj zoni memorije nemaju identifikatore,pristupa im se preko pokazivaa

    Podaci u dinamikoj zoni memorije postoje sve dok ihprogramer ne uniti, ili se ne zavri program

    Podaci u dinamikoj zoni memorije se nazivaju dinamikipodaci

    222

    Dodela memorije u dinamikoj zoni: operator new

    Operator new slui za dodelu memorije u dinamikoj

    zoni memorije, opti oblik je

    new naziv_tipa (poetna_vrednost )

    naziv_tipa je identifikator osnovnog ili izvedenog tipa

    moe imati modifikator * ili [duina]

    Za nizove prva dimenzija moe biti promenljiva, a sveostale moraju biti konstantni izrazi

    poetna_vrednost je proizvoljan izraz odgovarajueg

    tipa

    inicijalizuju se samo pojedinani podaci, ne mogu nizovi

    Operator new kao rezultat vraa pokaziva na dodeljeni

    memorijski prostor

  • 7/28/2019 Cpp Predavanja

    112/334

    223

    Oslobaanje memorije u dinamikoj zoni: operatordelete

    Opti oblik za pojedinane podatke je:

    delete izraz

    Opti oblik za nizove bez obzira na dimenziju je:

    delete [] izraz

    izraz je adresni izraz koji pokazuje na podatak u

    dinamikoj zoni memorije kome je memorija dodeljenapomou operatora new, inae su posledice nepredvidive

    Ako izraz ime vrednost nula (NULL) ne deava senita

    Operator delete ne vraa rezultat (tip void)

    224

    Primeri

    double* pd = new double(5.2);

    delete pd;

    int n = 10;

    float* a = new float[n];

    for(int i=0; i

  • 7/28/2019 Cpp Predavanja

    113/334

    225

    Alociranje dinamike memorije u jeziku C

    Biblioteke funkcije iz

    malloc(veliina) // tip void*

    calloc(n, veliina) // tip void*

    realloc(p, veliina) // tip void*

    free(p)

    Ne treba koristiti ove funkcije, treba uvek koristitioperatore new i delete

    226

    Reference (upuivai)

    Referenca je alternativno ime za podatak

    Ne zauzimaju prostor u memoriji

    Ne postoje pokazivai na reference

    Ne postoje nizovi referenci

    Moraju da se inicijalizuju prilikom definisanja

    Ne mogu da im se promene vrednosti (tj. adresa na kojuukazuju, za razliku od pokazivaa)

  • 7/28/2019 Cpp Predavanja

    114/334

    227

    Definisanje reference

    Dodaje se modifikator & ispred identifikatora reference

    Primeri:int k = 1;

    int& r = k; // r i k predstavljaju isti int

    int x = r; // x = 1

    r = 2; // k = 2

    r++; // poveava se k, k = 3

    int* p = &r; // p pokazuje na k

    int* p1 = &k;// p1 pokazuje na kint y = *p; // y = 3

    *p = 5; // k = 5

    p = 0; // p ne pokazuje na podatak

    228

    Reference i modifikatori const i volatile

    Reference mogu da upuuju na

    promenljive podatke

    nepromenljive podatke (const)

    nepostojane podatke (volatile)

    Primer

    int k = 1;

    int& r = k; // r i k predstavljaju isti int

    r = 2; // k = 2, pomou r se moe menjati k

    const int& rc = k; // rc i k predstavljaju isti int

    rc = 5; // greka, pomou rc ne moe se menjati k

  • 7/28/2019 Cpp Predavanja

    115/334

    229

    Definisanje tipova

    Sa typedef se moe dodeliti ime tipu podatka koji je

    referenca na neki tip

    Primer

    typedef double& Rdouble;

    double a, b;

    Rdouble ra = a, rb = b;

    ra = rb = 5; // a = b = 5

    Ekvivalentno sa:

    double &ra = a, &rb = b;

    230

    Funkcije

  • 7/28/2019 Cpp Predavanja

    116/334

    231

    Funkcije

    Rastavljanje sloenijih problema na vie jednostavnijihproblema

    Funkcije su potprogrami koji na osnovu argumenata dajurezultat koji se naziva vrednost funkcije

    Funkcija moe da daje i druge rezultate koji se nazivajuboni efekti

    Funkcija ne mora da vraa kao rezultat vrednostfunkcije, moe da ima samo bone efekte

    232

    Definisanje funkcija

    Naredba za definisanje funkcije ima opti oblik:

    tip naziv (niz_argumenata) telo_funkcije

    tip je tip rezultata koji vraa funkcija, tj. tip vrednosti

    funkcije

    naziv je identifikator funkcije

    niz_argumenata predstavlja argumente funkcije

    pomou kojih se unose poetne vrednosti

    telo_funkcije je po formi blok

  • 7/28/2019 Cpp Predavanja

    117/334

    233

    Primer funkcije

    long faktorijel(int n)

    {

    long rezultat = 1;

    for(int i=n; i>1; i--)

    rezultat *= i;

    return rezultat;

    }

    234

    Vrednost funkcije

    Tip vrednosti funkcije je tip rezultata koji vraa funkcija

    Ako funkcija ne vraa vrednost (ima samo bone efekte)tip vrednosti funkcije je void

    Ako se izostavi tip vrednosti funkcije u definiciji funkcijepodrazumeva se tip int

    Tip vrednosti funkcije moe da bude pokaziva na nekitip (modifikator *), a takoe i referenca (modifikator &)

    Vrednost funkcije moe biti proizvoljnog skalarnog tipa

    moe da bude jedan podatak

    ne moe da bude niz

    moe da bude pokaziva na element niza

  • 7/28/2019 Cpp Predavanja

    118/334

    235

    Argumenti funkcije

    tip naziv(niz_argumenata) telo_funkcije

    niz_argumenata ima oblik:argument, argument, ... , argument

    Pojedinani argument se definie kao podatak:

    tip naziv_argumenta

    tip argumenta je proizvoljan standardni tip iliidentifikator tipa definisan naredbom typedef

    moe da bude i pokaziva na neki tip ili referenca moe da bude i niz

    oznaka tipa mora da se navede uz svaki argument

    Argumentima se unose poetne vrednosti podataka ufunkciju

    236

    Niz argument funkcije

    Za jednodimenzionalne nizove ne mora da se navodidimenzija niza

    Primer:double srednjaVrednost(int niz[], int duzina_niza)

    {...}

    Za viedimenzionalne nizove ne mora da se navodi prvadimenzija, ostale moraju

    Primer:int naziv_funkcije (int matrica[][10], int n) {...}

    Viedimenzionalni nizovi se retko koriste kao argumenti

    esto se smetaju u jednodimenzionalne, a u funkciji se

    koristi adresna aritmetika za pristupanje elementima niza

  • 7/28/2019 Cpp Predavanja

    119/334

    237

    Niz - argument funkcije

    Za jednodimenzionalni niz argument moe da bude niz ilipokaziva na poetak niza

    Primer:double srednjaVrednost(int niz[], int duzina_niza)

    {...}

    ili:double srednjaVrednost(int *niz, int duzina_niza)

    {...}

    238

    Formalni i stvarni argumenti

    Formalni argumenti su argumenti koji se navode udefinisanju funkcije

    Stvarni argumenti su argumenti koji se navode prilikompozivanja funkcije

    Formalni argumenti prilikom pozivanja funkcije dobijaju

    vrednosti od stvarnih argumenata

  • 7/28/2019 Cpp Predavanja

    120/334

    239

    Primer

    long faktorijel(int n)

    {

    long rezultat = 1;

    for(int i=n; i>1; i--)

    rezultat *= i;

    return rezultat;

    }

    void prikazFaktorijel(int a)

    {

    printf("faktorijel je %d\n", faktorijel(a));

    }

    240

    Telo funkcije

    Po formi je blok

    Moe da sadri deklarativne i izvrne naredbe

    Podaci definisani u telu funkcije su lokalni za tu funkciju

    Formalni argumenti su lokalni za funkciju

    moe se smatrati kao da su definisani na poetku bloka

    pre prve naredbe bloka

    inicijalizovani su vrednostima stvarnih argumenata

  • 7/28/2019 Cpp Predavanja

    121/334

    241

    Telo funkcije

    Povratak iz funkcije u pozivajuu funkciju radi senaredbom return

    Opti oblik je:

    return izraz; // Kad funkcija vraa rezultat

    return; // Kad je tip vrednosti funkcije void

    Izraz predstavlja vrednost funkcije (vraeni rezultat)

    mora po tipu da se slae sa predvienim tipom vrednostifunkcije

    za numerike tipova radi se automatska konverzija upredvieni tip rezultata

    Naredba return moe da se izostavi ako je toposlednja nareba u funkciji iji je rezultat tipa void

    242

    Naredba return

    Unutar tela funkcije moe biti vie naredbi return u

    razliitim selekcijama

    Funkcija se zavrava kad se izvri prva naredba return

    Primer:long faktorijel(int n)

    {

    if(n < 2)

    return 1;

    long rezultat = 1;

    for(int i=n; i>1; i--)

    rezultat *= i;

    return rezultat;

    }

  • 7/28/2019 Cpp Predavanja

    122/334

    243

    Vrednost funkcije je pokaziva ili referenca

    Vrednost funkcije ne sme da bude pokaziva ilireferenca na lokalni prolazni podatak funkcije

    Prolazni lokalni podatak se unitava pre nego topozivajua funkcija moe da mu pristupi

    Moe da bude pokaziva ili referenca na lokalni trajnipodatak

    Moe da bude pokaziva na dinamiki podataknapravljen u funkciji

    244

    Primer

    Moe (vraanje vrednosti):int DoubleValue(int nX)

    {

    int nValue = nX * 2;

    return nValue; // Ovde se vraa kopija od nValue

    } // nValue izlazi iz dosega

    Ne moe (vraanje reference):int& DoubleValue(int nX)

    {

    int nValue = nX * 2;

    return nValue; // Ovde se vraa refer. od nValue

    } // nValue izlazi iz dosega

  • 7/28/2019 Cpp Predavanja

    123/334

    245

    Primer

    Ne moe (vraanje adrese):

    int* DoubleValue(int nX)

    {

    int nValue = nX * 2;

    return &nValue; // Ovde se vraa adresa nValue

    } // nValue izlazi iz dosega

    246

    Biblioteke funkcije

    U sastavu jezika je standardna biblioteka sa velikimbrojem standardnih funkcija

    biblioteke funkcije su podeljene u nekoliko grupa naosnovu slinosti

    deklaracije funkcija navedene su u *.h datotekama

    (datoteke zaglavlja) Da bi se koristile standardne funkcije, na poetku

    programa (tj. datoteke u kojoj se koriste funkcije) dodajese zaglavlje fajla u kojem su deklarisane standardnefunkcije:

    #include

  • 7/28/2019 Cpp Predavanja

    124/334

    247

    Matematike funkcije,

    th xtanh(x)

    ch xcosh(x)

    sh xsinh(x)

    arctg x/y, rezultat [-, ], mora x ili y da bude 0atan2(x,y)

    arctg x, rezultat [-/2, /2]atan(x)

    arccos x, x[-1, 1]acos(x)

    arcsin x, x[-1, 1]asin(x)

    tg xtan(x)

    cos xcos(x)

    sin xsin(x)

    Rezultat, x i y su tipa double, n je tipa int

    248

    Matematike funkcije,

    x2nldexp(x,n)

    |x|fabs(x)

    najvei ceo broj xfloor(x)

    najmanji ceo broj xceil(x)

    x1/2, x0sqrt(x)

    xy, za x=0 mora y>0; za x0log10(x)

    logex, x>0log(x)

    exexp(x)

    Rezultat, x i y su tipa double, n je tipa int

  • 7/28/2019 Cpp Predavanja

    125/334

    249

    Matematike funkcije,

    ostatak realnog deljanja x/y sa predznakom od x

    standard ne precizira rezultat za y=0fmod(x,y)

    vrednost funkcije je razlomljeni deo realnog broja x sapredznakom tog brojay je celobrojni deo broja x sa predznakom tog broja(boni efekat)

    modf(x,&y)

    vrednost funkcije je normalizovana mantisa realnog

    broja x u opsegu [-1/2, 1]

    n je eksponent (boni efekat)

    frexp(x,&n)

    Rezultat, x i y su tipa double, n je tipa int

    250

    Matematike funkcije,

    |n|, n je tipa long int, rezultat je tipa long intlabs(n)

    Postavljanje poetne vrednosti sekvencepseudosluajnih brojeva koju daje funkcija rand() na n.Podrazumevana poetna vrednost sekvence je 1.n je tipa unsigned int

    srand(n)

    Pseudosluajan broj tipa int sa uniformnomraspodelom u opsegu [0, RAND_MAX].

    RAND_MAX je simbolika konstanta zavisna od

    raunara, RAND_MAX 32767

    rand()

    |n|, n je tipa int, rezultat je tipa intabs(n)

    Funkcije za celobrojne tipove

  • 7/28/2019 Cpp Predavanja

    126/334

    251

    Funkcije za rad sa znakovima,

    Ispisuje znak c na glavnom izlazu raunara (ekranu)putchar(c)

    Ispisuje sadraj znakovnog niza s (tipa char[] ilichar*) do zavrnog znaka '\0', dodajui znak '\n'

    puts(s)

    ita jedan red teksta sa glavnog ulaza raunara, doznaka '\n' koji se zamnenjuje '\0'.Rezultat je znakovni niz s tipa char[] ili char*

    gets(s)

    ita sledei znak sa glavnog ulaza raunara(tastature), ukljuujui bele znaka (Ctrl-Z za kraj)

    getchar()

    252

    Funkcije za ispitivanje znakova,

    Da li je c specijalni znak, tampajui nije slovo ni cifraispunct(c)

    Da li je c upravljaki znakiscntrl(c)

    Da li je c veliko slovoisupper(c)

    Da li je c decimalna cifraisdigit(c)

    Da li je c heksadecimalna cifraisxdigit(c)Da li je c beli znakisspace(c)

    Da li je c tampajui znak, ali nije razmakisgraph(c)

    Da li je c tampajui znak, ukljuujui i razmakisprint(c)

    Da li je c malo slovoislower(c)

    Da li je c slovoisalpha(c)

    Kod odgovarajueg malog slova, inae ctoupper(c)Kod odgovaraju

    eg velikog slova, ina

    e ctolower(c)

    Da li je c slovo ili cifraisalnum(c)

  • 7/28/2019 Cpp Predavanja

    127/334

    253

    Funkcije za rad sa stringovima,

    indeks prvog elementa niza u koji sadri bilo kojiznak iz niza s

    strcspn(u,s)

    dopisivanje s na kraj t, najvie n znakovastrncat(t,s,n)

    poreenje u i sstrcmp(u,s)

    broj ynakova bez '\0'strlen(s)

    pokaziva na prvi element niza u koji sadri znak cstrchr(u,c)

    pokaziva na zadnji element niza u koji sadri znak cstrrchr(u,c)

    pokaziva na prvi element niza u od kojeg poinjepodniz s

    strstr(u,s)

    dopisivanje s na kraj tstrcat(t,s)

    kopiranje s -> t, najvie n znakovastrncpy(t,s,n)

    indeks prvog elementa niza u koji sadri bilo kojiznak koji se ne pojavljuje u nizu s

    strspn(u,s)

    kopiranje s -> tstrcpy(t,s)

    254

    Konverzija u numerike tipove,

    Konverzija celog broja iz stringa oblika cccc u

    binarni ekvivalent, rezultat je tipa long intatol(s)

    Konverzija celog broja iz stringa oblika cccc ubinarni ekvivalent, rezultat je tipa int

    atoi(s)

    Konverzija realnog broja iz stringa oblikaccc.cccEee u binarni ekvivalent, rezultat je tipadouble

    atof(s)

  • 7/28/2019 Cpp Predavanja

    128/334

    255

    Pozivanje funkcije

    Binarni operator sa operandima

    prvi operand je funkcija koja se poziva

    drugi operand je niz stvarnih argumenata

    operator je prioriteta 18, grupie se sleva udesno

    Opti oblik pozivanja funkcije je:

    funkcija ( izraz, izraz, ... , izraz)

    funkcija je funkcija koja se poziva i moe biti

    identifikator funkcije adresni izraz ija je vrednost adresa eljene funkcije

    izrazi su stvarni argumenti kojim se inicijalizuju

    formalni argumenti pre izvravanja tela funkcije

    256

    Stvarni argumenti

    Treba da se slau p