Osnovi programiranja

Embed Size (px)

DESCRIPTION

ETF

Citation preview

  • 5/22/2018 Osnovi programiranja

    1/24

    Osnovi programiranjaOsnovi programiranja

    2008

    Osnovi programiranjaOsnovi programiranja

    Osnovi programiranja

  • 5/22/2018 Osnovi programiranja

    2/24

    Osnovi programiranja

    1. Rjeavanje zadataka primjenom algoritamaRaunarski programi se piu u cilju rjeavanja zadataka i problema raunarom. Programeri prevode rjeenja zadataka u jezkoji raunar razumije, odnosno piu raunarski program. Rjeenje zadatka ili problema je dato algoritmom. Algoritam jekonana 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 bopisani 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 grafikosimbola indicira tip trasformacije (akcije) koja se deava u simbolu. (tabela sa tipovima i opisom)

    2. Raunarski algoritmiJasno je da algoritmi koje treba da izvri raunarski sistem ima odreenja ogranienja u odnosu na opto fo rmu algoritmodnosno moraju biti formulisani tako da raunarski sistem moe da ih razumije.Fundamentalne operacije koje svaki raunar moe da izvede su :

    Izvoenje aritmetikih operacijaPoreenje dva podatka, i u zavisnosti od rezultata izbor jedne od dvije alternativne akcijeitanje i tampanje informacijaPonavljanje 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

    PozivanjeSekvencija definie slijed u kojem se instrukcije izvravaju u programu. Selekcija daje mogunost izbora izmeu dvije ili vivarijanti u zavisnosti od nekog uslova. Iteracija daje mogunost ponavljanja skupa opera cija u zavisnosti od nekog uslov

    Pozivanje ukljuuje mogunost pozivanja skupa instrukcija (podprograma) po potrebi.

    3. Kljune rijeiKljune rijei su eksplicitno rezervisane rijei koje imaju striktno znaenje u C-u. One ne mogu biti redefinisane ili koritenedrugom kontekstu.

    Kljune rijei u C-u su :auto do goto signed unsigned

    break double if sizeof void

    case else int static volatilechar enum long struct while

    continue float return typedef

    default for short union

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

    SUDO | FAKULTET ELEKTROTEHNIKE

  • 5/22/2018 Osnovi programiranja

    3/24

    Osnovi programiranja

    4. IdentifikatoriIdentifikator je rije koja se sastoji od neprekidne sekvence slova, cifara i posebnog karaktera ''_'' (crtica). Slovo ili crticmora biti prvi znak rijei. U C-u mala i velika slova se tretiraju razliito. Dobra je programerska praksa izabratidentifikatore 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 varijabi funkcije. U ANSI C jeziku, identifikator moe da ima do 31 karakter.

    5. KonstanteC program obrauje razliite tipove podataka, cijele i realne brojeve, alfanumerike karaktere i nizove karaktera itd. Brojekao 192, 64 su primjeri cjelobrojnih konstanti, a brojevi 23.4, 22.11, su primjeri realnih konstanti. U C-u postoji takokarakterne konstante kao 'A', 'F', '5', i nitovne konstante kao ''Dino voli Maju''. Vano je zapamtiti da se karakter konstannavodi u jednostrukim navodnicima dok nizovna konstanta u dvostrukim navodnicima.

    6. OperatoriU 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 dodijepromjenjljivoj na lijevoj strani. (npr. x=y+31;)

    7. Moduli C programaSloeni programi su sainjeni od mnotva podprograma. Ovi podprogrami se nazivaju programski moduli, a program koji jkonstruisan koritenjem modula naziva se modularni program. Daleko je jednostavnije izgraditi, modifikovati i korigovamodularne porgrame, nego programe izgraene na neki drugi nain. Svaki modul se dizajnira i razvija tako da izvrav

    specifian zadatak, i u stvari svaki modul je mali program. Glavna prednost modularnog dizajna lei u injenici da programoe biti dizajniran prije nego to je napisan njegov modul. Nakon zavretka planiranja moe se pristupitni njihovo

    programiranju, a zatim se vri njihva integracija u cijeli program. Svaki modul treba da ima ogranienu ulogu tj. da izvravjedan ili dva zadatka u kompletnom programu. U C programskom jeziku moduli se nazivaju funkcije. Funkcija je modul ko

    sadri sekvencu operacija a koja se tretira kao jedna sloena akcija. Funkcija prihvata neke ulazne podatke i kao rezultakcije proizvodi neke druge podatke.

    8. Funkcija main( )Funkcije C jezika omoguuju kreiranje modularnog programa, odnosno donose sve prednosti modularnog dizajna. Svaki program mora imati barem jednu funkciju. To je funckcija main( ). C program poinje sa izvravanjem tako to se ponizvravati funkcija main( ). U dobro dizajniranom programu, funkcija main ( ) slui za pozivanje drugih funkcija (modula)

    eljenom redoslijedu. (slika)Svaka funkcija se sastoji od zaglavlja funkcije i tijela funkcije. Zaglavlje funkcije, koje je uvijek prva linija u definisanj

    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 bibliotefunkcija koja dolazi sa svakim C prevodiocem (kompajlerom). Funkcija printf( ) kako joj ime sugerie formatira prihvaepodatke i ispisuje ih na standardni izlazni ureaj ( najee ekran ). Podatci se prenose u funkciju tako to se oni navedu zagradama iza imena funkcije. Npr. ako na ekran elimo ispisati poruku : Dino voli Maju., to bi se izvelo pozivanjemfunkcina slijedei nain :

    printf (''Dino voli Maju'');

    SUDO | FAKULTET ELEKTROTEHNIKE

  • 5/22/2018 Osnovi programiranja

    4/24

    Osnovi programiranja

    10. Fundamentalni tipovi podataka u C programskom jezikuC program moe obraivati razliite tipove podataka na razliite naine. Postoje tri tipa fundamentalnih podataka u programskom jeziku:

    Cijeli brojevi

    Realni brojevi

    Karakteri

    Cijeli broj je bilo koji pozitivan ili negativan broj bez decimalne take. Razliiti raunarski sistemi imaju razliita ogranienjna najvei i najvei koriteni cio broj. Ova ogranienja zavise od veliine memorije koju raunar koristi za memorisanjcijelog broja.

    Veliina memorije Maximalna vrijednost broja Minimalna vrijednost broja1-bajt 127 = 27-1 -128 = -27

    2-bajta 32767 = 215-1 -32768 = -215

    4-bajta 2147483647 = 231-1 -2147483648 = -231

    C omoguuje zapisivanje brojeva i u oktalnoj i u hexadecimalnoj notaciji. Hexadecimalna notacija pefix 0X (0XFAC), a zoktalne 0 (0732).

    Realni brojevi ili brojevi sa pominom takom su bilo koji pozitivni ili negativni brojevi sa decimalnom takom. C jezpodrava dvije kategorije realnih brojeva : float (jednostruka preciznost) i double (dvostruka preciznost). Razlika izmeu ovdva tipa je u veliini rezervisane memorije za neki realni broj. Rezervisana memorja za double je duplo vea nego za floa

    Double broj karakterie raunaru dodavanjem velikog ili malog slova L broju (npr. 126.4589987L). Pored standardndecimalne 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 znakovKarakter moe imati bilo koju vrijednost iz predhodno navedenog skupa simbola navedenih u jednostrukim navodnicimKarakter vrijednosti su tipno memorisane u raunarskoj memoriji koritenjem ASCII ili EBCDIC kodova ( koristi se 1 bymemorije ). U svakom od ovih kodova indivindualnim karakterima je dodijeljen binarni kod, odnosno odgovarajukombinacija bita.

    11. Operator sizeof( )Ponekad je potrebno odreenu veliinu memorije potrebnu za storiranje ne samo fundementalnih nego i sloenih tipovpodataka. Zbog toga C osigurava unarni operator sizeof ( ) koji rauna broj bajta potrebnih za storiranje fundamentalnihsloenih struktura podataka (objekata). Opta forma ovog operatora je :

    sizeof ( objekat )

    Gdje objekat moe biti fundamentalni tip, sloeni tip i izraz.

    12. Fundamentalni tipovi podatakavarijable i naredbe deklaracijeRanije, u starijim programskim jezicima korisnik je morao sam odreivati adrese u memoriji u koju je elio smjestiti nepodatak. Dolaskom jezika visokog nivoa, tj. C-a, ovajposao obavlja kompajler, tj. korisnik samo daje simobolika imena tiadresama, 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 izborimena varijabli moraju biti potovana sljedea pravila :

    Ime varijable mora poeti sa slovom ili crticom (_), ime varijable moe sadravati samo slova, cifre i crticu. Ne mosadravati 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 deklariuint ime_varijable;

    U C-u tip podatak int se smatra prirodnim ili uobiajenim tipom za rad sa cijelim brojevima. Na veini raunara on zauzimabajta memorije.

    SUDO | FAKULTET ELEKTROTEHNIKE

  • 5/22/2018 Osnovi programiranja

    5/24

    Osnovi programiranja

    Kljuna rije Rezervisana veliina memorije zacjelobrojnu 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 65535unsigned 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 rezervisanmemorije i preciznosti.

    Kljuna rije Rezervisana veliinamemorije za varijablu

    Opesg brojeva Preciznost brojeva

    float 4 bajta 10-38do 1038 7 decimalnih mjesta

    double 8 bajta 10-308do 10308 15 decimalnih mjesta

    long double 10 bajta 10-4932do 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 zauzim

    jedan bajt u memoriji raunara (256 razliitih vrijednosti). Karkter varijabla moe biti korisna za smjetanje malih cijelbrojeva.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 dodjeljivanjaZnak = je osnovni znak dodjeljivanja u C-u. U opem sluaju izraz dodjeljivanja se izvrava tako to se prvo sraunaritmetiki 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 izraziUnarni operatori inkrement (++) i dekrement (--) su namijenjeni kao skraeni operatori za operacije poveanja i smanjenjvrijednosti varijable za 1. Dva su razloga za uvoenje ovih operatora. Prvo, opracije inkrementa i dekrementa su vrlo este Cprogramima te ovi operatori olakavaju pisanje, i drugo ovi operatori omoguuju C prevodiocu generisanje breg objektnokoda. Operatori mogu biti navedeni u dvije forme prefikx i postfix.

    15. Prioritet i asocijativnost aritmetikih operatoraPostojepravila prioriteta i asocijativnosti operatora koji precizno definiu kako se izraz izraunava. Pravila prioriteta slijedmatematika 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

    SUDO | FAKULTET ELEKTROTEHNIKE

  • 5/22/2018 Osnovi programiranja

    6/24

    Osnovi programiranja

    && Sa lijeva udesno

    || Sa lijeva udesno

    =, +=, -=, *=, /=, %= Sa desna ulijevo

    16. Relacioni, logiki, jednakostni opeartori i izraziC podrava irok skup relacionih i logikih operatora. Oni se koriste za formiranje relacionih i logikih izraza. Relacion

    operatori se odnose na relacije izmeu vrijednosti varijabli ili izraza, dok se logiki operatori odnose na naine povezivanjvoh relacija. Ovi operatori zajedno sa varijablama, konstantama i funkcijama formiraju izraze koji mogu biti ili tani ili lani

    Operator Operacija

    Relacioni operatori Relacione operacije

    < Manje od

    > Vee od= Vee od ili jednakoOperator jednakosti Jednakosne operacije

    == Jednako

    != Nejednako

    Logiki operatori 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 bitimaZa razliku od mnogih drugih jezika C podrava potpun skup operatora za manipulisanje bitima. Ovo je jedan od razloga zase C tretira jezikom srednjeg nivoa. Ovi operatori podrazumijevaju manipulisanje pojedinanim bitima, karakter cjelobrojnim varijablama. Te manipulacije ukljuuju postavljanje, testiranje, pomijeranje vrijednosti pojednih bita unutakarakter 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

  • 5/22/2018 Osnovi programiranja

    7/24

    Osnovi programiranja

    19. CAST operatorIako C prevodilac izvrava konverziju automatski po pravilama, to nije uvjek ono to se eli u izrazu. U fragmentu C program:

    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. Pdijeljenju 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 programaif naredbaOpta forma if naredbe data je sa :

    if (izraz) naredba; //ovo je prosta naredba

    iliif (izraz) {

    naredba1;

    naredba2;

    .... //ovo je sloena naredbanaredban;

    }

    Pravlio izvravanja if naredbe je : ako je sraunata vrijednost izraza istina (ne nulta vrijednost) onda se izvrava naredbasloena naredba (skup naredbi ogranien {}), a potom se izvrava slijedea naredba iza if naredbe. A ako je sraunavrijednost izraza neistinita (nulta vrijednost) onda se naredba ili sloena naredba preskae (ne izvrava se) i tok programa

    prenosi na slijedeu naredbu iza if naredbe. Izraz u if naredbi je uobiajeno relacioni,jednakosni ili logiki izraz, ali svadoputeni izraz je mogu. Vano je zapamtiti da C tretira istinom sve to je razliito od nule(slika-dijagram toka).

    21. Kontrola toka programaif-else naredbaOpti 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 izvravnaredba ili sloena naredba (skup naredbi ogranien sa {}) iza kljune rijei if, a potom se izvrava sledea naredba iz if-elnaredbe. Ako je sraunata vrijednost neistina (nulta vrijednost) onda se izvrava naredba ili sloena naredba iza kljune rijeelse a potom se tok programa prenosi na slijedeu naredbu iza if else naredbu. Znai uvijek se izvrava ili naredba iza if

    SUDO | FAKULTET ELEKTROTEHNIKE

  • 5/22/2018 Osnovi programiranja

    8/24

    Osnovi programiranja

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

    22. Ugnijedene if i if-else naredbeSloene naredbe (blok naredbi izmeu {}) u if-else naredbi mogu da sadre bilo kakve naredbe ukljuujui druge if-elnaredbe 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 lanacU optem sluaju ugnjedene if-else naredbe tee konfuziji, i najbolja praksa je da se izbjegnu ukoliko je mogue. Meutimjedna 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 bproizvoljne duine.

    24. switch naredbaC naredba switch osigurava alternativu if-else lancu u sluajevima koji porede vrijednost cjelobrojnog izraza sa specifinivrijednostima. Opta forma switch naredbedata je sa :

    switch (izraz) { // poetak switch naredbecase vrijednost_1 : // linja okonana sa taka-taka (:) znakom naredba

    // 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 poresa raznim vrijednostima unutar sloene naredbe. Rezultat izraza mora biti cijeli broj, inae prevodilac e javiti greku. Kljun

    SUDO | FAKULTET ELEKTROTEHNIKE

  • 5/22/2018 Osnovi programiranja

    9/24

    Osnovi programiranja

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

    25. Kontrola toka programa - for petljafor petlja se koristi za rjeavanje problema ponavljanja odreene sekcije programa, eljeni broj puta. Ovo je petlja satestiranjem 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 inicijalizacije2. Sraunava se izraz naveden na poziciji test izraza, ako je vrijednost test izraza tana

    a) Izvravaju se naredbeb) Sraunava se izraz na poziciji auriranjac) 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 tokajprograimawhile petljawhile 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 izraza2. Ako je vrijednost istinita

    a) Izvravaju se naredbeb) 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 whilepetlje.

    27. Kontrola toka programado while petljado while petlja je slina while petlji, s tim to sekod nje testiranje petlje vri na kraju petlje, to znai da se ona izvri baremjedanput.

    do{

    naredba 1; naredba 2;naredba n;

    } while(izraz);

    Izvrava se u sljedeim koracima:1. Izvrsi naredbu u tijelu petlje

    2. Srauna vrijednost izraza3. Ako je vrijednost izraza istinita vraa se na poetak petlje, ako nije istinita nastavlja se sa izvravanjem prve naredb

    iz while(izraz) naredbe.

    SUDO | FAKULTET ELEKTROTEHNIKE

  • 5/22/2018 Osnovi programiranja

    10/24

    Osnovi programiranja

    28. Ugnjedene petljeMogue je imati jednu petlju unutar druge petlje odnosno jednu petlju ugnijedenu unutar druge. Ova mogunost daje velikufleksibilnost u rjeavanju problema. U stvari broj ugnijedenih petlji samo je odreen mogunostima datog raunarskogsistema. Opta struktura ugnijedenih petlji je dana :poetak prve petlje {poetak druge pettje {kraj druge petlje}

    kraj prve petlje }

    29. Naredba breakDodatno 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 ignorisanj

    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 tijelunalazi.

    30. Naredba continueUkoliko se u tijelu nalazi naredba continue, njeno izvravanje trenutno prenosi tok programa na izvravanje izraza kojidefinie uslov nastavka iteracije petlje. Znai ova naredba preskae naredbe iza continue unutar tijela petlje i prelazi direktnona 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 gotoUkoliko 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 paradigmuprograma, te komplikuje i oteava odravanje velikih programa. Iako u nekim sluajevima moe uprostiti program, svaki dioprograma 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

  • 5/22/2018 Osnovi programiranja

    11/24

    Osnovi programiranja 1

    32. Funkcije. programski moduli u CProgramski moduli u C jeziku se nazivaju funkcije. Kao to je ve poznato svaki C program mora da sadri barem jednufunkciju tj. Funkciju main () koja slui kao poetna funkcija C programa. Pored main () funkcije, C program moe da koristipraktino proizvoljan broj drugih funkcija koje izvravaju eljene zadatke. Tipian C program se pie kombinirajui funkcijekoje 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 funkcijeuzrokuje 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

    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.

    33. Predefinisane funkcijeTo su ve napisane funkcije koje su grupisane prema funkcijonalnosti i koritenju u datoteke koje se nazivaju biblioteke. Svakbiblioteka je asocirana sa takozvanom zaglavlje datotekom i ima .h ekstenziju. Zaglavlje datoteke sadri prototipove funkcijabibliotekama te definicije tipova podataka i konstanti potrebnih funkcija. Koritenje funkcija odgovarajue biblioteke zahtjevaukljuivanje zaglavlje datoteke u C program. Prilikom pozivanja funkcije biblioteke u C programu, linker kopira objektni kodfunkcije iz specificirane biblioteke i dodaje ga C programu.

    Zaglavije datoteke ANSI/ISO C standardnih biblioteka.

    , , ,

    - sadri informacije o granicama relanih brojnih sistema

    - sadri informacije o granicama cijelih brojeva sistema - sadri prototipove matematickih funkcija

    -sadri prototipove funkcija za konverziju brojeva u tekst i obrnuto, alociranjememorije,

    generisanje sluajnih brojeva, . . .

    -sadri prototipove funkcija za obradu nizova karaktera

    - sadri prototipove funkcija i definicije tipova podataka za obradu vremena i datuma

    34. Korisniki definisane funkcije deklarisanje funkcijaKorisniki definisane funkcije kodira programer sa ciljem izvrvanja odreenog zadatka odnosno podatka u cjelokupnomprogramu. Opta forma deklarisanja funkcija je:

    tip_funkcij e 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. Imeslui za jednoznanu identifikaciju.

    li sta 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

  • 5/22/2018 Osnovi programiranja

    12/24

    Osnovi programiranja 1

    35. Korisnicki definisane funkcijedefinisanje funkcijeOve funkcije kodiraprogramer 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_funkcij e ime_funkcije (liasta parametara){

    tijelo funkcije

    } tip__funkci je -je tip vrijednosti koju funkcija vraa funkciji koja je pozivaime_funkcije - ili identifikator je ime funkcije, pri emu se koriste ista pravila pri davanju imena kao i za davanje imenavarijablama. ime slui za jednoznanu identitikaciju.

    li sta 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 tijelufunkcije se implementira algoritam koji rijeava zadatak dodjeljen funkciji.

    36. Korisniki_definisane funkcijepozivanje funkcijaOve 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 ufunkciju. Opta forma je:

    variabla = ime_funkcije (lista argumenata);ime_funkcije - ime funkcije koja se poziva

    li sta 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 povezivanjufunkcije treba biti isti kao broj i tip parametara u deklaraciji odnosno definiciji funkcije. Takoe tip varijable u koju se smjetvraena vrijednost iz funkcije treba da odgovara tipu funkcije.

    37. Naredba returnOva naredba se moe koristiti u dvije svrhe:

    1. Izvrenje naredbe return bilo gdje u tijelu funkcije uzrokuje trenutno naputanje funkcije ipovratak u pozivajuu funkcijUkoliko 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 funkcijekoristi se druga forma, gdje je izraz proizvoljan.

    38. Komunikacija izmeu funkcijaSa aspekta pozivajue funkcije pozvana funkcija je crna kutija kojoj pozivajua funkcija prenosi skup potrebnih argumenata p

    pozivu i prihvata vraenu vrijednost pri zavretku funkcije u skladu sa deklaracijom. Funkcija se dakle ponaa kao blok sa viulaza i jednim izlazom. Sekvenca dogaaja pri pozivanju funkcije je sledea:

    SUDO | FAKULTET ELEKTROTEHNIKE

  • 5/22/2018 Osnovi programiranja

    13/24

    Osnovi programiranja 1

    1. Poziva se funkcija2. Argumeti iz naredbe pozivanja funkcije se kopiraju u parametre pozvane funkcije, tj. parametri poprimaju vrijednost

    argumenata

    3. Tok programa se prenosi u pozvanu funkciju4. Poinje izvravanje programskog koda funkcije5. Kada je kod funkcije zavren izvodi sevraanje vrijednosti u pozivajuu funkciju.6. Tok programa se vraa u pozivajuu funkciju, odnosno na prvu naredbu iza poziva upravo zavrene funkcije

    39. Vidljivost varijabliLokalne varijable su one varijable koje su deklarisane unutar C bloka tj. dijela programa markiranog parom vitiastihzagrada {. . . }. Poto su C funkcije takoe C blokovi, moemo rei da su lokalne varijable sve one koje su deklarisane u tijelufunkcije ukljuujui deklarisane parametre funkcije, i konsekventno su vidljive samo u funkciji gdje su i deklarisane. Globalnuvarijablu vidi odnosno moe da manipulie vie razliitih funkcija. Globalna varijabla se kreira tako to se izvri deklaracijavarijable izvan tijela svih funkcija. Ovu globalnu varijablu moe koristiti svaka funkcija koja je fiziki definisana u datoteciizvornog programa iza deklaracije globalne varijable.

    Ukoliko postoji i globalna i lokalna varijabla sa istim imenom, tada se referenciranjem tog imena manipulie lokalnavarijabla.

    40. Memorijske klase varijabliautomatskaOva dimenzija referie vrijeme ivota od trenutka nastajanja variable u memoriji raunara do njenog uklanjanja iz memorijeraunara. 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 upotrebljavazadefinisanje memorijske klase onda se ona smjeta ispred tipa i imena u naredbi deklarisanja variable. Lokale varijable su onekoje 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 injihove 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 ovihvarijabli. Ove varijable se svaki put nanovo kreiraju, koriste i na kraju unitavaju pri svakom novom pozivu bloka ili funkcijeSad 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 memorijuraunara optimalno iskoristi, tj. samo kad je potrebna.

    41. Memorijske klase varijablistatikaOva dimenzija referie vrijeme ivota od trenutka nastajanja variable u memoriji raunara do njenog uklanjanja iz memorijeraunara. 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 zadefinisanje memorijske klase onda se ona smjeta ispred tipa i imena u naredbi deklarisanja variable. Globalne varijable suone 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 pamOva varijabla traje toliko dugo koliko traje i izvravanje cijelog programa. To zani da se statika varijabla kreira samojedanput, i to pri startu programa. Poto varijabla rezervie trajno potreban memorijski prostor, onda je prirodno da ona uv

    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 izvravanjufunkcije. Takoe, kod neinicijaliziranih automatskih varijabli je vrijednost nepoznata, dok se za neinicijalizirane statikevarijable vrijednost implicitno inicijalizira na nulu. Lokalne varijable su one koje se deklariu u funkciji.

    SUDO | FAKULTET ELEKTROTEHNIKE

  • 5/22/2018 Osnovi programiranja

    14/24

    Osnovi programiranja 1

    42. Memorijske klase varijablieksternaOva dimenzija referie vrijeme ivota od trenutka nastajanja variable u memoriji raunara do njenog uklanjanja iz memorijeraunara. 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 zadefinisanje memorijske klase onda se ona smjeta ispred tipa i imena u naredbi deklarisanja variable. Globalne varijable suone 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 dosegglobalnih varijabli. Smisao kvalifikatora extern je upravo u proirenju opsega vidljivosti globalne varijable preko granicajedne datoteke. Naime deklaracije extern u datoteci aocde. c omoguuje vidijivost varijable i u funkcijama defisanim u datoteaocde. c. Znai manipulisanje varijable je sada mogue iz svih funkcija programa.

    43. Memorijske klase varijabliregistarskaKljuna njeje register" slui za definisanje registarske memorijske klase variabli. Ukoliko se ova kljuna nje upotrebljavaza definisanje memorijske klase onda se ona smjeta ispred tipa i imena u naredbi deklarisanja variable. Lokale varijable suone 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 rezervisanjememorije za varijablu. Automatske varijable se rezerviu u RAM memoriji, odnosno na stek dijelu RAM memorije. MeutimCPU 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 biubrzalo obradu varijable. Zbog malog brojaovih registara prevodilac ovu klasu konvertuje u automatsku ukoliko su svi registri zauzeti. Ali ova memorijska klasa se nekoristi vrlo esto.

    44. RekurzijaC 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 problemaRekurzivni algoritmi rijeenje problema mogu biti programski implementirani koritenjem rekurzivnih funkcija, odnosnorekurzivni algoritam moe biti implementiran sa rekurzivnom funkcijom.Vano je napomenuti da svaka rekurzivna funkcija uvijek moe biti napisana kao nerekurzivna funkcija koritenjem iterativnorijeenja rekurzivnog problema. u optem sluaju pri rjeavanju rekurzivnih problema, pri implementaciji rjeenja problemaprednost 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 pokazivaiSvaka varijabla je asociranasa odreenim prostorom u memoriji raunara, kojije potreban za memorisanje vrijednostivarijabli. 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 rezervisanumemoriju. 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 drug

    varijable i manipulisane po pravilima o manipulaciji adrese. U C jeziku adrese varijabli se nazivaju pokazivai na varijable,varijable koje mogu da storiraju vrijednosti adresa se nazivaju pokazivake varijable ili pokazivai.

    46. Deklarisanje pokazivaaPokazivai su varijable specijalno namjenjene za storiranje i manipulisanje adresa varijabli. Pokazivake varijable kao i sveostale 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 tipvarijable ijuadresu pokaziva moe storirati odnosno manipulisati. Optaforma deklaracije je:tip_podatka * ime__pokazivaa;

    tip_podatka- je bilo koji validan C tip kao int, float, . . .

    * (asteri ks)- je symbol kojiindicira da se radi o pokazivakoj varijabli

    ime_pokazivaa-je korisniko dato ime pokazivakoj varijabli.

    SUDO | FAKULTET ELEKTROTEHNIKE

  • 5/22/2018 Osnovi programiranja

    15/24

    Osnovi programiranja 1

    Pokazivakim varijablama moe biti dodjeljena vrijednost koritenjem standardnog operatora dodjeljivanja (=), pri emu semora biti paljiv da je dodjeljivana vrijednost validna adresa. Programer elegantno dodjeljuje vrijednost pokazivaimakoritenjem 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, odnosnopokazivai osiguravaju pristup svakoj memoriskoj lokaciji koritenjem njenih adresa. C osigurava operator dereferenciranjaza ovu svrhu. Simbol *(asteriks)predstavlja unarni operator dereferenciranja ukoliko je smjeten ispred imena pokazivakevarijable i slui za dobivanje ili postavljanje vrijednosti objekta na koji pokaziva pokazuje (iju adresu pokaziva sadri). Uoptem 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 pokazivaimaPokazivai kao i ostale varijable sadre neke vrijednosti, ali su one memorijske adrese. U tom kontekstu pokazivai su validnoperandi u aritmetikim izrazima dodjeljivanja i poreenja. Naravno ne mogu biti izvedene sve operacije, zbog toga to su tevrijeanosti memorijske adrese, ve moe biti izveden samo ogranien set aritmetikih operacija:

    1. Pokaziva moe biti inkrementiran ili dekrementiran2. 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 sapokazivaima mora voditi rauna da rezultat operacijeproizvodi adresu koja ima smisla.Ako vrimo obino aritmetiko sabiranje broja 5000+1 dobijamo za rezultat 5001, to nije sluaj u aritmetici sa pokazivaimKad 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 pokazivaeMogue je imati i pokaziva na pokaziva. Poto je pokaziva varijabla koja ima svoju adresu u memoriji raunara, Mogue jdeklarisati drugu varijablu koja je pokaziva na pokazivaku varijablu. Pokaziva na pokaziva moe da storira vrijednostiadresa pokazivakih varijabli. Pokaziva na pokaziva varijabla takoemora biti deklarisan prije upotreba. Opta formadeklaracije je:

    tip podatka ** ime__pokazivaa;

    tip_podatkaje bilo koji validan C tip kao int, float, . . .* * (dva asteri ks znaka) -je simbol koji indicira da se radi o pokaziva na pokaziva varijabliIme pokazivaa -je korisniki dato ime pokaziva na pokaziva varijabliPokaziva na pokaziva varijabla takoe moe biti koritena za indirektni pristup vrijednosti varijable koritenjem operatoraza dvostruko dereferenciranje. Simobl ** predstavlja unarni operator dvostrukog dereferenciranja ukoliko je smjeten ispredimena 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 zahtjevajpostojanje pokazivake varijable ija je vrijednost adresa manipulisane varijable, a vrijednost pokaziva na pokazivavarijable ima vrijednost adrese pokazivake varijable, to i jest smisao dvostrukog dereferenciranja.

    SUDO | FAKULTET ELEKTROTEHNIKE

  • 5/22/2018 Osnovi programiranja

    16/24

    Osnovi programiranja 1

    50. Pokazivai i funkcijePri pozivu funkcije, funkcija prima listu argumenata iz pozivajue funkcije (parametre), zatim izvodi eljenu obradu te vraajednu ili ni jednu vrijednost pozivajuoj funkciji prije povratka. Ovakav nain pozivanja funkcije naziva se poziv povrijednosti(call by value). Ovakav aranman, tj. poziv po vrijednosti donosi znaajnu programersku korist, naime ovoomoguuje sigurno pisanje funkcije kao nezavisnog entiteta bez bojazni da funkcija grekom ili nepanjom moe promjenitivrijednosti u drugim funkcijama.

    Meutim postoje situacije kada je poeljno da pozvana funkcija ima pristup varijablama pozivajue funkcije . Ovaj aranmanomoguuje pozvanoj funkciji da promjeni vrijednost varijabli pozivajue funkcije i na taj nain efektivno ostvari viestrukevraene vrijednosti a ne samo jednu (vie ulaza vie izlaza). Poziv funkcije sa prenosom adrese varijable (varijabli) u funkcijuumjesto 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 funkcijePokazivai 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 radinjegovog izvrenja kod svake funkcije programa se upuni na specificiranu adresu. Ova adresa je ulazna taka funkcije kojamoe 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 morajubiti deklarisani pa tek koriteni. Opta forma deklaracije pokazivaa na funkciju je:

    tip podataka (*pokaziva_na_funkciju ) (lista parametara);gdje su:

    tip podatakapredstavlja 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. NizoviNiz je kontinualna sekvenca memorijskih lokacija, gdje svaka lokacija sadri vrijednosti istog tipa. Svaka lokacija se nazivaelement niza. Nizu se dodjeljuje samo jedno ime, a elementima niza se pristupa navoenjem imena niza i indeksa elementa unizu.

    53. Jednodimenzionalni nizoviKao i skalarne varijable, nizovi moraju biti deklarisani prije koritenja. Prevodilac C jezika koristi informacije iz deklaracijekao to je ime niza i veliina niza, za rezervisanje potrebnog memorijskogprostora za elemente niza te za raunanje indeksa za pristupanje elementima niza. Opta forma deklarisanja jednodimenziononiza je data sa:

    tip podatka ime ni za [br oj elemenata niza];

    tip podatkaje tip podataka elemenata niza

    Ime nizaje 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 sedodjeljuje 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 naprimjer: 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

  • 5/22/2018 Osnovi programiranja

    17/24

    Osnovi programiranja 1

    Svaki individualni element niza moe biti koriten gdje i skalarna varijabla istog tipa, znai svaki element niza sesmatra varijablom.

    U stvamosti prava snaga obrade informacija struktuiranih u nizove dolazi u savezu sa petljama, posebno u sprezi sa brojakipetljama, gdje se na jednostavan nain broja u petlji koristi kao indeks niza, to omoguava elegantnu i kompaktnu obradusvih elemenata niza. Kao to je mogue inicijalizirati skalarne varijable prilikom deklarisanja, tako je mogue inicijalizirati inizove 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 nizaint tabela[50]={1, 2, 3, 4}; Prva cetiri indeksa e poprimiti vrijednosti 1, 2, 3, 4 dok e se ostalih 46 indeksa poprimitivrijednost 0. Ukoliko je inicijalizacija dua od niza, prevodilac C jezika e signalizirati greku.int tabela[3]={1, 2, 3, 4};

    54. Visedimenzioni nizoviDvodimenzioni nizovi ili kako se jo nazivaju i tabele sastoje se od redova i kolona. Matrice su matematiki ekvivalent jedno 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 nizaje deklarisano ime niza[ ] [ ] dva para uglastih zagrada identificiraju dvodimenzioni niz, broj u prvom paru deklarie broj redova niza a broj udrugom paru zagrada deklarise broj kolona niza.

    Svaki element u dvodimenzionom nizu se jedinstveno locira navoenjem reda i kolone kojim element pripada, odnosnonavoenjem indeksa reda i kolone. U C programskom jeziku prvom redu i koloni se dodjeljuje indeks 0, a drugom redu idrugoj koloni indeks 1 itd. Kao i u sluaju jednodimenzionih nizova, elegantna obrada podataka struktuiranih u dvodimenzionnizove se postie koritenjem programskih petlji a najee for petlji.

    55. Jednodimenzionalni nizovi i pokazivaiInterno raunar ne razumije pojam indeksa niza nego prevodilac prevodi referenciranje elemenata niza preko indeksaraunanjem 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 kreiratipokaziva i dodijeliti mu vrijednost adrese prvog elementa niza te onda pristupati elementima niza preko adresa, odnosnomoemo 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 elementa0.

    56. Visedimenzioni nizovi i PokazivaiKao i u sluaju jednodimenzionih nizova, mogue je pristupiti elementima viedimenzionih nizova koritenjem notacijepokazivaa.Struktura dvodimenzionog niza u memoriji raunara omoguuje razliite naine pristupa elementima. Jedan nain jerazmatranje 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

  • 5/22/2018 Osnovi programiranja

    18/24

    Osnovi programiranja 1

    57. Funkcije i jednodimenzionalni nizoviIndividualni elementi nizova se prenose u funkcije na isti nain kao i skalarne varijable, u sluaju poziva funkcije prekovrijednosti ili sa adresom elemenata pri pozivu funkcije preko reference. U funkciju moe biti preneen cijeli niz a ne samonjegovi 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 zaistaogromna, te bi bilo nepraktino kopirati sve elemente) nego samo adresu poetka niza. Ova injenica implicira da funkcijakoritenjem adrese poetka niza moe da dohvati i manipulie sve elemente niza. Ova injenica je jasnija ukoliko se podsjetiteveze 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 ijednodimenzioni nizovi je data kako slijedi:

    tip funkcije ime funkcije (tip niz1[], tip niz2[], . . . . tipn nizn[], lista skalara){

    tijelo funkcije;

    } tip funkci je (return type) predstavlja tip vrijednosti koju funkcija vraa u pozivajuu funkciju npr, int, float, char. . . itdidentif ikator funkcijeje ime korisnike funkcijetijelo funkcijepredstavlja programski kod i ostale varijable deklarisane u funkciji.

    li sta parametarasadri tipove i imena parametara funkcije. Parametri se smjetaju izmeu malih zagrada i odvajaju zarezimStandardna 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 (stvarnihparametara), odnosno liste

    imena nizova i liste skalarnih varijabli, te prihvatanjem vraenevrijednosti.Uzimajui u obzir bliskost veze izmeu nizova i pokazivaa, drugi nain definisanja ideklarisanja funkcija iji su parametrijednodimenzioni 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. . . itdidentif ikator funkcijeje ime korisnike funkcijeL ista parametarasadri tipove i imena parametara funkcije. Parametri se smjetaju izmeu malih zagrada i odvajajuzarezima.

    tijelo funkcijepredstavlja 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 saspecijalnim karakterom tzv. null karakter, ija vrijednost je binarna nula ili '\0' koji signalie kraj stringa. Ovo znai da jepotrebna veliina memorijskog prostora potrebna za storiranje stringa uvijek vea za jedan od broja karaktera u stringu. U Cjeziku string predstavlja svaka sekvenca karaktera omeenim sa navodnicima " " npr. "Ovo je string".

    59. Deklarisanje i inicijalizacija stringovaString konstante se jednostavno kreiraju u programu navoenjem stringa u dvostrukim navodnicima. Npr:printf(pozdrav Bosni)

    Mogue je i kreirati string varijablechar nje[4];Mogue je i inicijalizirati string kao i ostale varijablechar 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 pokazivaimachar *rije=ado;

    SUDO | FAKULTET ELEKTROTEHNIKE

  • 5/22/2018 Osnovi programiranja

    19/24

    Osnovi programiranja 1

    Ova naredba kreira varijablu tipa pokaziva na karakter sa imenom rije i inicijalizira ga vrijednou adrese prvog stringaado storiranog negdje u memoriji.

    Pristup elementima stringa moe biti ostvaren koritenjem pokazivaa rije.

    60. Stingovi i funkcijePonavljajui jo jednom da C tretira stringove kao jednodimenzione nizove karaktera terminirane sa null karakterom, svetehnike koje vae za prenos jednodimenzionih nizova i njihovih elemenata u funkcije vae direktno i za prijenos stringova injihovih 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. Strukturadeklaracija i definicijaStrukture 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 struktur e { deklarisanje vari jabli -clanova struktur e

    };

    structje kljuna rije za deklarisanje strukture

    ime struktur eje korisniki dato ime tipu strukturadeklaracija clanova struktur eje skup deklaracija varijabli koje ine strukturu . . . (navedi primjer)

    62. Deklarisanje varijabli tipa strukturaNakon deklarisanja eljenog tipa struktura mogu se deklarisati varijable tipa struktura. Opta forma deklarisanja varijabli tipstruktura je data sa:

    struct ime_struktur e ime_vari jable;

    Tek deklaracije varijabli tipa struktura rezerviu potreban memorijski prostor za varijable. Naravno da je ovo slinodeklarisanju 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 strukturatakoer mogu biti i inicijalizirane prideklarisanju navoenjem liste vrijednosti lanova struktue. . .

    63. Pristup lanovima strukturaC osigurava poseban operator koje se zove operator lana strukture ili taka operator za pristup lanovima varijabli tipa

    struktura. Opta forma jevarij abla_tipa_struktur a. 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 drugojvarijabli istog tipa struktura u jednoj naredbi koritenjem operatora dodjeljivarija;struct zaposleni vozac1 , vozac2;

    vozac1 = vozac2 ;

    vozac1. sifra = vozac2. sifra; . . . . ltd.

    SUDO | FAKULTET ELEKTROTEHNIKE

  • 5/22/2018 Osnovi programiranja

    20/24

    Osnovi programiranja 1

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

    x=sizeof (struct zaposleni );

    64. Strukture i pokazivaiKao i pokazivai na varijable fundamentalnih tipove podataka tako i pokazivai na varijable tipa struktura mogu damanipuliu 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 adresavarijabli fundamentalnog tipa se koristi i za nalaenje adresa varijabli tipa struktura. Opta forma pristupa lanu varijableje(*pokaziva). clan

    U referenciranju neophodno je koristiti male zagrade jer operator taka (.) ima vii prioritet od operatora indirekcije asterikZbog vanosti manipulisanja varijabli tipa struktura koritenjem pokazivaa, C jezik ak osigurava i specijalan operatorza ovu svrhu pored standrardnog naina pomenutog predhodno. Ovaj operator se naziva strelica operator ili operatorpokazivaa na strukturu. Opta forma jepokaziva clan.

    65. Strukture i funkcijeKao 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 sastruct ime-struktur e1 ime_funkci je(struct ime_struktur e2 ime varij able, . . . )

    {

    tijelo funkcije;

    }

    a njena deklaracija

    struct ime-struktur e1 ime_funkci je(struct ime_struktur e2 ime varij able, . . . );

    66. Typedef naredbaC 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 velikimprogramima te reducira posao kucanja tokom pisanja programa.

    67. Nizovi strukturaMogu se deklarisati jednodimenzioni i viedimenzioni nizovi varijabli kao to je mogue sa fundamentalnim tipovima. U stvarsnaga struktura se pokazuje kada se one koriste kao liste podataka. Pristup elementima nizova se ostvaruje koritenjemindeksa ilipokazivaa 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_struktur e ime_niza[velicina] ;

    struct ime_struktur e ime_niza[r edovi] [kolone];

    pristup elementima i njihovim lanovima je dat saime_niza[i ndeks] . ime_clana=vrij ednost; ime_niza[i ndeks][i ndeks]. ime_cI ana=vrij ednost;

    68. Nizovi struktura i funkcijaNizovi varijabli tipa struktura se kao i nizovi fundamentalnih varijabli prenose u funkcije preko adresa poetka nizova. Imajuovo u vidu jasno je da se obrada nizova u funkcijama moe izvesti koritenjem standardne indeksne ili pokazivake notacije

    pristupa elementima odnosno lanovima. Opta formadeklaracije funkcija iji parametri su jedno i dvodimenzioni nizovi jedana sa:

    tip ime_funkcije (struct ime__struktur e * , . . . );

    tip ime_funkcije (struct ime_struktur e [ ] [broj kolona] , . . . . );

    A opta forma definicije funkcija je:tip ime_funkcije (struct ime_struktur e ime_niza[ ] , . . . ){

    SUDO | FAKULTET ELEKTROTEHNIKE

  • 5/22/2018 Osnovi programiranja

    21/24

    Osnovi programiranja 2

    tijelo funkcije;

    }

    tip ime_funkcije (struct ime_struktur e ime_niza[ ] [broj kolona] , . . . . ){

    tijelo funkcije;

    }

    69. DatotekeSvi podaci u naim dosadanjim programima su ili bili definisani ili su kreirani interno programski. Vrijeme njihovog ivota jbilo u skladu sa vremenom ivota programa i pri svakom startu programa su se morali ponovo unijeti programski. Ovi podac

    se itaju ili piu na permanentne memorije za trajno uvanje. Operacije pisanja i itanja podataka se izvode nad entitetimasmjetenim na permanentnim memorijama koji se nazivaju datoteke. Svaka datoteka na raunarskom sistemu je fizikismjetena (zapisana) na permanentnoj memoriji koritenjem imena datoteke. -Fiziki , najei vid permanentnih memorija smagnetski 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 jesekvenca karaktera ili jo preciznije tok podataka se sastoji od sekvenca bajta. Svaki izvor ili ponor podataka se asocira satokom podataka. Sekvenca bajta koja dolazi (uitava se) u program naziva se ulazni tok podataka a sekvenca bajta koja odlaz(ispisuje se) izprograma 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 datotekamau 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 datotekaPrije koritenja dadoteka mora biti otvorena. Otvaranje datoteke daje potrebne informacije operativnom sistemu zauspostavljanje veze izmeu datoteke i naeg programa. Ove informacije su na primjer, ime datoteke i lokacija, mod i nainpristupa datoteci, te da li se datoteka namjerava koristiti za itanje ili pisanje ili oboje. U C jeziku informacije o datoteci sestoriraju 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 nadatoteku. Prototip C standardne funkcije za otvaranje datoteke dat u datoteci je:

    FI LE * fopen(char * , char *);

    Funkcija ima dva parametra koji su stringovi i vraa vrijednost pokaziva na tip FILE. Prvi parametar daje ime datoteke kojase otvara a drugi parametar definie mod u kome se datoteka otvara. Ukoliko je otvaranje uspjeno funkcija vraa vrijednostpokaziva na FILE. Ukoliko je otvaranje neuspjeno vraena vrijednost pokazivaa je NULL.

    71. Zatvaranje datotekaKada su ulazno izlazne operacije sa datotekom okonane potrebno je zatvoriti datoteku. Funkcija fclose(FILE *) vrizatvaranje datoteke otvorene sa funkcijom fopen(). Parametar funkcije fclose( ) je pokaziva vraen pri pozivu funkcije fopenPoziv ove funkcije signalizira operativnom sistemu da raskine vezu izmeu programa i datoteke te oslobodi koritene resurseza 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, atakvu koja se nikad ne moe pojaviti unutarinternih podataka sadranih u datoteci.

    SUDO | FAKULTET ELEKTROTEHNIKE

  • 5/22/2018 Osnovi programiranja

    22/24

    Osnovi programiranja 2

    72. Citanje I pisanje tekstualnih datotekaFunkcije za itanje sadraja tekstualnih datoteka su skoro identine funkcijama za itanje tastature. Ove funkcije su date utabeli

    Standardne funkcije za itanje tekstualnih datotekaIme 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 nadatoteku)

    Funkcija ita n-1 karaktera ili do nailaska na karakter nove linije iz datoteke ismjeta 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 nakraj datoteke funkcija vraa EOF. vrijednost.

    73. itanje i pisanje tekstualnih datotekaU C postoje tristandardne 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 ovihstandrardnih 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 predhodnospomenute funkcije za itanje-pisanje datoteka mogu koristiti i za itanje-pisanje standardnih datoteka, odnosno pisanje namonitor i itanje sa tastature umjesto dosad koritenih funkcija posveenih samo tastaturi ili monitoru.

    74. itanje i pisanje binarnih datotekaVrlo 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 unjihovoj internoj odnosno binarnoj formi kako su reprezentovani i u RAM memoriji raunara odnosno programa. Ovo znai d

    se npr realan broj iz programa koji zauzima etiri bajta upravo tako storira i na datoteku tj. bez ikakvog formatiranja kao usluaju tekstualnih datoteka. Binarne datoteke su znaajno krae od tekstualnih za istu koliinu podataka. Vidljiv je inedostatak 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 lakkoriste 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 obradaodnosno pristup za velike datoteke postaje nedopustivo spor uz bespotrebno troenje raunarskih resursa. Radi ovih razlogaoperativni 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 jeustvari niz bajta te za svaki bajt u nizu ima svoju poziciju. Ova pozicija se naziva indikator pozicije datoteke. Slijedee pisanjeili itanje datoteke izvodi se na mjestu koje definie vrijednost indikatora. Ovaj indikator je analogan indeksujednodimenzionog niza. C standardna biblioteka obezbjeuje nekoliko funkcija za sluajan pristup datotekama, odnosnofunkcija koje upravljaju vrijednou indikatora pozicije datoteka. Indikator pozicije datoteka je varijabla tipa long int, kojuautomatski kreira funkcija za otvaranje datoteka. tj fopen().

    SUDO | FAKULTET ELEKTROTEHNIKE

  • 5/22/2018 Osnovi programiranja

    23/24

    Osnovi programiranja 2

    76. Funkcija fseek()Prototip funkcije fseek() dat je sa;

    int fseek(F I LE * , long int, int);fseek () funkcija slui za postavljanje vrijednosti indikatora pozicije datoteke na eljeno mjestou datoteci. Funkcija vraavrijednost 0 ako je indikator uspjeno postavljen u eljenu poziciju ilivrijednost -1 ako je operacija neuspjena. Funkcijafseek() ima tri parametra i njena sintaksa jedana sa:fseek (pokaziva_na_datoteku, relativria_pozicija, pocetna_pozicija)gdje su:

    pokaziva_na_datoteku je pokaziva asociran sa otvorenom datotekomrelativnajpozicijaje relativna pozicija u bajtima od vrijednosti poetna lokacija i mora iti longint vrijednost pozitivna(pomjeranje pokazivaa unaprijed) ili negativan (pomjeranjepokazivaaunazad)pocetna_lokacija indicira startnu lokaciju u datoteci od koje se vri sraunavarije vrijednostiindikatora pozicije datoteke i moe imati vrijednost 0, 1 ili 2. Umjesto ovih brojeva mogu sekoristiti tri konstante date u tabeli:

    Simbolika konstanta Numerika vrijednost Poetna lokacija u datoteci

    SEEK_SET 0 Poetak datoteke

    SEEK_CUR 1 Od tekue vrijednosti indikatora

    SEEK_END 2 Kraj datoteke

    77. Funkcija ftell()Funkcija ftell() slui za nalaenje tekue vrijednosti indikatorapozicije 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 nadatoteku.

    78. Sortiranje selekcijomAlgoritam sortiranje selekcijom npr. U rastuem redu elemenata radi na sledei nan. lz cijelog niza podataka (niz ima nelemenata) nae se najmanji element (selektira) poreenjem elemenata niza. Nakon nalaenja najmanjeg elementa niza izvrise 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 vrijednossa drugime elementom u nizu. Ovaj proces se nastavlja do postizanja sortiranog cijelokupnog niza.

    79. SortiranjeBubbleAlgoritam Bubble sortiranja je vrlo jednostavari, naime prolazi se sukcesivno kroz niz elemenata pri emu se zamjenjujuvrijednosti susjednih elemenata uskladu sa eljenim redoslijedom sortiranja. Sortiranje je zavrseno kada se pri nekom prolazne desi ni jedna zamjena susjednih mjesta.

    Tokom prvog prolaza kroz niz, ako se sortira u rastuem redu najvei element e biti sekcesivno zamjenjivaria sa vrijednoususjednog elementa sve dok najvei element ne stigne u zadnju poziciju niza. Naime najvei element ide kao mjehuri napovrinu. U drugom prolazu drugi najvei element ce zauzeti poziciju u predzadnjoj poziciji niza. . .

    80. SekvencijalnopretraivarijePri sekvencijalnom pretraivariju imamo klju (vrijednost koju trazimo) i listu (niz) podataka. Ova lista moe biti niz varijabl

    bilo kojeg tipa naravno ukljuujui i strukture. U optem sluaju klju se uporeuje sa elementima niza poevi od prvogelementa sve dok se ne nae jednakost ili se dostigne kraj niza odnosno klju se ne nalazi u nizu. Logika sekvencijalnogpretrazivarija je jednostavna, sastoji se od for petlje i if naredbe.

    81. BinarnopretraivarijeAlgoritam binarnog pretraivarija koristi injenicu da je niz sortiran. Algoritam dijeli niz na dva dijela locira polovinu niza ukojoj se moe nalaziti kljuc i ignorise drugu polovinu niza. Ovaj postupak se sukcesivno ponavlja sa svakom novom polovinomdo postizanja dijela niza od samo jednog elementa koji je jednak kljuu ili klju se ne nalazi u nizu.

    SUDO | FAKULTET ELEKTROTEHNIKE

  • 5/22/2018 Osnovi programiranja

    24/24

    Osnovi programiranja 2

    82. Dinamicko rezerviranje(alociranje) memorijeAlternativari nain fiksnom rezervisanju memorijskog prostora za potrebe nizova i drugih struktura je koristenje dinamikogrezervisanja memorije. U ovom pristupu memorijski prostor se rezervie i oslobaa po potrebi tokom izvravarija programa iposebnog memorijskog prostora programa. C standrardna biblioteka osigurava kolekciju funkcija za upravljanje dinamikomalokacijom 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 naprvi 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 pokazivana 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 eljenikonkretni tip pokazivaa.

    84. Funkcija free()Funkcija free() slui za oslobaanje memorije rezervisane funkcijom malloc(). Ova funkcija vraa rezervisanu memorijumemorijskom 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 listePovezana lista je skup struktura u kojimsvaka struktura sadri jedan lan ija vrijednost je adresa slijedee strukture i takodalje do kraja liste. Moe se rei da je povezana lista skup struktura koje su organizovarie sekvencijalno kao to je i nizstruktura. 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 rezervisamaksimalnu oekivariu memoriju za podatke bez stvarne potrebe. Druga prednost lei u injenici da se podaci u listu moguaranirati vrlo fleksibilno. Osnovna prednost niza u odnosuna povezanu listu je u brzini pristupa svakom elementu.

    SUDO | FAKULTET ELEKTROTEHNIKE