You are on page 1of 28

1.

Rjesavanje zadataka primjenom algoritama


Racunarski programi se pisu u cilju rjesavanja zadataka i problema
racunarom. Programeri prevode rjesenja zadataka u jezik koji racunar
razumije, odnosno pisu racunarski program. Rjesenje zadatka ili problema
je dato algoritmom. Algoritam je konacna serija korak-po-korak akcija koje
nalaze rjesenja zadatka ili problema. Neke karakteristike algoritma su :
-Algoritam mora biti dovoljno detaljan da opise potrebne akcije odnosno
transformacije.
-Algoritam ne smije biti dvosmislen, tako da svako moze izvesti akciju ili
transformaciju korektno svaki put.
-Mora uvijek dati isti rezultat za iste pocetne situacije.
-Mora dati korektne rezultate u svim slucajevima.
*Za razliku od racunarskog programa koji mora biti izrazen u nekom
od jezika koji racunar razumije, algoritmi mogu biti opisani na razlicite
nacine. *Najcesce koristen nacin za opis algoritama su :
-Pseudo jezici
-Dijagram toka
*Kada se koriste jezicke fraze za opis algoritamskih koraka, onda se
takav opis algoritma naziva pseudo jezik. Dijagram toka je graficki prikaz
algoritma. On se sastoji od skupine grafickih simbola povezanih
strelicama. Tip grafickog simbola indicira tip trasformacije (akcije) koja
se desava u simbolu. (tabela sa tipovima i opisom)

2. Racunarski algoritmi
Jasno je da algoritmi koje treba da izvrsi racunarski sistem ima
odreDJenja ogranicenja u odnosu na opsto formu algoritma, odnosno moraju
biti formulisani tako da racunarski sistem moze da ih razumije.
Fundamentalne operacije koje svaki racunar moze da izvede su :
-IzvoDJenje aritmetickih operacija
-PoreDJenje dva podatka, i u zavisnosti od rezultata izbor jedne od dvije
alternativne akcije
-Citanje i stampanje informacija
-Ponavljanje bilo koje grupe informacija
-Memorisanje podataka za kasnije koristenje
*Na osnovu ovih zahtjeva evidentno je da konstrukciju racunarskog
algoritma cine cetri tipa struktura :
-Sekvencija
-Selekcija
-Iteracija
-Pozivanje
*Sekvencija definise slijed u kojem se instrukcije izvrsavaju u programu.
Selekcija daje mogucnost izbora izmeDJu dvije ili vise varijanti u
zavisnosti od nekog uslova. Iteracija daje mogucnost ponavljanja skupa
operacija u zavisnosti od nekog uslova. Pozivanje ukljucuje mogucnost
pozivanja skupa instrukcija (podprograma) po potrebi.

3. Kljucne rijeci
Kljucne rijeci su eksplicitno rezervisane rijeci koje imaju striktno
znacenje u C-u. One ne mogu biti redefinisane ili koristene u drugom
kontekstu. Kljucne rijeci u C-u su : auto, break,case, char,
continue,default,double,else,enum,float,for,goto,if,int,long,return,short,
signed,sizeof,static,struct,typedef,union,unsigned,void,volatile,while.
U poreDJenju sa drugim jezicima C ima mali broj kljucnih rijeci. To je
karakteristika C-a da moze da uradi monogo koristenjem relativno malog
broja kljucnih rijeci. Sve kljucne rijeci C-a se pisu malim slovima, while
je kljucna rijece WHILE i While nisu kljucne rijeci.

4. Identifikatori
Identifikator je rijec koja se sastoji od neprekidne sekvence slova,
cifara i posebnog karaktera ''_'' (crtica). Slovo ili crtica mora biti
prvi znak rijeci. U C-u mala i velika slova se tretiraju razlicito. Dobra
je programerska praksa izabratiti identifikatore koje asociraju na
imenovane objekte. (npr. ime_i_prezime). Identifikatori se kreiraju u
programu u cilju davanja jednistvenih imena razlicitim objektima u
programu, kao sto su varijable i funkcije. U ANSI C jeziku, identifikator
moze da ima do 31 karakter.

5. Konstante
C program obraDJuje razlicite tipove podataka, cijele i realne brojeve,
alfanumericke karaktere i nizove karaktera itd. Brojevi kao 192, 64 su
primjeri cjelobrojnih konstanti, a brojevi 23.4, 22.11, su primjeri
realnih konstanti. U C-u postoji takoDJe karakterne konstante kao 'A',
'F', '5', i nitovne konstante kao ''Dino voli Maju''. Vazno je zapamtiti
da se karakter konstanta navodi u jednostrukim navodnicima dok nizovna
konstanta u dvostrukim navodnicima.

6. Operatori
U C-u postoji mnogo specijalnih karaktera sa posebnim znacenjem. Operatori
su : +(sabiranje), -(oduzimanje), *(mnozenje), /(dijeljenje), %(modul),
=(dodjeljivanje). Operator dodjeljivanja intruira C program da sracunate
vrijednosti na desnoj strani aritmetickog izraza dodijeli promjenjljivoj
na lijevoj strani. (npr. x=y+31😉

7. Moduli C programa
Slozeni programi su sacinjeni od mnostva podprograma. Ovi podprogrami se
nazivaju programski moduli, a program koji je konstruisan koristenjem
modula naziva se modularni program. Daleko je jednostavnije izgraditi,
modifikovati i korigovati modularne porgrame, nego programe izgraDJene na
neki drugi nacin. Svaki modul se dizajnira i razvija tako da izvrsava
specifican zadatak, i u stvari svaki modul je mali program. Glavna
prednost modularnog dizajna lezi u cinjenici da program moze biti
dizajniran prije nego sto je napisan njegov modul. Nakon zavrsetka
planiranja moze se pristupitni njihovom programiranju, a zatim se vrsi
njihva integracija u cijeli program. Svaki modul treba da ima ogranicenu
ulogu tj. da izvrsava jedan ili dva zadatka u kompletnom programu. U C
programskom jeziku moduli se nazivaju funkcije. Funkcija je modul koji
sadrzi sekvencu operacija a koja se tretira kao jedna slozena akcija.
Funkcija prihvata neke ulazne podatke i kao rezultat akcije proizvodi neke
druge podatke.

8. Funkcija main( )
Funkcije C jezika omogucuju kreiranje modularnog programa, odnosno donose
sve prednosti modularnog dizajna. Svaki C program mora imati barem jednu
funkciju. To je funckcija main( ). C program pocinje sa izvrsavanjem tako
sto se pocne izvrsavati funkcija main( ). U dobro dizajniranom programu,
funkcija main ( ) sluzi za pozivanje drugih funkcija (modula) u zeljenom
redoslijedu. (slika) Svaka funkcija se sastoji od zaglavlja funkcije i
tijela funkcije. Zaglavlje funkcije, koje je uvijek prva linija u
definisanju funkcije, sadrzi tri informacije :
-Koji tip funkcije vraca kao rezultat (ako uopste vraca)
-Ime funkcije
-Koji tip podataka funkcija prihvata (ako uopste prihvata)

9. Funkcija printf( )
Jedna od najuniverzalnijih najcesce koristenih funkcija u C programima je
funkcija printf( ), koja je dio standardne biblioteke funkcija koja dolazi
sa svakim C prevodiocem (kompajlerom). Funkcija printf( ) kako joj ime
sugerise formatira prihvacene podatke i ispisuje ih na standardni izlazni
ureDJaj ( najcesce ekran ). Podatci se prenose u funkciju tako sto se oni
navedu u zagradama iza imena funkcije. Npr. ako na ekran zelimo ispisati
poruku : Dino voli Maju., to bi se izvelo pozivanjem funkcije na slijedeci
nacin : printf (''Dino voli Maju'');

10. Fundamentalni tipovi podataka u C programskom jeziku


C program moze obraDJivati razlicite tipove podataka na razlicite nacine.
Postoje tri tipa fundamentalnih podataka u C programskom jeziku:
-Cijeli brojevi
-Realni brojevi
-Karakteri
Cijeli broj je bilo koji pozitivan ili negativan broj bez decimalne tacke.
Razliciti racunarski sistemi imaju razlicita ogranicenja na najveci i
najveci koristeni cio broj. Ova ogranicenja zavise od velicine memorije
koju racunar koristi za memorisanje cijelog broja.
1bajt [127=2^7-1 do -128=2^7]
2bajt[32767=2^15-1 do -32768=-2^15]
4 bajta[2147483647=2^31-1 do -2147483678=2^31]
C omogucuje zapisivanje brojeva i u oktalnoj i u hexadecimalnoj notaciji.
Hexadecimalna notacija pefix 0X (0XFAC), a za oktalne 0 (0732). Realni
brojevi ili brojevi sa pomicnom tackom su bilo koji pozitivni ili
negativni brojevi sa decimalnom tackom. C jezik podrzava dvije kategorije
realnih brojeva : float (jednostruka preciznost) i double (dvostruka
preciznost). Razlika izmeDJu ova dva tipa je u velicini rezervisane
memorije za neki realni broj. Rezervisana memorja za double je duplo veca
nego za float. Double broj karakterise racunaru dodavanjem velikog ili
malog slova L broju (npr. 126.4589987L). Pored standardne decimalne
notacije postoji i exponencijalna i naucna notacija. Treci tip podataka u
C jeziku su karakteri. Karkteri ukljucuju slova alfabeta ( velika i mala),
cifre i specijalne znakove. Karakter moze imati bilo koju vrijednost iz
predhodno navedenog skupa simbola navedenih u jednostrukim navodnicima.
Karakter vrijednosti su tipcno memorisane u racunarskoj memoriji
koristenjem ASCII ili EBCDIC kodova ( koristi se 1 byte memorije ). U
svakom od ovih kodova indivindualnim karakterima je dodijeljen binarni
kod, odnosno odgovarajuca kombinacija bita.

11. Operator sizeof( )


Ponekad je potrebno odreDJenu velicinu memorije potrebnu za storiranje ne
samo fundementalnih nego i slozenih tipova podataka. Zbog toga C osigurava
unarni operator sizeof ( ) koji racuna broj bajta potrebnih za storiranje
fundamentalnih i slozenih struktura podataka (objekata). Opsta forma ovog
operatora je : sizeof ( objekat ) Gdje objekat moze biti fundamentalni
tip, slozeni tip i izraz.

12. Fundamentalni tipovi podataka – varijable i naredbe deklaracije


Ranije, u starijim programskim jezicima korisnik je morao sam odreDJivati
adrese u memoriji u koju je zelio smjestiti neki podatak. Dolaskom jezika
visokog nivoa, tj. C-a, ovaj posao obavlja kompajler, tj. korisnik samo
daje simobolicka imena tim adresama, a ta simbolicka imena se nazivaju
varijablama. Termin varijabla se koristi zbog toga sto vrijednost
smjestena u varijabli moze da se promjeni po potrebi. Prilkom izbora imena
varijabli moraju biti postovana sljedeca pravila :
-Ime varijable mora poceti sa slovom ili crticom (_), ime varijable moze
sadrzavati samo slova, cifre i crticu. Ne moze sadrzavati prazna mjesta,
zareze ili specijalne simbole.
-Ime varijable ne moze biti kljucna rijec.
-Ime varijable ne moze biti duze od 31 karakter.
-Postoje tri fundamentalna tipa podataka u C-u :
-Cijeli broj
-Realni broj
-Karakter
Cjelobrojne vrijednosti se deklarisu int ime_varijable; U C-u tip podatak
int se smatra prirodnim ili uobicajenim tipom za rad sa cijelim brojevima.
Na vecini racunara on zauzima 2 bajta memorije.
Kljucna rijec
Rezervisana velicina memorije za cjelobrojnu varijablu
Opseg brojeva koji se mogu zapisati
int 2 bajta -32768 do 32767
short 1 ili 2 bajta -128 do 127 ili -32768 do 32767
long int 4 bajta -2147483648 do 2147483647
unsigned int 2 bajta 0 do 65535
unsigned short 1 ili 2 bajta 0 do 255 ili 0 do 65535
unsigned long 4 bajta 0 do 4294967295
Realne varijable se deklarisu u opstoj formi sa : float ime_varijable;
Postoje tri kategorije realnih brojeva : float, double i long double. Ove
tri kategorije se razlikuju u velicini rezervisane memorije i preciznosti.
Kljucna rijec
Rezervisana velicina memorije za varijablu
Opesg brojeva
Preciznost brojeva
float 4 bajta 10-38 do 10^38 7 decimalnih mjesta
double 8 bajta 10-308 do 10308 15 decimalnih mjesta
long double 10 bajta 10-4932 do 104932 19 decimalnih mjesta
Karakter varijable se deklarise u opstoj formi sa char ime_varijable;
Karakteri varijable mogu da poprime bilo koju vrijednost iz skupa
karakteri vrijednosti. Svaka karakter varijabla zauzima jedan bajt u
memoriji racunara (256 razlicitih vrijednosti). Karkter varijabla moze
biti korisna za smjestanje malih cijelih brojeva. Ako je varijabla signed
char onda moze da poprimi binarne vrijednosti od -128 do 127, a ako je
unsigned char onda 0 do 255.

14. Unarni aritmeticki operatori i izrazi


Unarni operatori inkrement (++) i dekrement (--) su namijenjeni kao
skraceni operatori za operacije povecanja i smanjenja vrijednosti
varijable za 1. Dva su razloga za uvoDJenje ovih operatora. Prvo, opracije
inkrementa i dekrementa su vrlo ceste u C programima te ovi operatori
olaksavaju pisanje, i drugo ovi operatori omogucuju C prevodiocu
generisanje brzeg objektnog koda. Operatori mogu biti navedeni u dvije
forme prefikx i postfix.

15. Prioritet i asocijativnost aritmetickih operatora


Postoje pravila prioriteta i asocijativnosti operatora koji precizno
definisu kako se izraz izracunava. Pravila prioriteta slijede matematicka
pravila prioriteta.
Operatori (prioriteti po redovima)
Asocijativnost
( ), ++ (postfix), --(postfix) Sa lijeva udesno
+ (unarni), - (unarni), ++(prefix), -- (prefix) Sa lijeva udesno
*, /, % Sa lijeva udesno
+, - Sa lijeva udesno
<, <=, =>, > Sa lijeva udesno
= =, != Sa lijeva udesno
&& sa lijeva udesno
|| sa lijeva udesno
=, +=, -=, *=, /=, %= sa desna ulijevo
16. Relacioni, logicki, jednakostni opeartori i izrazi
C podrzava sirok skup relacionih i logickih operatora. Oni se koriste za
formiranje relacionih i logickih izraza. Relacioni operatori se odnose na
relacije izmeDJu vrijednosti varijabli ili izraza, dok se logicki
operatori odnose na nacine povezivanja voh relacija. Ovi operatori zajedno
sa varijablama, konstantama i funkcijama formiraju izraze koji mogu biti
ili tacni ili lazni.

17. Operatori sa bitima


Za razliku od mnogih drugih jezika C podrzava potpun skup operatora za
manipulisanje bitima. Ovo je jedan od razloga zasto se C tretira jezikom
srednjeg nivoa. Ovi operatori podrazumijevaju manipulisanje pojedinacnim
bitima, karakter ili cjelobrojnim varijablama. Te manipulacije ukljucuju
postavljanje, testiranje, pomijeranje vrijednosti pojednih bita unutar
karakter ili cjelobrojne varijable. Znaci ovi operatori, mogu biti
koristeni samo sa podacima tipa int i char. Ovi operatori se najcesce
koriste pri pisanju porgrama koji sluze za upravljanje hardverskim
ureDJajima racunara i cesto su dio operativnog sistema racunara.

19. CAST operator


Iako C prevodilac izvrsava konverziju automatski po pravilama, to nije
uvjek ono sto se zeli u izrazu. U fragmentu C programa : int i,k; float
x,y; i=25; k=10; x=10.0; y=x+i/k; vrijednost varijable y ce biti 12.0, a
ne 12.5 iz jednostavnog razloga sto je C prevodilac primjenio pravila o
konverziji. Pri dijeljenju dva cijela broja (i/k), po pravilu, rezultat je
cijeli broj, tj. 2, umjesto 2.5, te se time izgubio dio rezultata. Da bi
ovo izbjegli koristimo CAST operator. Opsta forma CAST operatora je (tip
podatka)izraz; prethodni izraz bi trebali napisti u ovom obliku :
y=x+(float)i/k; Sada bi se obje varijable (i,k) konvertoavale u float, te
time rezultat dijeljenja je 2.5, pa je y=12.5, a ne 12.0 kako je to u
prvom slucaju.

20. Kontrola toka programa – if naredba


Opsta forma if naredbe data je sa : if (izraz) naredba; //ovo je prosta
naredba ili if (izraz) { naredba1; naredba2; .... //ovo je slozena naredba
naredban; } Pravlio izvrsavanja if naredbe je : ako je sracunata
vrijednost izraza istina (ne nulta vrijednost) onda se izvrsava naredba
ili slozena naredba (skup naredbi ogranicen {}), a potom se izvrsava
slijedeca naredba iza if naredbe. A ako je sracunata vrijednost izraza
neistinita (nulta vrijednost) onda se naredba ili slozena naredba preskace
(ne izvrsava se) i tok programa se prenosi na slijedecu naredbu iza if
naredbe. Izraz u if naredbi je uobicajeno relacioni, jednakosni ili
logicki izraz, ali svaki dopusteni izraz je moguc. Vazno je zapamtiti da C
tretira istinom sve sto je razlicito od nule(slika-dijagram toka).
21. Kontrola toka programa – if-else naredba
Opsti forma if-else naredbe data je sa : if (izraz) naredba1; //ovo je
prosta nareba else naredba2; //ovo je prosta nareba ili if (izraz) {
naredba1; naredba2; //ovo je slozena naredba .... naredban; } else {
naredban1; naredban2; //ovo je slozena naredba ... naredbanm; }
Pravilo izvrsavanja if else naredbe je : ako je sracunata vrijednost
izraza istina (ne nulta vrijednost ), onda se izvrsava naredba ili slozena
naredba (skup naredbi ogranicen sa {}) iza kljucne rijeci if, a potom se
izvrsava sledeca naredba iz if-else naredbe. Ako je sracunata vrijednost
neistina (nulta vrijednost) onda se izvrsava naredba ili slozena naredba
iza kljucne rijeci else a potom se tok programa prenosi na slijedecu
naredbu iza if else naredbu. Znaci uvijek se izvrsava ili naredba iza if-
kljucne rijeci ili naredba iza else kljucne rijeci, a nikad obadvije.
Izraz u if naredbi je uobicajeno relacioni, jednakosni ili logicki izraz,
ali svaki dopusteni izraz je moguc.(slika-dijagram toka)

22. Ugnijezdene if i if-else naredbe


Slozene naredbe (blok naredbi izmeDJu {}) u if-else naredbi mogu da sadrze
bilo kakve naredbe ukljucujuci druge if-else naredbe za potrebe
kompleksnijeg odlucivanja. if (izraz1) if (izraz2) naredba1; else
if(izraz3) { naredba2; naredba3; naredba4; } else naredba5; else naredba4;
(pitanje 72 objasnjava funkcionisanje ugnjezdene if i if-else naredbe)

23. if-else lanac


U opstem slucaju ugnjezdene if-else naredbe teze konfuziji, i najbolja
praksa je da se izbjegnu ukoliko je moguce. MeDJutim, jedna vrlo korisna
programska konstrukcija moze biti izvedene koristenjem if-else naredbi
(slika-dijagram toka). if (izraz1) naredba1; else if (izraz2) naredba2;
else naredba3; Ova forma ugnjezdenih if-else naredbi je ekstremno korisna
u praksi, i formalo se naziva if-else lanac. If-else lanac moze biti
proizvoljne duzine.

24. switch naredba


C naredba switch osigurava alternativu if-else lancu u slucajevima koji
porede vrijednost cjelobrojnog izraza sa specificnim vrijednostima. Opsta
forma switch naredbe data je sa : switch (izraz) { // pocetak switch
naredbe case vrijednost_1 : // linja okoncana sa tacka-tacka (:) znakom
naredba1; // naredba okoncana sa standardnim (;) naredba2; ... break; ....
case vrijednost_n : naredbax; naredbay; ... break; default : naredbamn;
naredbamm; ... } // kraj switch naredbe
Kljucna rijec switch identificira pocetak switch naredbe. Izraz u
zagradama iza switch rijeci se sracunava i rezultat se poredi sa raznim
vrijednostima unutar slozene naredbe. Rezultat izraza mora biti cijeli
broj, inace prevodilac ce javiti gresku. Kljucna rijec case se javlja
unutar switch naredbe. Kljucna rijec case sluzi za oznacavanje
individualne vrijednosti koja se poredi sa vrijednoscu switch izraza.
Vrijednost switch izraza se poredi sa svakom od case vrijednosti po redu
kako su navedene u naredbi, dok se ne naDJe jednakost. Kada se naDJe
jednakost izraza i case vrijednosti, pocinju se izvrsavati naredbe iza
case vrijednosti gdje je naDJena jednakost. Ako vrijednost izraza nije
nijednoj od navedenih case vrijednosti, ne izvrsava se ni jedna naredba
ukoliko nije koristena kljucna rijec default. Kljucna rijec default je
opciona i ima istu ulogu kao i zadnji else u if-else lancu. Naime, ako
vrijednost nije jednaka ni jednoj case vrijednosti, izvrsavaju se naredbe
iza kljucne rijeci default. Nakon lociranja ulazne tacke u switch naredbi
odnosno nalazenja prve jednakosti sve sljedece case komparacije se
ignorisu, te se naredbe izvrsavaju sekvencijalno do kraja switch naredbe,
ukoliko se ne naiDJe na break naredbu. Ovo je razlog zasto se koristi
break naredba. Naime, break naredba sluzi za oznacavanje kraja skupa
naredbi u svakom pojedinacnom case, na taj nacin sto break naredba
uzrokuje trenutno napustanje switch naredbe i prenosi tok programa na prvu
naredbu iza switch naredbe. Ako nije navedena break naredba, sve naredbe
iza ulazne tacke ukljucujuci i naredbe i za default ce biti izvrsene.

25. Kontrola toka programa - for petlja


for petlja se koristi za rjesavanje problema ponavljanja odreDJene sekcije
programa, zeljeni broj puta. Ovo je petlja sa testiranjem uslova na
pocetku. Opsta forma: for(inicijalizacija; test izraza; azuriranje){
naredba 1; naredba 2;ů naredba n; } Izvrsava se u sljedecim koracima:
1. Prije ulaska u petlju sracunavaju se izrazi navedeni u petlji na
poziciji inicijalizacije
2. Sracunava se izraz naveden na poziciji test izraza, ako je vrijednost
test izraza tacna
a) Izvrsavaju se naredbe
b) Sracunava se izraz na poziciji azuriranja
c) tok programa se vraca na korak 2
Ako vrijednost izraza nije istinita, petlja se zavrsava i preskace se dio
programa, prelazi se na naredbu iza for petlje

26. Kontrola tokajprograima – while petlja


while petlja testira uslov na pocetku. Predstavlja varijabilnu petlju a
moze se koristiti i kao brojacka petlja. Opsta forma: while(izraz){
naredba 1; naredba 2; … naredba n; } Izvrsava se u sljedecim koracima:
1. Sracunava se vrijednost izraza
2. Ako je vrijednost istinita
a) Izvrsavaju se naredbe
b) program se ponovo vraca na korak 1
3. Ako vrijednost izraza nije istinita, petlja se zavrsava i preskace se
dio programa, prelazi sa na naredbu iza while petlje.

27. Kontrola toka programa – do while petlja


do while petlja je slicna while petlji, s tim sto se kod nje testiranje
petlje vrsi na kraju petlje, sto znaci da se ona izvrsi barem jedanput.
do{ naredba 1; naredba 2;… naredba n; } while(izraz); Izvrsava se u
sljedecim koracima:
1. Izvrsi naredbu u tijelu petlje
2. Sracuna vrijednost izraza
3. Ako je vrijednost izraza istinita vraca se na pocetak petlje, ako nije
istinita nastavlja se sa izvrsavanjem prve naredbe iz while(izraz)
naredbe.

28. Ugnjezdene petlje


Moguce je imati jednu petlju unutar druge petlje odnosno jednu petlju
ugnijezdenu unutar druge. Ova mogucnost daje veliku fleksibilnost u
rjesavanju problema. U stvari broj ugnijezdenih petlji samo je odreDJen
mogucnostima datog racunarskog sistema. Opsta struktura ugnijezdenih
petlji je dana : pocetak prve petlje { pocetak druge pettje { kraj druge
petlje} kraj prve petlje }

29. Naredba break


Dodatno upravljanje petljama moze biti postignuto koristenjem naredbi
break, contiue i goto. Ukoliko se u tijelu petlje nalazi naredba break,
njeno izvrsavanje prouzrokuje trenutno napustanje petlje, odnosno
ignorisanje standardnog nacina napustanja preko testiranja uslova. Tok
programa se dakle trenutno prenosi na prvu naredbu iza petlje. while(izraz
1) { naredba 1: if(izraz 2) { break; } . . . naredba n; } prva_naredba; Iz
fragmenta jasno vidimo da ako je izraz 2 ispunjen, break naredba
bezuslovno prouzrokuje zavrsetak petlje i prenosi tok programa na
prva_petlja, preskacuci ostatak naredbi u tijelu petlje. Ova naredba
prekida samo onu petlju u cijem se tijelu nalazi.

30. Naredba continue


Ukoliko se u tijelu nalazi naredba continue, njeno izvrsavanje trenutno
prenosi tok programa na izvrsavanje izraza koji definise uslov nastavka
iteracije petlje. Znaci ova naredba preskace naredbe iza continue unutar
tijela petlje i prelazi direktno na sledecu iteraciju. While(izraz 1) { .
. . naredba_prije; if(izraz 2) { continue; } naredba_iza; . . . } Ukoliko
je izraz 2 ispunjen, naredba continue prouzrokuje preskakanje svih
naredba_iza i prenosi tok programa na testiranje normainog uslova
zavrsetka petlje izraz 1.

31. Naredba goto


Ukoliko se u tijelu nalazi naredba skoka goto, njeno izvrsavanje trenutno
prouzrokuje napustanje prtlje i prijenos toka programa na naredbu
definisanu goto naredbom. Ne preporucuje se koristenje ove naredbe, jer
narusava paradigmu programa, te komplikuje i otezava odrzavanje velikih
programa. Iako u nekim slucajevima moze uprostiti program, svaki dio
programa je moguce napisati bez goto naredbe. while( izraz 1) { . . .
while(izraz 2) { . . . if(USlOV) { goto iza_svih_petlji; } } }
iza_svih_petlji; naredba; . . .

32. Funkcije. programski moduli u C


Programski moduli u C jeziku se nazivaju funkcije. Kao sto je vec poznato
svaki C program mora da sadrzi barem jednu funkciju tj. Funkciju main ()
koja sluzi kao pocetna funkcija C programa. Pored main () funkcije, C
program moze da koristi prakticno proizvoljan broj drugih funkcija koje
izvrsavaju zeljene zadatke. Tipican C program se pise kombinirajuci
funkcije koje se nalaze u standardnoj biblioteci C jezika (predefinisane
funkcije) i novih funkcija (korisnicki definisane) koje razvija programer.
Funkcija se koristi u C programu tako sto se u zeljenoj tacki programa
izvrsi poziv funkcije. Poziv funkcije uzrokuje prijenos toka programa u
pozvanu funkciju u cilju izvrsavanja zadatka funkcije, te nakon zavrsetka
obrade tok programa se ponovo vraca u pozivajucu funkciju. Ocigledne su
slijedece prednosti koje donosi dijeljenje programa u funkcije:
1. Dijeljenje programa pomaze u nalazenju boljeg rjesenja. te olaksava
programsku implementaciju.
2. Funkcije pomazu organizaciju programa.
3. Funkcije su mali blokovi programskog koda te ih je lakse razvijati i
odrzavati.
4. Ista funkcija moze se koristi vise puta u istom ili drugim programima.
5. Moze se pozvati iz bilo kojeg dijela programa.
6. Nije potrebno poznavati interni kod funkcije da bi se ona koristila,
potrebno je samo znati interfejs funkcije da bi se koristila.

33. Predefinisane funkcije


To su vec napisane funkcije koje su grupisane prema funkcijonalnosti i
koristenju u datoteke koje se nazivaju biblioteke.
Svaka biblioteka je asocirana sa takozvanom zaglavlje datotekom i ima .h
ekstenziju.
Zaglavlje datoteke sadrzi prototipove funkcija u bibliotekama te
definicije tipova
podataka i konstanti potrebnih funkcija. Koristenje funkcija odgovarajuce
biblioteke
zahtjeva ukljucivanje zaglavlje datoteke u C program. Prilikom pozivanja
funkcije biblioteke u
C programu, linker kopira objektni kod funkcije iz specificirane
biblioteke i dodaje ga C programu.
Zaglavije datoteke ANSI/ISO C standardnih biblioteka.
<asert.h> - sadrzi makroe i informacije za dodavanje dijagnostickih
mogucnosti c programa u svrhu otkrivanja gresaka ,
<ctype. h> - sadrzi prototipove funkcija koji testiraju svojstva karaktera
te za konverziju karaktera kao sto je pretvaranje velikih u mala slova i
obratno ,
<errno. h> definise makroe za izvjestavanje o uslovima gresaka ,
<locale. h> - sadrzi prototipove funkcija i druge informacije koje
omogucuju modifikaciju programa za zeljenje lokalne prikaze podataka kao
sto su datum, vrijeme, dolar i veliki brojevi
<floath> - sadrzi informacije o granicama relanih brojnih sistema
<limits. h> - sadrzi informacije o granicama cijelih brojeva sistema
<math. h> - sadrzi prototipove matematickih funkcija
<stdlib. h> - sadrzi prototipove funkcija za konverziju brojeva u tekst i
obrnuto, alociranje memorije, generisanje slucajnih brojeva, . . .
<string. h> - sadrzi prototipove funkcija za obradu nizova karaktera
<time. h> - sadrzi prototipove funkcija i definicije tipova podataka za
obradu vremena i datuma
<setjmp.h> - sadrzi protipove funkcija koje omogucuju zaobilazenje
normalne sekvence pozivanja povratka iz funkcija

34. Korisnicki definisane funkcije – deklarisanje funkcija


Korisnicki definisane funkcije kodira programer sa ciljem izvrsvanja
odreDJenog zadatka odnosno podatka u cjelokupnom programu. Opsta forma
deklarisanja funkcija je: tip_funkcije ime_funkcije (lista parametara);
tip_funkcije - je tip vrijeanosti koju funkcija vraca funkciji koja je
poziva. ime_funkcije - je ime funkcije, pri cemu se koriste ista pravila
pri davanju imena kao i za davanje imena varijablama. Ime sluzi za
jednoznacnu identifikaciju. lista parametara - specifira tip podatka koji
se prenose u funkciju. Tip parametra se navodi u malim zagradama, a
ukoliko ih ima vise, odvajaju se zarezima. Vaznost u deklarisanju funkcije
je u smanjenju broja gresaka programiranja.

35. Korisnicki definisane funkcije – definisanje funkcije


Ove funkcije kodira programer i one sluze za izvrsavanje odreDJenog
zadatka odnosno podzadatka u cjelokupnom programu. Definicija funkcije se
sastoji od dva dijela, zaglavlja i tijela funkcije, opsta forma definicije
funkcije je: tip_funkcije ime_funkcije (liasta parametara) { tijelo
funkcije } tip__funkcije - je tip vrijednosti koju funkcija vraca funkciji
koja je poziva ime_funkcije - ili identifikator je ime funkcije, pri cemu
se koriste ista pravila pri davanju imena kao i za davanje imena
varijablama. ime sluzi za jednoznacnu identitikaciju. lista parametara -
specifira tip podatka koji se prenose u funkciju, tip parametra se navodi
u malim zagradama, a ukoliko ih ima vise, odvajaju se zarezima. Iza
zaglavlja funkcije slijedi blok deklaracija variabli i naredbi izmeDJu
viticastih zagrada, odnosno tijelo funkcije. U tijelu funkcije se
implementira algoritam koji rijesava zadatak dodjeljen funkciji.

36. Korisnicki_definisane funkcije – pozivanje funkcija


Ove funkcije kodira programer i one sluze za izvrsavanje odreDJenog
zadatka odnosno podzadatka u cjelokupnom programu. Poziv funkcije je
naredba koja poziva izvrsavanje date funkcije navoDJenjem njenog imena i
liste argumenata koji se prenose u funkciju. Opsta forma je: variabla =
ime_funkcije (lista argumenata); ime_funkcije - ime funkcije koja se
poziva lista argumenata - identificira argument koji se prenose u funkciju
variabla - identificira varijablu u koju ce biti smjestena vracena
vrijednost iz funkcije. Broj i tip argumenata pri povezivanju funkcije
treba biti isti kao broj i tip parametara u deklaraciji odnosno definiciji
funkcije. TakoDJe tip varijable u koju se smjesta vracena vrijednost iz
funkcije treba da odgovara tipu funkcije.

37. Naredba return


Ova naredba se moze koristiti u dvije svrhe:
1. Izvrsenje naredbe return bilo gdje u tijelu funkcije uzrokuje trenutno
napustanje funkcije i povratak u pozivajucu funkciju. Ukoliko funkcija ne
sadrzi naredbu return funkcija se izvrsava nakon izvrsenja zadnje naredbe
u funkciji, odnosno kada tok programa dostigne zavrsnu viticastu zagradu
tijela funkcije.
2. Ukoliko funkcija treba da vrati vrijednost u pozivajucu funkciju tada
se koristi naredba return za vracanje sracunate vrijednosti i istovremeno
napustanje funkcije.
Dakle:
*1. Fragment funkcije - prva forma: naredba; … return; /* napustanje
funkcije i vracanje u pozivajucu funkciju */ … *2. Fragment funkcije -
druga forma: naredba; … return izraz; /* vracanje vrijednosti izraza i
povratak u pozivajucu funkciju*/ … U funkcijama koje ne vracaju
vrijednosti (VBLD) za potrebe zavrsetka funkcije u zeljenoj tacki tijela
funkcije koristi se prva forma. Ukoliko funkcija vraca vrijednost za
potrebu vracanja vrijednosti i zavrsetka funkcije u zeljenoj tacki tijela
funkcije koristi se druga forma, gdje je izraz proizvoljan.

38. Komunikacija izmeDJu funkcija


Sa aspekta pozivajuce funkcije pozvana funkcija je crna kutija kojoj
pozivajuca funkcija prenosi skup potrebnih argumenata pri pozivu i
prihvata vracenu vrijednost pri zavrsetku funkcije u skladu sa
deklaracijom. Funkcija se dakle ponasa kao blok sa vise ulaza i jednim
izlazom. Sekvenca dogaDJaja pri pozivanju funkcije je sledeca:
1. Poziva se funkcija
2. Argumeti iz naredbe pozivanja funkcije se kopiraju u parametre pozvane
funkcije, tj. parametri poprimaju vrijednost argumenata
3. Tok programa se prenosi u pozvanu funkciju
4. Pocinje izvrsavanje programskog koda funkcije
5. Kada je kod funkcije zavrsen izvodi se vracanje vrijednosti u
pozivajucu funkciju.
6. Tok programa se vraca u pozivajucu funkciju, odnosno na prvu naredbu
iza poziva upravo zavrsene funkcije

39. Vidljivost varijabli


Lokalne varijable su one varijable koje su deklarisane unutar C bloka tj.
dijela programa markiranog parom viticastih zagrada {. . . }. Posto su C
funkcije takoDJe C blokovi, mozemo reci da su lokalne varijable sve one
koje su deklarisane u tijelu funkcije ukljucujuci deklarisane parametre
funkcije, i konsekventno su vidljive samo u funkciji gdje su i
deklarisane. Globalnu varijablu vidi odnosno moze da manipulise vise
razlicitih funkcija. Globalna varijabla se kreira tako sto se izvrsi
deklaracija varijable izvan tijela svih funkcija. Ovu globalnu varijablu
moze koristiti svaka funkcija koja je fizicki definisana u datoteci
izvornog programa iza deklaracije globalne varijable. Ukoliko postoji i
globalna i lokalna varijabla sa istim imenom, tada se referenciranjem tog
imena manipulise lokalna varijabla.

40. Memorijske klase varijabli – automatska


Ova dimenzija referise vrijeme zivota od trenutka nastajanja variable u
memoriji racunara do njenog uklanjanja iz memorije racunara. Gdje i kako
dugo se rezervise memorija za variablu definise memorijska klasa variable.
Kljucna rijec je „auto" sluzi za definisanje automastske memorijske klase
variabli. Ukoliko se ova kljucna rijc upotrebljava za definisanje
memorijske klase onda se ona smjesta ispred tipa i imena u naredbi
deklarisanja variable. Lokale varijable su one koje se deklarisu u
funkciji. Primjenjuje se na lokalne varijable. Ukoliko se pri deklaraciji
lokalne varijable ne navede kvalifikator memorijske klase onda se
varijabla smatra da ima automatsku klasu. Varijable sa automatskom klasom
se kreiraju odnosno zauzimaju memorijski prostor samo pri dolasku toka
programa u blok ili funkciju u kojoj su one deklarisane. Sve dok se tok
programa nalazi u bloku ili funkciji ove variable zive i njihove
vrijednosti mogu biti manipulisane. Cim tok programa napusti blok ili
funkciju ove varijable umiru, odnosno vracaju zauzeti memorijski prostor
racunaru. Jasno da sa vracanjem koristene memorije za potrebe variabli
nestaju i vrijednosti ovih varijabli. Ove varijable se svaki put nanovo
kreiraju, koriste i na kraju unistavaju pri svakom novom pozivu bloka ili
funkcije. Sad je jasan i razlog naziva ove memorijske klase, naime proces
rezervisanja i oslobaDJanja memorije za potrebe varijabli se odigrava
automatski, tj. bez programera. Sustinska korist od automaske variable je
da skupocjenu i ogranicenu memoriju racunara optimalno iskoristi, tj. samo
kad je potrebna.

41. Memorijske klase varijabli – staticka


Ova dimenzija referise vrijeme zivota od trenutka nastajanja variable u
memoriji racunara do njenog uklanjanja iz memorije racunara. Gdje i kako
dugo se rezervise memorija za variablu definise memorijska klasa variable.
Kljucna njec je „static" sluzi za definisanje staticke memorijske klase
variabli. Ukoliko se ova kijucna rijec upotrebljava za definisanje
memorijske klase onda se ona smjesta ispred tipa i imena u naredbi
deklarisanja variable. Globalne varijable su one koje se definisu izvan
funkcije. Primjenjuje se na lokalne i globalne varijable. Svrha staticke
memorijske klase je da neka varijabla sacuva vrijednost izmeDJu
sukcesivnih poziva funkcije, tj. da se duze pamti. Ova varijabla traje
toliko dugo koliko traje i izvrsavanje cijelog programa. To zanci da se
staticka varijabla kreira samo jedanput, i to pri startu programa. Posto
varijabla rezervise trajno potreban memorijski prostor, onda je prirodno
da ona cuva vrijednost izmeDJu sukcesivnih poziva funkcije. One takoDJe
mogu biti inicijalizirane pri deklarisanju. Vazno je zapaziti da se
inicijalizacija staticke varijable odigrava samo jedanput i to pri startu
izvrsavanja programa, a ne svaki put pri izvrsavanju funkcije. TakoDJe,
kod neinicijaliziranih automatskih varijabli je vrijednost nepoznata, dok
se za neinicijalizirane staticke varijable vrijednost implicitno
inicijalizira na nulu. Lokalne varijable su one koje se deklarisu u
funkciji.

42. Memorijske klase varijabli – eksterna


Ova dimenzija referise vrijeme zivota od trenutka nastajanja variable u
memoriji racunara do njenog uklanjanja iz memorije racunara. Gdje i kako
dugo se rezervise memorija za variablu definise memorijska klasa variable.
Kljucna njec je „extern" sluzi za definisanje eksterne memorijske klase
variabli. Ukoliko se ova kljucna rijec upotrebljava za definisanje
memorijske klase onda se ona smjesta ispred tipa i imena u naredbi
deklarisanja variable. Globalne varijable su one koje se definisu izvan
funkcije. Primjenjuje se na globalne varijable. Eksterna klasa nema efekta
na vrijeme zivota globalnih varijabli, posto su one trajne, nego utice na
vidijivost ili doseg globalnih varijabli. Smisao kvalifikatora extern je
upravo u prosirenju opsega vidljivosti globalne varijable preko granica
jedne datoteke. Naime deklaracije extern u datoteci aocde. c omogucuje
vidijivost varijable i u funkcijama defisanim u datoteci aocde. c. Znaci
manipulisanje varijable je sada moguce iz svih funkcija programa.

43. Memorijske klase varijabli – registarska


Kljucna njec je „register" sluzi za definisanje registarske memorijske
klase variabli. Ukoliko se ova kljucna njec upotrebljava za definisanje
memorijske klase onda se ona smjesta ispred tipa i imena u naredbi
deklarisanja variable. Lokale varijable su one koje se deklarisu u
funkciji. Primjenjuje se na lokalne varijable. Registarska klasa se u
potpunosti ponasa kao automatska sto se tice vremena zivota, jedina
raziika je gdje se vrsi rezervisanje memorije za varijablu. Automatske
varijable se rezervisu u RAM memoriji, odnosno na stek dijelu RAM
memorije. MeDJutim CPU ima mali broj vrlo brzih registara koji mogu biti
upotrebljeni. U stvari kvalificiranje varijable sa register kvalifikatorom
trazi od procesora rezervisanje nekog od njegovih registara za varijablu,
sto bi ubrzalo obradu varijable. Zbog malog broja ovih registara
prevodilac ovu klasu konvertuje u automatsku ukoliko su svi registri
zauzeti. Ali ova memorijska klasa se ne koristi vrlo cesto.

44. Rekurzija
C automatski alocira novu memoriju na steku za argumente i lokalne
varijable funkcije pri svakom pozivu funkcije. Ovo dozvoljava da funkcija
poziva samu sebe. Funkcije koje pozivaju samu sebe, nazivaju se rekurzivne
funkcije. Rekurzija u drugom smislu znaci da se rjesavanje problema vrsi
na taj nacin sto se rijesavaju jednostavnije verzije originalnog problema.
Rekurzivni algoritmi rijesenje problema mogu biti programski
implementirani koristenjem rekurzivnih funkcija, odnosno rekurzivni
algoritam moze biti implementiran sa rekurzivnom funkcijom. Vazno je
napomenuti da svaka rekurzivna funkcija uvijek moze biti napisana kao
nerekurzivna funkcija koristenjem iterativnog rijesenja rekurzivnog
problema. u opstem slucaju pri rjesavanju rekurzivnih problema, pri
implementaciji rjesenja problema prednost treba dati iterativnim
implementacijama u odnosu na rekurzivne implementacije. MeDJutim u nekim
slucajevima je rekurzivna implementacija daleko jednostavnija i
elegantnija nego ekvivalentna iterativna implementacija.

45. Adrese i pokazivaci


Svaka varijabla je asocirana sa odreDJenim prostorom u memoriji racunara,
koji je potreban za memorisanje vrijednosti varijabli. Deklaracija
varijabli upravo instruira C prevodilac za rezervisanje memorije za
varijablu. Nakon rezervisanja memorije u programu ime varijable se koristi
za manipulisanje rezervisane memorije odnosno pisanje ili citanje u
rezervisanu memoriju. Naravno da svaka varijabla u programu na interno
adresu u memorijskom prostoru programa, odnosno adresu prvog alociranog
bajta memorije varijable. Ove vrijednosti internih adresa varijabli mogu
biti storirane (memorisane) u druge varijable i manipulisane po pravilima
o manipulaciji adrese. U C jeziku adrese varijabli se nazivaju pokazivaci
na varijable, a varijable koje mogu da storiraju vrijednosti adresa se
nazivaju pokazivacke varijable ili pokazivaci.

46. Deklarisanje pokazivaca


Pokazivaci su varijable specijalno namjenjene za storiranje i
manipulisanje adresa varijabli. Pokazivacke varijable kao i sve ostale
varijable u C moraju biti deklarisane prije koristenja. Deklarisanje
naravno ukljucuje specificiranje tipa i imena pokazivacke varijable. U
slucaju deklarisanja pokazivacke varijable, specificiranje tipa pokazivaca
se odnosi u stvari na tip varijable ciju adresu pokazivac moze storirati
odnosno manipulisati. Opsta forma deklaracije je: tip_podatka *
ime__pokazivaca; tip_podatka - je bilo koji validan C tip kao int, float,
. . . *(asteriks) - je symbol koji indicira da se radi o pokazivackoj
varijabli ime_pokazivaca - je korisnicko dato ime pokazivackoj varijabli.
Pokazivackim varijablama moze biti dodjeljena vrijednost koristenjem
standardnog operatora dodjeljivanja (=), pri cemu se mora biti pazljiv da
je dodjeljivana vrijednost validna adresa. Programer elegantno dodjeljuje
vrijednost pokazivacima koristenjem operatora nalazenja adresa varijabli,
tj. operatora &. int duzma; int *pduzina; pduzina = &duzina;
47. Operator dereferenciranja (indirekcije)
Pokazivaci mogu biti koristeni za manipulisanje varijablama koristenjem
njihovih adresa umjesto njihovih imena, odnosno pokazivaci osiguravaju
pristup svakoj memoriskoj lokaciji koristenjem njenih adresa. C osigurava
operator dereferenciranja za ovu svrhu. Simbol *(asteriks) predstavlja
unarni operator dereferenciranja ukoliko je smjesten ispred imena
pokazivacke varijable i sluzi za dobivanje ili postavljanje vrijednosti
objekta na koji pokazivac pokazuje (ciju adresu pokazivac sadrzi). U
opstem slucaju dereferenciranje je dato: *ptr = var; Ova naredba
dodjeljuje objetku na koji pokazuje pokazivac ptr vrijednost varijable
var. var = *ptr A ova naredba dodijeli varijabli var vrijednost objekta na
koji pokazuje pokazivac ptr.

48. Aritmetika sa pokazivacima


Pokazivaci kao i ostale varijable sadrze neke vrijednosti, ali su one
memorijske adrese. U tom kontekstu pokazivaci su validni operandi u
aritmetickim izrazima dodjeljivanja i poreDJenja. Naravno ne mogu biti
izvedene sve operacije, zbog toga sto su te vrijeanosti memorijske adrese,
vec moze biti izveden samo ogranicen set aritmetickih operacija:
1. Pokazivac moze biti inkrementiran ili dekrementiran
2. Cijeli broj moze biti dodan ili oduzet od pokazivaca a.
3. Drugi pokazivac moze blti dodan ili oduzet od pokazivaca
Pokazivaci mogu biti poredeni koristenjem svih operatora ali se kod
izvDJenja aritmetickih operacija sa pokazivacima mora voditi racuna da
rezultat operacije proizvodi adresu koja ima smisla. Ako vrsimo obicno
aritmeticko sabiranje broja 5000+1 dobijamo za rezultat 5001, sto nije
slucaj u aritmetici sa pokazivacima. Kad se cijeli broj doda ili oduzme od
pokazivaca nije jednostavno umanjen ili uvecan za taj broj, nego za taj
broj pomnozen brojem bajta koje zauzima objekat na koji pokazuje
pokazivac. Npr. Cijeli broj -» 9998+(5*2)=1008 Realan broj -*
9998+(5*4)=1018

49. Pokazivaci na pokazivace


Moguce je imati i pokazivac na pokazivac. Posto je pokazivac varijabla
koja ima svoju adresu u memoriji racunara, Moguce je deklarisati drugu
varijablu koja je pokazivac na pokazivacku varijablu. Pokazivac na
pokazivac moze da storira vrijednosti adresa pokazivackih varijabli.
Pokazivac na pokazivac varijabla takoDJe mora biti deklarisan prije
upotreba. Opsta forma deklaracije je: tip podatka ** ime__pokazivaca;
tip_podatka – je bilo koji validan C tip kao int, float, . . . **(dva
asteriks znaka) - je simbol koji indicira da se radi o pokazivac na
pokazivac varijabli Ime pokazivaca - je korisnicki dato ime pokazivac na
pokazivac varijabli Pokazivac na pokazivac varijabla takoDJe moze biti
koristena za indirektni pristup vrijednosti varijable koristenjem
operatora za dvostruko dereferenciranje. Simobl ** predstavlja unarni
operator dvostrukog dereferenciranja ukoliko je smjesten ispred imena
pokazivac na pokazivac varijable i sluzi za dodavanje ili postavljanje
vrijednosti objekta na koji se pokazuje. **ptrptr = var; Ova naredba
dodjeli objektu na koji pokazuje pokazivac na pokazivac ptrptr vrijednost
varijable var. var =**ptrptr; A ova naredba dodijeli varijabli var
vrijednost objekta na koji pokazuje pokazivac na pokazivac ptrptr. Ove
naredbe zahtjevaju postojanje pokazivacke varijable cija je vrijednost
adresa manipulisane varijable, a vrijednost pokazivac na pokazivac
varijable ima vrijednost adrese pokazivacke varijable, sto i jest smisao
dvostrukog dereferenciranja.

50. Pokazivaci i funkcije


Pri pozivu funkcije, funkcija prima listu argumenata iz pozivajuce
funkcije (parametre), zatim izvodi zeljenu obradu te vraca jednu ili ni
jednu vrijednost pozivajucoj funkciji prije povratka. Ovakav nacin
pozivanja funkcije naziva se poziv po vrijednosti(call by value). Ovakav
aranzman, tj. poziv po vrijednosti donosi znacajnu programersku korist,
naime ovo omogucuje sigurno pisanje funkcije kao nezavisnog entiteta bez
bojazni da funkcija greskom ili nepaznjom moze promjeniti vrijednosti u
drugim funkcijama. MeDJutim postoje situacije kada je pozeljno da pozvana
funkcija ima pristup varijablama pozivajuce funkcije . Ovaj aranzman
omogucuje pozvanoj funkciji da promjeni vrijednost varijabli pozivajuce
funkcije i na taj nacin efektivno ostvari visestruke vracene vrijednosti a
ne samo jednu (vise ulaza vise izlaza). Poziv funkcije sa prenosom adrese
varijable (varijabli) u funkciju umjesto njihove vrijednosti naziva se
poziv po referenci(call by reference) jer pozvana funkcija moze
referencirati (pristupiti) varijabli koristenjem prenesene adrese. Da bi
razvili i koristili funkciju koja prihvata poziv po referenci potrebno je:
-Koristiti operator nalazenja adrese & pri pozivu funkcije
-Kao parametre funkcije koristiti odgovarajuce pokazivace za storiranje
prenesenih adresa
-Koristiti operator dereferenciranja (indirekcije) * za pristup
varijablama preko njihovih adresa

51. Pokazivaci na funkcije


Pokazivaci na funkcije predstavljaju drugi nacin pozivanja funkcija. lako
funkcija nije varijabla ona ima fizicku lokaciju u memoriji racunara koja
moze biti storirana u pokazivac na funkcjiu varijablu. Kada se program
upuni u memoriju radi njegovog izvrsenja kod svake funkcije programa se
upuni na specificiranu adresu. Ova adresa je ulazna tacka funkcije koja
moze biti storirana u pokazivac na funkciju varijablu. Nakon toga u
programu ovaj pokazivac moze biti koristen za poziv funkcije umjesto
standardnog poziva funkcije po njenom imenu. Kao i sa ostalim
pokazivacima, pokazivaci na funkcije moraju biti deklarisani pa tek
koristeni. Opsta forma deklaracije pokazivaca na funkciju je: tip podataka
(*pokazivac_na_funkciju ) (lista parametara); gdje su:
-tip podataka – predstavlja tip vrijednosti koje vraca funkcija i moze
biti svaki validan C tip kao sto je int, double itd.
-(*pokazivac_na_funkciju) – je ime pokazivaca na funkciju. () su obavezne.
-(lista parametara) predstavlja listu parametara funkcije.
52. Nizovi
Niz je kontinualna sekvenca memorijskih lokacija, gdje svaka lokacija
sadrzi vrijednosti istog tipa. Svaka lokacija se naziva element niza. Nizu
se dodjeljuje samo jedno ime, a elementima niza se pristupa navoDJenjem
imena niza i indeksa elementa u nizu.

53. Jednodimenzionalni nizovi


Kao i skalarne varijable, nizovi moraju biti deklarisani prije koristenja.
Prevodilac C jezika koristi informacije iz deklaracije kao sto je ime niza
i velicina niza, za rezervisanje potrebnog memorijskog prostora za
elemente niza te za racunanje indeksa za pristupanje elementima niza.
Opsta forma deklarisanja jednodimenzionog niza je data sa: tip podatka ime
niza [broj elemenata niza]; tip podatka – je tip podataka elemenata niza
Ime niza – je deklarisano ime niza [ ] – uglaste zagrade indentificiraju
niz, a broj u zagradama deklarise broj elemenata niza. Pristup elementima
niza , u stvari znaci mogucnost upisivanja i citanja vrijednosti elemenata
niza. Svakom elementu niza se dodjeljuje jedinstven broj, koji se naziva
indeks. U C programskom jeziku, indeks 0 se dodjeljuje prvom element,
indeks 1 drugom itd. Znaci moze se pristupiti svakom elementu niza,
specificirajuci ime niza i odgovarajuci indeks elementa kao na primjer:
cijene[3]=100. 55; referise cetvrti element u nizu cijene i dodjeljuje mu
vrijednost 100. 55. Treba zapamtiti slijedeca pravila u vezi sa nizovima:
-C ne kontrolise vrijednost indeksa, znaci da morate biti pazijivi da
vrijednosti indeksa budu u skladu sa duzinom niza,
-Indeks 0 je dodijeljen prvom elementu.
-Svaki cio broj moze biti koristen kao indeks.
Svaki individualni element niza moze biti koristen gdje i skalarna
varijabla istog tipa, znaci svaki element niza se smatra varijablom.
U stvamosti prava snaga obrade informacija struktuiranih u nizove dolazi u
savezu sa petljama, posebno u sprezi sa brojackim petljama, gdje se na
jednostavan nacin brojac u petlji koristi kao indeks niza, sto omogucava
elegantnu i kompaktnu obradu svih elemenata niza. Kao sto je moguce
inicijalizirati skalarne varijable prilikom deklarisanja, tako je moguce
inicijalizirati i nizove uvoDJenjem liste vrijednosti elemenata u
viticastim zagradama odvojenim zarezima. int tabela[4]={10, 20, 11, 22};
Tako je i moguce izostaviti dimenziju niza ukoliko se navedena lista
inicijalnih vrijednosti pri deklaraciji: inttabela[]={10, 20, 11, 22};
Moguce je navesti manji broj vrijednosti za inicijaliziranje od broja
elemenata niza int tabela[50]={1, 2, 3, 4}; Prva cetiri indeksa ce
poprimiti vrijednosti 1, 2, 3, 4 dok ce se ostalih 46 indeksa poprimiti
vrijednost 0. Ukoliko je inicijalizacija duza od niza, prevodilac C jezika
ce signalizirati gresku. int tabela[3]={1, 2, 3, 4};

54. Visedimenzioni nizovi


Dvodimenzioni nizovi ili kako se jos nazivaju i tabele sastoje se od
redova i kolona. Matrice su matematicki ekvivalent jedno i
dvodimenzionalnih nizova. U C programskom jeziku dvodimenzioni niz mora
biti deklarisan kao i sve ostale deklaracije: tip podatka ime
dvodimenzionog niza [broj redova][broj kolona]; ime dvodimenzionog niza je
deklarisano ime niza [ ][ ] – dva para uglastih zagrada identificiraju
dvodimenzioni niz, broj u prvom paru deklarise broj redova niza a broj u
drugom paru zagrada deklarise broj kolona niza. Svaki element u
dvodimenzionom nizu se jedinstveno locira navoDJenjem reda i kolone kojim
element pripada, odnosno navoDJenjem indeksa reda i kolone. U C
programskom jeziku prvom redu i koloni se dodjeljuje indeks 0, a drugom
redu i drugoj koloni indeks 1 itd. Kao i u slucaju jednodimenzionih
nizova, elegantna obrada podataka struktuiranih u dvodimenzione nizove se
postize koristenjem programskih petlji a najcesce for petlji.

55. Jednodimenzionalni nizovi i pokazivaci


Interno racunar ne razumije pojam indeksa niza nego prevodilac prevodi
referenciranje elemenata niza preko indeksa racunanjem adrese elemenata u
nizu, koristenjem pocetne adrese niza (niz je kontinualno rezervisan
prostor u memoriji), indeksa i velicine elemenata niza. Posto C jezik
podrzava pokazivacke varijable koje storiraju adrese, moguce je kreirati
pokazivac i dodijeliti mu vrijednost adrese prvog elementa niza te onda
pristupati elementima niza preko adresa, odnosno mozemo eksplicitno
simulirati interni nacin rada racunara pri pristupu elementima nizova.
Ostalim elementima niza pristupamo tako sto koristimo operator
dereferenciranja (indirekcije) * i relativne pozicije ostalih elemenata
niza od elementa 0.

56. Visedimenzioni nizovi i Pokazivaci


Kao i u slucaju jednodimenzionih nizova, moguce je pristupiti elementima
visedimenzionih nizova koristenjem notacije pokazivaca. Struktura
dvodimenzionog niza u memoriji racunara omogucuje razlicite nacine
pristupa elementima. Jedan nacin je razmatranje dvodimenzionog niza kao
jednodimenzionog niza redova gdje je svaki red jednodimenzioni niz
elemenata.

57. Funkcije i jednodimenzionalni nizovi


Individualni elementi nizova se prenose u funkcije na isti nacin kao i
skalarne varijable, u slucaju poziva funkcije preko vrijednosti ili sa
adresom elemenata pri pozivu funkcije preko reference. U funkciju moze
biti prenesen cijeli niz a ne samo njegovi elementi. Prenosenje cijelog
niza u funkciju je jednostavnija operacija od prenosenja pojedinacnih
elemenata. Pri pozivu funkcije deklarisane i definisane za prihvat niza,
funkcija prihvata ne cjelokupnu kopiju niza (koja moze biti zaista
ogromna, te bi bilo neprakticno kopirati sve elemente) nego samo adresu
pocetka niza. Ova cinjenica implicira da funkcija koristenjem adrese
pocetka niza moze da dohvati i manipulise sve elemente niza. Ova cinjenica
je jasnija ukoliko se podsjetite veze izmeDJu nizova i pokazivaca. Zbog
ove veze postoje dva nacina definisanja i deklarisanja funkcija ciji
parametri pored skalarnih vrijednosti sadrze i jednodimenzione nizove.
Standardna forma definicije funkcija ciji parametri su pored skalara i
jednodimenzioni nizovi je data kako slijedi: tip funkcije ime funkcije
(tip niz1[], tip niz2[], . . . . „tipn nizn[ ], lista skalara){ tijelo
funkcije; } tip funkcije (return type) predstavlja tip vrijednosti koju
funkcija vraca u pozivajucu funkciju npr, int, float, char. . . itd
identifikator funkcije je ime korisnicke funkcije tijelo funkcije
predstavlja programski kod i ostale varijable deklarisane u funkciji.
lista parametara sadrzi tipove i imena parametara funkcije. Parametri se
smjestaju izmeDJu malih zagrada i odvajaju zarezima. Standardna forma
deklaracija funkcija ciji parametri su pored skalara i jednodimenzioni
nizovi: tip funkcije ime funkcije (tip [ ], tip[ ]. . . . . „tip [ ],
lista tipova skalara); Pozivanje funkcije se jednostavno izvodi
navoDJenjem imena funkcije i liste argumenata (stvarnih parametara),
odnosno liste imena nizova i liste skalarnih varijabli, te prihvatanjem
vracene vrijednosti. Uzimajuci u obzir bliskost veze izmeDJu nizova i
pokazivaca, drugi nacin definisanja i deklarisanja funkcija ciji su
parametri jednodimenzioni nizovi je kako slijedi: tip funkcije ime
funkcije (tip*niz1, tip *niz2, . . . . „tip *niz[ ], lista skalara) {
tijelo funkcije; } tip funKcije (return type) predstavlja tip vrijednosti
koju funkcija vraca u pozivajucu funkciju npr, int, float, char. . . itd
identifikator funkcije je ime korisnicke funkcije Lista parametara sadrzi
tipove i imena parametara funkcije. Parametri se smjestaju izmeDJu malih
zagrada i odvajaju zarezima. tijelo funkcije predstavlja programski kod i
sve ostale varijable deklarisane u funkcijji. Deklaracija: tip funkcije
ime funkcije (tip*niz1, tip *niz2, . . . . „tip *niz[], lista skalara);

58. Stringovi (Jednodimenzionalni nizovi karaktera)


Obrada nizova karaktera cesto predstavlja znacajan dio programerskog
zadatka. Nacini da se stringovi storiraju u memoriju, kako im se pristupa
i kako se obraDJuju zavise od datog programskog jezika. U C programskom
jeziku stringovi su okoncani sa specijalnim karakterom tzv. null karakter,
cija vrijednost je binarna nula ili '\0' koji signalise kraj stringa. Ovo
znaci da je potrebna velicina memorijskog prostora potrebna za storiranje
stringa uvijek veca za jedan od broja karaktera u stringu. U C jeziku
string predstavlja svaka sekvenca karaktera omeDJenim sa navodnicima " "
npr. "Ovo je string".

59. Deklarisanje i inicijalizacija stringova


String konstante se jednostavno kreiraju u programu navoDJenjem stringa u
dvostrukim navodnicima. Npr: printf(“pozdrav Bosni”) Moguce je i kreirati
string varijable char njec[4]; Moguce je i inicijalizirati string kao i
ostale varijable char rijec[4]={„a’, ‘d’, „o’ , ‘0’ ); Svi elementi niza
su inicijalizirani zeljenim vrijednostima, zapazite inicijalizaciju
zadnjeg elementa niza sa null karakterom. Moguce je i izostaviti dimenziju
stringa : char rijec[]={„’a’, ‘d’, ‘o’, ‘0’); Ovdje prevodilac racuna
velicinu niza baziranu na listi vrijednosti za inicijalizaciju. Moze se
koristiti notacija sa pokazivacima char *rijec=”ado”;

60. Stingovi i funkcije


Ponavljajuci jos jednom da C tretira stringove kao jednodimenzione nizove
karaktera terminirane sa null karakterom, sve tehnike koje vaze za prenos
jednodimenzionih nizova i njihovih elemenata u funkcije vaze direktno i za
prijenos stringova i njihovih elemenata. Primjer programa kopiranja
stringa: void kopirajniz (char s[ ], char t[ ]){ int i; while (( s[i] =
t[i]) !=„\0’ ) i++; } Slijedeci zapis koristi notaciju pokazivaca:
Deklaracija: void kopirajniz (char *, char *); Definisanje: void
kopirajniz (char *t, char *s){ while ((*s++ = *t++ ) !=‘\0’ ); } ili jos
krace: void kopirajniz (char *t, char *s){ while (*s++ = *t++ ); } Svi ovi
predhodni nacini deklarisanja su korektni i do programera je kojim ce
putem krenuti

61. Struktura – deklaracija i definicija


Strukture omogucuju grupisanje razlicitih tipova podataka pod jednim
imenom te njihovo tretiranje kao jednog entiteta. Struktura je korisnicki
definisan tip podatka, odnosno kolekcija logicki koreliranih elemenata
razlicitih tipova grupisanih pod jednim imenom. Opsta forma deklaracije
tipa struktura je: struct ime strukture { deklarisanje varijabli-clanova
strukture }; struct je kljucna rijec za deklarisanje strukture ime
strukture je korisnicki dato ime tipu struktura deklaracija clanova
strukture je skup deklaracija varijabli koje cine strukturu . . . (navedi
primjer)

62. Deklarisanje varijabli tipa struktura


Nakon deklarisanja zeljenog tipa struktura mogu se deklarisati varijable
tipa struktura. Opsta forma deklarisanja varijabli tipa struktura je data
sa: struct ime_strukture ime_varijable; Tek deklaracije varijabli tipa
struktura rezervisu potreban memorijski prostor za varijable. Naravno da
je ovo slicno deklarisanju fundamenalnih tipova. Naravno da proizvoljan
broj podataka tipa struktura moze biti deklarisan a nakon toga proizvoljan
broj varijabli tipa struktura moze biti kreiran. Varijable tipa struktura
takoDJer mogu biti i inicijalizirane pri deklarisanju navoDJenjem liste
vrijednosti clanova struktue. . .

63. Pristup clanovima struktura


C osigurava poseban operator koje se zove operator clana strukture ili
tacka operator za pristup clanovima varijabli tipa struktura. Opsta forma
je varijabla_tipa_struktura. ime_clana . (tacka) operator povezuje ime
varijable sa clanom varijable, odnosno omogucuje manipulaciju
vrijednostima clana. Pored dodjeljivarija vrijednosti varijablama tipa
struktura clan po clan. Moguce je dodijelii varijable tipa struktura
drugoj varijabli istog tipa struktura u jednoj naredbi koristenjem
operatora dodjeljivarija; struct zaposleni vozac1 , vozac2; vozac1 =
vozac2 ; vozac1. sifra = vozac2. sifra; . . . . ltd.
moze biti izrazena koristenjem operatora sizeof() int x; x=sizeof (struct
zaposleni);

64. Strukture i pokazivaci


Kao i pokazivaci na varijable fundamentalnih tipove podataka tako i
pokazivaci na varijable tipa struktura mogu da manipulisu adrese varijabli
tipa struktura. Pokazivaci na varijable tipa struktura se deklarisu na
isti nacin kao i ostali pokazivaci koristenjem operatora * ispred imena
pokazivacke varijable. TakoDJer standardni operator & za nalazenje adresa
varijabli fundamentalnog tipa se koristi i za nalazenje adresa varijabli
tipa struktura. Opsta forma pristupa clanu varijable je (*pokazivac). clan
U referenciranju neophodno je koristiti male zagrade jer operator tacka (.
) ima visi prioritet od operatora indirekcije asteriks. Zbog vaznosti
manipulisanja varijabli tipa struktura koristenjem pokazivaca, C jezik cak
osigurava i specijalan operator za ovu svrhu pored standrardnog nacina
pomenutog predhodno. Ovaj operator se naziva strelica operator ili
operator pokazivaca na strukturu. Opsta forma je pokazivacclan.

65. Strukture i funkcije


Kao i ostale varijable, varijable tipa struktura mogu biti parametri
funkcija te mogu biti vracene vrijednosti funkcija. Mogu biti prenosene
preko kopije ili adrese. U opstem slucaju funkcija koja prihvata i vraca
varijable tipa struktura je data sa struct ime-strukture1
ime_funkcije(struct ime_strukture2 ime varijable, . . . ) { tijelo
funkcije; } a njena deklaracija struct ime-strukture1 ime_funkcije(struct
ime_strukture2 ime varijable, . . . );

66. Typedef naredba


C jezik ukljucuje typedef naredbu koja omogucuje davanje zeljenog
korisnickog imena kako fundamentalnim tipovima podataka tako i korisnicki
definisanim tipovima odnosno strukturama. Ovo korisnicko ime olaksava
snalazenje u velikim programima te reducira posao kucanja tokom pisanja
programa.

67. Nizovi struktura


Mogu se deklarisati jednodimenzioni i visedimenzioni nizovi varijabli kao
sto je moguce sa fundamentalnim tipovima. U stvari snaga struktura se
pokazuje kada se one koriste kao liste podataka. Pristup elementima nizova
se ostvaruje koristenjem indeksa ili pokazivaca a pristup clanovima
elemenata koristenjem operatora pristupa clanovima strukture tacka ili
strelica. Opsta forma deklaracije jednodimenzionog i dvodimenzionog niza
varijabli tipa struktura je: struct ime_strukture ime_niza[velicina];
struct ime_strukture ime_niza[redovi][kolone]; pristup elementima i
njihovim clanovima je dat sa ime_niza[indeks] . ime_clana=vrijednost;
ime_niza[indeks][indeks]. ime_cIana=vrijednost;

68. Nizovi struktura i funkcija


Nizovi varijabli tipa struktura se kao i nizovi fundamentalnih varijabli
prenose u funkcije preko adresa pocetka nizova. Imajuci ovo u vidu jasno
je da se obrada nizova u funkcijama moze izvesti koristenjem standardne
indeksne ili pokazivacke notacije pristupa elementima odnosno clanovima.
Opsta forma deklaracije funkcija ciji parametri su jedno i dvodimenzioni
nizovi je dana sa: tip ime_funkcije (struct ime__strukture *, . . . ); tip
ime_funkcije (struct ime_strukture [ ][broj kolona], . . . . ); A opsta
forma definicije funkcija je: tip ime_funkcije (struct ime_strukture
ime_niza[ ], . . . ) {tijelo funkcije; } tip ime_funkcije (struct
ime_strukture ime_niza[ ][broj kolona], . . . . ) { tijelo funkcije; }

69. Datoteke
Svi podaci u nasim dosadasnjim programima su ili bili definisani ili su
kreirani interno programski. Vrijeme njihovog zivota je bilo u skladu sa
vremenom zivota programa i pri svakom startu programa su se morali ponovo
unijeti programski. Ovi podaci se citaju ili pisu na permanentne memorije
za trajno cuvanje. Operacije pisanja i citanja podataka se izvode nad
entitetima smjestenim na permanentnim memorijama koji se nazivaju
datoteke. Svaka datoteka na racunarskom sistemu je fizicki smjestena
(zapisana) na permanentnoj memoriji koristenjem imena datoteke. -Fizicki ,
najcesci vid permanentnih memorija su magnetski diskovi, diskete i CD-ROM
diskovi. Pored ulazno-izlaznih operacija sa tastature i monitora , C
standardna biblioteka ulazno-izlaznih funkcija podrzava model ulaza-izlaza
baziranog na konceptu toka podataka. Tok podataka je sekvenca karaktera
ili jos preciznije tok podataka se sastoji od sekvenca bajta. Svaki izvor
ili ponor podataka se asocira sa tokom podataka. Sekvenca bajta koja
dolazi (ucitava se) u program naziva se ulazni tok podataka a sekvenca
bajta koja odlazi (ispisuje se) iz programa naziva se izlazni tok
podataka. Tok podataka moze biti u jendnom od dva moda:
Tekstualni tok podataka je sekvenca ASCII karaktera koji su organizovani u
linije(recenice) proizvoljne duzine pri cemu svaka linija zavrsava sa
karakterom nova linija, odnosno u C jeziku to je karakter \n.
Binarni tok podataka je jednostavno proizvoljna sekvenca bajta. Naime ovi
bajti se ili citaju ili pisu tacno onako kako se pojavljaju bez ikakve
transformacije.
Kako je predhodno kazano, datoteka je skup podataka, organizovanih pod
jedinstvenim imenom na permanentnoj memoriji. Neovisno od operativnog
sistema racunara, odnosno organizacije datoteka na permanentnim
memorijama, rad sa datotekama u C programu zahtjeva slijedece korake:
-Prije citanja ili pisanja datoteke ona mora biti otvorena
-Nakon otvaranja datoteka moze biti citana i /ili pisana.
-Nakon zavrsetka citanja – pisanja datoteka mora biti zatvorena.
70. Otvaranje datoteka
Prije koristenja dadoteka mora biti otvorena. Otvaranje datoteke daje
potrebne informacije operativnom sistemu za uspostavljanje veze izmeDJu
datoteke i naseg programa. Ove informacije su na primjer, ime datoteke i
lokacija, mod i nacin pristupa datoteci, te da li se datoteka namjerava
koristiti za citanje ili pisanje ili oboje. U C jeziku informacije o
datoteci se storiraju u strukturi, typedef ime ove strukture je FILE. FILE
varijabla sluzi kao oblast komunikacije izmeDJu programa, operativnog
sistema i datoteka. IzvoDJenje funkcije za otvaranje datoteke kreira
varijablu tipa FILE i vraca pokazivac na datoteku. Prototip C standardne
funkcije za otvaranje datoteke dat u <stdio.h> datoteci je: FILE
*fopen(char *, char *); Funkcija ima dva parametra koji su stringovi i
vraca vrijednost pokazivac na tip FILE. Prvi parametar daje ime datoteke
koja se otvara a drugi parametar definise mod u kome se datoteka otvara.
Ukoliko je otvaranje uspjesno funkcija vraca vrijednost pokazivac na FILE.
Ukoliko je otvaranje neuspjesno vracena vrijednost pokazivaca je NULL.

71. Zatvaranje datoteka


Kada su ulazno izlazne operacije sa datotekom okoncane potrebno je
zatvoriti datoteku. Funkcija fclose(FILE *) vrsi zatvaranje datoteke
otvorene sa funkcijom fopen(). Parametar funkcije fclose( ) je pokazivac
vracen pri pozivu funkcije fopen(). Poziv ove funkcije signalizira
operativnom sistemu da raskine vezu izmeDJu programa i datoteke te
oslobodi koristene resurse za odrzavanje ove veze. Nakon zatvaranja
datoteke operativni sistem automatski dodaje na kraj datoteke specijalan
marker (vrijednost ) koja oznacava kraj datoteke (EOF- end of file). EOF
marker ima speicijalnu vrijednost u zavisnosti od sistema, ali takvu koja
se nikad ne moze pojaviti unutar internih podataka sadrzanih u datoteci.
datoteka su skoro identicne funkcijama za citanje tastature.

72. Citanje tekstualnih datoteka


Standardne funkcije za citanje tekstualnih datoteka datoteka su skoro
identicne funkcijama za citanje tastature. Ove funkcije su date u tabeli
-Ime funkcije
Opis
int fgetc(FILE * pokazivac na datoteku) Funkcija cita jedan karakter iz
datoteke konvertovari u cijeli broj. Vraca EOF vrijednost pri dostizanju
kraja datoteke.
char * fgets(char * ime__stringa, int n, FILE *pokazivac na datoteku)
Funkcija cita n-1 karaktera ili do nailaska na karakter nove linije iz
datoteke i smjesta ih u string ime_stringa. Pri nailasku na kraj datoteke
funkcija vraca NULL vrijednost.
int fscanf(FILE *pokazivac_na_datoteku, "format")& argumenti) Funkcija
cita vrijednosti za listu argumenata u skladu sa formatom iz datoteke.
Funkcija vraca broj uspjesno procitanih argumenata, pri nailasku na kraj
datoteke funkcija vraca EOF. vrijednost.
-Ime funkcije
Opis
int fputc(int karakter,FILE*pokazivac_na_datoteku) – funkcija cita jedan
karakter u datoteku
int fputs(char*ime_stringa,FILE*pokazivac_na_datoteku) – funkcija pise
string u datoteku (ne pise null karakter)
int fprintf(FILE*pokazivac_na_datoteku,”format”,argumenti) – funkcija pise
vrijednosti argumenata u datoteku u skladu sa formatorm.

73. Pokazivaci na stnadardne datoteke


U C postoje tri standardne datoteke i pokazivaci asocirani sa njima. Ove
datoteke se automatski otvaraju (bez intervencije programera) svaki put
kada se starta izvrsenje C programa i automatski zatvaraju pri okoncanju
programa. Nazivi ovih standrardnih pokazivaca na datoteke i pripadajucih
datoteka dati su u tabeli:
Naziv pokazivac na tabelu
Standardna datoteka
stdin - Datoteka standardnog ulaza, najcesce tastatura
stdout - Datoteka standardnog izlaza, najcesce monitor
stderr -Datoteka ispisivarija gresaka, najcesce monitor
Sve standardne datoteke se otvaraju u tekstualnom modu. Posto su
standardni pokazivaci svi tipa FILE * sada se i predhodno spomenute
funkcije za citanje-pisanje datoteka mogu koristiti i za citanje-pisanje
standardnih datoteka, odnosno pisanje na monitor i citanje sa tastature
umjesto dosad koristenih funkcija posvecenih samo tastaturi ili monitoru.

74. Citanje i pisanje binarnih datoteka


Vrlo cesto se javlja potreba pisanja u datoteku i citanja iz datoteke,
kompleksnih tipova podataka kao sto su nizovi, strukture. nizovi struktura
te ostali kompleksni podaci. Ovakav zahtjev moze biti ostvaren ukoliko se
podaci pisu-citaju na datoteke u njihovoj internoj odnosno binarnoj formi
kako su reprezentovani i u RAM memoriji racunara odnosno programa. Ovo
znaci da se npr realan broj iz programa koji zauzima cetiri bajta upravo
tako storira i na datoteku tj. bez ikakvog formatiranja kao u slucaju
tekstualnih datoteka. Binarne datoteke su znacajno krace od tekstualnih za
istu kolicinu podataka. Vidljiv je i nedostatak binarnih datoteka u odnosu
na tekstualne. Naime, posto tekstualne datoteke sadrze karaktere kodirane
standardnim ASCII kodom, te imaju internu organizaciju u linije, ove
datoteke su citljive i razumljive od strane mnogih programa te se lako
koriste za izmjenu informacija izmeDJu razlicitih programa i razlicitih
racunara. C standardna biblioteka sadrzi dvije funkcije za pisanje i
citanje binarnih datoteka. int fread(void *, int , int, FILE *) I int
fwrite(void *, int, int, FILE *)

75. Slucajan (direktan) pristup datotekama.


Naravno da postoje potrebe da se obrati jedan ili vise podataka iz cijele
datoteke i u tom slucaju sekvencijalna obrada odnosno pristup za velike
datoteke postaje nedopustivo spor uz bespotrebno trosenje racunarskih
resursa. Radi ovih razloga operativni sistem racunara omogucuje da se
datoteke mogu citati ili pisati i slucajno(direktno) , odnosno moze se
pristupiti podacima na jednom mjestu u datoteci a zatim na proizvoljnom
drugom mjestu. Kao sto je predhodno prikazano datoteka je ustvari niz
bajta te za svaki bajt u nizu ima svoju poziciju. Ova pozicija se naziva
indikator pozicije datoteke. Slijedece pisanje ili citanje datoteke izvodi
se na mjestu koje definise vrijednost indikatora. Ovaj indikator je
analogan indeksu jednodimenzionog niza. C standardna biblioteka
obezbjeDJuje nekoliko funkcija za slucajan pristup datotekama, odnosno
funkcija koje upravljaju vrijednoscu indikatora pozicije datoteka.
Indikator pozicije datoteka je varijabla tipa long int, koju automatski
kreira funkcija za otvaranje datoteka. tj fopen().

76. Funkcija fseek()


Prototip funkcije fseek() dat je sa; int fseek(FILE *, long int, int);
fseek () funkcija sluzi za postavljanje vrijednosti indikatora pozicije
datoteke na zeljeno mjesto u datoteci. Funkcija vraca vrijednost 0 ako je
indikator uspjesno postavljen u zeljenu poziciju ili vrijednost -1 ako je
operacija neuspjesna. Funkcija fseek() ima tri parametra i njena sintaksa
je dana sa: fseek (pokazivac_na_datoteku, relativria_pozicija,
pocetna_pozicija) gdje su: pokazivac_na_datoteku – je pokazivac asociran
sa otvorenom datotekom relativnajpozicija – je relativna pozicija u
bajtima od vrijednosti pocetna lokacija i mora iti long int vrijednost
pozitivna (pomjeranje pokazivaca unaprijed) ili negativan (pomjeranje
pokazivaca unazad) pocetna_lokacija – indicira startnu lokaciju u datoteci
od koje se vrsi sracunavarije vrijednosti indikatora pozicije datoteke i
moze imati vrijednost 0, 1 ili 2. Umjesto ovih brojeva mogu se koristiti
tri konstante date u tabeli:
-Simbolicka konstanta
-Numericka vrijednost
-Pocetna lokacija u datoteci
-SEEK_SET 0 Pocetak datoteke
-SEEK_CUR 1 Od tekuce vrijednosti indikatora
-SEEK_END 2 Kraj datoteke

77. Funkcija ftell()


Funkcija ftell() sluzi za nalazenje tekuce vrijednosti indikatora pozicije
datoteke. Prototip Funkcije je dat sa: long int ftell (FILE
*pokazivac__na_datoteku); Funkcija ftell() vraca tekucu long int
vrijednost indikatora pozicije datoteke asocirane odgovarajucim
pokazivacem na datoteku.

78. Sortiranje selekcijom


Algoritam sortiranje selekcijom npr. U rastucem redu elemenata radi na
sledeci nacn. lz cijelog niza podataka (niz ima n elemenata) naDJe se
najmanji element (selektira) poreDJenjem elemenata niza. Nakon nalazenja
najmanjeg elementa niza izvrsi se zamjena vrijednosti najmanjeg elementa i
prvog elementa u nizu. Sada je najmanji element na prvom mjestu u nizu.
Proces se nastavlja tako sto se sada naDJe najmanji element u preostalom
dijelu niza (ne racunajuci prvi element) i zamjeni vrijednosti sa drugime
elementom u nizu. Ovaj proces se nastavlja do postizanja sortiranog
cijelokupnog niza.

79. Sortiranje –Bubble


Algoritam Bubble sortiranja je vrlo jednostavari, naime prolazi se
sukcesivno kroz niz elemenata pri cemu se zamjenjuju vrijednosti susjednih
elemenata u skladu sa zeljenim redoslijedom sortiranja. Sortiranje je
zavrseno kada se pri nekom prolazu ne desi ni jedna zamjena susjednih
mjesta. Tokom prvog prolaza kroz niz, ako se sortira u rastucem redu
najveci element ce biti sekcesivno zamjenjivaria sa vrijednoscu susjednog
elementa sve dok najveci element ne stigne u zadnju poziciju niza. Naime
najveci element ide kao mjehuric na povrsinu. U drugom prolazu drugi
najveci element ce zauzeti poziciju u predzadnjoj poziciji niza. . .

80. Sekvencijalno – pretrazivarije


Pri sekvencijalnom pretrazivariju imamo kljuc (vrijednost koju trazimo) i
listu (niz) podataka. Ova lista moze biti niz varijabli bilo kojeg tipa
naravno ukljucujuci i strukture. U opstem slucaju kljuc se uporeDJuje sa
elementima niza pocevsi od prvog elementa sve dok se ne naDJe jednakost
ili se dostigne kraj niza odnosno kljuc se ne nalazi u nizu. Logika
sekvencijalnog pretrazivarija je jednostavna, sastoji se od for petlje i
if naredbe.

81. Binarno – pretrazivarije


Algoritam binarnog pretrazivarija koristi cinjenicu da je niz sortiran.
Algoritam dijeli niz na dva dijela locira polovinu niza u kojoj se moze
nalaziti kljuc i ignorise drugu polovinu niza. Ovaj postupak se sukcesivno
ponavlja sa svakom novom polovinom do postizanja dijela niza od samo
jednog elementa koji je jednak kljucu ili kljuc se ne nalazi u nizu.

82. Dinamicko rezerviranje(alociranje) memorije


Alternativari nacin fiksnom rezervisanju memorijskog prostora za potrebe
nizova i drugih struktura je koristenje dinamickog rezervisanja memorije.
U ovom pristupu memorijski prostor se rezervise i oslobaDJa po potrebi
tokom izvrsavarija programa iz posebnog memorijskog prostora programa. C
standrardna biblioteka osigurava kolekciju funkcija za upravljanje
dinamickom alokacijom memorije te njenim oslobaDJanjem prema zahtjevima
tokom izvrsenja programa.
83. Funkcija malloc()
Prototip funkcije malloc() je dat sa: void * malloc(int); funkcija
malloc() rezervise kontinualan niz bajta memorije ciji broj definise
argument funkcije. Funkcija vraca pokazivac na prvi bajt u nizu ukoliko je
alokacija uspjesna. Ukoliko alokacija nije uspjesna vraca NULL vrijednost.
Funkcija malloc() vraca pokazivac na prvi bajt alociranog memorijskog
prostora. Ovaj pokazivac je deklarisan kao pokazivac na tip void odnosno
genericki (univerzalni) pokazivac koji moze i mora biti oblikovari u bilo
koji konkretan tip pokazivaca. Znaci pri svakom pozivu funkcije malloc()
vraceni pokazivac mora biti oblikovari korisenjem cast() operatora u
zeljeni konkretni tip pokazivaca.

84. Funkcija free()


Funkcija free() sluzi za oslobaDJanje memorije rezervisane funkcijom
malloc(). Ova funkcija vraca rezervisanu memoriju memorijskom prostoru
(heap) kada vise nije potrebna i cini je raspolozivom za druge
rezervacije. Funkcija free() ima jedan argument a to je pokazivac koji je
vratila funkcija malloc().

85. Povezane liste


Povezana lista je skup struktura u kojim svaka struktura sadrzi jedan clan
cija vrijednost je adresa slijedece strukture i tako dalje do kraja liste.
Moze se reci da je povezana lista skup struktura koje su organizovarie
sekvencijalno kao sto je i niz struktura. U povezanoj listi programer
eksplicitno aranzira sekvencijalnu organizaciju struktura tako sto se
svaka struktura (cvor -node) sadrzi adresu (veza-link) slijedece strukture
u sekvenci. Osnovna prednost povezane liste u odnosu na niz je da povezana
lista moze da raste ili se smanjuje tokom vremena zivota po potrebi. Ovo
znaci da nije potrebno unaprijed rezervisati maksimalnu ocekivariu
memoriju za podatke bez stvarne potrebe. Druga prednost lezi u

You might also like