You are on page 1of 24

2008

Osnovi programiranja

TUZLA

Osnovi programiranja
1.

Rjeavanje zadataka primjenom algoritama

Raunarski programi se piu u cilju rjeavanja zadataka i problema raunarom. Programeri prevode rjeenja zadataka u jezik
koji raunar razumije, odnosno piu raunarski program. Rjeenje zadatka ili problema je dato algoritmom. Algoritam je
konana serija korak-po-korak akcija koje nalaze rjeenja zadatka ili problema.
Neke karakteristike algoritma su :
Algoritam mora biti dovoljno detaljan da opie potrebne akcije odnosno transformacije.
Algoritam ne smije biti dvosmislen, tako da svako moe izvesti akciju ili transformaciju korektno svaki put.
Mora uvijek dati isti rezultat za iste poetne situacije.
Mora dati korektne rezultate u svim sluajevima.
Za razliku od raunarskog programa koji mora biti izraen u nekom od jezika koji raunar razumije, algoritmi mogu biti
opisani na razliite naine. Najee koriten nain za opis algoritama su :
Pseudo jezici
Dijagram toka
Kada se koriste jezike fraze za opis algoritamskih koraka, onda se takav opis algoritma naziva pseudo jezik.
Dijagram toka je grafiki prikaz algoritma. On se sastoji od skupine grafikih simbola povezanih strelicama. Tip grafikog
simbola indicira tip trasformacije (akcije) koja se deava u simbolu. (tabela sa tipovima i opisom)
2.

Raunarski algoritmi

Jasno je da algoritmi koje treba da izvri raunarski sistem ima odreenja ogranienja u odnosu na opto formu algoritma,
odnosno moraju biti formulisani tako da raunarski sistem moe da ih razumije.
Fundamentalne operacije koje svaki raunar moe da izvede su :
Izvoenje aritmetikih operacija
Poreenje dva podatka, i u zavisnosti od rezultata izbor jedne od dvije alternativne akcije
itanje i tampanje informacija
Ponavljanje bilo koje grupe informacija
Memorisanje podataka za kasnije koritenje
Na osnovu ovih zahtjeva evidentno je da konstrukciju raunarskog algoritma ine etri tipa struktura :
Sekvencija
Selekcija
Iteracija
Pozivanje
Sekvencija definie slijed u kojem se instrukcije izvravaju u programu. Selekcija daje mogunost izbora izmeu dvije ili vie
varijanti u zavisnosti od nekog uslova. Iteracija daje mogunost ponavljanja skupa operacija u zavisnosti od nekog uslova.
Pozivanje ukljuuje mogunost pozivanja skupa instrukcija (podprograma) po potrebi.
3.

Kljune rijei

Kljune rijei su eksplicitno rezervisane rijei koje imaju striktno znaenje u C-u. One ne mogu biti redefinisane ili koritene u
drugom kontekstu.
Kljune rijei u C-u su :
auto
break
case
char
continue
default

do
double
else
enum
float
for

goto
if
int
long
return
short

signed
sizeof
static
struct
typedef
union

unsigned
void
volatile
while

U poreenju sa drugim jezicima C ima mali broj kljunih rijei. To je karakteristika C-a da moe da uradi monogo koritenjem
relativno malog broja kljunih rijei. Sve kljune rijei C-a se piu malim slovima, while je kljuna rijee WHILE i While nisu
kljune rijei.

SUDO | FAKULTET ELEKTROTEHNIKE

Osnovi programiranja
4.

Identifikatori

Identifikator je rije koja se sastoji od neprekidne sekvence slova, cifara i posebnog karaktera ''_'' (crtica). Slovo ili crtica
mora biti prvi znak rijei. U C-u mala i velika slova se tretiraju razliito. 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 razliitim objektima u programu, kao to su varijable
i funkcije. U ANSI C jeziku, identifikator moe da ima do 31 karakter.
5.

Konstante

C program obrauje razliite tipove podataka, cijele i realne brojeve, alfanumerike 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 takoe
karakterne konstante kao 'A', 'F', '5', i nitovne konstante kao ''Dino voli Maju''. Vano 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 znaenjem. Operatori su : +(sabiranje), -(oduzimanje), *(mnoenje),
/(dijeljenje), %(modul), =(dodjeljivanje).
Operator dodjeljivanja intruira C program da sraunate vrijednosti na desnoj strani aritmetikog izraza dodijeli
promjenjljivoj na lijevoj strani. (npr. x=y+31;)
7.

Moduli C programa

Sloeni programi su sainjeni od mnotva podprograma. Ovi podprogrami se nazivaju programski moduli, a program koji je
konstruisan koritenjem modula naziva se modularni program. Daleko je jednostavnije izgraditi, modifikovati i korigovati
modularne porgrame, nego programe izgraene na neki drugi nain. Svaki modul se dizajnira i razvija tako da izvrava
specifian zadatak, i u stvari svaki modul je mali program. Glavna prednost modularnog dizajna lei u injenici da program
moe biti dizajniran prije nego to je napisan njegov modul. Nakon zavretka planiranja moe se pristupitni njihovom
programiranju, a zatim se vri njihva integracija u cijeli program. Svaki modul treba da ima ogranienu ulogu tj. da izvrava
jedan ili dva zadatka u kompletnom programu. U C programskom jeziku moduli se nazivaju funkcije. Funkcija je modul koji
sadri sekvencu operacija a koja se tretira kao jedna sloena akcija. Funkcija prihvata neke ulazne podatke i kao rezultat
akcije proizvodi neke druge podatke.
8.

Funkcija main( )

Funkcije C jezika omoguuju kreiranje modularnog programa, odnosno donose sve prednosti modularnog dizajna. Svaki C
program mora imati barem jednu funkciju. To je funckcija main( ). C program poinje sa izvravanjem tako to se pone
izvravati funkcija main( ). U dobro dizajniranom programu, funkcija main ( ) slui za pozivanje drugih funkcija (modula) u
eljenom redoslijedu. (slika)
Svaka funkcija se sastoji od zaglavlja funkcije i tijela funkcije. Zaglavlje funkcije, koje je uvijek prva linija u definisanju
funkcije, sadri tri informacije :
Koji tip funkcije vraa kao rezultat (ako uopte vraa)
Ime funkcije
Koji tip podataka funkcija prihvata (ako uopte prihvata)
9.

Funkcija printf( )

Jedna od najuniverzalnijih najee koritenih 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 sugerie formatira prihvaene
podatke i ispisuje ih na standardni izlazni ureaj ( najee ekran ). Podatci se prenose u funkciju tako to se oni navedu u
zagradama iza imena funkcije. Npr. ako na ekran elimo ispisati poruku : Dino voli Maju., to bi se izvelo pozivanjem funkcije
na slijedei nain :
printf (''Dino voli Maju'');

SUDO | FAKULTET ELEKTROTEHNIKE

Osnovi programiranja
10.

Fundamentalni tipovi podataka u C programskom jeziku

C program moe obraivati razliite tipove podataka na razliite naine. 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 take. Razliiti raunarski sistemi imaju razliita ogranienja
na najvei i najvei koriteni cio broj. Ova ogranienja zavise od veliine memorije koju raunar koristi za memorisanje
cijelog broja.
Veliina memorije
Maximalna vrijednost broja
Minimalna vrijednost broja
1-bajt
127 = 27-1
-128 = -27
15
2-bajta
32767 = 2 -1
-32768 = -215
31
4-bajta
2147483647 = 2 -1
-2147483648 = -231
C omoguuje zapisivanje brojeva i u oktalnoj i u hexadecimalnoj notaciji. Hexadecimalna notacija pefix 0X (0XFAC), a za
oktalne 0 (0732).
Realni brojevi ili brojevi sa pominom takom su bilo koji pozitivni ili negativni brojevi sa decimalnom takom. C jezik
podrava dvije kategorije realnih brojeva : float (jednostruka preciznost) i double (dvostruka preciznost). Razlika izmeu ova
dva tipa je u veliini rezervisane memorije za neki realni broj. Rezervisana memorja za double je duplo vea nego za float.
Double broj karakterie raunaru dodavanjem velikog ili malog slova L broju (npr. 126.4589987L). Pored standardne
decimalne notacije postoji i exponencijalna i nauna notacija.
Trei tip podataka u C jeziku su karakteri. Karkteri ukljuuju slova alfabeta ( velika i mala), cifre i specijalne znakove.
Karakter moe imati bilo koju vrijednost iz predhodno navedenog skupa simbola navedenih u jednostrukim navodnicima.
Karakter vrijednosti su tipno memorisane u raunarskoj memoriji koritenjem ASCII ili EBCDIC kodova ( koristi se 1 byte
memorije ). U svakom od ovih kodova indivindualnim karakterima je dodijeljen binarni kod, odnosno odgovarajua
kombinacija bita.
11.

Operator sizeof( )

Ponekad je potrebno odreenu veliinu memorije potrebnu za storiranje ne samo fundementalnih nego i sloenih tipova
podataka. Zbog toga C osigurava unarni operator sizeof ( ) koji rauna broj bajta potrebnih za storiranje fundamentalnih i
sloenih struktura podataka (objekata). Opta forma ovog operatora je :
sizeof ( objekat )
Gdje objekat moe biti fundamentalni tip, sloeni tip i izraz.
12.

Fundamentalni tipovi podataka varijable i naredbe deklaracije

Ranije, u starijim programskim jezicima korisnik je morao sam odreivati adrese u memoriji u koju je elio smjestiti neki
podatak. Dolaskom jezika visokog nivoa, tj. C-a, ovaj posao obavlja kompajler, tj. korisnik samo daje simobolika imena tim
adresama, a ta simbolika imena se nazivaju varijablama.
Termin varijabla se koristi zbog toga to vrijednost smjetena u varijabli moe da se promjeni po potrebi. Prilkom izbora
imena varijabli moraju biti potovana sljedea pravila :
Ime varijable mora poeti sa slovom ili crticom (_), ime varijable moe sadravati samo slova, cifre i crticu. Ne moe
sadravati prazna mjesta, zareze ili specijalne simbole.
Ime varijable ne moe biti kljuna rije.
Ime varijable ne moe biti due od 31 karakter.
Postoje tri fundamentalna tipa podataka u C-u :
Cijeli broj
Realni broj
Karakter
Cjelobrojne vrijednosti se deklariu
int ime_varijable;
U C-u tip podatak int se smatra prirodnim ili uobiajenim tipom za rad sa cijelim brojevima. Na veini raunara on zauzima 2
bajta memorije.

SUDO | FAKULTET ELEKTROTEHNIKE

Osnovi programiranja

Kljuna rije

Rezervisana veliina memorije za Opseg brojeva koji se mogu zapisati


cjelobrojnu varijablu
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 deklariu u optoj formi sa :
float ime_varijable;
Postoje tri kategorije realnih brojeva : float, double i long double. Ove tri kategorije se razlikuju u veliini rezervisane
memorije i preciznosti.
Kljuna rije
Rezervisana
veliina Opesg brojeva
Preciznost brojeva
memorije za varijablu
float
4 bajta
10-38 do 1038
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 deklarie u optoj 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 raunara (256 razliitih vrijednosti). Karkter varijabla moe biti korisna za smjetanje malih cijelih
brojeva. Ako je varijabla signed char onda moe da poprimi binarne vrijednosti od
-128 do 127, a ako je unsigned char onda 0 do 255.
13.

Operatori i izrazi dodjeljivanja

Znak = je osnovni znak dodjeljivanja u C-u. U opem sluaju izraz dodjeljivanja se izvrava tako to se prvo srauna
aritmetiki izraz na desnoj strani i rezultat dodijeli varijabli na lijevojs strani.
Operator
Operacija
=
Dodjeljivanje vrijednosti
+=
Skraeni operator za istovremeno sabiranje i dodjeljivanje
-=
Skraeni operator za istovremeno oduzimanje i dodjeljivanje
*=
Skraeni operator za istovremeno mnoenje i dodjeljivanje
/=
Skraeni operator za istovremeno dijeljenje i dodjeljivanje
%=
Skraeni operator za istovremeno modul operaciju i dodjeljivanje
14.

Unarni aritmetiki operatori i izrazi

Unarni operatori inkrement (++) i dekrement (--) su namijenjeni kao skraeni operatori za operacije poveanja i smanjenja
vrijednosti varijable za 1. Dva su razloga za uvoenje ovih operatora. Prvo, opracije inkrementa i dekrementa su vrlo este u
C programima te ovi operatori olakavaju pisanje, i drugo ovi operatori omoguuju C prevodiocu generisanje breg objektnog
koda. Operatori mogu biti navedeni u dvije forme prefikx i postfix.
15.

Prioritet i asocijativnost aritmetikih operatora

Postoje pravila prioriteta i asocijativnosti operatora koji precizno definiu kako se izraz izraunava. Pravila prioriteta slijede
matematika pravila prioriteta.
Operatori (prioriteti po redovima)
( ), ++ (postfix), --(postfix)
+ (unarni), - (unarni), ++(prefix), -- (prefix)
*, /, %
+, <, <=, =>, >
= =, !=
SUDO | FAKULTET ELEKTROTEHNIKE

Asocijativnost
Sa lijeva udesno
Sa lijeva udesno
Sa lijeva udesno
Sa lijeva udesno
Sa lijeva udesno
Sa lijeva udesno

Osnovi programiranja
&&
||
=, +=, -=, *=, /=, %=
16.

Sa lijeva udesno
Sa lijeva udesno
Sa desna ulijevo

Relacioni, logiki, jednakostni opeartori i izrazi

C podrava irok skup relacionih i logikih operatora. Oni se koriste za formiranje relacionih i logikih izraza. Relacioni
operatori se odnose na relacije izmeu vrijednosti varijabli ili izraza, dok se logiki operatori odnose na naine povezivanja
voh relacija. Ovi operatori zajedno sa varijablama, konstantama i funkcijama formiraju izraze koji mogu biti ili tani ili lani.
Operator
Relacioni operatori
<
>
<=
>=
Operator jednakosti
==
!=
Logiki operatori
!
||
&&

Operacija
Relacione operacije
Manje od
Vee od
Manje od ili jednako
Vee od ili jednako
Jednakosne operacije
Jednako
Nejednako
Logike operacije
Logika negacija
Logiki ILI
Logiki I

Od ovih operatora svi su binarni (zahtjevaju dva operanda) izuzev operatora ! (logika negacija) koji je unarni.
17.

Operatori sa bitima

Za razliku od mnogih drugih jezika C podrava potpun skup operatora za manipulisanje bitima. Ovo je jedan od razloga zato
se C tretira jezikom srednjeg nivoa. Ovi operatori podrazumijevaju manipulisanje pojedinanim bitima, karakter ili
cjelobrojnim varijablama. Te manipulacije ukljuuju postavljanje, testiranje, pomijeranje vrijednosti pojednih bita unutar
karakter ili cjelobrojne varijable. Znai ovi operatori, mogu biti koriteni samo sa podacima tipa int i char.
Operator
&
|
^
~
>>
<<

Operacije
Logiko I
Logiko ILI
Ex-ILI
Prvi kompement
Pomjeranje bita udesno
Pomjeranje bita ulijevo

Ovi operatori se najee koriste pri pisanju porgrama koji slue za upravljanje hardverskim ureajima raunara i esto su
dio operativnog sistema raunara.
18.

Konverzija podataka

Kada se u izrazima nalaze konstante i varijable razliitih tipova, prvodilac ih prvo automatski konvertuje u isti tip, pa se tek
onda izvode operacije. Pravilo konverzije da se ''nii'' tip konvertuje u vii tip.
Ako je jedan operand
Ako je jedan operand
Ako je jedan operand
Ako je jedan operand
Ako je jedan operand
Ako je jedan operand
Ako je jedan operand

long double
double
float
unsigned long
long
unsigned
int

SUDO | FAKULTET ELEKTROTEHNIKE

onda
onda
onda
onda
onda
onda
onda

drugi se konvrtuje u long double


drugi se konvrtuje u double
drugi se konvrtuje u float
drugi se konvrtuje u unsigned long
drugi se konvrtuje u long
drugi se konvrtuje u unsigned
drugi se konvrtuje u int

Osnovi programiranja
19.

CAST operator

Iako C prevodilac izvrava konverziju automatski po pravilama, to nije uvjek ono to se eli 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 e biti 12.0, a ne 12.5 iz jednostavnog razloga to 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. Opta 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
sluaju.
20.

Kontrola toka programa if naredba

Opta forma if naredbe data je sa :


if (izraz) naredba; //ovo je prosta naredba
ili
if (izraz) {
naredba1;
naredba2;
....
//ovo je sloena naredba
naredban;
}
Pravlio izvravanja if naredbe je : ako je sraunata vrijednost izraza istina (ne nulta vrijednost) onda se izvrava naredba ili
sloena naredba (skup naredbi ogranien {}), a potom se izvrava slijedea naredba iza if naredbe. A ako je sraunata
vrijednost izraza neistinita (nulta vrijednost) onda se naredba ili sloena naredba preskae (ne izvrava se) i tok programa se
prenosi na slijedeu naredbu iza if naredbe. Izraz u if naredbi je uobiajeno relacioni, jednakosni ili logiki izraz, ali svaki
doputeni izraz je mogu. Vano je zapamtiti da C tretira istinom sve to je razliito od nule(slika-dijagram toka).
21.

Kontrola toka programa if-else naredba

Opti 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 sloena naredba
....
naredban;
}
else {
naredban1;
naredban2; //ovo je sloena naredba
...
naredbanm;
}
Pravilo izvravanja if else naredbe je : ako je sraunata vrijednost izraza istina (ne nulta vrijednost ), onda se izvrava
naredba ili sloena naredba (skup naredbi ogranien sa {}) iza kljune rijei if, a potom se izvrava sledea naredba iz if-else
naredbe. Ako je sraunata vrijednost neistina (nulta vrijednost) onda se izvrava naredba ili sloena naredba iza kljune rijei
else a potom se tok programa prenosi na slijedeu naredbu iza if else naredbu. Znai uvijek se izvrava ili naredba iza ifSUDO | FAKULTET ELEKTROTEHNIKE

Osnovi programiranja

kljune rijei ili naredba iza else kljune rijei, a nikad obadvije. Izraz u if naredbi je uobiajeno relacioni, jednakosni ili
logiki izraz, ali svaki doputeni izraz je mogu.(slika-dijagram toka)
22.

Ugnijedene if i if-else naredbe

Sloene naredbe (blok naredbi izmeu {}) u if-else naredbi mogu da sadre bilo kakve naredbe ukljuujui druge if-else
naredbe za potrebe kompleksnijeg odluivanja.
if (izraz1)
if (izraz2)
naredba1;
else
if(izraz3) {
naredba2;
naredba3;
naredba4;
}
else
naredba5;
else
naredba4;
(pitanje 72 objanjava funkcionisanje ugnjedene if i if-else naredbe)
23.

if-else lanac

U optem sluaju ugnjedene if-else naredbe tee konfuziji, i najbolja praksa je da se izbjegnu ukoliko je mogue. Meutim,
jedna vrlo korisna programska konstrukcija moe biti izvedene koritenjem if-else naredbi (slika-dijagram toka).
if (izraz1)
naredba1;
else if (izraz2)
naredba2;
else naredba3;
Ova forma ugnjedenih if-else naredbi je ekstremno korisna u praksi, i formalo se naziva if-else lanac. If-else lanac moe biti
proizvoljne duine.
24.

switch naredba

C naredba switch osigurava alternativu if-else lancu u sluajevima koji porede vrijednost cjelobrojnog izraza sa specifinim
vrijednostima. Opta forma switch naredbe data je sa :
switch (izraz) {
// poetak switch naredbe
case vrijednost_1 : // linja okonana sa taka-taka (:) znakom
naredba1;
// naredba okonana sa standardnim (;)
naredba2;
...
break;
....
case vrijednost_n :
naredbax;
naredbay;
...
break;
default :
naredbamn;
naredbamm;
...
}
// kraj switch naredbe
Kljuna rije switch identificira poetak switch naredbe. Izraz u zagradama iza switch rijei se sraunava i rezultat se poredi
sa raznim vrijednostima unutar sloene naredbe. Rezultat izraza mora biti cijeli broj, inae prevodilac e javiti greku. Kljuna
SUDO | FAKULTET ELEKTROTEHNIKE

Osnovi programiranja

rije case se javlja unutar switch naredbe. Kljuna rije case slui za oznaavanje individualne vrijednosti koja se poredi sa
vrijednou switch izraza. Vrijednost switch izraza se poredi sa svakom od case vrijednosti po redu kako su navedene u
naredbi, dok se ne nae jednakost. Kada se nae jednakost izraza i case vrijednosti, poinju se izvravati naredbe iza case
vrijednosti gdje je naena jednakost. Ako vrijednost izraza nije nijednoj od navedenih case vrijednosti, ne izvrava se ni jedna
naredba ukoliko nije koritena kljuna rije default. Kljuna rije default je opciona i ima istu ulogu kao i zadnji else u if-else
lancu. Naime, ako vrijednost nije jednaka ni jednoj case vrijednosti, izvravaju se naredbe iza kljune rijei default. Nakon
lociranja ulazne take u switch naredbi odnosno nalaenja prve jednakosti sve sljedee case komparacije se ignoriu, te se
naredbe izvravaju sekvencijalno do kraja switch naredbe, ukoliko se ne naie na break naredbu. Ovo je razlog zato se koristi
break naredba. Naime, break naredba slui za oznaavanje kraja skupa naredbi u svakom pojedinanom case, na taj nain to
break naredba uzrokuje trenutno naputanje switch naredbe i prenosi tok programa na prvu naredbu iza switch naredbe. Ako
nije navedena break naredba, sve naredbe iza ulazne take ukljuujui i naredbe i za default e biti izvrene.
25.

Kontrola toka programa - for petlja

for petlja se koristi za rjeavanje problema ponavljanja odreene sekcije programa, eljeni broj puta. Ovo je petlja sa
testiranjem uslova na poetku. Opta forma:
for(inicijalizacija; test izraza; azuriranje){
naredba 1; naredba 2;
naredba n;
}
Izvrava se u sljedeim koracima:
1. Prije ulaska u petlju sraunavaju se izrazi navedeni u petlji na poziciji inicijalizacije
2. Sraunava se izraz naveden na poziciji test izraza, ako je vrijednost test izraza tana
a) Izvravaju se naredbe
b) Sraunava se izraz na poziciji auriranja
c) tok programa se vraa na korak 2
Ako vrijednost izraza nije istinita, petlja se zavrava i preskae se dio programa, prelazi se na naredbu iza for petlje
26.

Kontrola tokajprograima while petlja

while petlja testira uslov na poetku. Predstavlja varijabilnu petlju a moe se koristiti i kao brojaka petlja. Opta forma:
while(izraz){
naredba 1; naredba 2;
naredba n;
}
Izvrava se u sljedeim koracima:
1. Sraunava se vrijednost izraza
2. Ako je vrijednost istinita
a) Izvravaju se naredbe
b) program se ponovo vraa na korak 1
3. Ako vrijednost izraza nije istinita, petlja se zavrava i preskae se dio programa, prelazi sa na naredbu iza while
petlje.
27.

Kontrola toka programa do while petlja

do while petlja je slina while petlji, s tim to se kod nje testiranje petlje vri na kraju petlje, to znai da se ona izvri barem
jedanput.
do{
naredba 1; naredba 2;
naredba n;
} while(izraz);
Izvrava se u sljedeim koracima:
1. Izvrsi naredbu u tijelu petlje
2. Srauna vrijednost izraza
3. Ako je vrijednost izraza istinita vraa se na poetak petlje, ako nije istinita nastavlja se sa izvravanjem prve naredbe
iz while(izraz) naredbe.
SUDO | FAKULTET ELEKTROTEHNIKE

Osnovi programiranja
28.

Ugnjedene petlje

Mogue je imati jednu petlju unutar druge petlje odnosno jednu petlju ugnijedenu unutar druge. Ova mogunost daje veliku
fleksibilnost u rjeavanju problema. U stvari broj ugnijedenih petlji samo je odreen mogunostima datog raunarskog
sistema. Opta struktura ugnijedenih petlji je dana :
poetak prve petlje {
poetak druge pettje {
kraj druge petlje}
kraj prve petlje }
29.

Naredba break

Dodatno upravljanje petljama moe biti postignuto koritenjem naredbi break, contiue i goto.
Ukoliko se u tijelu petlje nalazi naredba break, njeno izvravanje prouzrokuje trenutno naputanje petlje, odnosno ignorisanje
standardnog naina naputanja 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 ijem se tijelu
nalazi.
30.

Naredba continue

Ukoliko se u tijelu nalazi naredba continue, njeno izvravanje trenutno prenosi tok programa na izvravanje izraza koji
definie uslov nastavka iteracije petlje. Znai ova naredba preskae naredbe iza continue unutar tijela petlje i prelazi direktno
na sledeu 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 zavretka petlje izraz 1.
31.

Naredba goto

Ukoliko se u tijelu nalazi naredba skoka goto, njeno izvravanje trenutno prouzrokuje naputanje prtlje i prijenos toka
programa na naredbu definisanu goto naredbom. Ne preporuuje se koritenje ove naredbe, jer naruava paradigmu
programa, te komplikuje i oteava odravanje velikih programa. Iako u nekim sluajevima moe uprostiti program, svaki dio
programa je mogue napisati bez goto naredbe.
while( izraz 1) { . . .
while(izraz 2) { . . .
if(USlOV) {
goto iza_svih_petlji;
}
}
} iza_svih_petlji;
naredba; . . .

SUDO | FAKULTET ELEKTROTEHNIKE

Osnovi programiranja
32.

10

Funkcije. programski moduli u C

Programski moduli u C jeziku se nazivaju funkcije. Kao to je ve poznato svaki C program mora da sadri barem jednu
funkciju tj. Funkciju main () koja slui kao poetna funkcija C programa. Pored main () funkcije, C program moe da koristi
praktino proizvoljan broj drugih funkcija koje izvravaju eljene zadatke. Tipian C program se pie kombinirajui funkcije
koje se nalaze u standardnoj biblioteci C jezika (predefinisane funkcije) i novih funkcija (korisniki definisane) koje razvija
programer. Funkcija se koristi u C programu tako to se u eljenoj taki programa izvri poziv funkcije. Poziv funkcije
uzrokuje prijenos toka programa u pozvanu funkciju u cilju izvravanja zadatka funkcije, te nakon zavretka obrade tok
programa se ponovo vraa u pozivajuu funkciju. Oigledne su slijedee prednosti koje donosi dijeljenje programa u funkcije:

33.

1.

Dijeljenje programa pomae u nalaenju boljeg rjeenja. te olakava programsku implementaciju.

2.

Funkcije pomau organizaciju programa.

3.

Funkcije su mali blokovi programskog koda te ih je lake razvijati i odravati.

4.

Ista funkcija moe se koristi vie puta u istom ili drugim programima.

5.

Moe 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.
Predefinisane funkcije

To su ve napisane funkcije koje su grupisane prema funkcijonalnosti i koritenju u datoteke koje se nazivaju biblioteke. Svaka
biblioteka je asocirana sa takozvanom zaglavlje datotekom i ima .h ekstenziju. Zaglavlje datoteke sadri prototipove funkcija u
bibliotekama te definicije tipova podataka i konstanti potrebnih funkcija. Koritenje funkcija odgovarajue biblioteke zahtjeva
ukljuivanje 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. n> , <ctype. h> , <errno. h> , <locale. h>
<floath> -

sadri informacije o granicama relanih brojnih sistema

<limits. h> - sadri informacije o granicama cijelih brojeva sistema


<math. h> - sadri prototipove matematickih funkcija
<stdlib. h> - sadri prototipove funkcija za konverziju brojeva u tekst i obrnuto, alociranje memorije,
generisanje sluajnih brojeva, . . .
<string. h> - sadri prototipove funkcija za obradu nizova karaktera
<time. h> - sadri prototipove funkcija i definicije tipova podataka za obradu vremena i datuma
34.

Korisniki definisane funkcije deklarisanje funkcija

Korisniki definisane funkcije kodira programer sa ciljem izvrvanja odreenog zadatka odnosno podatka u cjelokupnom
programu. Opta forma deklarisanja funkcija je:
tip_funkcije ime_funkcije (lista parametara);
tip_funkcije - je tip vrijeanosti koju funkcija vraa funkciji koja je poziva.
ime_funkcije - je ime funkcije, pri emu se koriste ista pravila pri davanju imena kao i za davanje imena varijablama. Ime
slui za jednoznanu identifikaciju.
lista parametara - specifira tip podatka koji se prenose u funkciju. Tip parametra se navodi u malim zagradama, a ukoliko ih
ima vie, odvajaju se zarezima. Vanost u deklarisanju funkcije je u smanjenju broja greaka programiranja.

SUDO | FAKULTET ELEKTROTEHNIKE

Osnovi programiranja
35.

11

Korisnicki definisane funkcije definisanje funkcije

Ove funkcije kodira programer i one slue za izvravanje odreenog zadatka odnosno podzadatka u cjelokupnom programu.
Definicija funkcije se sastoji od dva dijela, zaglavlja i tijela funkcije, opta forma definicije funkcije je:
tip_funkcije ime_funkcije (liasta parametara) {

tijelo funkcije
} tip__funkcije - je tip vrijednosti koju funkcija vraa funkciji koja je poziva
ime_funkcije - ili identifikator je ime funkcije, pri emu se koriste ista pravila pri davanju imena kao i za davanje imena
varijablama. ime slui za jednoznanu identitikaciju.
lista parametara - specifira tip podatka koji se prenose u funkciju, tip parametra se navodi u malim zagradama, a ukoliko ih
ima vie, odvajaju se zarezima.
Iza zaglavlja funkcije slijedi blok deklaracija variabli i naredbi izmeu vitiastih zagrada, odnosno tijelo funkcije. U tijelu
funkcije se implementira algoritam koji rijeava zadatak dodjeljen funkciji.
36.

Korisniki_definisane funkcije pozivanje funkcija

Ove funkcije kodira programer i one slue za izvravanje odreenog zadatka odnosno podzadatka u cjelokupnom programu.
Poziv funkcije je naredba koja poziva izvravanje date funkcije navoenjem njenog imena i liste argumenata koji se prenose u
funkciju. Opta 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 e biti smjetena vraena vrijednost iz funkcije. Broj i tip argumenata pri povezivanju
funkcije treba biti isti kao broj i tip parametara u deklaraciji odnosno definiciji funkcije. Takoe tip varijable u koju se smjeta
vraena vrijednost iz funkcije treba da odgovara tipu funkcije.
37.

Naredba return

Ova naredba se moe koristiti u dvije svrhe:


1. Izvrenje naredbe return bilo gdje u tijelu funkcije uzrokuje trenutno naputanje funkcije i povratak u pozivajuu funkciju.
Ukoliko funkcija ne sadri naredbu return funkcija se izvrava nakon izvrenja zadnje naredbe u funkciji, odnosno kada
tok programa dostigne zavrnu vitiastu zagradu tijela funkcije.
2. Ukoliko funkcija treba da vrati vrijednost u pozivajuu funkciju tada se koristi naredba return za vraanje sraunate
vrijednosti i istovremeno naputanje funkcije. Dakle:
*1. Fragment funkcije - prva forma:
naredba;

return; /* naputanje funkcije i vraanje u pozivajucu funkciju */

*2. Fragment funkcije - druga forma:


naredba;

return izraz; /* vraanje vrijednosti izraza i povratak u pozivajucu funkciju*/

U funkcijama koje ne vraaju vrijednosti (VBLD) za potrebe zavretka funkcije u zeljenoj taki tijela funkcije koristi se prva
forma. Ukoliko funkcija vraa vrijednost za potrebu vraanja vrijednosti i zavretka funkcije u eljenoj taki tijela funkcije
koristi se druga forma, gdje je izraz proizvoljan.
38.

Komunikacija izmeu funkcija

Sa aspekta pozivajue funkcije pozvana funkcija je crna kutija kojoj pozivajua funkcija prenosi skup potrebnih argumenata pri
pozivu i prihvata vraenu vrijednost pri zavretku funkcije u skladu sa deklaracijom. Funkcija se dakle ponaa kao blok sa vie
ulaza i jednim izlazom. Sekvenca dogaaja pri pozivanju funkcije je sledea:

SUDO | FAKULTET ELEKTROTEHNIKE

Osnovi programiranja
1.
2.
3.
4.
5.
6.
39.

12

Poziva se funkcija
Argumeti iz naredbe pozivanja funkcije se kopiraju u parametre pozvane funkcije, tj. parametri poprimaju vrijednost
argumenata
Tok programa se prenosi u pozvanu funkciju
Poinje izvravanje programskog koda funkcije
Kada je kod funkcije zavren izvodi se vraanje vrijednosti u pozivajuu funkciju.
Tok programa se vraa u pozivajuu funkciju, odnosno na prvu naredbu iza poziva upravo zavrene funkcije
Vidljivost varijabli

Lokalne varijable su one varijable koje su deklarisane unutar C bloka tj. dijela programa markiranog parom vitiastih
zagrada {. . . }. Poto su C funkcije takoe C blokovi, moemo rei da su lokalne varijable sve one koje su deklarisane u tijelu
funkcije ukljuujui deklarisane parametre funkcije, i konsekventno su vidljive samo u funkciji gdje su i deklarisane. Globalnu
varijablu vidi odnosno moe da manipulie vie razliitih funkcija. Globalna varijabla se kreira tako to se izvri deklaracija
varijable izvan tijela svih funkcija. Ovu globalnu varijablu moe koristiti svaka funkcija koja je fiziki definisana u datoteci
izvornog programa iza deklaracije globalne varijable.
Ukoliko postoji i globalna i lokalna varijabla sa istim imenom, tada se referenciranjem tog imena manipulie lokalna
varijabla.
40.

Memorijske klase varijabli automatska

Ova dimenzija referie vrijeme ivota od trenutka nastajanja variable u memoriji raunara do njenog uklanjanja iz memorije
raunara. Gdje i kako dugo se rezervie memorija za variablu definie memorijska klasa variable.
Kljuna rije je auto" slui za definisanje automastske memorijske klase variabli. Ukoliko se ova kljuna rij upotrebljava za
definisanje memorijske klase onda se ona smjeta ispred tipa i imena u naredbi deklarisanja variable. Lokale varijable su one
koje se deklariu 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 ive i
njihove vrijednosti mogu biti manipulisane. im tok programa napusti blok ili funkciju ove varijable umiru, odnosno vraaju
zauzeti memorijski prostor raunaru. Jasno da sa vraanjem koritene memorije za potrebe variabli nestaju i vrijednosti ovih
varijabli. Ove varijable se svaki put nanovo kreiraju, koriste i na kraju unitavaju pri svakom novom pozivu bloka ili funkcije.
Sad je jasan i razlog naziva ove memorijske klase, naime proces rezervisanja i oslobaanja memorije za potrebe varijabli se
odigrava automatski, tj. bez programera. Sutinska korist od automaske variable je da skupocjenu i ogranienu memoriju
raunara optimalno iskoristi, tj. samo kad je potrebna.
41.

Memorijske klase varijabli statika

Ova dimenzija referie vrijeme ivota od trenutka nastajanja variable u memoriji raunara do njenog uklanjanja iz memorije
raunara. Gdje i kako dugo se rezervie memorija za variablu definie memorijska klasa variable.
Kljuna nje je static" slui za definisanje statike memorijske klase variabli. Ukoliko se ova kijuna rije upotrebljava za
definisanje memorijske klase onda se ona smjeta ispred tipa i imena u naredbi deklarisanja variable. Globalne varijable su
one koje se definiu izvan funkcije. Primjenjuje se na lokalne i globalne varijable.
Svrha statike memorijske klase je da neka varijabla sauva vrijednost izmeu sukcesivnih poziva funkcije, tj. da se due pamti.
Ova varijabla traje toliko dugo koliko traje i izvravanje cijelog programa. To zani da se statika varijabla kreira samo
jedanput, i to pri startu programa. Poto varijabla rezervie trajno potreban memorijski prostor, onda je prirodno da ona uva
vrijednost izmeu sukcesivnih poziva funkcije. One takoe mogu biti inicijalizirane pri deklarisanju. Vano je zapaziti da se
inicijalizacija statike varijable odigrava samo jedanput i to pri startu izvravanja programa, a ne svaki put pri izvravanju
funkcije. Takoe, kod neinicijaliziranih automatskih varijabli je vrijednost nepoznata, dok se za neinicijalizirane statike
varijable vrijednost implicitno inicijalizira na nulu. Lokalne varijable su one koje se deklariu u funkciji.

SUDO | FAKULTET ELEKTROTEHNIKE

Osnovi programiranja
42.

13

Memorijske klase varijabli eksterna

Ova dimenzija referie vrijeme ivota od trenutka nastajanja variable u memoriji raunara do njenog uklanjanja iz memorije
raunara. Gdje i kako dugo se rezervie memorija za variablu definie memorijska klasa variable.
Kljuna nje je extern" slui za definisanje eksterne memorijske klase variabli. Ukoliko se ova kljuna rije upotrebljava za
definisanje memorijske klase onda se ona smjeta ispred tipa i imena u naredbi deklarisanja variable. Globalne varijable su
one koje se definiu izvan funkcije. Primjenjuje se na globalne varijable.
Eksterna klasa nema efekta na vrijeme ivota globalnih varijabli, poto su one trajne, nego utie na vidijivost ili doseg
globalnih varijabli. Smisao kvalifikatora extern je upravo u proirenju opsega vidljivosti globalne varijable preko granica
jedne datoteke. Naime deklaracije extern u datoteci aocde. c omoguuje vidijivost varijable i u funkcijama defisanim u datoteci
aocde. c. Znai manipulisanje varijable je sada mogue iz svih funkcija programa.
43.

Memorijske klase varijabli registarska

Kljuna nje je register" slui za definisanje registarske memorijske klase variabli. Ukoliko se ova kljuna nje upotrebljava
za definisanje memorijske klase onda se ona smjeta ispred tipa i imena u naredbi deklarisanja variable. Lokale varijable su
one koje se deklariu u funkciji. Primjenjuje se na lokalne varijable.
Registarska klasa se u potpunosti ponaa kao automatska to se tie vremena ivota, jedina raziika je gdje se vri rezervisanje
memorije za varijablu. Automatske varijable se rezerviu u RAM memoriji, odnosno na stek dijelu RAM memorije. Meutim
CPU ima mali broj vrlo brzih registara koji mogu biti upotrebljeni. U stvari kvalificiranje varijable sa register kvalifikatorom
trai od procesora rezervisanje nekog od njegovih registara za varijablu, to 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 esto.
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 znai da se rjeavanje problema vri na taj nain to se rijeavaju jednostavnije verzije originalnog problema.
Rekurzivni algoritmi rijeenje problema mogu biti programski implementirani koritenjem rekurzivnih funkcija, odnosno
rekurzivni algoritam moe biti implementiran sa rekurzivnom funkcijom.
Vano je napomenuti da svaka rekurzivna funkcija uvijek moe biti napisana kao nerekurzivna funkcija koritenjem iterativnog
rijeenja rekurzivnog problema. u optem sluaju pri rjeavanju rekurzivnih problema, pri implementaciji rjeenja problema
prednost treba dati iterativnim implementacijama u odnosu na rekurzivne implementacije. Meutim u nekim sluajevima je
rekurzivna implementacija daleko jednostavnija i elegantnija nego ekvivalentna iterativna implementacija.
45.

Adrese i pokazivai

Svaka varijabla je asocirana sa odreenim prostorom u memoriji raunara, 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 itanje 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 pokazivai na varijable, a
varijable koje mogu da storiraju vrijednosti adresa se nazivaju pokazivake varijable ili pokazivai.
46.

Deklarisanje pokazivaa

Pokazivai su varijable specijalno namjenjene za storiranje i manipulisanje adresa varijabli. Pokazivake varijable kao i sve
ostale varijable u C moraju biti deklarisane prije koritenja. Deklarisanje naravno ukljuuje specificiranje tipa i imena
pokazivake varijable. U sluaju deklarisanja pokazivake varijable, specificiranje tipa pokazivaa se odnosi u stvari na tip
varijable iju adresu pokaziva moe storirati odnosno manipulisati. Opta forma deklaracije je:
tip_podatka * ime__pokazivaa;
tip_podatka - je bilo koji validan C tip kao int, float, . . .
*(asteriks) - je symbol koji indicira da se radi o pokazivakoj varijabli
ime_pokazivaa - je korisniko dato ime pokazivakoj varijabli.

SUDO | FAKULTET ELEKTROTEHNIKE

Osnovi programiranja

14

Pokazivakim varijablama moe biti dodjeljena vrijednost koritenjem standardnog operatora dodjeljivanja (=), pri emu se
mora biti paljiv da je dodjeljivana vrijednost validna adresa. Programer elegantno dodjeljuje vrijednost pokazivaima
koritenjem operatora nalaenja adresa varijabli, tj. operatora &.
int duzma;
int *pduzina;
pduzina = &duzina;
47.

Operator dereferenciranja (indirekcije)

Pokazivai mogu biti koriteni za manipulisanje varijablama koritenjem njihovih adresa umjesto njihovih imena, odnosno
pokazivai osiguravaju pristup svakoj memoriskoj lokaciji koritenjem njenih adresa. C osigurava operator dereferenciranja
za ovu svrhu. Simbol *(asteriks) predstavlja unarni operator dereferenciranja ukoliko je smjeten ispred imena pokazivake
varijable i slui za dobivanje ili postavljanje vrijednosti objekta na koji pokaziva pokazuje (iju adresu pokaziva sadri). U
optem sluaju dereferenciranje je dato:
*ptr = var;
Ova naredba dodjeljuje objetku na koji pokazuje pokaziva ptr vrijednost varijable var.
var = *ptr
A ova naredba dodijeli varijabli var vrijednost objekta na koji pokazuje pokaziva ptr.
48.

Aritmetika sa pokazivaima

Pokazivai kao i ostale varijable sadre neke vrijednosti, ali su one memorijske adrese. U tom kontekstu pokazivai su validni
operandi u aritmetikim izrazima dodjeljivanja i poreenja. Naravno ne mogu biti izvedene sve operacije, zbog toga to su te
vrijeanosti memorijske adrese, ve moe biti izveden samo ogranien set aritmetikih operacija:
1. Pokaziva moe biti inkrementiran
ili dekrementiran
2. Cijeli broj moe biti dodan
ili oduzet
od pokazivaa a.
3. Drugi pokaziva moe blti dodan
ili oduzet
od pokazivaa
Pokazivai mogu biti poredeni koritenjem svih operatora
ali se kod izvenja aritmetikih operacija sa
pokazivaima mora voditi rauna da rezultat operacije proizvodi adresu koja ima smisla.
Ako vrimo obino aritmetiko sabiranje broja 5000+1 dobijamo za rezultat 5001, to nije sluaj u aritmetici sa pokazivaima.
Kad se cijeli broj doda ili oduzme od pokazivaa nije jednostavno umanjen ili uvean za taj broj, nego za taj broj pomnoen
brojem bajta koje zauzima objekat na koji pokazuje pokaziva.
Npr.
Cijeli broj - 9998+(5*2)=1008
Realan broj -* 9998+(5*4)=1018
49.

Pokazivai na pokazivae

Mogue je imati i pokaziva na pokaziva. Poto je pokaziva varijabla koja ima svoju adresu u memoriji raunara, Mogue je
deklarisati drugu varijablu koja je pokaziva na pokazivaku varijablu. Pokaziva na pokaziva moe da storira vrijednosti
adresa pokazivakih varijabli. Pokaziva na pokaziva varijabla takoe mora biti deklarisan prije upotreba. Opta forma
deklaracije je:
tip podatka ** ime__pokazivaa;
tip_podatka je bilo koji validan C tip kao int, float, . . .
**(dva asteriks znaka) - je simbol koji indicira da se radi o pokaziva na pokaziva varijabli
Ime pokazivaa - je korisniki dato ime pokaziva na pokaziva varijabli
Pokaziva na pokaziva varijabla takoe moe biti koritena za indirektni pristup vrijednosti varijable koritenjem operatora
za dvostruko dereferenciranje. Simobl ** predstavlja unarni operator dvostrukog dereferenciranja ukoliko je smjeten ispred
imena pokaziva na pokaziva varijable i slui za dodavanje ili postavljanje vrijednosti objekta na koji se pokazuje.
**ptrptr = var;
Ova naredba dodjeli objektu na koji pokazuje pokaziva na pokaziva ptrptr vrijednost varijable var.
var =**ptrptr;
A ova naredba dodijeli varijabli var vrijednost objekta na koji pokazuje pokaziva na pokaziva ptrptr. Ove naredbe zahtjevaju
postojanje pokazivake varijable ija je vrijednost adresa manipulisane varijable, a vrijednost pokaziva na pokaziva
varijable ima vrijednost adrese pokazivake varijable, to i jest smisao dvostrukog dereferenciranja.
SUDO | FAKULTET ELEKTROTEHNIKE

Osnovi programiranja
50.

15

Pokazivai i funkcije

Pri pozivu funkcije, funkcija prima listu argumenata iz pozivajue funkcije (parametre), zatim izvodi eljenu obradu te vraa
jednu ili ni jednu vrijednost pozivajuoj funkciji prije povratka. Ovakav nain pozivanja funkcije naziva se poziv po
vrijednosti(call by value). Ovakav aranman, tj. poziv po vrijednosti donosi znaajnu programersku korist, naime ovo
omoguuje sigurno pisanje funkcije kao nezavisnog entiteta bez bojazni da funkcija grekom ili nepanjom moe promjeniti
vrijednosti u drugim funkcijama.
Meutim postoje situacije kada je poeljno da pozvana funkcija ima pristup varijablama pozivajue funkcije . Ovaj aranman
omoguuje pozvanoj funkciji da promjeni vrijednost varijabli pozivajue funkcije i na taj nain efektivno ostvari viestruke
vraene vrijednosti a ne samo jednu (vie ulaza vie izlaza). Poziv funkcije sa prenosom adrese varijable (varijabli) u funkciju
umjesto njihove vrijednosti naziva se poziv po referenci(call by reference) jer pozvana funkcija moe referencirati (pristupiti)
varijabli koritenjem prenesene adrese. Da bi razvili i koristili funkciju koja prihvata poziv po referenci potrebno je:
Koristiti operator nalaenja adrese & pri pozivu funkcije
Kao parametre funkcije koristiti odgovarajue pokazivae za storiranje prenesenih adresa
Koristiti operator dereferenciranja (indirekcije) * za pristup varijablama preko njihovih adresa
51.

Pokazivai na funkcije

Pokazivai na funkcije predstavljaju drugi nain pozivanja funkcija. lako funkcija nije varijabla ona ima fiziku lokaciju u
memoriji raunara koja moe biti storirana u pokaziva na funkcjiu varijablu. Kada se program upuni u memoriju radi
njegovog izvrenja kod svake funkcije programa se upuni na specificiranu adresu. Ova adresa je ulazna taka funkcije koja
moe biti storirana u pokaziva na funkciju varijablu. Nakon toga u programu ovaj pokaziva moe biti koriten za poziv
funkcije umjesto standardnog poziva funkcije po njenom imenu. Kao i sa ostalim pokazivaima, pokazivai na funkcije moraju
biti deklarisani pa tek koriteni. Opta forma deklaracije pokazivaa na funkciju je:
tip podataka (*pokaziva_na_funkciju ) (lista parametara); gdje su:
tip podataka predstavlja tip vrijednosti koje vraa funkcija i moe biti svaki validan C tip kao to je int, double itd.
(*pokaziva_na_funkciju) je ime pokazivaa na funkciju. () su obavezne.
(lista parametara) predstavlja listu parametara funkcije.
52.

Nizovi

Niz je kontinualna sekvenca memorijskih lokacija, gdje svaka lokacija sadri vrijednosti istog tipa. Svaka lokacija se naziva
element niza. Nizu se dodjeljuje samo jedno ime, a elementima niza se pristupa navoenjem imena niza i indeksa elementa u
nizu.
53.

Jednodimenzionalni nizovi

Kao i skalarne varijable, nizovi moraju biti deklarisani prije koritenja. Prevodilac C jezika koristi informacije iz deklaracije
kao to je ime niza i veliina niza, za rezervisanje potrebnog memorijskog
prostora za elemente niza te za raunanje indeksa za pristupanje elementima niza. Opta 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 deklarie broj elemenata niza.
Pristup elementima niza , u stvari znai mogunost upisivanja i itanja 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. Znai moe se pristupiti svakom elementu niza, specificirajui ime niza i odgovarajui indeks elementa kao na
primjer: cijene[3]=100. 55;
referie etvrti element u nizu cijene i dodjeljuje mu vrijednost 100. 55. Treba zapamtiti slijedea pravila u vezi sa nizovima:
C ne kontrolie vrijednost indeksa, znai da morate biti paijivi da vrijednosti indeksa budu u skladu sa duinom niza,
Indeks 0 je dodijeljen prvom elementu.
Svaki cio broj moe biti koriten kao indeks.

SUDO | FAKULTET ELEKTROTEHNIKE

Osnovi programiranja

16

Svaki individualni element niza moe biti koriten gdje i skalarna varijabla istog tipa, znai svaki element niza se
smatra varijablom.
U stvamosti prava snaga obrade informacija struktuiranih u nizove dolazi u savezu sa petljama, posebno u sprezi sa brojakim
petljama, gdje se na jednostavan nain broja u petlji koristi kao indeks niza, to omoguava elegantnu i kompaktnu obradu
svih elemenata niza. Kao to je mogue inicijalizirati skalarne varijable prilikom deklarisanja, tako je mogue inicijalizirati i
nizove uvoenjem liste vrijednosti elemenata u vitiastim zagradama odvojenim zarezima.
int tabela[4]={10, 20, 11, 22};
Tako je i mogue izostaviti dimenziju niza ukoliko se navedena lista inicijalnih vrijednosti pri deklaraciji:
inttabela[]={10, 20, 11, 22};
Mogue je navesti manji broj vrijednosti za inicijaliziranje od broja elemenata niza
int tabela[50]={1, 2, 3, 4}; Prva cetiri indeksa e poprimiti vrijednosti 1, 2, 3, 4 dok e se ostalih 46 indeksa poprimiti
vrijednost 0. Ukoliko je inicijalizacija dua od niza, prevodilac C jezika e signalizirati greku.
int tabela[3]={1, 2, 3, 4};
54.

Visedimenzioni nizovi

Dvodimenzioni nizovi ili kako se jo nazivaju i tabele sastoje se od redova i kolona. Matrice su matematiki 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 deklarie broj redova niza a broj u
drugom paru zagrada deklarise broj kolona niza.
Svaki element u dvodimenzionom nizu se jedinstveno locira navoenjem reda i kolone kojim element pripada, odnosno
navoenjem 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 sluaju jednodimenzionih nizova, elegantna obrada podataka struktuiranih u dvodimenzione
nizove se postie koritenjem programskih petlji a najee for petlji.
55.

Jednodimenzionalni nizovi i pokazivai

Interno raunar ne razumije pojam indeksa niza nego prevodilac prevodi referenciranje elemenata niza preko indeksa
raunanjem adrese elemenata u nizu, koritenjem poetne adrese niza (niz je kontinualno rezervisan prostor u memoriji),
indeksa i veliine elemenata niza. Poto C jezik podrava pokazivake varijable koje storiraju adrese, mogue je kreirati
pokaziva i dodijeliti mu vrijednost adrese prvog elementa niza te onda pristupati elementima niza preko adresa, odnosno
moemo eksplicitno simulirati interni nain rada raunara pri pristupu elementima nizova. Ostalim elementima niza
pristupamo tako to koristimo operator dereferenciranja (indirekcije) * i relativne pozicije ostalih elemenata niza od elementa
0.
56.

Visedimenzioni nizovi i Pokazivai

Kao i u sluaju jednodimenzionih nizova, mogue je pristupiti elementima viedimenzionih nizova koritenjem notacije
pokazivaa.
Struktura dvodimenzionog niza u memoriji raunara omoguuje razliite naine pristupa elementima. Jedan nain je
razmatranje dvodimenzionog niza kao jednodimenzionog niza redova gdje je svaki red jednodimenzioni niz elemenata.
Pokazivaka notacija

Indeksna notacija

Vrijednost

*brojevi[0]

brojevi[0][0]

16

*(brojevi[0]+1)

brojevi[0][1]

18

*(brojevi[0]+2)

brojevi[0][2]

20

*brojevi[1]

brojevi[1][0]

25

*(brojevi[1]+1)

brojevi[1][1]

26

*(brojevi[1]+2)

brojevi[1][2]

27

int brojevi[2][3]={{16, 18, 20},


{25, 26, 27};

SUDO | FAKULTET ELEKTROTEHNIKE

Osnovi programiranja
57.

17

Funkcije i jednodimenzionalni nizovi

Individualni elementi nizova se prenose u funkcije na isti nain kao i skalarne varijable, u sluaju poziva funkcije preko
vrijednosti ili sa adresom elemenata pri pozivu funkcije preko reference. U funkciju moe biti preneen cijeli niz a ne samo
njegovi elementi. Prenoenje cijelog niza u funkciju je jednostavnija operacija od prenoenja pojedinanih elemenata. Pri
pozivu funkcije deklarisane i definisane za prihvat niza, funkcija prihvata ne cjelokupnu kopiju niza (koja moe biti zaista
ogromna, te bi bilo nepraktino kopirati sve elemente) nego samo adresu poetka niza. Ova injenica implicira da funkcija
koritenjem adrese poetka niza moe da dohvati i manipulie sve elemente niza. Ova injenica je jasnija ukoliko se podsjetite
veze izmeu nizova i pokazivaa. Zbog ove veze postoje dva naina definisanja i deklarisanja funkcija iji parametri pored
skalarnih vrijednosti sadre i jednodimenzione nizove. Standardna forma definicije funkcija iji 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 vraa u pozivajuu funkciju npr, int, float, char. . . itd
identifikator funkcije je ime korisnike funkcije
tijelo funkcije predstavlja programski kod i ostale varijable deklarisane u funkciji.
lista parametara sadri tipove i imena parametara funkcije. Parametri se smjetaju izmeu malih zagrada i odvajaju zarezima.
Standardna forma deklaracija funkcija iji parametri su pored skalara i jednodimenzioni nizovi:
tip funkcije ime funkcije (tip [ ], tip[ ]. . . . . tip [ ], lista tipova skalara);
Pozivanje funkcije se jednostavno izvodi navoenjem imena funkcije i liste argumenata (stvarnih parametara), odnosno liste
imena nizova i liste skalarnih varijabli, te prihvatanjem vraene vrijednosti.
Uzimajui u obzir bliskost veze izmeu nizova i pokazivaa, drugi nain definisanja i deklarisanja funkcija iji 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 vraa u pozivajuu funkciju npr, int, float, char. . . itd
identifikator funkcije je ime korisnike funkcije
Lista parametara sadri tipove i imena parametara funkcije. Parametri se smjetaju izmeu 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 esto predstavlja znaajan dio programerskog zadatka. Naini da se stringovi storiraju u memoriju,
kako im se pristupa i kako se obrauju zavise od datog programskog jezika. U C programskom jeziku stringovi su okonani sa
specijalnim karakterom tzv. null karakter, ija vrijednost je binarna nula ili '\0' koji signalie kraj stringa. Ovo znai da je
potrebna veliina memorijskog prostora potrebna za storiranje stringa uvijek vea za jedan od broja karaktera u stringu. U C
jeziku string predstavlja svaka sekvenca karaktera omeenim sa navodnicima " " npr. "Ovo je string".
59.

Deklarisanje i inicijalizacija stringova

String konstante se jednostavno kreiraju u programu navoenjem stringa u dvostrukim navodnicima. Npr:
printf(pozdrav Bosni)
Mogue je i kreirati string varijable
char nje[4];
Mogue je i inicijalizirati string kao i ostale varijable
char rije[4]={a, d, o , 0 );
Svi elementi niza su inicijalizirani eljenim vrijednostima, zapazite inicijalizaciju zadnjeg elementa niza sa null karakterom.
Mogue je i izostaviti dimenziju stringa :
char rije[]={a, d, o, 0);
Ovdje prevodilac rauna veliinu niza baziranu na listi vrijednosti za inicijalizaciju.
Moe se koristiti notacija sa pokazivaima
char *rije=ado;

SUDO | FAKULTET ELEKTROTEHNIKE

Osnovi programiranja

18

Ova naredba kreira varijablu tipa pokaziva na karakter sa imenom rije i inicijalizira ga vrijednou adrese prvog stringa
ado storiranog negdje u memoriji.
Pristup elementima stringa moe biti ostvaren koritenjem pokazivaa rije.
60.

Stingovi i funkcije

Ponavljajui jo jednom da C tretira stringove kao jednodimenzione nizove karaktera terminirane sa null karakterom, sve
tehnike koje vae za prenos jednodimenzionih nizova i njihovih elemenata u funkcije vae 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++; }
Slijedei zapis koristi notaciju pokazivaa: Deklaracija:
void kopirajniz (char *, char *);
Definisanje:
void kopirajniz (char *t, char *s){
while ((*s++ = *t++ ) !=\0 );
}
ili jo krae:
void kopirajniz (char *t, char *s){
while (*s++ = *t++ );
}
Svi ovi predhodni naini deklarisanja su korektni i do programera je kojim e putem krenuti.
61.

Struktura deklaracija i definicija

Strukture omoguuju grupisanje razliitih tipova podataka pod jednim imenom te njihovo tretiranje kao jednog entiteta.
Struktura je korisniki definisan tip podatka, odnosno kolekcija logiki koreliranih elemenata razliitih tipova grupisanih pod
jednim imenom. Opta forma deklaracije tipa struktura je:
struct ime strukture { deklarisanje varijabli-clanova strukture
};
struct je kljuna rije za deklarisanje strukture
ime strukture je korisniki dato ime tipu struktura
deklaracija clanova strukture je skup deklaracija varijabli koje ine strukturu . . . (navedi primjer)
62.

Deklarisanje varijabli tipa struktura

Nakon deklarisanja eljenog tipa struktura mogu se deklarisati varijable tipa struktura. Opta forma deklarisanja varijabli tipa
struktura je data sa:
struct ime_strukture ime_varijable;
Tek deklaracije varijabli tipa struktura rezerviu potreban memorijski prostor za varijable. Naravno da je ovo slino
deklarisanju fundamenalnih tipova. Naravno da proizvoljan broj podataka tipa struktura moe biti deklarisan a nakon toga
proizvoljan broj varijabli tipa struktura moe biti kreiran. Varijable tipa struktura takoer mogu biti i inicijalizirane pri
deklarisanju navoenjem liste vrijednosti lanova struktue. . .
63.

Pristup lanovima struktura

C osigurava poseban operator koje se zove operator lana strukture ili taka operator za pristup lanovima varijabli tipa
struktura. Opta forma je
varijabla_tipa_struktura. ime_clana
. (taka) operator povezuje ime varijable sa lanom varijable, odnosno omoguuje manipulaciju vrijednostima lana.
Pored dodjeljivarija vrijednosti varijablama tipa struktura lan po lan. Mogue je dodijelii varijable tipa struktura drugoj
varijabli istog tipa struktura u jednoj naredbi koritenjem operatora dodjeljivarija;
struct zaposleni vozac1 , vozac2;
vozac1 = vozac2 ;
vozac1. sifra = vozac2. sifra; . . . . ltd.
SUDO | FAKULTET ELEKTROTEHNIKE

Osnovi programiranja

19

Naravno da je dodjeljivarije cjelokupne strukture puno efikasnije od dodjeljivarija lan po lan, posebno za strukture od
mnogo lanova.
Veliina strukture u bajtima moe biti izraena koritenjem operatora sizeof()
int x;
x=sizeof (struct zaposleni);
64.

Strukture i pokazivai

Kao i pokazivai na varijable fundamentalnih tipove podataka tako i pokazivai na varijable tipa struktura mogu da
manipuliu adrese varijabli tipa struktura. Pokazivai na varijable tipa struktura se deklariu na isti nain kao i ostali
pokazivai koritenjem operatora * ispred imena pokazivake varijable. Takoer standardni operator & za nalaenje adresa
varijabli fundamentalnog tipa se koristi i za nalaenje adresa varijabli tipa struktura. Opta forma pristupa lanu varijable je
(*pokaziva). clan
U referenciranju neophodno je koristiti male zagrade jer operator taka (. ) ima vii prioritet od operatora indirekcije asteriks.
Zbog vanosti manipulisanja varijabli tipa struktura koritenjem pokazivaa, C jezik ak osigurava i specijalan operator
za ovu svrhu pored standrardnog naina pomenutog predhodno. Ovaj operator se naziva strelica operator ili operator
pokazivaa na strukturu. Opta forma je pokaziva clan.
65.

Strukture i funkcije

Kao i ostale varijable, varijable tipa struktura mogu biti parametri funkcija te mogu biti vraene vrijednosti funkcija. Mogu
biti prenoene preko kopije ili adrese. U optem sluaju funkcija koja prihvata i vraa 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 ukljuuje typedef naredbu koja omoguuje davanje eljenog korisnikog imena kako fundamentalnim tipovima
podataka tako i korisniki definisanim tipovima odnosno strukturama. Ovo korisniko ime olakava snalaenje u velikim
programima te reducira posao kucanja tokom pisanja programa.
67.

Nizovi struktura

Mogu se deklarisati jednodimenzioni i viedimenzioni nizovi varijabli kao to je mogue sa fundamentalnim tipovima. U stvari
snaga struktura se pokazuje kada se one koriste kao liste podataka. Pristup elementima nizova se ostvaruje koritenjem
indeksa ili pokazivaa a pristup lanovima elemenata koritenjem operatora pristupa lanovima strukture taka ili strelica.
Opta 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 lanovima 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 poetka nizova. Imajui
ovo u vidu jasno je da se obrada nizova u funkcijama moe izvesti koritenjem standardne indeksne ili pokazivake notacije
pristupa elementima odnosno lanovima. Opta forma deklaracije funkcija iji parametri su jedno i dvodimenzioni nizovi je
dana sa:
tip ime_funkcije (struct ime__strukture *, . . . );
tip ime_funkcije (struct ime_strukture [ ][broj kolona], . . . . );
A opta forma definicije funkcija je:
tip ime_funkcije (struct ime_strukture ime_niza[ ], . . . ) {
SUDO | FAKULTET ELEKTROTEHNIKE

Osnovi programiranja

20

tijelo funkcije;
}
tip ime_funkcije (struct ime_strukture ime_niza[ ][broj kolona], . . . . ) {
tijelo funkcije;
}
69.

Datoteke

Svi podaci u naim dosadanjim programima su ili bili definisani ili su kreirani interno programski. Vrijeme njihovog ivota je
bilo u skladu sa vremenom ivota programa i pri svakom startu programa su se morali ponovo unijeti programski. Ovi podaci
se itaju ili piu na permanentne memorije za trajno uvanje. Operacije pisanja i itanja podataka se izvode nad entitetima
smjetenim na permanentnim memorijama koji se nazivaju datoteke. Svaka datoteka na raunarskom sistemu je fiziki
smjetena (zapisana) na permanentnoj memoriji koritenjem imena datoteke. -Fiziki , najei 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 podrava model ulaza-izlaza baziranog na konceptu toka podataka. Tok podataka je
sekvenca karaktera ili jo preciznije tok podataka se sastoji od sekvenca bajta. Svaki izvor ili ponor podataka se asocira sa
tokom podataka. Sekvenca bajta koja dolazi (uitava se) u program naziva se ulazni tok podataka a sekvenca bajta koja odlazi
(ispisuje se) iz programa naziva se izlazni tok podataka. Tok podataka moe biti u jendnom od dva moda:
Tekstualni tok podataka je sekvenca ASCII karaktera koji su organizovani u linije(reenice) proizvoljne duine pri
emu svaka linija zavrava 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 itaju ili piu tano 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 raunara, odnosno organizacije datoteka na permanentnim memorijama, rad sa datotekama
u C programu zahtjeva slijedee korake:
Prije itanja ili pisanja datoteke ona mora biti otvorena
Nakon otvaranja datoteka moe biti itana i /ili pisana.
Nakon zavretka itanja pisanja datoteka mora biti zatvorena.
70.

Otvaranje datoteka

Prije koritenja dadoteka mora biti otvorena. Otvaranje datoteke daje potrebne informacije operativnom sistemu za
uspostavljanje veze izmeu datoteke i naeg programa. Ove informacije su na primjer, ime datoteke i lokacija, mod i nain
pristupa datoteci, te da li se datoteka namjerava koristiti za itanje ili pisanje ili oboje. U C jeziku informacije o datoteci se
storiraju u strukturi, typedef ime ove strukture je FILE. FILE varijabla slui kao oblast komunikacije izmeu programa,
operativnog sistema i datoteka. Izvoenje funkcije za otvaranje datoteke kreira varijablu tipa FILE i vraa pokaziva 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 vraa vrijednost pokaziva na tip FILE. Prvi parametar daje ime datoteke koja
se otvara a drugi parametar definie mod u kome se datoteka otvara. Ukoliko je otvaranje uspjeno funkcija vraa vrijednost
pokaziva na FILE. Ukoliko je otvaranje neuspjeno vraena vrijednost pokazivaa je NULL.
71.

Zatvaranje datoteka

Kada su ulazno izlazne operacije sa datotekom okonane potrebno je zatvoriti datoteku. Funkcija fclose(FILE *) vri
zatvaranje datoteke otvorene sa funkcijom fopen(). Parametar funkcije fclose( ) je pokaziva vraen pri pozivu funkcije fopen().
Poziv ove funkcije signalizira operativnom sistemu da raskine vezu izmeu programa i datoteke te oslobodi koritene resurse
za odravanje ove veze. Nakon zatvaranja datoteke operativni sistem automatski dodaje na kraj datoteke specijalan marker
(vrijednost ) koja oznaava kraj datoteke (EOF- end of file). EOF marker ima speicijalnu vrijednost u zavisnosti od sistema, ali
takvu koja se nikad ne moe pojaviti unutar internih podataka sadranih u datoteci.

SUDO | FAKULTET ELEKTROTEHNIKE

Osnovi programiranja
72.

21

Citanje I pisanje tekstualnih datoteka

Funkcije za itanje sadraja tekstualnih datoteka su skoro identine funkcijama za itanje tastature. Ove funkcije su date u
tabeli
Standardne funkcije za itanje tekstualnih datoteka
Ime funkcije

Opis

int fgetc(FILE * pokaziva na datoteku)

Funkcija ita jedan karakter iz datoteke konvertovari u cijeli broj. Vraa EOF
vrijednost pri dostizanju kraja datoteke.

char * fgets(char * ime__stringa, int n, FILE


*pokaziva na datoteku)

Funkcija ita n-1 karaktera ili do nailaska na karakter nove linije iz datoteke i
smjeta ih u string ime_stringa. Pri nailasku na kraj datoteke funkcija vraa
NULL vrijednost.

int fscanf(FILE *pokaziva_na_datoteku,


"format")& argumenti)

Funkcija ita vrijednosti za listu argumenata u skladu sa formatom iz


datoteke. Funkcija vraa broj uspjeno proitanih argumenata, pri nailasku na
kraj datoteke funkcija vraa EOF. vrijednost.

73.

itanje i pisanje tekstualnih datoteka

U C postoje tri standardne datoteke i pokazivai asocirani sa njima. Ove datoteke se automatski otvaraju (bez intervencije
programera) svaki put kada se starta izvrenje C programa i automatski zatvaraju pri okonanju programa. Nazivi ovih
standrardnih pokazivaa na datoteke i pripadajuih datoteka dati su u tabeli:
Naziv pokaziva na tabelu
Standardna datoteka
stdin

Datoteka standardnog ulaza, najee tastatura

stdout

Datoteka standardnog izlaza, najee monitor

stderr

Datoteka ispisivarija greaka, najee monitor

Sve standardne datoteke se otvaraju u tekstualnom modu. Poto su standardni pokazivai svi tipa FILE * sada se i predhodno
spomenute funkcije za itanje-pisanje datoteka mogu koristiti i za itanje-pisanje standardnih datoteka, odnosno pisanje na
monitor i itanje sa tastature umjesto dosad koritenih funkcija posveenih samo tastaturi ili monitoru.
74.

itanje i pisanje binarnih datoteka

Vrlo esto se javlja potreba pisanja u datoteku i itanja iz datoteke, kompleksnih tipova podataka kao to su nizovi, strukture.
nizovi struktura te ostali kompleksni podaci. Ovakav zahtjev moe biti ostvaren ukoliko se podaci piu-itaju na datoteke u
njihovoj internoj odnosno binarnoj formi kako su reprezentovani i u RAM memoriji raunara odnosno programa. Ovo znai da
se npr realan broj iz programa koji zauzima etiri bajta upravo tako storira i na datoteku tj. bez ikakvog formatiranja kao u
sluaju tekstualnih datoteka. Binarne datoteke su znaajno krae od tekstualnih za istu koliinu podataka. Vidljiv je i
nedostatak binarnih datoteka u odnosu na tekstualne. Naime, poto tekstualne datoteke sadre karaktere kodirane standardnim
ASCII kodom, te imaju internu organizaciju u linije, ove datoteke su itljive i razumljive od strane mnogih programa te se lako
koriste za izmjenu informacija izmeu razliitih programa i razliitih raunara. C standardna biblioteka sadri dvije funkcije
za pisanje i itanje binarnih datoteka. int fread(void *, int , int, FILE *) I int fwrite(void *, int, int, FILE *)
75.

Sluajan (direktan) pristup datotekama.

Naravno da postoje potrebe da se obrati jedan ili vie podataka iz cijele datoteke i u tom sluaju sekvencijalna obrada
odnosno pristup za velike datoteke postaje nedopustivo spor uz bespotrebno troenje raunarskih resursa. Radi ovih razloga
operativni sistem raunara omoguuje da se datoteke mogu itati ili pisati i sluajno(direktno) , odnosno moe se pristupiti
podacima na jednom mjestu u datoteci a zatim na proizvoljnom drugom mjestu. Kao to je predhodno prikazano datoteka je
ustvari niz bajta te za svaki bajt u nizu ima svoju poziciju. Ova pozicija se naziva indikator pozicije datoteke. Slijedee pisanje
ili itanje datoteke izvodi se na mjestu koje definie vrijednost indikatora. Ovaj indikator je analogan indeksu
jednodimenzionog niza. C standardna biblioteka obezbjeuje nekoliko funkcija za sluajan pristup datotekama, odnosno
funkcija koje upravljaju vrijednou indikatora pozicije datoteka. Indikator pozicije datoteka je varijabla tipa long int, koju
automatski kreira funkcija za otvaranje datoteka. tj fopen().

SUDO | FAKULTET ELEKTROTEHNIKE

Osnovi programiranja
76.

22

Funkcija fseek()

Prototip funkcije fseek() dat je sa;


int fseek(FILE *, long int, int);
fseek () funkcija slui za postavljanje vrijednosti indikatora pozicije datoteke na eljeno mjesto u datoteci. Funkcija vraa
vrijednost 0 ako je indikator uspjeno postavljen u eljenu poziciju ili vrijednost -1 ako je operacija neuspjena. Funkcija
fseek() ima tri parametra i njena sintaksa je dana sa:
fseek (pokaziva_na_datoteku, relativria_pozicija, pocetna_pozicija)
gdje su:
pokaziva_na_datoteku je pokaziva asociran sa otvorenom datotekom
relativnajpozicija je relativna pozicija u bajtima od vrijednosti poetna lokacija i mora iti long int vrijednost pozitivna
(pomjeranje pokazivaa unaprijed) ili negativan (pomjeranje pokazivaa unazad)
pocetna_lokacija indicira startnu lokaciju u datoteci od koje se vri sraunavarije vrijednosti
indikatora pozicije datoteke i moe imati vrijednost 0, 1 ili 2. Umjesto ovih brojeva mogu se
koristiti tri konstante date u tabeli:
Simbolika konstanta
SEEK_SET
SEEK_CUR
SEEK_END

77.

Numerika vrijednost
0
1
2

Poetna lokacija u datoteci


Poetak datoteke
Od tekue vrijednosti indikatora
Kraj datoteke

Funkcija ftell()

Funkcija ftell() slui za nalaenje tekue vrijednosti indikatora pozicije datoteke. Prototip Funkcije je dat sa:
long int ftell (FILE *pokaziva__na_datoteku);
Funkcija ftell() vraa tekuu long int vrijednost indikatora pozicije datoteke asocirane odgovarajuim pokazivaem na
datoteku.
78.

Sortiranje selekcijom

Algoritam sortiranje selekcijom npr. U rastuem redu elemenata radi na sledei nan. lz cijelog niza podataka (niz ima n
elemenata) nae se najmanji element (selektira) poreenjem elemenata niza. Nakon nalaenja najmanjeg elementa niza izvri
se zamjena vrijednosti najmanjeg elementa i prvog elementa u nizu. Sada je najmanji element na prvom mjestu u nizu. Proces
se nastavlja tako to se sada nae najmanji element u preostalom dijelu niza (ne raunajui 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 emu se zamjenjuju
vrijednosti susjednih elemenata u skladu sa eljenim 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 rastuem redu najvei element e biti sekcesivno zamjenjivaria sa vrijednou
susjednog elementa sve dok najvei element ne stigne u zadnju poziciju niza. Naime najvei element ide kao mjehuri na
povrinu. U drugom prolazu drugi najvei element ce zauzeti poziciju u predzadnjoj poziciji niza. . .
80.

Sekvencijalno pretraivarije

Pri sekvencijalnom pretraivariju imamo klju (vrijednost koju trazimo) i listu (niz) podataka. Ova lista moe biti niz varijabli
bilo kojeg tipa naravno ukljuujui i strukture. U optem sluaju klju se uporeuje sa elementima niza poevi od prvog
elementa sve dok se ne nae jednakost ili se dostigne kraj niza odnosno klju se ne nalazi u nizu. Logika sekvencijalnog
pretrazivarija je jednostavna, sastoji se od for petlje i if naredbe.
81.

Binarno pretraivarije

Algoritam binarnog pretraivarija koristi injenicu da je niz sortiran. Algoritam dijeli niz na dva dijela locira polovinu niza u
kojoj se moe 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 kljuu ili klju se ne nalazi u nizu.

SUDO | FAKULTET ELEKTROTEHNIKE

Osnovi programiranja
82.

23

Dinamicko rezerviranje(alociranje) memorije

Alternativari nain fiksnom rezervisanju memorijskog prostora za potrebe nizova i drugih struktura je koristenje dinamikog
rezervisanja memorije. U ovom pristupu memorijski prostor se rezervie i oslobaa po potrebi tokom izvravarija programa iz
posebnog memorijskog prostora programa. C standrardna biblioteka osigurava kolekciju funkcija za upravljanje dinamikom
alokacijom memorije te njenim oslobaanjem prema zahtjevima tokom izvrenja programa.
83.

Funkcija malloc()

Prototip funkcije malloc() je dat sa: void * malloc(int);


funkcija malloc() rezervie kontinualan niz bajta memorije iji broj definie argument funkcije. Funkcija vraa pokaziva na
prvi bajt u nizu ukoliko je alokacija uspjena. Ukoliko alokacija nije uspjena vraa NULL vrijednost.
Funkcija malloc() vraa pokaziva na prvi bajt alociranog memorijskog prostora. Ovaj pokaziva je deklarisan kao pokaziva
na tip void odnosno generiki (univerzalni) pokaziva koji moe i mora biti oblikovari u bilo koji konkretan tip pokazivaa.
Znai pri svakom pozivu funkcije malloc() vraeni pokaziva mora biti oblikovari korienjem cast() operatora u eljeni
konkretni tip pokazivaa.
84.

Funkcija free()

Funkcija free() slui za oslobaanje memorije rezervisane funkcijom malloc(). Ova funkcija vraa rezervisanu memoriju
memorijskom prostoru (heap) kada vie nije potrebna i ini je raspoloivom za druge rezervacije. Funkcija free() ima jedan
argument a to je pokaziva koji je vratila funkcija malloc().
85.

Povezane liste

Povezana lista je skup struktura u kojim svaka struktura sadri jedan lan ija vrijednost je adresa slijedee strukture i tako
dalje do kraja liste. Moe se rei da je povezana lista skup struktura koje su organizovarie sekvencijalno kao to je i niz
struktura. U povezanoj listi programer eksplicitno aranira sekvencijalnu organizaciju struktura tako to se svaka struktura
(vor -node) sadri adresu (veza-link) slijedee strukture u sekvenci. Osnovna prednost povezane liste u odnosu na niz je da
povezana lista moe da raste ili se smanjuje tokom vremena ivota po potrebi. Ovo znai da nije potrebno unaprijed rezervisati
maksimalnu oekivariu memoriju za podatke bez stvarne potrebe. Druga prednost lei u injenici da se podaci u listu mogu
aranirati vrlo fleksibilno. Osnovna prednost niza u odnosu na povezanu listu je u brzini pristupa svakom elementu.

SUDO | FAKULTET ELEKTROTEHNIKE

You might also like