125

C prezentacija prof. urosevic

Embed Size (px)

DESCRIPTION

Prezentacija sa c language jezikom petlje,strukture,nizovi,pokazivaci,strukture,matrice.Funkcije citaj pisi,sortiraj,razmeni

Citation preview

Page 1: C prezentacija prof. urosevic
Page 2: C prezentacija prof. urosevic

Prednosti C jezikaPrednosti C jezika JednostavnostJednostavnost Univerzalnost i slobodne forme programiranja, čine ga Univerzalnost i slobodne forme programiranja, čine ga

jezikom opšte namene i primenejezikom opšte namene i primene Razvijena sredstva za prikazivanje strukture podataka Razvijena sredstva za prikazivanje strukture podataka Projektovanje programa metodom ”odozgo na dole”Projektovanje programa metodom ”odozgo na dole” Optimizovani C prevodioci za kreiranje efikasnih programa Optimizovani C prevodioci za kreiranje efikasnih programa

za sistemsko programiranjeza sistemsko programiranje Uvod u jezik C++ u kome su uspešno zaživele ideje objektno Uvod u jezik C++ u kome su uspešno zaživele ideje objektno

orjentisanog programiranjaorjentisanog programiranja

Page 3: C prezentacija prof. urosevic

TradicionalniTradicionalni, klasični, algoritamski , klasični, algoritamski način programiranja način programiranja je u osnovi proceduralan, zasnovan na funkcionalnoj je u osnovi proceduralan, zasnovan na funkcionalnoj dekompoziciji korisničkog, a zatim i programskog dekompoziciji korisničkog, a zatim i programskog zahteva.zahteva.

(tipicno unos, obrada prikaz)(tipicno unos, obrada prikaz) Pri tome, podaci (atributi) koji se obrađuju i operacije Pri tome, podaci (atributi) koji se obrađuju i operacije

nad njima nisu grupisani zajedno u nad njima nisu grupisani zajedno u objektimaobjektima kao što kao što je to slučaj kod OBJEKTNO ORJENTISANOG je to slučaj kod OBJEKTNO ORJENTISANOG PROGRAMIRANJA, već su razbacani po programu.PROGRAMIRANJA, već su razbacani po programu.

Page 4: C prezentacija prof. urosevic

Procesi u iProcesi u izvršavanju programazvršavanju programa

Tekst editorTekst editor. . Pisanje izvornog koda programaPisanje izvornog koda programa PretprocesorPretprocesor. . Transformiše izvorni kod prema Transformiše izvorni kod prema

direktivama koji se u njemu nalazedirektivama koji se u njemu nalaze Kompajler. Kompajler. Transformiše izvorni kod u kod na Transformiše izvorni kod u kod na

asemblerskom jezikuasemblerskom jeziku Asembler.Asembler. Asemblerski kod translira u objektni kodAsemblerski kod translira u objektni kod.. LinkerLinker. . Od formiranog koda i modula iz biblioteke C Od formiranog koda i modula iz biblioteke C

jezika kreira izvršiv filejezika kreira izvršiv file

Page 5: C prezentacija prof. urosevic

LetLet’’s go ! Example 1. s go ! Example 1. Linear Linear funcfunctiontion

#include<stdio.h>#include<stdio.h> main ()main () {{ int a,b,x,y;int a,b,x,y; a=2;a=2; b=4;b=4; x=1;x=1; y=a*x+b;y=a*x+b; printf("%10d\n",y);printf("%10d\n",y); }}

Page 6: C prezentacija prof. urosevic

Osnovni elementi C jezika Osnovni elementi C jezika

IdentifikatorIdentifikator je sekvenca velikih i malih slova, cifara, i je sekvenca velikih i malih slova, cifara, i karaktera ‘_karaktera ‘_’’. Koristi se za dodeljivanje imena objektima u . Koristi se za dodeljivanje imena objektima u programu (funkcije, promenljive...)programu (funkcije, promenljive...)

printf("%10d\n",y);printf("%10d\n",y); je je iskaziskaz C jezika i predstavlja C jezika i predstavlja elementarnu obradu koju program treba da obavi. Mora elementarnu obradu koju program treba da obavi. Mora se završiti karakterom se završiti karakterom ;;

‘‘{{‘ i ‘ ‘ i ‘ }’}’ su su karakteri koji objedinjuju više pojedinačnih karakteri koji objedinjuju više pojedinačnih iskaza u jednu programsku celinu, analogno komandama iskaza u jednu programsku celinu, analogno komandama BEGIN i END u Pascalu.BEGIN i END u Pascalu.

Page 7: C prezentacija prof. urosevic

Osnovni elementi C jezika, Osnovni elementi C jezika, nastavaknastavak

Main Print i Scanf Main Print i Scanf su identifikatori sistemskih funkcija su identifikatori sistemskih funkcija Funkcija Funkcija MainMain informi informiše program gde treba početi še program gde treba početi

izvršavanje programa, a ‘izvršavanje programa, a ‘( )( )ć označava da sistemska ć označava da sistemska funkcija main nema argumenata. funkcija main nema argumenata.

#include<stdio.h>#include<stdio.h> Sve pretprocesorske direktive počinju znakom Sve pretprocesorske direktive počinju znakom ## i ne i ne

pripadaju C jeziku.pripadaju C jeziku. #include<stdio.h>#include<stdio.h> je instrukcija prevodiocu da upotrebi je instrukcija prevodiocu da upotrebi

standardne ulastandardne ulazno izlazne funkcije koje su definisane u zno izlazne funkcije koje su definisane u file-u file-u <stdio.h><stdio.h>

Page 8: C prezentacija prof. urosevic

Funkcije za realizaciju ulazne i izlazne Funkcije za realizaciju ulazne i izlazne aktivnostiaktivnosti

Funkcije Funkcije printfprintf ii scanfscanf obavljaju formatizovanu ulazno izlaznu obavljaju formatizovanu ulazno izlaznu aktivnost.aktivnost.

Argumenti obe funkcije podeljeni su u dva dela:Argumenti obe funkcije podeljeni su u dva dela: A)A) Kontrolni ili konverzioni niz Kontrolni ili konverzioni niz B)B) Lista argumenata Lista argumenata RazlikRazlikaa funkcij funkcijaa Scanf i Printf je u u listi argumenata. Argumenti Scanf i Printf je u u listi argumenata. Argumenti

funkcije funkcije printfprintf se prenose vrednošću, dok sese prenose vrednošću, dok se argumenti funkcije argumenti funkcije scanfscanf prenose svojom adresom, jer se učitana vrednost mora prenose svojom adresom, jer se učitana vrednost mora vratiti u pozivajući program. To se postiže navođenjem karaktera vratiti u pozivajući program. To se postiže navođenjem karaktera && ( operator indirekcije ) ispred liste argumenata. ( operator indirekcije ) ispred liste argumenata.

Page 9: C prezentacija prof. urosevic

Izlazna funkcija Izlazna funkcija Printf()Printf() SintaksaSintaksa Printf (Upravljački stringPrintf (Upravljački string [, Arg1,Arg2,…]) [, Arg1,Arg2,…]) UpraUpravljački stringvljački string A)A) Printf ( “Ispis izlaznih izvestaja”)Printf ( “Ispis izlaznih izvestaja”) Konstantni tekst Konstantni tekst Ispis izlaznih izvestajaIspis izlaznih izvestaja B)B) Sadrži specifikaciju konverzijeSadrži specifikaciju konverzije Printf ( “Broj Pi ima vrednost Printf ( “Broj Pi ima vrednost %f%f\n\n””, Pi, Pi)) Karakter Karakter %% f f odreodređuje na kom mestu đuje na kom mestu ii u kom formatu u kom formatu će će

se štampati vrednost odgovarajućeg argumenta iz liste. se štampati vrednost odgovarajućeg argumenta iz liste. ““\n\n” Jedan karakter. Nekim karakterima se može ” Jedan karakter. Nekim karakterima se može

promeniti uobičajeno značenje ako im prethodi karakter promeniti uobičajeno značenje ako im prethodi karakter ““\\” , tzv. Escape karakteri. ” , tzv. Escape karakteri.

Page 10: C prezentacija prof. urosevic

OpOpšti oblik specifikacije šti oblik specifikacije konverzijekonverzije

%%[-][[-][ širina_polja širina_polja][][. Tačnost. Tačnost][][11]] konverzioni_karakter konverzioni_karakter [-][-] Argument se poravnava na levoj strani zadane Argument se poravnava na levoj strani zadane

širineširine širina_polja širina_polja Zadaje mZadaje maksimalnuaksimalnu širinu polja širinu polja. .

Mesto na kome se Mesto na kome se štampa argument naziva se štampa argument naziva se poljepolje, a broj karaktera u polju je , a broj karaktera u polju je širina poljaširina polja..

Tačnost Tačnost Definiše se za realne brojeve, koliko se Definiše se za realne brojeve, koliko se cifara ispisuje desno od decimalne tačke cifara ispisuje desno od decimalne tačke

KonverKonverzioni_karakter zioni_karakter definiše konverziju (iz tabele)definiše konverziju (iz tabele)

Page 11: C prezentacija prof. urosevic

SiSimboli specifikacije konverzijemboli specifikacije konverzijeSimbol Simbol

konverzijekonverzijeTip Tip argumentaargumenta

Osobina izlazne Osobina izlazne funkcijefunkcije

cc CharChar Jedan znakJedan znak

dd IntInt Ceo dekadni brojCeo dekadni broj

uu IntInt Ceo dek. Br.bez znakaCeo dek. Br.bez znaka

oo IntInt Ceo okt. Br. Bez Ceo okt. Br. Bez znakaznaka

x, X x, X IntInt Ceo hksdek. Br. Bez Ceo hksdek. Br. Bez znakaznaka

ss StringString StringString

ff Float Float doubledouble

Dekadni zapis real. Dekadni zapis real. bbrojaroja

e, Ee, E Float Float doubledouble

Eksponencijalni zapisEksponencijalni zapis

g,Gg,G Float Float doubledouble

Kraći zapis između %f Kraći zapis između %f i %ei %e

Page 12: C prezentacija prof. urosevic

Example No 2Example No 2

mmain()ain() {{ print(“print(“kkarakteriarakteri:\n:\n%3c%3c\n\n%%55cc\n\n%%77cc\\

n,’A’,’B’,’C’);n,’A’,’B’,’C’); } }

Izlaz Izlaz programaprograma Karakteri:Karakteri: AA

BB

CC

Page 13: C prezentacija prof. urosevic

Ulazna funkcija scanf()Ulazna funkcija scanf()

SintaksaSintaksa scanf (Upravljački stringscanf (Upravljački string [, Arg1,Arg2,…]) [, Arg1,Arg2,…]) Upravljački stringUpravljački string sadrži niz konverzionih sadrži niz konverzionih

specifikacijaspecifikacija Lista argumenataLista argumenata sadrži adrese promenljivih. sadrži adrese promenljivih.

Ispred imena promenljive Ispred imena promenljive obavezan je obavezan je znak znak &, &, osim kod string promenljive. osim kod string promenljive.

Scanf(“%d%d%d,”,&i,&j,&k)Scanf(“%d%d%d,”,&i,&j,&k);;

Page 14: C prezentacija prof. urosevic

Opšti oblik konverzione Opšti oblik konverzione specifikacijespecifikacije

%%[*]š[*]š širina_polja širina_polja]] konverzioni_znakkonverzioni_znak

** Odgovaraju Odgovarajuće ulazno polje se će ulazno polje se ignoriše i ne dodeljuje promenljivojignoriše i ne dodeljuje promenljivoj

širina_poljaširina_polja - Predstavlja - Predstavlja maksimalnu širinu ulaznog poljamaksimalnu širinu ulaznog polja

konverzioni_znakkonverzioni_znak Definiše Definiše konverziju (data tabelom)konverziju (data tabelom)

Page 15: C prezentacija prof. urosevic

Tabela konverzionih znakovaTabela konverzionih znakovaSimbol konverzijeSimbol konverzije Tip argumentaTip argumenta

cc CharChar

dd IntInt

ld ili Dld ili D LongLong

hh ShortShort

oo IntInt

llx, X x, X LongLong

ss stringstring

ff Float Float

lle, e, llEE DDoubleouble

g,Gg,G Float doubleFloat double

Page 16: C prezentacija prof. urosevic

Example No 3Example No 3 main()main() {{ int int xčxč print(“ print(“ Upotreba f. scanf:\n Ukucajte broj\Upotreba f. scanf:\n Ukucajte broj\

n:”n:”) ) ;; scanf (%d\n,scanf (%d\n,””&x);&x); printprintff(“(“Ukucali ste\n%d\n,Ukucali ste\n%d\n,””xx));; }} Izlaz Izlaz programaprograma Upotreba f. scanf:Upotreba f. scanf: Ukucajte brojUkucajte broj 2323 Ukucali steUkucali ste 2323

Page 17: C prezentacija prof. urosevic

ExampleExample No 4 No 4 main()main() {{ int i,j,kint i,j,k;; scanscanff(“%2d%3d%2d”,&i,&j,&k)(“%2d%3d%2d”,&i,&j,&k);; printprintff(“ %d%d%d%(“ %d%d%d%^̂n”i,j,k)n”i,j,k);; scanscanff(“%d%d%d”,&i,&j,&k)(“%d%d%d”,&i,&j,&k);; printprintff(“(“//%d%d//%d%d//%d%%d%^̂n”i,j,k)n”i,j,k);; }} Za ulazne vrednostiZa ulazne vrednosti 123 456 789123 456 789 12 34 5612 34 56 Ispisuje se Ispisuje se /12/3 /45//12/3 /45/ /6//789/12//6//789/12/

Page 18: C prezentacija prof. urosevic

Osnovni tipovi podataka Osnovni tipovi podataka

Promenljive Promenljive i konstante su objekti u okviru i konstante su objekti u okviru programa koji se karakterišu svojim: programa koji se karakterišu svojim:

Imenom, Imenom, tipom podataka koji se može dodeliti tipom podataka koji se može dodeliti

promenljivoj, promenljivoj, Skupom operatora koji se može primeniti Skupom operatora koji se može primeniti

nad tim vrednostima nad tim vrednostima Memorijskim prostorom za smeštaj Memorijskim prostorom za smeštaj

podatakapodatakaOsnovni tipovi podataka su:Osnovni tipovi podataka su: int, float, double i charint, float, double i char

Page 19: C prezentacija prof. urosevic

Tipovi podatakaTipovi podataka Osnovni Osnovni Celobrojni Celobrojni (int)(int) Realni Realni (float)(float) Znakovni Znakovni (char)(char) Nabrojivi Nabrojivi (enum)(enum) Prazan Prazan (void)(void) Slozeni ili StruktuiraniSlozeni ili Struktuirani Nizovi Nizovi strukture strukture UnijeUnije

Page 20: C prezentacija prof. urosevic

Promenljive tPromenljive tipipaa Int Int

• U ovu kategoriju podataka ubrajaju se konstante, U ovu kategoriju podataka ubrajaju se konstante, promenljive, izrazi i funkcije.promenljive, izrazi i funkcije.

• Tri notacije za predstavljanje celobrojnih vrednosti Tri notacije za predstavljanje celobrojnih vrednosti dekadna, oktalna i heksadecimalna.dekadna, oktalna i heksadecimalna.

• Pri deklarisanju promenljivih i konstanti može se Pri deklarisanju promenljivih i konstanti može se vršiti i inicijalizacija promenljivih, npr. program vršiti i inicijalizacija promenljivih, npr. program Example No5 Example No5

• Opseg celobrojnih vrednosti je različit i može se Opseg celobrojnih vrednosti je različit i može se menjati primenom kvalifikatora Long i Short menjati primenom kvalifikatora Long i Short

• Unsigned deklariše promenljivu za memorisanje + Unsigned deklariše promenljivu za memorisanje + vrednostivrednosti

Long int xLong int x;; Short int yShort int y;; uunsigned nsigned int z;int z;

Page 21: C prezentacija prof. urosevic

Example No 5 Example No 5

main()main() {{ int int xx =11,y =22,z =33 =11,y =22,z =33;; print(“print(“xx = = %d\n %d\n y = y = %d\n %d\n z = z = %d\n,%d\n,””xx,y,z),y,z);; }} Izlaz Izlaz programaprograma x = 11x = 11 y = 22y = 22 z = 33z = 33

Page 22: C prezentacija prof. urosevic

Promenljive tipa float i Promenljive tipa float i doubledouble

Promenljive tipa float i double memoriPromenljive tipa float i double memorišu vrednosti šu vrednosti realnih brojeva i vrednosti sa decimalnim zarezom.realnih brojeva i vrednosti sa decimalnim zarezom.

Razlika između Razlika između tipa float i double tipa float i double je u tačnosti je u tačnosti predstavljanja realnih vrednosti.( brojem decimalnih predstavljanja realnih vrednosti.( brojem decimalnih cifara koje se mogu memorisati.cifara koje se mogu memorisati.

Konstante sa pokretnim zarezom se u C jeziku se Konstante sa pokretnim zarezom se u C jeziku se mogu predstaviti u običnoj i naučnoj konotaciji.mogu predstaviti u običnoj i naučnoj konotaciji.

Ne postoji razlika između konstanti tipa Ne postoji razlika između konstanti tipa float i double float i double C prevodilac sve konstante sa pokretnim zarezom C prevodilac sve konstante sa pokretnim zarezom predstavlja kao tip doublepredstavlja kao tip double

Promenljive tipa double mogu memorisati grubo Promenljive tipa double mogu memorisati grubo dvaput više decimalnih cifara od promenljivih tipa dvaput više decimalnih cifara od promenljivih tipa floatfloat

Page 23: C prezentacija prof. urosevic

Example No 6Example No 6 main()main() {{ float pi = 3.14159265358979323845float pi = 3.14159265358979323845;; Double sqrt_3 = 1.732050875687729356Double sqrt_3 = 1.732050875687729356;; print(“pi = print(“pi = %%20f20f\n \n sqrt_3 = sqrt_3 = %%20f20f\n\\n\

n,n,”pi,sqrt_3)”pi,sqrt_3);; }} Izlaz Izlaz programa:programa: pipi = = 3.141592741012573200003.14159274101257320000 sqrt_3 = 1.73205087568877260000sqrt_3 = 1.73205087568877260000

Page 24: C prezentacija prof. urosevic

Promenljive tipa charPromenljive tipa char Promenljive i konstante tipa char memorišu Promenljive i konstante tipa char memorišu

karaktere.karaktere. Promenljive i konstante tipa char učestvuju u Promenljive i konstante tipa char učestvuju u

izrazima svojom kodnom vrednošću u kome je svaki izrazima svojom kodnom vrednošću u kome je svaki karakter kodiran svojom. 7-bitnom vrednošćukarakter kodiran svojom. 7-bitnom vrednošću ASCII ASCII kodkoda.a. Pošto su karakteri kodirani celobrojnim Pošto su karakteri kodirani celobrojnim vrvrednostima ednostima (leksikografsko ure(leksikografsko uređenje ), moguće je đenje ), moguće je sortiranje karaktera reči i linija.sortiranje karaktera reči i linija.

Promenljive i konstante tipa char učestvuju u izrazima Promenljive i konstante tipa char učestvuju u izrazima svojom kodnom vrednošću koja se tretira kao svojom kodnom vrednošću koja se tretira kao celobrojna vrednost. Promenljiva car sadrži karakter celobrojna vrednost. Promenljiva car sadrži karakter “a” . Sukcesivnim inkrementiranjem promenljive kar “a” . Sukcesivnim inkrementiranjem promenljive kar dobijaju se karakteri “b” i “c”, program example No 7dobijaju se karakteri “b” i “c”, program example No 7

Page 25: C prezentacija prof. urosevic

Example No 7Example No 7

main()main() {{ char carchar car = = ‘a‘ ‘a‘;; print(“karakter je %cprint(“karakter je %c\n”\n”,car,car));; print(“karakter je %cprint(“karakter je %c\n”\n”,car+1,car+1));; print(“karakter je %cprint(“karakter je %c\n”\n”,car+2,car+2));; print(“ Kodna vrednost je %print(“ Kodna vrednost je %d\n”d\n”,car+3,car+3));; }} Izlaz Izlaz programaprograma Karakter je aKarakter je a Karakter je bKarakter je b Karakter je cKarakter je c Kodna vrednost je 100Kodna vrednost je 100

Page 26: C prezentacija prof. urosevic

main()main() {{ char carchar car = = ‘ ‘AA‘‘;; printprintff(“(“// %c %c // % %dd // % %oo // % %xx \n”\n”,c,c,c.c,c,c.c,c));; }} Izvrsavanjem programa dobija se:Izvrsavanjem programa dobija se: /A/65//101/41/A/65//101/41 65- ASCII dekadna vrednost65- ASCII dekadna vrednost 101- ASCII oktalna vrednost 101- ASCII oktalna vrednost 41- ASCII heksadekadna vrednost41- ASCII heksadekadna vrednost

Page 27: C prezentacija prof. urosevic

Operacije, iOperacije, izrazi i operatorizrazi i operatori OperacijuOperaciju predstavlja simbol koji o predstavlja simbol koji označava značava

određenu akciju nad određenim podatkom koji određenu akciju nad određenim podatkom koji se naziva operand. se naziva operand.

IzrazIzraz se sastoji od jednog ili više operanada i se sastoji od jednog ili više operanada i simbola operacija. simbola operacija.

Operacija operira nad operandom Operacija operira nad operandom

Aritmetičke operacijeAritmetičke operacije * - množenje* - množenje // - deljenje - deljenje % - izdvaja ostatak pri deljenju celih brojeva% - izdvaja ostatak pri deljenju celih brojeva + - sabiranje+ - sabiranje - - oduzimanje- - oduzimanje

Page 28: C prezentacija prof. urosevic

Operacije, iOperacije, izrazi i operatorizrazi i operatori Operacije poređenja Operacije poređenja >> - veće- veće >=>= - veće ili jednako- veće ili jednako << - manje- manje <= <= - manje ili jednako- manje ili jednako = == = - jednako- jednako != != - različito- različito Logičke operacije Logičke operacije ! ! - negacija- negacija &&,&&, - konjukcija- konjukcijaI IIII - disjunkcija- disjunkcija

Page 29: C prezentacija prof. urosevic

Operacije, iOperacije, izrazi i operatorizrazi i operatori Operacije dodeljivanjaOperacije dodeljivanja < promenljiva> = <izraz>, < promenljiva> = <izraz>, izvršava se tako što izvršava se tako što

se vrednost desnog operanda, (izraz) dodeljuje se vrednost desnog operanda, (izraz) dodeljuje levom operandu ( promenljiva), koji predstavlja levom operandu ( promenljiva), koji predstavlja vrednost izraza sa operacijom dodeljivanja.vrednost izraza sa operacijom dodeljivanja.

OperatorOperator X = Y = Z = 1X = Y = Z = 1;; Se izvršava tako što izraz Z = 1 dobije vrednost Se izvršava tako što izraz Z = 1 dobije vrednost

1 koja je dodeljena promenljivoj Z, izračunata 1 koja je dodeljena promenljivoj Z, izračunata vrednost izraza 1 se dodeljuje promenljivoj y i vrednost izraza 1 se dodeljuje promenljivoj y i postaje vrednost izraza y = 1, i na kraju se postaje vrednost izraza y = 1, i na kraju se vrednost izraza dodeljuje promenljivoj xvrednost izraza dodeljuje promenljivoj x

Page 30: C prezentacija prof. urosevic

Operacije, iOperacije, izrazi i operatorizrazi i operatori Pojam operatora Pojam operatora Operatori su sastavni delovi programa koji Operatori su sastavni delovi programa koji

predstavljaju potpunu instrukciju računaru.predstavljaju potpunu instrukciju računaru. X = 2 je samo izraz, dok je X = 2X = 2 je samo izraz, dok je X = 2;; operator. operator. Operacije uvećavanja i umanjivanja. Operacije uvećavanja i umanjivanja. Izraz ++ x uvećava vrednost promenljive x Izraz ++ x uvećava vrednost promenljive x

za 1, a izraz - - x umanjuje vrednost za 1, a izraz - - x umanjuje vrednost promenljive x za 1.promenljive x za 1.

Prefiksni oblikPrefiksni oblik ++ x++ x, promenljiva se najpre , promenljiva se najpre uveuvećava pa tek onda koristi u izrazućava pa tek onda koristi u izrazu

Postfiksni oblikPostfiksni oblik x++ promenljiva se najpre x++ promenljiva se najpre koristi u izrazu pa tek onda uvećava. koristi u izrazu pa tek onda uvećava.

Page 31: C prezentacija prof. urosevic

Grananje u programuGrananje u programu Uslovni operator se pojavljuje u sledećim Uslovni operator se pojavljuje u sledećim

oblicima:oblicima: If (izraz) operator1If (izraz) operator1 If (izraz) operator1 else operator2If (izraz) operator1 else operator2 Ako su operator1 i operator2 prosti Ako su operator1 i operator2 prosti

operatorioperatori If (izraz) If (izraz)

Operator1Operator1 ElseElse

operator2operator2

Page 32: C prezentacija prof. urosevic

Ako su operator1 i operator2 složeni operatoriAko su operator1 i operator2 složeni operatori

If (izraz) If (izraz) {{

Operator11Operator11 Operator12Operator12 OOperator1kperator1k }} ElseElse {{

Operator21Operator21Operator22Operator22Operator2KOperator2K}}

Page 33: C prezentacija prof. urosevic

Operator viOperator višestrukog izbora SWITCHšestrukog izbora SWITCH Omogućava grananje u programu Omogućava grananje u programu

izborom jednog između više operatoraizborom jednog između više operatora switch (izraz) switch (izraz)

{{Case konstanta1:Case konstanta1:Operator1Operator1

BreakBreak;; Case konstanta2:Case konstanta2:Operator2Operator2

BreakBreak;; Case konstantan:Case konstantan:Operator nOperator n

BreakBreak;;Default :Default :Operator0Operator0

BreakBreak;; }}

Page 34: C prezentacija prof. urosevic

Operator viOperator višestrukog izbora SWITCHšestrukog izbora SWITCH Iza službene reči switch navodi se izraz Iza službene reči switch navodi se izraz

(selektor) čija je vrednost celobrojna, ili (selektor) čija je vrednost celobrojna, ili znakovna koja se automatski konvertuje u znakovna koja se automatski konvertuje u celobrojnu. celobrojnu.

Operatorom višestrukog grananja izvršava Operatorom višestrukog grananja izvršava se ona grupa operatora ispred koje se se ona grupa operatora ispred koje se nalazi konstanta koja je jednaka vrednosti nalazi konstanta koja je jednaka vrednosti selektora. Ako nije jednaka nijednoj od selektora. Ako nije jednaka nijednoj od konstanti izvršava se grupa operatora koja konstanti izvršava se grupa operatora koja se nalazi iza default alternative. se nalazi iza default alternative.

Operator switch na osnovu brojnih ocena Operator switch na osnovu brojnih ocena 5,4,3,2,1 ispisuje ocene odličan, vrlo dobar, 5,4,3,2,1 ispisuje ocene odličan, vrlo dobar, dobar, dovoljan, nedovoljan u example No 8dobar, dovoljan, nedovoljan u example No 8

Page 35: C prezentacija prof. urosevic

Example No 8Example No 8 switch (ocena) switch (ocena)

{{

Case 5: printf (“odličanCase 5: printf (“odličan\n\n”)čBreak”)čBreak;; Case 4: printf (“vrlo dobarCase 4: printf (“vrlo dobar\n\n”)čBreak”)čBreak;;

Case 3: printf (“dobarCase 3: printf (“dobar\n\n”)čBreak”)čBreak;; Case 2: printf (“dovoljanCase 2: printf (“dovoljan\n\n”)čBreak”)čBreak;;Case 1: printf (“nedovoljanCase 1: printf (“nedovoljan\n\n”)čBreak”)čBreak;;

Default: printf (“nekorektna ocenaDefault: printf (“nekorektna ocena\\n”)n”);; }}

Break operator se koristi u switch operatoru da Break operator se koristi u switch operatoru da bi se obezbedio izlaz neposredno iza njega. Ako bi se obezbedio izlaz neposredno iza njega. Ako se iza neke grupe operatora u switch- u ispusti se iza neke grupe operatora u switch- u ispusti break, tada break, tada će se u slučaju izbora te grupe će se u slučaju izbora te grupe izvršavati sve preostale alternative do pojave izvršavati sve preostale alternative do pojave break- abreak- a ili kraja switch.-a.ili kraja switch.-a.

Page 36: C prezentacija prof. urosevic

OrganiOrganizacija czacija ciklusiklusaa Niz operatora koji se može izvršavati više puta Niz operatora koji se može izvršavati više puta

naziva se naziva se ciklus.ciklus. Telo ciklusaTelo ciklusa - Niz operatora koji obrazuju ciklus - Niz operatora koji obrazuju ciklus Izlazni kriterijumIzlazni kriterijum – Uslov koji određuje da li će – Uslov koji određuje da li će

se telo ciklusa ponovo izvršavati.se telo ciklusa ponovo izvršavati. U zavisnosti od položaja izlaznog kriterijuma u U zavisnosti od položaja izlaznog kriterijuma u

odnosu na telo ciklusa, ciklusi mogu biti sa:odnosu na telo ciklusa, ciklusi mogu biti sa: PreduslovomPreduslovom ( (whilewhile), skraćeno varijanta sa ), skraćeno varijanta sa

((forfor)) PostuslovomPostuslovom ( (do whiledo while))

Page 37: C prezentacija prof. urosevic

Ciklus while Operator ciklusa sa preduslovom while Operator ciklusa sa preduslovom while

omogućava organizovanje ciklusa sa omogućava organizovanje ciklusa sa neponepozznatim brojem ponavljanja koji natim brojem ponavljanja koji zzavisi od avisi od izračunavanja u telu ciklusa.izračunavanja u telu ciklusa.

Opšti oblik operatora while je:Opšti oblik operatora while je: while while ((izrazizraz)) operatoroperator Ako je vrednost izraza tačno , izvršAko je vrednost izraza tačno , izvršiiće se će se

operator koji čini telo ciklusa. Operator se operator koji čini telo ciklusa. Operator se izvršava dok god izraz ima vrednost tačno. izvršava dok god izraz ima vrednost tačno. SSvaki takav korak naziva se iteracija.vaki takav korak naziva se iteracija.

Page 38: C prezentacija prof. urosevic

Example No 9Example No 9 /* Stepen celog broja*//* Stepen celog broja*/ main()main() {{ int a,n, i = 1,stepen = 1;int a,n, i = 1,stepen = 1; print(“ print(“ Ucitaj a i n:\n”Ucitaj a i n:\n”);); scan(“%d%d”,&a&n);scan(“%d%d”,&a&n); while (i++<=n)while (i++<=n) stepen* = a;stepen* = a; scan(“%d%d”,&a&n);scan(“%d%d”,&a&n); print(“stepen=print(“stepen=%d\n%d\n”,stepen);”,stepen); }}

Page 39: C prezentacija prof. urosevic

Operator ciklusa forOperator ciklusa for Operator ciklusa for se koristi kada je unapred Operator ciklusa for se koristi kada je unapred

poznato koliko puta treba izvršiti telo ciklusapoznato koliko puta treba izvršiti telo ciklusa.. For (inicijalizacijaFor (inicijalizacija;; provera_uslova provera_uslova;; korekcija) korekcija) operatoroperator I predstavlja skraćeni zapis ciklusa I predstavlja skraćeni zapis ciklusa whilewhile oblikaoblika InicijalizacijaInicijalizacija;; while (provera_uslova)while (provera_uslova) {{ operator operator korekcijakorekcija }} Ako provera_ uslova daje tačno telo ciklusa se Ako provera_ uslova daje tačno telo ciklusa se

izvrša jedanput. izvrša jedanput. Iz ciklusa se izlazi kada vrednost izraza za proveru_ Iz ciklusa se izlazi kada vrednost izraza za proveru_

uslova postane netačno.uslova postane netačno.

Page 40: C prezentacija prof. urosevic

Example No 10Example No 10 /* Faktorijel*//* Faktorijel*/ main()main() {{ long i,n,fakt;long i,n,fakt; scan(“%ld”,&n);scan(“%ld”,&n); for (fakt=1,i= 1; i<=n;fakt*=i, i++); for (fakt=1,i= 1; i<=n;fakt*=i, i++); print(“fakt=print(“fakt=%ld\n%ld\n”,fakt);”,fakt); }} Realizacija programaRealizacija programa 11 1*21*2 1*2*31*2*3 1*2*3*…*n1*2*3*…*n

Page 41: C prezentacija prof. urosevic

Operator ciklusa do - whileOperator ciklusa do - while

• Operator ciklusa sa postusloviom do - while Operator ciklusa sa postusloviom do - while ima oblikima oblik

• do do • operator operator • while (izraz)while (izraz)• Operator koji čini telo ciklusa se izvrčava bar Operator koji čini telo ciklusa se izvrčava bar

jedanput, pošto se provera uslova vršI na kraju jedanput, pošto se provera uslova vršI na kraju ciklusa. Ako je vrednost izraza “tačno” operator ciklusa. Ako je vrednost izraza “tačno” operator tela ciklusa se ponavlja. I ovaj postupak traje, tela ciklusa se ponavlja. I ovaj postupak traje, dok izraz ne dobije vrednost “netačnoćć dok izraz ne dobije vrednost “netačnoćć

Page 42: C prezentacija prof. urosevic

Example No 11Example No 11 /* Stepeni dvojke*//* Stepeni dvojke*/ main()main() {{ int stepen,granica;int stepen,granica; scan(“%d”,&granica);scan(“%d”,&granica); stepen = 2;stepen = 2; dodo

}} print(“ %dprint(“ %d\n”,granica\n”,granica);); stepen* = 2;stepen* = 2;

}} while (stepen<=granica)while (stepen<=granica);;

}}

Page 43: C prezentacija prof. urosevic

FunkcijeFunkcije

FunkcijeFunkcije su osnovno sredstvo na kome su zasnovani su osnovno sredstvo na kome su zasnovani osnovni principi i realizacija struktuiranog programiranjaosnovni principi i realizacija struktuiranog programiranja.. Pomoću njih se:Pomoću njih se:

Povećava čitljivost programa.Povećava čitljivost programa. Uspešno uvodi tehnika programiranja “odozgo na dole”. Uspešno uvodi tehnika programiranja “odozgo na dole”. o Problem seProblem se,, u početnoj fazi algoritma rešenja u početnoj fazi algoritma rešenja,, razbija na razbija na

logičke celinelogičke celine koje se nazivaju moduli. koje se nazivaju moduli. Zatim se vrZatim se vrši ši detaljizacija svakog prethodno definisanog modula na detaljizacija svakog prethodno definisanog modula na elementarnije. elementarnije.

o Modul na najvišem hijerarhiskom nivou se transformiše u Modul na najvišem hijerarhiskom nivou se transformiše u Main funkciju a ostali moduli u pojedinačne funkcije ili Main funkciju a ostali moduli u pojedinačne funkcije ili grupe funkcija.grupe funkcija.

Omogućava strategija u projektovanju “podeli pa vladaj”, Omogućava strategija u projektovanju “podeli pa vladaj”, koja je pogodna kada tim programera stvara projekat. koja je pogodna kada tim programera stvara projekat.

Page 44: C prezentacija prof. urosevic

Definicija funkcijeDefinicija funkcije Funkcije se dele na dve osnovne kategorije:Funkcije se dele na dve osnovne kategorije: Funkcije koje vraćaju vrednost (rezultat) pozivajućoj Funkcije koje vraćaju vrednost (rezultat) pozivajućoj

funkciji (main ili neka druga)funkciji (main ili neka druga) Funkcije koje ne vraćaju vrednost pozivajućoj funkciji Funkcije koje ne vraćaju vrednost pozivajućoj funkciji

(main ili neka druga).(main ili neka druga). Kod funkcija koje ne vraćaju vrednost kao tip rezultata Kod funkcija koje ne vraćaju vrednost kao tip rezultata

navodi se void.navodi se void. Sintaksa Funkcije ima sledeći oblikSintaksa Funkcije ima sledeći oblik:: Tip_rezultata ime_funkcije(formalni parametri) Tip_rezultata ime_funkcije(formalni parametri)

Opis formalnih parametaraOpis formalnih parametara{{Definicije i deklaracijeDefinicije i deklaracijeOperator1Operator1........

OperatorNOperatorN }}

Page 45: C prezentacija prof. urosevic

Example No 12Example No 12 a a /* Funkcija izračunava sumu kvadrata celih brojeva od m do n*//* Funkcija izračunava sumu kvadrata celih brojeva od m do n*/ long suma_kvadrata(m,n)long suma_kvadrata(m,n);; Int m,n;Int m,n; }} int Iint I;; long s=0long s=0;; for(i=mfor(i=m;;i<=ni<=n;;i++)i++) s+=i*s+=i*i;i; return(s)return(s);; }}

Telo funkcije počinje deklarisanjem unutračnjih promenljivih koje su Telo funkcije počinje deklarisanjem unutračnjih promenljivih koje su nedostupne pozivajućoj funkciji. Promenljive koje su poznate samo nedostupne pozivajućoj funkciji. Promenljive koje su poznate samo funkciji koja ih sadrži nazivaju se lokalne promenljive.funkciji koja ih sadrži nazivaju se lokalne promenljive.

Operator Operator returnreturn predaje rezultat izrašunavanja (vrednost predaje rezultat izrašunavanja (vrednost funkcije )pozivajučoj funkciji.funkcije )pozivajučoj funkciji.

Page 46: C prezentacija prof. urosevic

Example No 12Example No 12 /* main funkcija ilustruje korišćenje funkcije /* main funkcija ilustruje korišćenje funkcije suma_kvadratasuma_kvadrata */ */ main()main() {{ int m,n,k,l;int m,n,k,l; long plong p;; long suma_kvadrata()long suma_kvadrata();; p= suma_kvadrata(2,4)p= suma_kvadrata(2,4);; print(“%ld %ldprint(“%ld %ld\n”,p,suma_kvadrata(-1,3\n”,p,suma_kvadrata(-1,3);); scan(“%d%d%d%d”,&m&n&k&l);scan(“%d%d%d%d”,&m&n&k&l); p= suma_kvadrata(m,n)+ suma_kvadrata(k,l)p= suma_kvadrata(m,n)+ suma_kvadrata(k,l);; print(“%ld %ldprint(“%ld %ld\n”,p,suma_kvadrata(m+k,n+l\n”,p,suma_kvadrata(m+k,n+l););

}} /* Funkcija izračunava sumu kvadrata celih brojeva od m do /* Funkcija izračunava sumu kvadrata celih brojeva od m do

n*/n*/ long suma_kvadratalong suma_kvadrata (int m,int n)(int m,int n);;{{ int int i;i; long s=0long s=0;; for(i=mfor(i=m;;i<=ni<=n;;i++)i++) s+=i*s+=i*i;i; return(s)return(s);;

}}

Page 47: C prezentacija prof. urosevic

Korišćenje funkcije Korišćenje funkcije suma_kvadrata()suma_kvadrata();u glavnoj funkciji ;u glavnoj funkciji main()main()

Definisana funkcija testira se pozivima iz glavne funkcije main()Definisana funkcija testira se pozivima iz glavne funkcije main() Operatori funkcije Operatori funkcije suma_kvadrata()suma_kvadrata() se izvršavaju kada se iz se izvršavaju kada se iz

glavne funkcije main() pozove funkcija.glavne funkcije main() pozove funkcija. Obraćanje funkciji se realizuje zapisom sa imenom funkcije iza Obraćanje funkciji se realizuje zapisom sa imenom funkcije iza

koga sledi spisak parametara. Parametri navedeni pri obraćanju koga sledi spisak parametara. Parametri navedeni pri obraćanju funkciji nazivaju se funkciji nazivaju se stvarni,stvarni, a (2,4) parametri navedeni u a (2,4) parametri navedeni u zaglavlju definicije funkcije nazivaju se zaglavlju definicije funkcije nazivaju se formalni (m,n). formalni (m,n).

Kada se u Main () funkciji pojavi operator Kada se u Main () funkciji pojavi operator p= p= suma_kvadrata(2,4)suma_kvadrata(2,4); ; realizuju se sledeće akcije:realizuju se sledeće akcije:

Rezerviše se memorijski prostor za promenljive definisane u Rezerviše se memorijski prostor za promenljive definisane u funkciji funkciji suma_kvadrata()suma_kvadrata();;

Formalnim parametrima se dodeljuju vrednosti stvarnih Formalnim parametrima se dodeljuju vrednosti stvarnih parametara m = 2 i n = 4parametara m = 2 i n = 4

Izvršavaju se operatori funkcije, tj. Izračunava se suma Izvršavaju se operatori funkcije, tj. Izračunava se suma kvadrata brojeva od 2 do 4. kvadrata brojeva od 2 do 4.

Rezultat izračunavanja u funkciji se postavlja na mesto Rezultat izračunavanja u funkciji se postavlja na mesto obraćanja toj funkciji,tj. Dodeljuje promenljivoj p, i prelazi se na obraćanja toj funkciji,tj. Dodeljuje promenljivoj p, i prelazi se na izvršavanje sledećih operatora funkcije main(). izvršavanje sledećih operatora funkcije main().

Page 48: C prezentacija prof. urosevic

Podela memorije iPodela memorije između promenljivih koje zmeđu promenljivih koje koriste funkcije koriste funkcije Main () i suma_kvadrata()Main () i suma_kvadrata()

Main()Main() mm nn kk ll pp P = suma_kvadrata (2,4)P = suma_kvadrata (2,4)

Suma_kvadrata()

m

n

s

i

Page 49: C prezentacija prof. urosevic

Pokazivačke promenljive, Pokazivačke promenljive, (Pointeri)(Pointeri) Pokazivačka promenljiva je promenljiva koja Pokazivačka promenljiva je promenljiva koja

“pokazuje “ na drugu promenljivu, odnosno sadrži “pokazuje “ na drugu promenljivu, odnosno sadrži adresu memorijske lokacije u kojoj se čuva ta adresu memorijske lokacije u kojoj se čuva ta promenljivapromenljiva

DeklariDeklariše se tako što se u specifikaciji zada tip še se tako što se u specifikaciji zada tip promenljive na koju ukazuje pokazivačka promenljive na koju ukazuje pokazivačka promenljiva. Ispred imena promenljive piše se promenljiva. Ispred imena promenljive piše se * *

int int * *pipi /*/*pokazivač na celobrojnu promenljivupokazivač na celobrojnu promenljivu */ */ char char * *pcpc /* /*pokazivač na znakovnu promenljivupokazivač na znakovnu promenljivu */ */ float float * *pf1,pf1, * *pf2pf2 /* /*pokazivač na float promenljivepokazivač na float promenljive */ */ j = j = **pipi dodeljuje promenljivoj j celobrojnu dodeljuje promenljivoj j celobrojnu

vrednost koja se nalazi na adresi sadržanoj u vrednost koja se nalazi na adresi sadržanoj u promenljivoj pi.promenljivoj pi.

Page 50: C prezentacija prof. urosevic

Pretpostavimo da postoji sledeća deklaracija i inicijalizacija promenljive prom:

int prom= 0 ;

Deklaracija int * ukaz_prom; nam omogućava da indirektno pristupimo vrednosti promenljive prom.

Za promenljive prom i ukaz_prom možemo pisati iskaz:

ukaz_prom = &prom; koji promenljivoj ukaz_prom dodeljuje adresu promenljive prom.

Ako je promenljiva x deklarisana kao int, tada se iskazom

x = *ukaz_prom; dodeljuje vrednost promenljive na koju pointer ukaz_prom ukazuje. Pošto je promenljiva ukaz_prom

u ranijem iskazu postavljena na vrednost &prom efekat prethodnog iskaza dodeljivanje promenljivoj x vrednost promenljive prom.

Operatori & i * su unarni istog prioriteta i inverzni su međusobno.

Page 51: C prezentacija prof. urosevic

Pretpostavimo da imamo deklaraciju

Int x,y,*uTada su iskazi

u = &xY= *u;Ekvivalentni iskazu

Y = *&xKoji je opet ekvivalentan iskazu

Y = x Operatori dodeljivanja pi = &i j = *piImaju isti efekat kao j = i

Page 52: C prezentacija prof. urosevic

PokazivaciPokazivaci Int x=1, y=2;Int x=1, y=2; Int *ipInt *ip

ip=&xip=&x xx yy ipip 100100 200200 10001000

y= *ipy= *ip xx yy ipip 100100 200200 10001000

x=ipx=ip xx xx yy ipip 100100 200200 10001000

*ip=3*ip=3 xx yy ipip 100100 200200 10001000

1 2 100

3 2 100

100 2 100

1 1 100

Page 53: C prezentacija prof. urosevic

Pointeri opet ali, malo drugaPointeri opet ali, malo drugaččijeije

Pokazivač se definiše kao i ostale promenljive. Razlika je Pokazivač se definiše kao i ostale promenljive. Razlika je što se nazivu promenljive dodaje unarni operator simbol što se nazivu promenljive dodaje unarni operator simbol ((*) ispred identifikatora određene promenljive. *) ispred identifikatora određene promenljive. Zvezdica (*) Zvezdica (*) je simbol za indirektno adresiranje pa se zato i sam je simbol za indirektno adresiranje pa se zato i sam operator (*) naziva i operator (*) naziva i operatorom indirektnog operatorom indirektnog adresiranjaadresiranja..

Kada se operator indirekcije (*) primeni na neki pokazivač, Kada se operator indirekcije (*) primeni na neki pokazivač, njime se pristupa objektu na koji pokazivač pokazuje. njime se pristupa objektu na koji pokazivač pokazuje.

int *p1;int *p1;            /* pokazivač na           /* pokazivač na integerinteger promenljivu promenljivu char *p2; char *p2;                      /* pokazivač na          /* pokazivač na char char promenljivupromenljivu long double *p4;long double *p4;         /* pokazivač na        /* pokazivač na long doublelong double

promenljivupromenljivu

Page 54: C prezentacija prof. urosevic

Pokazivač je dakle promenljiva koja sadrži Pokazivač je dakle promenljiva koja sadrži adresu objekta tj. neke promenljive na koji adresu objekta tj. neke promenljive na koji pokazujepokazuje. . Kada je sadržaj pokazivača Kada je sadržaj pokazivača adresa nekog objekta tada je pokazivač adresa nekog objekta tada je pokazivač inicijalizovaninicijalizovan. .

Adresa nekog objekta u memoriji koji je Adresa nekog objekta u memoriji koji je predstavljen svojim identifikatorom, može da se predstavljen svojim identifikatorom, može da se dobije pomođu prefiksnog unarnog operator dobije pomođu prefiksnog unarnog operator (&), odnosno adresa neke promenljive dobija se (&), odnosno adresa neke promenljive dobija se korišćenjem ovog korišćenjem ovog adresnog operatoraadresnog operatora. .

..

Page 55: C prezentacija prof. urosevic

Jedan pouJedan pouččan primeran primer

int broj;int broj;         /* promenljiva tipa /* promenljiva tipa int int int *pok;int *pok;        /* pokazivač na /* pokazivač na intint tip tip broj = 10;broj = 10;        /* inicijalizacija promenljive /* inicijalizacija promenljive brojbroj

na 10 na 10 pok = &broj;pok = &broj;       /* inicijalizacija pokazivač /* inicijalizacija pokazivač

tako da pokazuje na promenljivu tako da pokazuje na promenljivu brojbroj *pok = 100;*pok = 100;        /* promena sadržaja /* promena sadržaja

promenljive promenljive brojbroj na 100 preko pokazivača . na 100 preko pokazivača . umesto promena sadržaja promenljive umesto promena sadržaja promenljive brojbroj

broj = 100;broj = 100;

Page 56: C prezentacija prof. urosevic

DEKLARACIJA POKAZIVAČADEKLARACIJA POKAZIVAČA

Pokazivač omogućava indirektan način Pokazivač omogućava indirektan način pristupa vrednosti određenog podatka, i pristupa vrednosti određenog podatka, i to pomoću adresa podatka u memoriji to pomoću adresa podatka u memoriji računara. Kako to funkcioniše na računara. Kako to funkcioniše na najjednostavnem primeru:najjednostavnem primeru:

intint brojbroj = = 10,10, * *pokpok;;

Page 57: C prezentacija prof. urosevic

Da bi se uspostavila veza između promenljivih Da bi se uspostavila veza između promenljivih broj broj ii pok pok, koristi se operator (&), koristi se operator (&) koji daje koji daje adresu odgovarajuće promenljive.adresu odgovarajuće promenljive.

pok = pok = &&brojbroj

Ovim je pridružena memorijska adresa Ovim je pridružena memorijska adresa promenljive promenljive brojbroj pokazivaču pokazivaču pokpok, tj. sadržaj , tj. sadržaj promenljive promenljive pokpok je adresa promenljive je adresa promenljive brojbroj

Page 58: C prezentacija prof. urosevic

Vrednost promenljive Vrednost promenljive broj broj pridružuje se nekoj pridružuje se nekoj drugoj promenljivoj npr drugoj promenljivoj npr xx upotrebom upotrebom promenljive promenljive pokpok, koristeći operator (*)., koristeći operator (*).

x = *pokx = *pok;;

ima isto značenje kao i:ima isto značenje kao i: x = brojx = broj;; tj. u jednom i drugom slučaju vrednost tj. u jednom i drugom slučaju vrednost

promenljive x je 10.promenljive x je 10.

Page 59: C prezentacija prof. urosevic

Veza između funkcija korišćenjem Veza između funkcija korišćenjem pokazivačapokazivača

Funkcija Funkcija kvadratkvadrat_k_kub ub ()() koja je definisana iza glavne funkcije main() koja je definisana iza glavne funkcije main() u primeru No14 u primeru No14 ima četiri parametra m, n, kv i kub. Prva dva ima četiri parametra m, n, kv i kub. Prva dva parametra su ulazni podaci koje ne želimo menjati u toku izvršetka parametra su ulazni podaci koje ne želimo menjati u toku izvršetka funkcije i nazivaju se funkcije i nazivaju se vrednosni parametrivrednosni parametri. Pre izvršavanja funkcije . Pre izvršavanja funkcije tim parametrima se dodeljuju vrednosti stvarnih parametara. tim parametrima se dodeljuju vrednosti stvarnih parametara.

Pri pozivu funkcije Pri pozivu funkcije kvadratkvadrat_k_kubub((2,4 2,4 ”,&p&q”,&p&q)); ; predaju se adrese promenljivih p i q što znači da će formalni predaju se adrese promenljivih p i q što znači da će formalni

parametri kv i kub koji su definisani u zaglavlju funkcije parametri kv i kub koji su definisani u zaglavlju funkcije kvadratkvadrat_k_kub ub ((m, n, kv, kubm, n, kv, kub)) biti opisani kao pokazivači. biti opisani kao pokazivači.

Pošto su p i q celobrojne promenljive promenljive Pošto su p i q celobrojne promenljive promenljive kv , kub kv , kub treba da treba da budubudu opisane kao pokazivači opisane kao pokazivači na celobrojne promenljive na celobrojne promenljive, pa se , pa se deklarišu na sledeći načindeklarišu na sledeći način

int m, int n, int *kv, int *kubint m, int n, int *kv, int *kub Ovi Ovi parametri se nazivaju parametri se nazivaju adresni parametriadresni parametri, i koriste se za , i koriste se za

određivanje izlaznih vrednosti funkcije ili promenu vrednosti određivanje izlaznih vrednosti funkcije ili promenu vrednosti odgovarajućih stvarnih parametara.odgovarajućih stvarnih parametara.

Na mestu programa na kome se funkcija izvršava prvi put Na mestu programa na kome se funkcija izvršava prvi put promenljivim p i q se dodeljuju vrednosti stvarnih parametara 2 i 4. promenljivim p i q se dodeljuju vrednosti stvarnih parametara 2 i 4. Pokazivačke promenljive Pokazivačke promenljive *kv, i *kub*kv, i *kub

dobijaju adrese stvarnih parametara dobijaju adrese stvarnih parametara &p i &q &p i &q tako da se sve operacije tako da se sve operacije koje se u funkciji realizuju nad koje se u funkciji realizuju nad *kv, i *kub *kv, i *kub su operacije koje se su operacije koje se realizuju nad stvarnim parametrima p i qrealizuju nad stvarnim parametrima p i q

Page 60: C prezentacija prof. urosevic

Example No 14Example No 14 main()main() {{ int m,n,k,l,p,q,r;int m,n,k,l,p,q,r; Void kvadratVoid kvadrat_k_kubub()();;

kvadratkvadrat_k_kubub((2,4 2,4 ”,&p&q”,&p&q));; print(“p = %d q =%dprint(“p = %d q =%d\n”,p,\n”,p,qq);); scan(“%d%d%d%d”,&m&n&k&l);scan(“%d%d%d%d”,&m&n&k&l); kvadratkvadrat_k_kubub((m,n m,n ,&p,&q,&p,&q));; print(“p = %d q =%dprint(“p = %d q =%d\n”,p,\n”,p,qq);); kvadratkvadrat_k_kubub((m-k,n+l m-k,n+l ,&p,&r,&p,&r));; print(“p = %d q =%dprint(“p = %d q =%d\n”,p,\n”,p,rr););

}}void kvadratvoid kvadrat_k_kubub((int m, int n, int *kv, int *kubint m, int n, int *kv, int *kub));;

{{int Iint I;;

*kv = *kub =0*kv = *kub =0 for(i=mfor(i=m;;i<=ni<=n;;i++)i++) {{ *kv+ = *kv+ = i*i*i;i; *kub+ = *kub+ = i*i*ii**i;i; }} }}

Page 61: C prezentacija prof. urosevic

Podela memorije iPodela memorije između promenljivih koje zmeđu promenljivih koje koriste funkcije koriste funkcije Main () i kvadrat_kub()Main () i kvadrat_kub()

Main()Main() mm nn kk ll

pp

qq

rr

kvadrat_kub(int m, int n, int *kv, int *kub);

*kv kv i

m

n

*kub kub

Page 62: C prezentacija prof. urosevic

Memorijske klaseMemorijske klase Pored pripadnosti odredjenom tipu Pored pripadnosti odredjenom tipu

promenjlive imaju i svoju memorijsku promenjlive imaju i svoju memorijsku klasu.klasu.

Memorijska klasa daje moguMemorijska klasa daje moguććnost da se nost da se odredi sa kojim funkcijama je povezana odredi sa kojim funkcijama je povezana promenljiva ili koje funkcije imaju pristup promenljiva ili koje funkcije imaju pristup promenljivoj. promenljivoj.

Pri opisu memorijske klase koriste se Pri opisu memorijske klase koriste se sledeće rezervisane rečsledeće rezervisane rečii::

autoauto staticstatic register register externextern

Page 63: C prezentacija prof. urosevic

Automatske promenljiveAutomatske promenljive Automatske promenljive se deklarišu Automatske promenljive se deklarišu

rezervisanom reči rezervisanom reči auto auto ispred specifikacije tipa ispred specifikacije tipa kao u sledekao u sledećem primeru:ćem primeru:

{{ auto int a; auto int a; auto int b=777;auto int b=777; auto double d;auto double d; …… }} Oblast u kojoj deluje automatska promenljiva Oblast u kojoj deluje automatska promenljiva

ograničena je blokom (u granicama definisanim ograničena je blokom (u granicama definisanim zagradama { } u kome je deklarisanazagradama { } u kome je deklarisana)). Dok god . Dok god se blok koji je sadrži izvršava ona “živi” , kada se blok koji je sadrži izvršava ona “živi” , kada program napusti taj blok promenljiva iščezava. program napusti taj blok promenljiva iščezava. Ona je dostupna Ona je dostupna ii u svakom podbloku bloka u u svakom podbloku bloka u kome je deklarisana. Primer No 15 ilustruje kome je deklarisana. Primer No 15 ilustruje oblast delovanja automatskih promenljivih. oblast delovanja automatskih promenljivih.

Page 64: C prezentacija prof. urosevic

Example No 15Example No 15 main()main() {{ /*spoljasnji blok*//*spoljasnji blok*/ auto int x=1;auto int x=1; {{ /*podblok #1 *//*podblok #1 */ auto int y=2;auto int y=2; printf(“%d%d\n”,x,y);printf(“%d%d\n”,x,y); }} {{ /*podblok #2*//*podblok #2*/ printf(“%d%d\n”,x,y);/*linija 12 */printf(“%d%d\n”,x,y);/*linija 12 */ }} printf(“%d%d\n”,x,y);/*linija 14*/printf(“%d%d\n”,x,y);/*linija 14*/ }}

Page 65: C prezentacija prof. urosevic

StatiStatičke promenljivečke promenljive Kao i automatske, statičke promenljive su lokalne u Kao i automatske, statičke promenljive su lokalne u

funkciji odnosno bloku u kome su deklarisane. funkciji odnosno bloku u kome su deklarisane. Razlika je u tome što statičke promenljive ne Razlika je u tome što statičke promenljive ne iščezavaju kada funkcija koja ih sadrži prekine iščezavaju kada funkcija koja ih sadrži prekine izvršavanje. Ako program ponovo pređe na izvršavanje. Ako program ponovo pređe na izvršavanje funkcije koja sadrži statičku izvršavanje funkcije koja sadrži statičku promenljivu ona će imati vrednost sa kojom je promenljivu ona će imati vrednost sa kojom je prekinuta funkcija u prethodnom izvršavanju. prekinuta funkcija u prethodnom izvršavanju. Primer deklaracije i inicijalizacije:Primer deklaracije i inicijalizacije:

{{ Static int a = 1Static int a = 1;; Float c = 0,0Float c = 0,0;; ...... }} U sledeU sledećem pćem primerrimeru Example No 16 funkcija uvećaj u Example No 16 funkcija uvećaj

( ) se poziva tri puta. Inicijalna vrednost promenljive ( ) se poziva tri puta. Inicijalna vrednost promenljive x je 0. U sledećim pozivima funkcije koristi se x je 0. U sledećim pozivima funkcije koristi se vrednost sačuvana iz prethodnog izvršavanja.vrednost sačuvana iz prethodnog izvršavanja.

Page 66: C prezentacija prof. urosevic

Example No 16Example No 16 main()main() {{ Void uvecajVoid uvecaj()();; uvecajuvecaj()();; uvecajuvecaj()();; uvecajuvecaj()();; }} void uvecaj()void uvecaj() {{ static int x=0;static int x=0; x++;x++; printf(“%d\n”,x);printf(“%d\n”,x); }} Ispisuje se Ispisuje se 11 22 33

Page 67: C prezentacija prof. urosevic

Spoljašnje promenljiveSpoljašnje promenljive Promenljiva deklarisana van funkcije naziva Promenljiva deklarisana van funkcije naziva

se spoljašnja promenljiva. Ona se može se spoljašnja promenljiva. Ona se može deklarisati deklarisati ii u funkciji koja je koristi u funkciji koja je koristi navođenjem rezervisane reči navođenjem rezervisane reči extern. extern. Na Na primer:primer:

int x; /*deklaracija spoljasnje promenljive x */int x; /*deklaracija spoljasnje promenljive x */ char c;char c; double x;double x; main()main() {{ extern int a;extern int a; extern char c ;extern char c ; extern double x ;extern double x ; …….... }} Navođenjem rezervisane reči extern spoljašnja Navođenjem rezervisane reči extern spoljašnja

promenljiva postaje dostupna funkciji promenljiva postaje dostupna funkciji definisanoj bilo gde u tom definisanoj bilo gde u tom ii u bilo kom file-u u bilo kom file-u

Page 68: C prezentacija prof. urosevic

Primeri deklarisanja spoljašnjih promenljivihPrimeri deklarisanja spoljašnjih promenljivih

int x = 707; /* globalna deklaracija promenljive x */int x = 707; /* globalna deklaracija promenljive x */ main()main() {{ printf(“%d/n”, x);printf(“%d/n”, x); }} Pošto je promenljiva x definisana van funkcije main() ona Pošto je promenljiva x definisana van funkcije main() ona

je globalna I funkcija joj može pristupitije globalna I funkcija joj može pristupiti.. Izvrčavanjem Izvrčavanjem programa programa dobija se 707dobija se 707

A izvršenjem programa A izvršenjem programa int x = 707; /* globalna deklaracija promenljive x */int x = 707; /* globalna deklaracija promenljive x */ main()main() {{ int x = 101; /* lokalna deklaracija promenljive x */int x = 101; /* lokalna deklaracija promenljive x */ printf(“%d/n”, x);printf(“%d/n”, x); }} dobija se 101dobija se 101 U toku izvršavanja funkcije važeća je vrednost lokalne U toku izvršavanja funkcije važeća je vrednost lokalne

promenljive promenljive

Page 69: C prezentacija prof. urosevic

Example No17Example No17 int x; /*deklaracija spoljasnje promenljive x */int x; /*deklaracija spoljasnje promenljive x */ main()main() {{ printf(“Pocetna vrednost od x je%d\n”,x);printf(“Pocetna vrednost od x je%d\n”,x); dodaj ()dodaj () oduzmi()oduzmi() dodaj ()dodaj () oduzmi()oduzmi() printf(“krajnja vrednost od x je %d\n”,x);printf(“krajnja vrednost od x je %d\n”,x); }} /*uvecava spoljasnju promenjivu x*//*uvecava spoljasnju promenjivu x*/ dodaj()dodaj() {{ x++;x++; printf(“dodavanjem 1 dobija se %d\n,x);printf(“dodavanjem 1 dobija se %d\n,x); }} /*umanjuje spoljasnju promenjivu x*//*umanjuje spoljasnju promenjivu x*/ oduzmi()oduzmi() {{ x--;x--; printf(“oduzimanjem 1 dobija se %d\n”,x);printf(“oduzimanjem 1 dobija se %d\n”,x); }}

Page 70: C prezentacija prof. urosevic

Kreiranje projektaKreiranje projekta U okruU okruženju C jezika programi koji se formiraju iz više file-ova ženju C jezika programi koji se formiraju iz više file-ova

nazivaju se projekti. Svaki projekat je povezan sa projektnim file-nazivaju se projekti. Svaki projekat je povezan sa projektnim file-om koji treba kreirati i u kome se nalazi opis projekta, ili spisak om koji treba kreirati i u kome se nalazi opis projekta, ili spisak file-ova koji obrazuju projekat. Projektni file-ovi moraju imati file-ova koji obrazuju projekat. Projektni file-ovi moraju imati ekstenziju PRJ. Na primer ako treba napraviti program iz file-ova ekstenziju PRJ. Na primer ako treba napraviti program iz file-ova

PRVI. C PRVI. C main()main() {{ printf(“printf(“Ovo je iz file-a1.Ovo je iz file-a1.\n”);\n”); Pisi() Pisi() /*/*U U File File-u DRUGI-u DRUGI.C */.C */ }} i DRUGI. Ci DRUGI. C pisipisi()() {{ printf(“printf(“Ovo je iz file-aOvo je iz file-a22..\n”);\n”); }} Treba kreirati projektni file npr.Treba kreirati projektni file npr.PRVIPROJ. PRJ:PRVIPROJ. PRJ: PRVIPRVI DRUGIDRUGI U podmeniju Project u opciji Project Name navede se ime U podmeniju Project u opciji Project Name navede se ime

projekta PRVIPROJ.projekta PRVIPROJ. Opcijom RUN Opcijom RUN zzadaje se kompilacija i adaje se kompilacija i iizzvrvrššavanje projektaavanje projekta. U podmeniju Compile opcija Make . U podmeniju Compile opcija Make kreira se EXE verzija projekta.kreira se EXE verzija projekta.

Page 71: C prezentacija prof. urosevic

NiNizovizovi Niz je ograničen uređen skup promenljivih istog Niz je ograničen uređen skup promenljivih istog

tipa, koje se nazivaju komponente. Tip tipa, koje se nazivaju komponente. Tip komponenti se naziva bazni tip. Vrednostima komponenti se naziva bazni tip. Vrednostima pojedinih komponenti može se pristupiti pojedinih komponenti može se pristupiti pomoću indeksa, koji ukazuje koju komponentu pomoću indeksa, koji ukazuje koju komponentu treba obrađivati.Pri definisanju nizova treba treba obrađivati.Pri definisanju nizova treba voditi računa o dve stvari:voditi računa o dve stvari:

Treba ukazati na broj komponenti i način Treba ukazati na broj komponenti i način referisanja na komponente. referisanja na komponente.

Treba ukazati na tip vrednosti koje se u njemu Treba ukazati na tip vrednosti koje se u njemu čuvaju.čuvaju.

Opis nizaOpis niza Niz se opisuje kao i ostali podaci, samo što se Niz se opisuje kao i ostali podaci, samo što se

dodaju kvadratne zagrade iza imena niza. Unutar dodaju kvadratne zagrade iza imena niza. Unutar zagrada se navodi broj koji pokazuje broj zagrada se navodi broj koji pokazuje broj elemenata u nizu.elemenata u nizu.

Int broj Int broj [[10001000]] ; ; Ovom deklaracijom se uvodi niz Ovom deklaracijom se uvodi niz brojbroj kojikoji se se

sastoji izsastoji iz 1000 celobrojnih promenljivih sa 1000 celobrojnih promenljivih sa imenima broj imenima broj [[00]], broj , broj [[11]] ... broj ... broj [[999999]]. . Indeksiranje elemenata niza je od 0. Svaka Indeksiranje elemenata niza je od 0. Svaka promenljiva pošto je celobrojna zauzima dva promenljiva pošto je celobrojna zauzima dva bajta.bajta.

Page 72: C prezentacija prof. urosevic

Example No 18Example No 18

Izracunati srednju vrednost niza od n elemenata(n<50)Izracunati srednju vrednost niza od n elemenata(n<50) main()main() {{ int n,i;int n,i; float x[50]float x[50];; printf(“Uneti broj elemenata nizaprintf(“Uneti broj elemenata niza””);); scanf(“%d”,&n);scanf(“%d”,&n);

for(suma=0,I=0;i<nfor(suma=0,I=0;i<n;;i++)i++) {{ printf(“%3d.broj x=printf(“%3d.broj x=”,I”,I););

scanf(“%f”,&x[I]);scanf(“%f”,&x[I]); suma+= suma+= x[I];x[I]; return(s)return(s);;

}} printf(“\Srednja vrednost je %f\nprintf(“\Srednja vrednost je %f\n”,suma/n”,suma/n);); }}

Page 73: C prezentacija prof. urosevic

Example No 19Example No 19 Izracunati maksimalnu vrednost u nizu od n Izracunati maksimalnu vrednost u nizu od n

elemenata(n<50)elemenata(n<50) main()main() {{ int n,i;int n,i; float x[50],xmaxfloat x[50],xmax;; printf(“Uneti broj elemenata nizaprintf(“Uneti broj elemenata niza””);); scanf(“%d”,&n);scanf(“%d”,&n);

for(I=0;i<nfor(I=0;i<n;;i++)i++) {{ printf(“%3d.broj x=printf(“%3d.broj x=”,I”,I););

scanf(“%f”,&x[I])scanf(“%f”,&x[I]) }}

/*Izracunava maksimalnu vrednost niza*//*Izracunava maksimalnu vrednost niza*/ xmax=x[0];xmax=x[0]; for (I=1;I<n;I++)for (I=1;I<n;I++) if (x[I]>xmax)if (x[I]>xmax) xmax=x[I];xmax=x[I]; printf(“\nMaksimalna vrednost je %f\n”,xmax);printf(“\nMaksimalna vrednost je %f\n”,xmax); }}

Page 74: C prezentacija prof. urosevic

Example No 20Example No 20 Izracunati indeks najveceg elemenata niza x od n elemenata Izracunati indeks najveceg elemenata niza x od n elemenata

(n<50)(n<50) main()main() {{ int n,I,imax;int n,I,imax; float x[50]float x[50],xmax;,xmax; printf(“Uneti broj elemenata nizaprintf(“Uneti broj elemenata niza””);); scanf(“%d”,&n);scanf(“%d”,&n);

for(I=0;i<nfor(I=0;i<n;;i++)i++) {{ printf(“%3d.broj x=printf(“%3d.broj x=”,I”,I););

scanf(“%f”,&x[I]);scanf(“%f”,&x[I]); {{

/*Izracunava indeks maksimalne vrednosti u nizu*//*Izracunava indeks maksimalne vrednosti u nizu*/ xmax=x[0];/*pretpostavljajuci da je x[0] najveca vrednost*/xmax=x[0];/*pretpostavljajuci da je x[0] najveca vrednost*/ imax=0;/*sacuvamo njen indeks*/imax=0;/*sacuvamo njen indeks*/ for(I=1;I<n;I++)for(I=1;I<n;I++) if(x[I]>xmax)/*kada se naidje na element veci od xmax*/if(x[I]>xmax)/*kada se naidje na element veci od xmax*/ {/*zamenjuje se vrednost xmax I imax*/{/*zamenjuje se vrednost xmax I imax*/ xmax=x[I];/*sa x[I] I indeksom I*/xmax=x[I];/*sa x[I] I indeksom I*/ imax=I;imax=I; }} printf(“\nIndeks maksimalne vrednosti je %d\n”,imax);printf(“\nIndeks maksimalne vrednosti je %d\n”,imax); }}

Page 75: C prezentacija prof. urosevic

Example No20aExample No20a DRUGO RESENJE ISKLJUCUJE UPOTREBU PROMENLJIVE XMAX:DRUGO RESENJE ISKLJUCUJE UPOTREBU PROMENLJIVE XMAX: imax=0;imax=0; for(I=1;I<n;I++)for(I=1;I<n;I++) if(x[I]>x[imax])if(x[I]>x[imax]) imax=I;imax=I;

Page 76: C prezentacija prof. urosevic

Inicijalizacija NizovovaInicijalizacija Nizovova Nizovima je u C jeziku moguce dodeljivati Nizovima je u C jeziku moguce dodeljivati

pocetne vrednosti. Ako se inicijalizacija ne zadaje pocetne vrednosti. Ako se inicijalizacija ne zadaje eksplicitno niz se inicijalizuje nulom, Medjutim eksplicitno niz se inicijalizuje nulom, Medjutim ako je potrebno da se niz inicijalizuje ako je potrebno da se niz inicijalizuje vrednostima razlicitim od nule potrebno je da se vrednostima razlicitim od nule potrebno je da se pri deklaraciji niza izmedju viticastih zagrada pri deklaraciji niza izmedju viticastih zagrada navedu zeljene vrednosti razdvijene zarezom.navedu zeljene vrednosti razdvijene zarezom.

Int dani [12]= Int dani [12]= {31,28,31,30,31,30,31,31,30,31,30,31}{31,28,31,30,31,30,31,31,30,31,30,31}

main()main() {{ int I;int I; extern int dani[ ]; /*neobavezna deklaracija*/extern int dani[ ]; /*neobavezna deklaracija*/ for (I=0;I<12;I++)for (I=0;I<12;I++) print(“Mesec%d ima%dana.\n”,I+1,dani[I]);print(“Mesec%d ima%dana.\n”,I+1,dani[I]); }} Izvrsavanjem programa se ispisuje:Izvrsavanjem programa se ispisuje: Mesec 1 ima 31 danaMesec 1 ima 31 dana

Page 77: C prezentacija prof. urosevic

Nizovi i pokazivačiNizovi i pokazivači Ime niza ekvivalntno je adresi njegovog nultog Ime niza ekvivalntno je adresi njegovog nultog

elementa elementa x =&x[0], x =&x[0], jer se u oba dela jednakosti jer se u oba dela jednakosti definišu adrese nultog elementa niza. definišu adrese nultog elementa niza.

Na primer ako je data deklaracijaNa primer ako je data deklaracija int x[4],*pti;int x[4],*pti; Dodela Dodela pti=xpti=x i ako je niz smešten počev od i ako je niz smešten počev od

adrese 56006 adrese 56006 (&x[0]), (&x[0]), da bi se odredile lokacije i elementi da bi se odredile lokacije i elementi

niza na koje pokazuju pti, pti+1 pti+2pti+3. niza na koje pokazuju pti, pti+1 pti+2pti+3. DodDodavanje avanje jedinice pokazivaču automatski jedinice pokazivaču automatski povećava adresu na koju on pokazuje za 2 jer povećava adresu na koju on pokazuje za 2 jer se radi pokazivaču na se radi pokazivaču na intint tip. tip.

Page 78: C prezentacija prof. urosevic

Nizovi i pokazivačiNizovi i pokazivači Oba dela jednakosti Oba dela jednakosti X= &x[0]X= &x[0] definišu definišu

adresu nultog elementa niza.  Obe oznake su adresu nultog elementa niza.  Obe oznake su konstante pokazivačkog tipa i ne mogu se konstante pokazivačkog tipa i ne mogu se menjati. Prema tome njih možemo dodeljivati menjati. Prema tome njih možemo dodeljivati pokazivačkim promenljivim.pokazivačkim promenljivim.

X+2 ==&x[2]X+2 ==&x[2] /*jer su im iste adrese*//*jer su im iste adrese*/    *(x+2) == x[2]*(x+2) == x[2] /*jer su im iste /*jer su im iste

vrednosti*/vrednosti*/ OOdavde se vidi da se pokazivači mogu davde se vidi da se pokazivači mogu

koristiti za adresiranje elemenata niza , kao i koristiti za adresiranje elemenata niza , kao i za dobijanje njihove vrednosti.za dobijanje njihove vrednosti.

  

Page 79: C prezentacija prof. urosevic

Nizovi i pokazivačiNizovi i pokazivači

Kada se navede Kada se navede X+2 to kompajler X+2 to kompajler tretira kao adresu koja se dobija tretira kao adresu koja se dobija dodavanjem na adresu X ne 2, već 2 dodavanjem na adresu X ne 2, već 2 puta broj baytova koje zauzimaju puta broj baytova koje zauzimaju komponente niza X.komponente niza X.

U suštini se radi o različitim oznakama U suštini se radi o različitim oznakama za jedno te isto, jer kompajler pretvara za jedno te isto, jer kompajler pretvara oznake niza u pokazivače , pa je brzine oznake niza u pokazivače , pa je brzine radi, preporučljivo koristiti pokazivače.radi, preporučljivo koristiti pokazivače.

Page 80: C prezentacija prof. urosevic

Ilustracija pokazivača i adresa na Ilustracija pokazivača i adresa na koje ukazujukoje ukazuju

ptipti pti+1pti+1 pti+1 pti+1 pti+1 pti+1

AdresaAdresa: 56006 56007 56008 56009 56010 56011 56012 56013: 56006 56007 56008 56009 56010 56011 56012 56013

Pokazivaci Pokazivaci ptipti, , pti+pti+1, 1, pti+pti+2 i 2 i pti+pti+3 3 redom pokazuju na adrese:redom pokazuju na adrese: 56006, 56006, 56008,56008, 56010 i56010 i 5601256012 i elemente niza:i elemente niza: x[0],x[0], x[ x[11], ], x[x[22]] i i x[x[33], ],

XX[[00]]

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

Page 81: C prezentacija prof. urosevic

Funkcije, nizovi, pokazivači, parametri, Funkcije, nizovi, pokazivači, parametri, prenošenje argumenata ...prenošenje argumenata ...

   Prenošenja nizova kao argumenata može Prenošenja nizova kao argumenata može

se analizirati na problemu određivanja broja se analizirati na problemu određivanja broja studenata koji su imali natprosečne rezultate studenata koji su imali natprosečne rezultate na proveri znanja iz osnova programskog na proveri znanja iz osnova programskog jezika C.jezika C.

Algoritam ovog problema se može razložiti na Algoritam ovog problema se može razložiti na sledeće modulesledeće module

Učitavanje vrednosti elemenata nizaUčitavanje vrednosti elemenata niza Izračunavanje prosečnog rezultataIzračunavanje prosečnog rezultata Prebrojavanje natprosečnih rezultataPrebrojavanje natprosečnih rezultata Ispis izlaznog izveštajaIspis izlaznog izveštaja

Page 82: C prezentacija prof. urosevic

Example No ….Example No …. Main()Main() Int n,i,broj,Int n,i,broj,ocena[50];ocena[50]; /*niz od 50 elemenata*/ /*niz od 50 elemenata*/ Float prosek();Float prosek(); Print('\nUnesi broj takmicara:');Print('\nUnesi broj takmicara:'); Scan(%d',&n);Scan(%d',&n); /*ucitavanje elemenata niza*//*ucitavanje elemenata niza*/ print('\nUnesi rezultate:\n');print('\nUnesi rezultate:\n'); for (i:=0;i<n;i++)for (i:=0;i<n;i++) {{ print('ocena[%d]+',i);print('ocena[%d]+',i); scan('%scan('%d”,&ocena[i])d”,&ocena[i]) }} To be continue…To be continue…

Page 83: C prezentacija prof. urosevic

Contnue….Contnue…. /*prebrojavanje natprosecnih rezultata*//*prebrojavanje natprosecnih rezultata*/ broj=0broj=0 for(i=0;i<n;i++)for(i=0;i<n;i++) if(ocena[i]>prosek(ocena,n))if(ocena[i]>prosek(ocena,n)) broj++;broj++; printf(''prosecan rezultat je:%f.\printf(''prosecan rezultat je:%f.\

n'',prosek(ocena,n));n'',prosek(ocena,n)); printf (''natprosecne rezultate je imalo:%d printf (''natprosecne rezultate je imalo:%d

takmicara.\n'',broj);takmicara.\n'',broj); }} Float prosek(int x [],int n)Float prosek(int x [],int n) {{ int i,suma;int i,suma; suma=0;suma=0; for(i=0;i<n;suma+=x[i],i++);for(i=0;i<n;suma+=x[i],i++); return((float)suma/n);return((float)suma/n);

Page 84: C prezentacija prof. urosevic

Funkcije, nizovi, pokazivači, parametri, Funkcije, nizovi, pokazivači, parametri, prenošenje argumenata ...prenošenje argumenata ...

Pri definiciji funkcije prosek() koja se poziva iz Pri definiciji funkcije prosek() koja se poziva iz main () deklaracija Int x[]main () deklaracija Int x[]

kreira, ne niz, već pokazivač na nizkreira, ne niz, već pokazivač na niz   Float prosek(int x [],int n)Float prosek(int x [],int n) {{ int i,suma;int i,suma; suma=0;suma=0; for(i=0;i<n;suma+=x[i],i++);for(i=0;i<n;suma+=x[i],i++); return((float)suma/n);return((float)suma/n); }}

Page 85: C prezentacija prof. urosevic

Funkcije, nizovi, pokazivači, parametri, Funkcije, nizovi, pokazivači, parametri, prenošenje argumenata ...prenošenje argumenata ...

Poziv funkcije Poziv funkcije Prosek (ocena,n) Prosek (ocena,n) sadrži ime ocena koje sadrži ime ocena koje

predstavlja adresu nultog elementa od najviše 50 predstavlja adresu nultog elementa od najviše 50 elemenata.elemenata.

Time se pri pozivu funkcije predaje Time se pri pozivu funkcije predaje pokazivačka konstanta (adresa nultog pokazivačka konstanta (adresa nultog elementa niza)elementa niza)

Ocena = &ocena[0]Ocena = &ocena[0]    To znači da je formalni parametar funkcije To znači da je formalni parametar funkcije

pokazivačkog tipa pa se u funkciji prosek() pokazivačkog tipa pa se u funkciji prosek() može izvršiti deklaracija na sledeći načinmože izvršiti deklaracija na sledeći način

prosek(int *x,int n)prosek(int *x,int n)

Page 86: C prezentacija prof. urosevic

Funkcije, nizovi, pokazivači, parametri, Funkcije, nizovi, pokazivači, parametri, prenošenje argumenata ...prenošenje argumenata ...

Operatori Operatori Int x Int x [];[]; Int*x;Int*x; Su ekvivalentni jer oba deklarišu promenljivu x kao Su ekvivalentni jer oba deklarišu promenljivu x kao

pokazivač na niz celih brojeva pokazivač na niz celih brojeva ... Operatori koji u funkciji ... Operatori koji u funkciji prosek ()prosek () koriste koriste

pokazivač pokazivač *X*X rade sa nizom rade sa nizom ocena ocena koji se nalazi koji se nalazi u telu funkcijeu telu funkcije main()main() Poziv funkcije inicijalizuje Poziv funkcije inicijalizuje pokazivačpokazivač XX tako da pokazuje natako da pokazuje na ocena ocena [0][0] Kada index i u funkcijiKada index i u funkciji prosek ()prosek () uzme vrednost uzme vrednost 4 tada je izraz 4 tada je izraz xx [4] [4] ekvivalentan sa ekvivalentan sa *(x+4).*(x+4).

Page 87: C prezentacija prof. urosevic

Funkcije, nizovi, pokazivači, parametri, Funkcije, nizovi, pokazivači, parametri, prenošenje argumenata ...prenošenje argumenata ...

Znači pošto Znači pošto (x+0)(x+0) pokazuje na pokazuje na ocena ocena [0] [0] toto x+4x+4 pokazuje napokazuje na ocena ocena [4][4] Prenos Prenos jednodimenzionalnih nizova se jednodimenzionalnih nizova se ostvaruje navođenjem imena niza u ostvaruje navođenjem imena niza u pozivu funkcije bez ikakvog pozivu funkcije bez ikakvog indeksa. Na ovaj način u funkciju se indeksa. Na ovaj način u funkciju se prenosi informacija (adresa ) o prenosi informacija (adresa ) o lokaciji niza u pozivajućoj funkciji.lokaciji niza u pozivajućoj funkciji.

Page 88: C prezentacija prof. urosevic

Funkcije, nizovi, pokazivači, parametri, Funkcije, nizovi, pokazivači, parametri, prenošenje argumenata ...prenošenje argumenata ...

Čak i deklaracijaČak i deklaracija x [100]x [100] ima isto značenje kaoima isto značenje kao i i x x [][] jer C kompajler generiše kod koji funkciji predaje jer C kompajler generiše kod koji funkciji predaje pokazivač tako da je beznačajna specificirana dužina pokazivač tako da je beznačajna specificirana dužina nizaniza. .

  X== &x[0] X== &x[0] X +0== &x[0] X +0== &x[0] X+2 ==&x[2]X+2 ==&x[2] /*jer su im iste adrese*//*jer su im iste adrese*/   *(x+2) == x[2]*(x+2) == x[2] /*jer su im iste vrednosti*//*jer su im iste vrednosti*/ *(x+i) == x[i]*(x+i) == x[i]   Prema tome jednodimenzionalni nizovi se Prema tome jednodimenzionalni nizovi se

prenose isključivo po adresiprenose isključivo po adresi

Page 89: C prezentacija prof. urosevic

Sortiranje nizovaSortiranje nizova Program kojim se korišćenjem odgovarajuće Program kojim se korišćenjem odgovarajuće

funkcije učitani niz sortira u monotono funkcije učitani niz sortira u monotono neopadajući poredakneopadajući poredak

Example No 2Example No 211 main()main() {{ intint float a[50]float a[50];; void citaj();void citaj(); void pisi();void pisi(); void sort1();void sort1(); printf(“\nUneti broj elemenata niza:printf(“\nUneti broj elemenata niza:””);); scanf(“%d”,&n);scanf(“%d”,&n);

printf(“\nUnesi elemente niza:\n”);printf(“\nUnesi elemente niza:\n”); citaj(a,n);citaj(a,n); sortl(a,n);sortl(a,n); printf(“Niz posle sortiranja je:\n”);printf(“Niz posle sortiranja je:\n”); pisi(a,n);pisi(a,n); }}

Page 90: C prezentacija prof. urosevic

Example NoExample No 2 211 void citaj(float x[],int n)void citaj(float x[],int n) {{ int I;int I; for(I=0;I<n;I++)for(I=0;I<n;I++) {{ printf(“x[%d]=“,I);printf(“x[%d]=“,I); scanf(“%f”,&x[I]);scanf(“%f”,&x[I]); }} }} void pisi(float x[],int n)void pisi(float x[],int n) {{ int I;int I; for(I=0;I<n;I++)for(I=0;I<n;I++) printf(“x[%d]=%f\n,I,x[I]);printf(“x[%d]=%f\n,I,x[I]); }}

Page 91: C prezentacija prof. urosevic

Example NoExample No 2 211 void razmeni(float*a,float*b)void razmeni(float*a,float*b) {{ float pom;float pom; pom=*a;*a=*b;*b=pom;pom=*a;*a=*b;*b=pom; }} void sort(float a[],int n)void sort(float a[],int n) {{ int I,j;int I,j; for(I=0;I<n-1;I++)for(I=0;I<n-1;I++) for(j=I+1;j<n;j++)for(j=I+1;j<n;j++) if(a[I]>a[j])if(a[I]>a[j]) razmeni(&a[I],&a[j]);razmeni(&a[I],&a[j]); }} ISTI ALGORITAM SE MOGAO PRIMENITI U FUNKCIJI KOJA ISTI ALGORITAM SE MOGAO PRIMENITI U FUNKCIJI KOJA

KORISTI POKAZIVACE:KORISTI POKAZIVACE: void sortl(float*a,int n)void sortl(float*a,int n) {{ int I,j;int I,j; for(I=0;n-1;I++)for(I=0;n-1;I++) for(j=I+1;j<n;j++)for(j=I+1;j<n;j++) if(*(a+I)>*(a+j))if(*(a+I)>*(a+j)) razmeni(a+I,a+j);razmeni(a+I,a+j); }}

Page 92: C prezentacija prof. urosevic

ViVišedimenzionalni nizovišedimenzionalni nizovi DvodimenDvodimenzionalni nizovi se se u memoriji zionalni nizovi se se u memoriji

registruju po vrstama zauzimajući susedne registruju po vrstama zauzimajući susedne memorijske lokacije.ako se dvodimezionalni niz memorijske lokacije.ako se dvodimezionalni niz deklariše na sledeći način:deklariše na sledeći način:

int a[3][2] ;int a[3][2] ; njegovi elementi će biti raspoređeni njegovi elementi će biti raspoređeni na sledeći način: na sledeći način: a [0][0] a [0][1] a [1][0] a [1][1] a [0][0] a [0][1] a [1][0] a [1][1] a [2][0] a [2][1]a [2][0] a [2][1]

Imajući ovo u vidu, ako definišemo pokazivač na Imajući ovo u vidu, ako definišemo pokazivač na int tipint tip

int * pokiint * poki, dodelom, dodelom poki = a;poki = a; definiše pokazivačka promenljiva na element u definiše pokazivačka promenljiva na element u

nultoj vrsti nultoj vrsti ii koloni jer važi jednakost koloni jer važi jednakost a =& a [0][0]a =& a [0][0]

Page 93: C prezentacija prof. urosevic

ViVišedimenzionalni nizovišedimenzionalni nizovi Prema navedenoj deklaraciji vaPrema navedenoj deklaraciji važi:ži: pokipoki =& a [0][0]=& a [0][0] Poki+1Poki+1 =& a [0][1] =& a [0][1] Poki+2Poki+2 =& a [1][0] =& a [1][0] Poki+3Poki+3 =& a [1][1] =& a [1][1] Poki+4Poki+4 =& a [2][0] =& a [2][0] Poki+5Poki+5 =& a [2][1] =& a [2][1] U ovom primeru a je ime dvodimenzionalnog niza a, a [0], a [1], U ovom primeru a je ime dvodimenzionalnog niza a, a [0], a [1],

a [2]a [2] su imena jednodimenzionalnih nizova koje predstavljaju vrste su imena jednodimenzionalnih nizova koje predstavljaju vrste

matrice.matrice. Ime niza je pokazivač na taj niz jer pokazuje na njegov prvi Ime niza je pokazivač na taj niz jer pokazuje na njegov prvi

element, tako da važi:element, tako da važi: a [0] =& a [0][0]a [0] =& a [0][0] a [1] =& a [1][0]a [1] =& a [1][0] a [2] =& a [2][0]a [2] =& a [2][0]

Ova osobina nam koristi da funkciju namenjenu za obradu Ova osobina nam koristi da funkciju namenjenu za obradu jednodimenzionalnog niza koristimo pri obradi vrsta jednodimenzionalnog niza koristimo pri obradi vrsta dvodimenzionalnog niza.dvodimenzionalnog niza.

Page 94: C prezentacija prof. urosevic

Example No Example No 2222 main()main() {{ static float a[3][4]={static float a[3][4]={ {1.0,2.0,3.0,4.0}, {1.0,2.0,3.0,4.0}, {11.5,22.4,33.3,44.2},{11.5,22.4,33.3,44.2}, {10.1,20.2,30.3,40.4}{10.1,20.2,30.3,40.4} };}; int I;int I; float sredina();float sredina(); for (I=0;I 3;I++)for (I=0;I 3;I++) printf(“sredprintf(“srednja vrednost vrste %d je %fnja vrednost vrste %d je %f\n”,I,sredina(a[I],4));\n”,I,sredina(a[I],4)); /*a[I] je jednodimenzionalni niz od /*a[I] je jednodimenzionalni niz od Četirielementa*/Četirielementa*/ }} float sredina(float x[],int n)float sredina(float x[],int n) {{ int I;int I; float suma;float suma; for (I=0,suma= 0;I n;I++)for (I=0,suma= 0;I n;I++) suma+=x[I]suma+=x[I] return suma/nreturn suma/n }}

Page 95: C prezentacija prof. urosevic

Example No 2Example No 233

main()main() {{ int I,n;int I,n; int x[10][10]int x[10][10] void citaj();void citaj(); void pisi();void pisi(); void sort1();void sort1(); printf(“\nUneti broj vrsta matrice:printf(“\nUneti broj vrsta matrice:””);); scanf(“%d”,&n);scanf(“%d”,&n);

printf(“\nUnesi elemente matrice po vrstama :\n);printf(“\nUnesi elemente matrice po vrstama :\n); citaj(x,n);citaj(x,n); sortl(x[I],n);sortl(x[I],n); printf(“matrica posle sortiranja je:\n”);printf(“matrica posle sortiranja je:\n”); pisi(x,n);pisi(x,n); }}

Page 96: C prezentacija prof. urosevic

Example No 2Example No 233 /*funkcija koja ucitava elemente matrice*//*funkcija koja ucitava elemente matrice*/ void citaj(int x[][10],int n)void citaj(int x[][10],int n) {{ int I,j;int I,j; for(I=0;I<n;I++)for(I=0;I<n;I++) for(j=0;j<n;j++)for(j=0;j<n;j++) {{ printf(“x[%d,%d]=“,I,j);printf(“x[%d,%d]=“,I,j); scanf(“%d”,&x[I][j]);scanf(“%d”,&x[I][j]); }} }}

/*funkcija koja ispisuje elemente matrice*//*funkcija koja ispisuje elemente matrice*/ void pisi(int x[][10],int n)void pisi(int x[][10],int n) {{ int I,j;int I,j; for(I=0;I<n;I++)for(I=0;I<n;I++) {{ for(j=0;j<n;j++)for(j=0;j<n;j++) printf(“%3d”,x[I][j]);printf(“%3d”,x[I][j]); printf(“\n”);printf(“\n”); }} }}

Page 97: C prezentacija prof. urosevic

Example No 2Example No 233

void razmeni(int*a,int*b)void razmeni(int*a,int*b) {{ float pom;float pom; pom=*a;*a=*b;*b=pom;pom=*a;*a=*b;*b=pom; }} void sort(int a[],int n)void sort(int a[],int n) {{ int I,j;int I,j; for(I=0;I<n-1;I++)for(I=0;I<n-1;I++) for(j=I+1;j<n;j++)for(j=I+1;j<n;j++) if(a[I]>a[j])if(a[I]>a[j]) razmeni(&a[I],a[j]);razmeni(&a[I],a[j]); }}

Page 98: C prezentacija prof. urosevic

NiNizovi karakterazovi karaktera String ili Niz karaktera je jednodimenzionalni vektor tipa char. String ili Niz karaktera je jednodimenzionalni vektor tipa char.

Kraj niza se označava specijalnim null karakterom Kraj niza se označava specijalnim null karakterom Završetak niza se ostvaruje preko NULL znaka‚ Završetak niza se ostvaruje preko NULL znaka‚ ‘ \0 ’ koji je ‘ \0 ’ koji je

sastavni deo stringa.sastavni deo stringa. Niz se moNiz se može inicijalizovati znak po znak ili string konstantom.že inicijalizovati znak po znak ili string konstantom. Pošto je ime niza ekvivalentno adresi njegovog nultog Pošto je ime niza ekvivalentno adresi njegovog nultog

elementa ( predstavlja pokazivač na nulti element) tako je i elementa ( predstavlja pokazivač na nulti element) tako je i string konstanta pokazivač na nulti element niza u kome je string konstanta pokazivač na nulti element niza u kome je registrovan string.registrovan string.

Operator Operator Static char sStatic char s[[ ]] = “ IBM PC” ; inicijlizije stati= “ IBM PC” ; inicijlizije statički diz s datom čki diz s datom

string konstantom On predstavlja skraćeni oblik inicijalizacije string konstantom On predstavlja skraćeni oblik inicijalizacije Static char sStatic char s[[ ]] = {‘I’,’B’,’M’, ‘P’,’C’, ‘\0’};= {‘I’,’B’,’M’, ‘P’,’C’, ‘\0’}; Ako bi se izostavio Ako bi se izostavio završni završni znak znak to više ne bi bio string već to više ne bi bio string već

samo niz samo niz znakova. znakova. Kao I kod drugih Kao I kod drugih nizova ime s predstavlja pokazivač na nulti nizova ime s predstavlja pokazivač na nulti

element.element. s =& s[0], *s s =& s[0], *s = ‘I= ‘I ’,’, *(s *(s ++1) 1) = = s[1]s[1] == ‘‘B B ’,’,

Page 99: C prezentacija prof. urosevic

Nizovi stringovaNizovi stringova KoriKoristeći niz stringova steći niz stringova Stringu se moStringu se možže e

pristupiti preko indexapristupiti preko indexa. Deklaracijom:. Deklaracijom: Static char Static char jezici [4]jezici [4] = =

{“PASCAL”,”MODULA’’,”C++”, “ADA”};{“PASCAL”,”MODULA’’,”C++”, “ADA”}; Definisan je niz pokazivača jezici na stringove Definisan je niz pokazivača jezici na stringove Nulti pokazivač Nulti pokazivač jezici [jezici [00]] pokazuje na nulti pokazuje na nulti

string, prvi pokazivač string, prvi pokazivač jezici [jezici [11]] pokazuje na pokazuje na prvi string , tako da važi prvi string , tako da važi ::

*jezici [0]=‘P’,*jezici [0]=‘P’, *jezici [1]=‘M’,*jezici [1]=‘M’, *jezici [2]=‘C’,*jezici [2]=‘C’, *jezici [3]=‘A’.*jezici [3]=‘A’.

*jezici [0] PASCAL

MODULA

C++

ADA

*jezici [1]

*jezici [2]

*jezici [3]

Page 100: C prezentacija prof. urosevic

Example No 24Example No 24 Main()Main() {{ if (palindrom(ANAVOLIMILOVANA”))if (palindrom(ANAVOLIMILOVANA”)) printf(“string 1 je palindrom\n”);printf(“string 1 je palindrom\n”); if (palindrom(“ASTARIX”))if (palindrom(“ASTARIX”)) printf(“string 2 je palindrom\n”);printf(“string 2 je palindrom\n”); }}

Page 101: C prezentacija prof. urosevic

Example No 25Example No 25

Char veliko (char c)Char veliko (char c) {{ if (c<=‘z’ && c>=‘a’)if (c<=‘z’ && c>=‘a’) return (‘A’+c-’a’);return (‘A’+c-’a’); else return (c)else return (c) }}

Page 102: C prezentacija prof. urosevic

StruktureStrukture

Struktura predstavlja skup podataka Struktura predstavlja skup podataka kojim se opisuju svojstva objekta kojim se opisuju svojstva objekta

Komponente koje obraKomponente koje obrazzuju uju strukturu strukturu nazivaju se elementi strukturenazivaju se elementi strukture

Opis struktureOpis strukture Struct oznaka_strStruct oznaka_str {{ Tip ime _elementa1Tip ime _elementa1 Tip ime _elementa2Tip ime _elementa2 ...... }};;

Page 103: C prezentacija prof. urosevic

Deklaracija strukturnih Deklaracija strukturnih promenljivihpromenljivih

Ako definiAko definišemo šablon strukture označene sa šemo šablon strukture označene sa ličnost ispred funkcije main () ličnost ispred funkcije main ()

#define MAXIME31#define MAXIME31 #define MAXIME31#define MAXIME31 Struct licnost Struct licnost {{ char ime char ime [MAXIME];[MAXIME]; Char adresa [MAXIME];Char adresa [MAXIME]; Unsigned starost; Unsigned starost; };}; Tada u funkciji mođemo opisati strukturne Tada u funkciji mođemo opisati strukturne

promenljive korišćenjem oznake strukturepromenljive korišćenjem oznake strukture Struct licnost osoba 1, osoba2Struct licnost osoba 1, osoba2;;

Page 104: C prezentacija prof. urosevic

Deklaracija strukturnih Deklaracija strukturnih promenljivihpromenljivih

Ili skraIli skraćeni zapisćeni zapis Struct licnost Struct licnost {{ char ime char ime [MAXIME];[MAXIME]; Char adresa [MAXIME];Char adresa [MAXIME]; Unsigned starost; Unsigned starost; };};osoba 1, osoba2osoba 1, osoba2;;

Page 105: C prezentacija prof. urosevic

Strukturne promenljive i Strukturne promenljive i pokazivačipokazivači

Ako je definisana pokazivačka promenljive Ako je definisana pokazivačka promenljive osoba:osoba:

struct ličnost*osobastruct ličnost*osoba;; Elementima strukture na koju ova promenljiva Elementima strukture na koju ova promenljiva

pokazuje može se pristupiti korišćenjem pokazuje može se pristupiti korišćenjem operatora tačkaoperatora tačka

(*osoba).ime(*osoba).ime (*osoba).adresa(*osoba).adresa (*osoba).starost(*osoba).starost Radi jednostavnijeg pristupa eRadi jednostavnijeg pristupa elementima lementima

strukturnre promenljive na koju pokastrukturnre promenljive na koju pokazzuje uje pokapokazivačka promenljiva uveden je operator zivačka promenljiva uveden je operator “strelica u desno” (->)“strelica u desno” (->)

osoba->imeosoba->ime Osoba->adresaOsoba->adresa Osoba->starostOsoba->starost

Page 106: C prezentacija prof. urosevic

Nizovi strukturaNizovi struktura

Niz struktura se opisuje kao i svaki drugi niz deklaracijomNiz struktura se opisuje kao i svaki drugi niz deklaracijom struct licnost osobastruct licnost osoba[MAXOS][MAXOS] Ovom deklaracijom opisuje se struktura od MAXOS Ovom deklaracijom opisuje se struktura od MAXOS

elemenata. Svaki element predstavlja strukturu tipa elemenata. Svaki element predstavlja strukturu tipa liličnost.čnost.

Ako deklarišemo pokazivač na strukturu licnost Ako deklarišemo pokazivač na strukturu licnost struct licnost osobastruct licnost osoba[MAXOS][MAXOS], *pok_lic;, *pok_lic; OOtada su inicijalizacije pokazivačke promenljive tada su inicijalizacije pokazivačke promenljive pok_lic=osoba;pok_lic=osoba; pok_lic=&osoba pok_lic=&osoba [[00]]; ekvivalentne; ekvivalentne Pošto pok_lic pokazuje na osoba Pošto pok_lic pokazuje na osoba [[00]], to pok_lic +1 , to pok_lic +1

pokazuje na osoba pokazuje na osoba [[11]]..

osoba osoba [[00]].starost == (*pok_lic) starost== pok_lic.starost == (*pok_lic) starost== pok_lic->-> staroststarost

Page 107: C prezentacija prof. urosevic

Osobine jezika C++Osobine jezika C++

Tradicionalni način programiranja je u Tradicionalni način programiranja je u osnovi proceduralan, zasnovan na osnovi proceduralan, zasnovan na funkcionalnoj dekompoziciji korisničkog, a funkcionalnoj dekompoziciji korisničkog, a zatim i programskog zahteva.zatim i programskog zahteva.

Pri tome, podaci (atributi) koji se obrađuju Pri tome, podaci (atributi) koji se obrađuju i operacije nad njima nisu grupisani i operacije nad njima nisu grupisani zajedno u zajedno u objektimaobjektima kao što je to slučaj kao što je to slučaj kod OBJEKTNO ORJENTISANOG kod OBJEKTNO ORJENTISANOG PROGRAMIRANJA, već su razbacani po PROGRAMIRANJA, već su razbacani po programu.programu.

Page 108: C prezentacija prof. urosevic

Osobine jezika C++Osobine jezika C++

Osnovna ideja objektno orjentisanog Osnovna ideja objektno orjentisanog programiranja je da sve te podatke (atribute ) programiranja je da sve te podatke (atribute ) izvučemo iz navedenih struktura i grupišemo po izvučemo iz navedenih struktura i grupišemo po klasamaklasama zajedno sa relevantnim operacijama zajedno sa relevantnim operacijama (funkcijama). Klase zatim struktuiramo (funkcijama). Klase zatim struktuiramo hijerarhijski, formirajući hijerarhijsko stablo hijerarhijski, formirajući hijerarhijsko stablo klasa, vodeći računa da atributi i operacije koji klasa, vodeći računa da atributi i operacije koji su zajednički za sve klase budu na višim su zajednički za sve klase budu na višim hijerarhijama, kako bi ih niže hijerarhije mogle hijerarhijama, kako bi ih niže hijerarhije mogle koristiti preko mehanizma nasleđivanja koristiti preko mehanizma nasleđivanja

Page 109: C prezentacija prof. urosevic

Osobine jezika C++Osobine jezika C++

Time se izbegava redundansa podataka i Time se izbegava redundansa podataka i operacija. operacija. Tako učaurenim podacima i Tako učaurenim podacima i operacijama definišemo interface prema operacijama definišemo interface prema korisniku tih klasa a takođe i interface korisniku tih klasa a takođe i interface između pojedinih klasa u hijerarhiji klasa, između pojedinih klasa u hijerarhiji klasa, sakrivajući kao implementacione detalje sakrivajući kao implementacione detalje sve ono što nije bitno za njihovo sve ono što nije bitno za njihovo korišćenje. Na taj načiin stvaramo korišćenje. Na taj načiin stvaramo softverske komponente ( softverske čipove softverske komponente ( softverske čipove ) koje možemo nasleđivati novim klasama ) koje možemo nasleđivati novim klasama i na taj način iste ugrađujemo u nove i na taj način iste ugrađujemo u nove softverske proizvode.softverske proizvode.

Page 110: C prezentacija prof. urosevic

Objektno Orijentisano Objektno Orijentisano ProgramiranjProgramiranjee

osnovni konceptosnovni koncept

apstrakcija apstrakcija (abstraction)(abstraction)

nasleđivanjenasleđivanje(inheritance)(inheritance)

polimorfizampolimorfizam(polymorphism)(polymorphism)

Page 111: C prezentacija prof. urosevic

Klase su :Klase su :

Prototipski mehanizam za stvaranje objekta, Prototipski mehanizam za stvaranje objekta, omogućavajući njihovu klasifikaciju po omogućavajući njihovu klasifikaciju po grupama sa istim osobinamagrupama sa istim osobinama

Model za sve objekte koji se grade,Model za sve objekte koji se grade, Agregacija podataka (atributa) obično Agregacija podataka (atributa) obično

različitog tipa i operacija, realizovanim različitog tipa i operacija, realizovanim funkcijama, nazvanim metodama koje funkcijama, nazvanim metodama koje obrađuju te atributeobrađuju te atribute

Kolekcija više objekata koji imaju istu Kolekcija više objekata koji imaju istu strukturustrukturu

Prototipski mehanizam stvaranja objekata, Prototipski mehanizam stvaranja objekata, omogućavajući njihovu klasifikaciju po omogućavajući njihovu klasifikaciju po grupama sa sličnim osobinamagrupama sa sličnim osobinama

KorisniKorisnički izveden tip podataka,čki izveden tip podataka,

Page 112: C prezentacija prof. urosevic

Objekti su:Objekti su:

Nezavisne programske celine Nezavisne programske celine koje sadrže metode (funkcije) koje sadrže metode (funkcije) i podatke i podatke

Različita pojavljivanja iste Različita pojavljivanja iste klaseklase

Promenljive koje se kreiraju Promenljive koje se kreiraju iz struktura tipa klaseiz struktura tipa klase

Individualna realizacija klasaIndividualna realizacija klasa

Page 113: C prezentacija prof. urosevic

Klasi su pridodata svojstva:Klasi su pridodata svojstva:

Enkapsulacije (sakrivanje, Enkapsulacije (sakrivanje, učaurenje) podataka (atributa i učaurenje) podataka (atributa i operacija nad njima)operacija nad njima)

Metode (operacije nad atributima Metode (operacije nad atributima klase)klase)

Nasleđivanje ( osobina da klase sa Nasleđivanje ( osobina da klase sa nižih hijerarhijskih nivoa mogu nižih hijerarhijskih nivoa mogu naslediti atribute i metode klasa sa naslediti atribute i metode klasa sa viših hijerarhijskh nivoaviših hijerarhijskh nivoa

Page 114: C prezentacija prof. urosevic

Enkapsulacija, sakrivanje ili Enkapsulacija, sakrivanje ili učaurenje podatakaučaurenje podataka

Klasa omogućava zatvaranje i Klasa omogućava zatvaranje i sakrivanje podataka (atributa i sakrivanje podataka (atributa i metoda ) unutar klase. metoda ) unutar klase.

C++ omogućava tri nivoa C++ omogućava tri nivoa zaštite podatakazaštite podataka..

PublicPublic PrivatePrivate ProtectedProtected

Page 115: C prezentacija prof. urosevic

Public:Public: Kada je moguć m pristup svim članicama objekta Kada je moguć m pristup svim članicama objekta

klase iz:klase iz: bilo koje članice te iste klase,ilibilo koje članice te iste klase,ili bilo koje druge klase, ilibilo koje druge klase, ili bilo koje predefinisane funkcije (definisane u heder bilo koje predefinisane funkcije (definisane u heder

datotekama), ili datotekama), ili bilo koje naše (sopstvene )funkcije, ilibilo koje naše (sopstvene )funkcije, ili bilo kog izraza u glavnom programu ili izvan njegabilo kog izraza u glavnom programu ili izvan njega pod uslovom da je taj objekat u svom opsegu pod uslovom da je taj objekat u svom opsegu

važenja (važenja (scopescope))

Page 116: C prezentacija prof. urosevic

Private:Private:

pristup podacima klase je dozvoljen pristup podacima klase je dozvoljen samo članicama klase tj metodama samo članicama klase tj metodama koje pripadaju toj klasi . koje pripadaju toj klasi .

Izuzetno, prisatup je dozvoljen Izuzetno, prisatup je dozvoljen specijalnim metodama ispred čijeg specijalnim metodama ispred čijeg naziva se stavlja reč FRIENDnaziva se stavlja reč FRIEND

Page 117: C prezentacija prof. urosevic

Protected:Protected:

kada je moguć pristup svim kada je moguć pristup svim podacima objekta bazne klase od podacima objekta bazne klase od strane bilo koje članice izvedene strane bilo koje članice izvedene klase ( klase koja nasleđuje baznu klase ( klase koja nasleđuje baznu klasu)klasu)

Page 118: C prezentacija prof. urosevic

MetodeMetode

Funkcije koje su učaurene sa Funkcije koje su učaurene sa podacima (atributima) unutar jedne podacima (atributima) unutar jedne klase nazivaju se metode. Iste su klase nazivaju se metode. Iste su obično public, ali mogu biti i private i obično public, ali mogu biti i private i protected. Dve specijalne metode protected. Dve specijalne metode koje služe za inicijalizaciju i koje služe za inicijalizaciju i uništavanje objekata suuništavanje objekata su::

konstruktor i destruktor.konstruktor i destruktor.

Page 119: C prezentacija prof. urosevic

KonstruktorKonstruktor

Objekti mogu imati jednu ili više Objekti mogu imati jednu ili više specijalnih metoda koje se nazivaju specijalnih metoda koje se nazivaju konstruktorima, i koje se koriste konstruktorima, i koje se koriste za inicijalizaciju objekata prilikom za inicijalizaciju objekata prilikom njihovog deklarisanja kao njihovog deklarisanja kao pojavljivanja neke klase. Ime pojavljivanja neke klase. Ime konstruktora nosi ime svoje klase.konstruktora nosi ime svoje klase.

Page 120: C prezentacija prof. urosevic

Primer.......Primer.......

class AutomatNovcaclass AutomatNovca // Definisanje klase// Definisanje klase { double trezor; ..................{ double trezor; .................. // clan klase // clan klase

(podatak atribut)(podatak atribut) public :public : //Kontrola pristupa //Kontrola pristupa

podacimapodacima automatNovca (double p) {trezor=p;}automatNovca (double p) {trezor=p;} // Kada se // Kada se

neka metoda implementira u okviru same klase neka metoda implementira u okviru same klase za istu se kaze da je za istu se kaze da je inline inline Ista se tada ponasa Ista se tada ponasa kao makro.kao makro.

Void ulaganje (double);Void ulaganje (double); // clan klase // clan klase (metoda)(metoda)

Double podizanje (double);Double podizanje (double); // clan klase (metoda)// clan klase (metoda) }};;

Page 121: C prezentacija prof. urosevic

Destruktor Destruktor

Specijalna metoda destruktor Specijalna metoda destruktor koristi se za brisanje koristi se za brisanje ( uništavanje ) objekata. Nosi ( uništavanje ) objekata. Nosi ime svoje klase sa znakom ~ ime svoje klase sa znakom ~ ispred imena.ispred imena.

Destruktor se automatski poziva Destruktor se automatski poziva uvek kada objekat napusta svoj uvek kada objekat napusta svoj opseg opseg scope scope vazenja vazenja

Page 122: C prezentacija prof. urosevic

Ilustracija...Ilustracija...

class AutomatNovcaclass AutomatNovca // Definisanje klase// Definisanje klase { double trezor; ..................{ double trezor; .................. // clan klase (podatak // clan klase (podatak

atribut)atribut) public :public : //Kontrola pristupa podacima//Kontrola pristupa podacima AutomatNovca (double p) {trezor=p;}AutomatNovca (double p) {trezor=p;} // Kada se // Kada se

neka metoda implementira u okviru same klase za istu neka metoda implementira u okviru same klase za istu se kaze da je se kaze da je inline inline Ista se tada ponasa kao makro. Ista se tada ponasa kao makro.

~AutomatNovca(void ) {cout'' destruktor se ~AutomatNovca(void ) {cout'' destruktor se obavezno koristi kod dinamickih <<''objekata\n'';obavezno koristi kod dinamickih <<''objekata\n'';

Void ulaganje (double);Void ulaganje (double); // clan klase (metoda)// clan klase (metoda) Double podizanje (double);Double podizanje (double); //// clan klase (metoda)clan klase (metoda) }};;

Page 123: C prezentacija prof. urosevic

NasleđivanjeNasleđivanje

Predstavlja mogućnost da se iz Predstavlja mogućnost da se iz postojeće klase izvede nova klasa. postojeće klase izvede nova klasa. Pri tome nova klasa može naslediti Pri tome nova klasa može naslediti sve članove postojeće klase u sve članove postojeće klase u zavisnosti od definisanih načina zavisnosti od definisanih načina pristupa. pristupa.

Postojeća klasa se naziva bazna Postojeća klasa se naziva bazna klasa dok se klasa naslednik naziva klasa dok se klasa naslednik naziva izvedena klasa. izvedena klasa.

Page 124: C prezentacija prof. urosevic

NasleđivanjeNasleđivanje

Nasleđivanje se može koristiti i Nasleđivanje se može koristiti i višestruko po dubinivišestruko po dubini

Nasleđivanje je ključni deo objektno Nasleđivanje je ključni deo objektno orjentisanog programiranja i orjentisanog programiranja i omogućava dve važne prednosti kod omogućava dve važne prednosti kod programiranja:programiranja:

Visok stepen ponovnog korišćenja Visok stepen ponovnog korišćenja istog koda – reuseability istog koda – reuseability

Polimorfizam, korišćenje istog naziva Polimorfizam, korišćenje istog naziva za funkcije koje rade slične stvari. za funkcije koje rade slične stvari.

Page 125: C prezentacija prof. urosevic

lokacija

pravougaonikkrug

paralelopipedcilindar