programiranje (1)

261
PROGRAMIRANJE za drugi razred zanimanja Tehničar računarstva – interna skripta JU Mješovita elektrotehnička i drvoprerađivačka srednja škola Bihać Bihać, šk. 2013/14 Pripremio: Edin Burzić, ing.el.

Upload: eldinjusic

Post on 13-Nov-2015

170 views

Category:

Documents


10 download

DESCRIPTION

programiranje 123

TRANSCRIPT

Programiranje za drugi razred zanimanja Tehniar raunarstva interna skripta

1. UvodPredmet Programiranje za drugi razred usmjerenja Tehniar raunarstva, koncipiran je tako da uenike, koji do sada nisu imali izravan doticaj s ovom vjetinom i umjeem, naui osnovama programiranja i koritenja programskih jezika u rjeavanju svakodnevnih problema iz ovog domena raunarskih nauka.Predmet ne podrazumijeva predznanje iz bilo kojeg programskog jezika, niti bilo kakve vjetine u algoritamskom nainu pristupa rjeavanja problema.Materija koja se izlae u okviru predmeta postepeno uvodi uenike u terminologiju programskih metoda i naine koritenja programskih jezika vieg nivoa.Predmet se sastoji od tri modula: - algoritmi i strukture- osnovne programske strukture - funkcije, stringovi i datoteke Nakon uspjeno odsluanog i poloenog predmeta, po svim modulima, uenici bi trebali da budu osposobljeni da samostalno analiziraju i rjeavaju jednostavnije do umjereno sloene probleme iz domena programiranja.Svim polaznicima ovog predmeta elim puno uspjeha u savladavanju nastavnog gradiva uz elju da postanu programeri koji ne poznaju granice svoje kreativnosti jer programiranje predstavlja najistiji oblik kreativnog rada.Sretno.

2.5 Kontrola toka tok programa i upravljanje izvravanjem 2.5.1 Naredbe izbora 2.5.1.1 Donoenje odluke naredbom if 2.5.1.2 Viesmjerno grananje naredbom switch 2.5.2.2 Naredba continue 2.5.2.3 Petlja for 2.5.2.4 Beskonane petlje 2.5.2.5 Petlja do 2.6 Nizovi 2.6.1 Deklaracija, inicijalizacija i pristup promjenjivim u nizu

Modul 3: Funkcije, stringovi i datoteke 3.1 Funkcije 3.1.1 Namjena funkcija 3.1.2 Organizacija programa i tok izvravanja 3.1.3 Deklaracija i definicije funkcija 3.1.3.1 Parametri i argumenti funkcije 3.1.4 Rekurzija 3.2 Stringovi 3.2.1 Pojam STRINGA 3.2.2 Deklarisanje, inicijalizacija i upotreba stringova 3.2.3 Mnipulacija sa stringovima 3.3 Datoteke (FAJLOVI) 3.3.1 Koncept FAJL-a 3.3.2 Pokaziva na fajl 3.3.3 Pristup fajlu 3.3.4 Upisivanje u fajl

III RAZRED UvodModul 1. Primjena struktura podataka i pointera1.1 Strukture podataka 1.1.1 Deklaracija i definicija strukture 1.1.2 Pristupanje pojedinim lanovima strukture 1.1.3 typedef i strukture podataka 1.1.4 Nizovi struktura 1.1.5 Strukture i funkcije1.1.5.1 Predavanje lanova strukture funkciji1.1.5.2 Ugnjeivanje struktura unutar struktura 2.1 Uvod u pokazivake promjenjive 2.1.1 Deklarisanje pokazivakih promjenjivih 2.1.2 Aritmetika pokazivaa 2.1.3 Pokazivai i funkcije 2.1.3.1 Pokazivai kao argumenti funkcija 2.1.3.2 Funkcije koje vraaju pokazivae 2.1.4 Pokazivai, jednodimenzionalni nizovi i stringovi 2.1.5 Komunikacija s operativnim sistemom 2.1.6 Dinamika alokacija memorije 2.1.6.1 malloc() funkcija 2.1.6.2 Dinamika alokacija memorije i nizovi 2.1.6.3 calloc() funkcija

MODUL 1. ALGORITMI I STRUKTURE 1.1 Analiza tipova i struktura podataka 1.1.1 Opti pojmovi o programskim jezicima i programiranju

PROGRAM skup naredbi nanizanih strogo utvrenim redosljedom ijim se izvrenjem obavlja eljeni posaoPROGRAMSKI JEZICI - jezici sastavljeni od simbola i strogih pravila, a slue za pisanje programaPodjela programskih jezika:

MAINSKI JEZICIPROGRAMSKI JEZICI NII SIMBOLIKI JEZICISIMBOLIKI JEZICIVII SIMBOLIKI JEZICI

Raunar moe izvravati samo one operacije za koje su mu zadane upute odnosno program. On moe obavljati samo mali broj jednostavnih operacija pri emu se sve sloenije operacije svode na niz jednostavnih. Za svaku takvu jednostavnu operaciju postoji kd (iskazan binarnim brojevima tj. nulama i jedinicama) koje raunalo razumije i moe izvriti.

Mainski jezikMainski jezik - binarni prikaz programa (skup kodova) i jedini oblik programa koji raunar''razumije'' i moe izvriti.Modul 1. Algoritmi i strukture

6

6Svaki se drugi oblik programa mora prije izvoenja prevesti u mainski jezik. Mainski jezik predstavlja najniu moguu razinu prikaza programa za neki raunar i tijesno je vezan za grau raunara odnosno ovisan je o procesoru.Program napisan u mainskom jeziku za jednu vrstu raunara (procesora) nije primjenljiv na drugoj vrsti raunara, odnosno ne postoji jedinstveni mainski jezik ve svaki tip procesora ima svoj vlastiti (sebi svojstven) mainski jezik.Za pisanje programa na mainskom jeziku potrebno je temeljito poznavati grau raunara (procesora) i koristiti samo brojane kodove jer se naredbe mainskog jezika izravno odnose na pojedine dijelove procesora.Stoga je pisanje programa mainskim jezikom vrlo sloeno te se time bave usko specijalizirani strunjaci, dok je za obinog ovjeka preteko, pisanje traje jako dugo i velika je mogunost pogreke te se u praksi uglavnom ne koristi.

Prednosti mainskog jezika su jezika su: mogunost izravnog djelovanja na fizike dijelove raunara (sklopove) djelotvorno koritenje memorije brzina izvoenja napisanog programaNedostaci: sloenost postupka izrade programa ogranienost na jedan tip procesoraModul 1. Algoritmi i strukture

7

Nii simboliki jezici (Assembleri - simboliki jezici nieg nivoa)Uvedeni su da bi pojednostavnili upotrebu mainskih jezika.Dobiveni su tako da su naredbama i operacijama mainskog jezika uvedena imena te je na taj nain pojednostavljeno koritenje. Ostali dijelovi (osim imena naredbi i operacija) su i dalje brojani kodovi (0, 1) te je programiranje pomou Assemblera i dalje vrlo sloeno, a i dalje je potrebno detaljno poznavati grau raunara.Imena operacija i naredbi su kratice engl. rijei. Npr. ADD, INC, DEC, CLC, PUSH, PULLProgrami pisan u Assembleru neto su laki za razumijevanje zbog imena naredbi, ali su i dalje vrlo slini programima pisanim u mainskom jeziku.

Vii simboliki jezici (simboliki jezici vieg nivoa)

Jezici koji nisu izravni prikaz binarnog oblika naredbi.Uvedeni su zbog potrebe da se sloeni i ovjeku teko prihvatljiv mainski jezik nadomjesti prikladnijim, lakim i razumljivijim programskim jezikom.kd viih simbolikih jezika jedna naredba zamijenjuje cijeli skup naredbi mainskog jezika ime se programeru bitno olakava posao. Pri tom vii simboliki jezici omoguavaju pisanje programa zapisom slinim prirodnom jeziku i matematikom zapisu.Programer najee ne mora znati gotovo nita (ili vrlo malo) o samoj grai raunara ime je pisanje programa (programiranje) omogueno i ljudima koji nisu strunjaci za raunare.Pisanje programa pomou njih je vrlo jednostavno jer su naredbe zapravo engleske rijei, a logika programiranja slina je ljudskoj logici razmiljanja i matematikoj logici.Modul 1. Algoritmi i strukture8

Pri koritenju viih simbolikih jezika na raunaru mora postojati i programski prevoditelj za taj jezik koji e napisani program prevesti na raunaru jedino razumljiv mainski jezik kako bi raunar moglo izvriti taj program.Razliiti vii simboliki jezici prilagoeni su i raznim zadaama i podrujima. Danas postoji velik broj viih simbolikoh jezika koji omoguavaju pisanje programa strunjacima raznih struka.Prednosti viih simbolikih jezika nad mainskim su tako velike da se danas mainski jezik na osobnim raunarima koristi samo iznimno i kada je to prijeko potrebno.Vii simboliki jezici se meusobno razlikuju po svom stupnju slinosti s matematikim ili prirodnim jezikom te po vrsti problema za ije su rjeavanje najprikladniji (namjeni).

Vrste viih simbolikih jezika obzirom na namjenu:FORTRAN - pogodan za rjeavanje matematikih, fizikalnih i tehnikih problema.COBOL - za ekonomske namjene, knjigovodstvo, komercijalno poslovanje i sl.C - jezik ope namjene, jedan od najbrih i najkoritenijih jezika za profesionalnu primjenu sloen jezik, velikih mogunosti, djelotvoran, prilagodljiv.PASCAL - jezik ope namjene, vrlo popularan u akademskim krugovima omoguava strukturirano programiranje (logika organizacija programa koja najbolje slijedi tok ljudskih misli)HTML - jezik za kreiranje Web stranicaSQL - jezik za pretraivanje baza podatakaJAVA, DELPHI, ASP, PHP, C# - noviji jezici, uglavnom vezani za rad na internetu, web dizajn i sl.Modul 1. Algoritmi i strukture9

Programski prevoditelji

PREVOENJE - postupak kojim se programi pisani na simbolikom jeziku prevode uz pomo programskih prevoditelja na mainski jezik.PROGRAMSKI PREVODITELJI - programi koji prevode program sa simbolikog jezika na mainski.

U dananje vrijeme programer gotovo uvijek pie program na viem simbolikom jeziku (izvornom obliku), a zatim preputa raunaru prevoenje.Za svaku vrstu jezika i maine postoji poseban programski prevoditelj tj. ne postoji univerzalan programski prevoditelj.Postoji vie naina prevoenja u mainski jezik, a meusobno se razlikuju po nainu prevoenja (sloenosti i djelotvornosti). Naelno se mogu podijeliti u dvije grupe: - interpretere- compilereInterpreteriProgrami koji svaku naredbu izvornog programa prevodi u mainski jezik u trenutku izvoenja programa- Naredba vieg simbolikog jezika izanalizira se, te ako je ispravna prevede se u niz naredbi mainskog jezika, a zatim se te naredbe mainskog jezika izvre. Nakon toga se prevede sljedea naredba vieg simbolikog jezika i ponovo izvri i tako redom do kraja programa.- Postupak prevoenja i izvravanja izvodi se pri svakom izvoenju programa.Modul 1. Algoritmi i strukture10

- Postupak prevoenja traje neko vrijeme, ime se usporava cjelokupno odvijanje programa (za sloene i opsene programe moe biti primjetno).- Prevoenje naredbu po naredbu omoguava trenutno otkrivanje sintaktikih pogreaka i interaktivno ispravljanje tj. pri pronalasku pogreke, raunar je javi korisniku, te zahtjeva njeno trenutno ispravljanje. Nakon to korisnik ispravi greku postupak se nastavlja dalje (moe se zahtjevati da se postupak vri od poetka).

CompileriProgrami koji prevode izvorni program u mainski jezik samo jednom, i to za vrijeme postupkaprevoenja. Nakon toga se izvodi (izvrava) prevedeni program (mainski oblik programa).- Compiler odjednom izanalizira cijeli program, te ako je on ispravan prevodi ga na mainski jezik, tj. stvara prevedenu (izvrnu) verziju programa. Takva prevedena verzija se za IBM PC kompatibilne raunare naziva jo i exe ili com verzija.- U sluaju pronalaenja greaka u programu, korisnik mora ispraviti sve pogreke, a promijenjeni se program prevodi ispoetka. Exe verzija se stvara tek kada je program potpuno ispravan.- Takav se prevedeni program pohranjuje na disk te ga korisnik kasnije izvodi po potrebi . Usporedba:compileri pruaju bri i praktiniji rad u odnosu na interpretere jer se program (ukoliko je ispravan) prevodi samo jednom, a ne pri svakom pokretanju kao kd interpreteraza razliku od interpretera, kd compilera su izvorni program i prevedeni program potpuno odvojeni i nezavisniinterpretiranjem se zauzima manja koliina memorijeModul 1. Algoritmi i strukture11

Pitanja za provjeru znanja:Pojasniti pojmove PROGRAM i PROGRAMSKI JEZIK.Navesti osnovnu podjelu programskih jezika.Navesti prednosti i nedostatke mainskog jezika.Kakvi su to simboliki jezici?U koju generaciju programskih jezika spada assembler?Koje su prednosti programiranja u assembleru?Da li je mogue koristiti isti assembler na vie razliitih procesorskih platformi?Pojasniti razliku izmeu programskih jezika vieg i nieg nivoa.Kojoj skupini programskih jezika pripada programski jezik C, a kojoj PASCAL?Pojasniti pojam PREVOENJE programa.Koja je razlika izmeu kompajlera i interpretera?Navesti osnovne nedostatke programskih jezika koji se interpretiraju?Kao produkt ega dobijemo exe datoteku?Modul 1. Algoritmi i strukture12

1.1.2 Statiki tipovi podataka skalarni, linearno ureeni, linearno neureeni, struktuirani

ta predstavlja varijabla? - Varijabla u programu predstavlja neku memorijsku lokaciju i memorijsko zauzee (zauzee ovisi o tipu varijable) koju moemo mijenjati. Varijablu bi najlake mogli zamisliti kao jednu ladicu u velikom ormaru gdje se mogu staviti bilo kakve stvari, pod uvjetom da su te stvari istog tipa. Ovo zahtijevanje da su stvari istog tipa proizlazi iz injenice da prije nego to elimo koristiti neku varijablu moramo je definirati kao varijablu odreenog tipa. Neki tipovi varijabli su brojevne varijable (cjelobrojne, decimalne,), znakovne (slova, interpunkcijski znakovi,) i ostale strukture izvedene od osnovnih (rezerviranih) tipova varijabli.Radnu memoriju raunara moemo promatrati kao dugaak niz jednostavnih podataka, bajtova, od kojih svaki ima svoju adresu. Deklaracijom podatka (varijable ili konstante) rezerviramo odreeni prostor u radnoj memoriji raunara, gdje e u binarnom obliku biti smjetena vrijednost tog podatka. Veliina tog memorijskog prostora ovisi o tipu podatka, dok nas stvarna fizika adresa u veini sluajeva ne zanima, odnosno, preputamo sistemu za alokaciju memorije kompajlera da je odredi. Prema tome, deklarirane varijable i konstante moemo promatrati kao imenovane memorijske prostore. Primjer : int a = 66; // rezervira se prostor veliine 4 bajta za podatak tipa int, char c = a; // a jedan bajt za podatak tipa char00000000000000000000000001000010Podatak aPrvi bajt podatka aDrugi bajt podatka aTrei bajt podatka aetvrti bajt podatka aAdresa prvog bajtaAdresa drugog bajtaAdresa treeg bajtaAdresa etvrtog bajtaPodatak cPrvi bajt podatkaAdresa prvog bajta01100001Modul 1. Algoritmi i strukture13

Statiki skalarni tipovi podataka zauzimaju fiksan broj memorijskih lokacija, veliina zauzete memorije je unaprijed odreena. Postoji vie vrsta ovih tipova podataka: Linearno ureeni- Cjelobrojni (INTEGER)

- Znakovni (CHARACTER)

Tip podatakaVeliina u bitovimaOpseg vrijednostishort int16-32768..32767unsigned int320..4294967295int32-2147483648..2147483647long32-2147483648..2147483647unsigned long320..4294967295Tip podatakaVeliina u bitovimaOpseg vrijednostichar8-128...127signed char8-128...127unsigned char80...255Modul 1. Algoritmi i strukture14

- Nabrojivi (ENUMERATED) Nabrojivi tip podataka omoguuje nam da sami definiramo mogue vrijednosti podataka. Za deklaraciju nabrojivog tipa podataka (pobrojenja) koristimo kljunu rije enum : enum {v1,v2,...,vn} Primjer:enum dan {pon,uto,sri,cet,pet,sub,ned};

deklarira tip podataka dan. Varijable tipa dan mogu sadravati jednu od navedenih vrijednosti za dane u sedmici (u ovom primjeru).

Linearno neureeni- Realni tipovi (REAL)

Tip podatakaVeliina u bitovimaOpseg vrijednostifloat323.4E-38.. 3.4E38double641.7E-308..1.7E308long double803.4E-4932..1.1E4932Modul 1. Algoritmi i strukture15

Statiki strukturirani tipovi podataka - zauzimaju fiksan broj memorijskih lokacija, veliina zauzete memorije je unaprijed odreena

Znakovni niz (CHARACTER STRING)char [] Znakovni niz definira se kao jednodimenzionalno polje znakova : Primjer : char a[12]; // najvie 11 znakova + znak za terminiranje niza

Niz moe biti i dvodimenzionalni ili viedimenzionalni npr. [v1] ... [vn] Primjer: (polje za Krii-krui) : char polje [3][3];

Slogovi (zapisi; RECORD) Slogovi ukljuuju varijable razliitih naziva i tipova, koji se odnose na odreenu jedinicu (entitet) promatranja. Primjer : Paganini Niccolo 1742 1782 violina Liszt Franc Ferenc 1811 1886 klavir Boccherini Luigi 1743 1805 violonelo Bach Johann Sebastian 1685 1750 orgulje

Modul 1. Algoritmi i strukture16

Definicije niza polja unose se pomou kljune rijei struct :

struct glazbenik { char prezime[20]; char ime [20]; int godina_r, godina_s; char instrument [16]; }; Modul 1. Algoritmi i strukture17

1.1.2 Dinamiki tipovi podatakaU ove tipove podataka spadaju: liste, stekovi, binarna stabla.....itd.Raunar im dodjeljuje minimalan memorijski prostor prilikom inicijalizacije.U toku obrade, veliina memorija koju oni zauzimaju se moe mijenjati po potrebi.

ListeJednostruko vezana lista je linearni skup podataka koji se zovu vorovi, a koji su poredani pomou pokazivaa (pokazivaka varijabla sadri adresu neke druge varijable i jako je bitan element dinamikih tipova podataka i programiranja uope). Svaki vor podijeljen je u dva dijela : prvi dio sadrava informacije elementa, a drugi dio sadrava adresu slijedeeg vora u listi. Dodavanje ili brisanje vora dodatno zauzima ili oslobaa memoriju.

Sl. 1 Jednostruko vezana lista

Modul 1. Algoritmi i strukture18

Sl. 2 Ubacivanjem novog vora u listu zauzima se noviSl. 3 Brisanjem vora iz liste oslobaa se memorijski prostor. prethodno zauzet memorijski prostor.

StekoviStek je dinamika struktura podataka koja se realizira pomou vezane liste. vorovi steka su istog tipa, a njihov je broj varijabilan. Rad sa stekom se zasniva na upravljanju vorovima koji se nalaze na vrhu steka.Podatak se moe upisati na stek ili ispisati iz steka. Stek se koristi na slijedei nain: poslijednji podatak unesen u stek uzima se prvi iz njega. To se naziva LIFO princip (od engl. Last In First Out).

SLSl. 4 Implementacija stek-a

Modul 1. Algoritmi i strukture19

RedRed je struktura podataka slina stek-u. Za razliku od stek-a, podatak koji je prvi upisan u red prvi se ispisuje iz reda. Takav nain upisa i ispisa poznat je kao FIFO princip (od engl.First In First Out). Naziv red za ovakvu strukturu podataka upotrebljen je zbog analogije s redovima iz svakodnevnog ivota.

Sl. 5 Implementacija redaBinarno stabloZa razliku od nizova, lista, steka i reda koji predstavljaju linearne strukture podataka, stablo je nelinearna struktura podataka. Njegova struktura prikazana je na slici 6.

Sl. 6 Implementacija binarnog stabla

Modul 1. Algoritmi i strukture20

Umjesto zakljuka

ta smo do sad nauili?Vidjeli smo da u programiranju postoje razliiti pristupi formiranju varijabli. Varijable mogu imati fiksnu ili varijabilnu duinu pa smo ih nazvali statike i dinamike. Statike smo podijelili na linearno ureene, linearno neureene i struktuirane tipove. Za sve njih (statike) je zajedniko da zauzimaju fiksnu koliinu memorije koja se ne moe mijenjati prilikom izvoenja programa. Ovo ih ini veoma nefleksibilnim kada se radi o izradi sloenijih programa kakve danas skoro uvijek susreemo. Programiranje s iskljuivo statikim tipovima varijabli dovodi po pisanja neefikasnih programa koji su podloni bug-ovima(grekama).Zbog gore navedenih razloga uvedeni su dinamiki tipovi varijabli ija je karakteristika dinamiko zauzimanje memorije prema potrebi. Iako je programiranje s dinamikim tipovima varijabli dosta sloenije, one su se postavile kao neophodan element u programiranj iole sloenijih programa . U okviru ovog predmeta (za II razred), neemo se baviti dinamikim tipovima podataka zbog njihove sloenosti i potrebnog predznanja, ve emo se fokusirati na statike tipove i njihovo pravilno koritenje kd pisanja algoritama i programa.

Modul 1. Algoritmi i strukture21Pitanja za provjeru znanja:Pojasniti pojam varijable.Objasniti pojam statike varijable, nabrojati njihove prednosti i nedostatke.Koji opseg vrijednosti ima float varijabla? Koliko bajtova zauzima u memoriji?ta su to znakovni nizovi i kako su predstavljeni u memoriji?Pojasniti osnovnu razliku izmeu statikih i dinamikih varijabli.ta je to pokaziva?ta je to jednostruko vezana lista? Koja je uloga pokazivaa u listi?Pojasniti pojam steka?Usporediti stek s redom i pojasniti razlike.

Modul 1. Algoritmi i strukture22

1.2 Upotreba osnovnih kontrolnih struktura1.2.1 Algoritmi i dijagrami toka

PROGRAMIRANJE predstavlja postupak izrade programaCilj programiranja je pomou raunara, od ulaznih podataka dobiti izlazne rezultate obrade.

Sl.7 Rjeavanje problema pomou raunara

U praksi su problemi koji se ele rijeiti programiranjem rijetko toliko jednostavni da bi se odmah mogao sastaviti program, tako da se postupak programiranja najee rastavlja na vie koraka (faza).FAZE PROGRAMIRANJA:1.) Utvrivanje svega to se u zadatku trai, predvianje svih moguih sluajeva koji se mogu javiti.2.) Odabir prikladnog naina (metode) pisanja programa.3.) Rastavljanje zadatka na vie dijelova (ukoliko je zadatak opsean).4.) Izraditi grafiku shemu (prikaz) programa dijagram toka.5.) Pisanje naredbi programa na odreenom programskom jeziku.6.) Provjera ispravnosti programa - ispravljanje eventualnih sintaktikih(pravopisnih)pogreaka.7.) Testiranje programa - ispravljanje eventualnih logikih pogreaka.8.) Izrada dokumentacije programa radi lake uporabe

Ukoliko je zadatak za rjeavanje jednostavan, neke od ovih faza se mogu preskoiti.

Modul 1. Algoritmi i strukture23

Postavlja se pitanje: na koji nain raslaniti zadatak koji se postavlja pred programera, a da se on na najjednostavniji nain moe pretoiti u pisani program?Odgovor je: koritenjem algoritama, dijagrama toka i pseudokoda.

ALGORITAM: Nain (metoda, uputa) kojom raunar rjeava neki zadatak tj. niz naredbi ijim se izvrenjem rjeava neki problem. Izrada algoritma je u potpunosti zdaa programera, a on ga u vidu programa daje raunaru.

Pri pisanju algoritama esto se koriste pomagala koja olakavaju njihovu izradu kao npr. dijagrami toka, biblioteke esto koritenih algoritama algoritama i sl.kd jednostavnijih programa algoritam je mogue izraditi ''u glavi'', bez upotrebe posebnih pomagala.

DIJAGRAM TOKA (blok dijagram, algoritamska shema):omoguava grafiki prikaz programakoristi se u svrhu lakeg pisanja programa, snalaenja u programu, analizu programa, pronalaenje logikih pogreaka te lakeg vrenja izmjena u programu

Program prikazan dijagramom toka vrlo je pregledan i potpuno (jednoznano) odreen. Pri sastavljanju dijagrama toka koriste se posebni standardni simboli (oznake) kojima oznaavamo pojedine naredbe i operacije.

1.) - oznaka za poetak ili kraj programa

npr.

STARTSTOPModul 1. Algoritmi i strukture24

2.)-oznaka za unos podataka u raunar

npr. (itaj: upii vrijednost varijable A)

na tom mjestu podatak A ulazi u memoriju raunara

3.)-oznaka za ispis podataka (prikaz rezultata korisniku)

npr. (itaj: ispii vrijednost varijable B)

na tom mjestu raunalo ispisuje vrijednost varijable B (iz memorije)

4.)- oznaka za izvravanje naredbe pridruivanja

npr. rauna A+B i rezultat sprema u C

poveava A za 1 (rauna A+1 i rezultat sprema u A)

smanjuje X za 2 (rauna X-2 i rezultat sprema u X)

openito:ABC A+BA A+1 X X-2 varijabla izrazModul 1. Algoritmi i strukture25

rauna vrijednost izraza s desne strane znaka = , a rezultat sprema u varijablu s lijeve strane znaka =.

NAPOMENA: 1.) s lijeve strane znaka = ne smije biti izraz ve samo jedna varijabla2.) sve varijable unutar izraza moraju biti poznate raunaru u trenutku raunanja3.) umjesto znaka jo se koristi i znak = .

5.)- uvjetna naredba

oznaava mjesto grananja u programu u zavisnosti o ispitanom uvjetuako je uvjet zadovoljen program se grana na jednu stranu (DA), inae na drugu (NE)

npr.

6.)- prikazuju smjer izvravanja programaDANEUVJETNEDAA < BX = X - 1Y = X - YModul 1. Algoritmi i strukture26

PSEUDOKOD (PSEUDOJEZIK):nain zapisivanja koji zamjenjuje programski jezik, a koristi se za oblikovanje programapo svojoj strukturi nalikuje na programski jezik, ali su naredbe pisane prirodnim jezikomponekad se moe koristiti umjesto dijagrama toka za izradu skice programanpr.poetak;sve dok je A10 ispii vrijednost X+Y inae ispii vrijednost X-Y;ispii poruku ''Ovo je program napisan pomou pseudojezika'';kraj;1.2.1.1 Osnovni algoritamski postupciPostoje tri osnovna algoritamska postupka:slijedgrananjeponavljanje (petlja)- Slijed: Naredbe slijede jedna iza druge.- Grananje: kd grananja se prvo postavlja neki uvjet, a zatim se ovisno o rezultatu uvjeta izvode sljedee naredbe.Uvjet je uvijek takav da se na njega moe odgovoriti sa DA ili NE. Takve uvjete zovemo logiki uvjeti.- Ponavljanje: kd ponavljanja, odreeni niz naredbi izvrava se zadani broj puta. Pri tom moemo imati dvije situacije:prije poetka ponavljanja unaprijed se tano zna koliko puta postupak treba ponoviti,broj ponavljanja ovisi o izvravanju niza naredbi koje se ponavljaju i tada se broj ponavljanja ne zna unaprijed.Niz naredbi koje se ponavljaju zajedno s naredbama koje odreuju ponavljanje najee zovemo petlja.PODJELA INSTRUKCIJAProgram se sastoji od niza naredbi, a algoritam od niza instrukcija.Instrukcije se mogu podijeliti u nekoliko skupina.Modul 1. Algoritmi i strukture27TABELARNI PRIKAZ PODJELE INSTRUKCIJAINSTRUKCIJEKLJUNE RIJEIPRIMJERIInstrukcije za poetak i krajpoetak, krajpoetak;kraj;Instrukcije za ulaz i izlaz podatakaupii, ispiiupii (x);ispii (A,B);ispii ("Dovienja");ispii (x+y);ispii ("Povrina je ", P);Instrukcije za obavljanje operacija( = )z = x + y;c = sqrt (a*a+b*b);br = br 1;Instrukcije za odreivanje toka programaInstrukcije grananjaako je uvjet onda ... inae ... (if) (then) (else)ako je x > 0 onda ispii ("Pozitivan.") inae ispii ("Moda negativan.");ako je b0 onda kol = a/b; ispii (kol) inae ispii ("Ne moe se podijeliti.");Instrukcije za ponavljanjeponoviti broj puta ... (for, do, while) zbir = 0; ponoviti 50 puta ulaz (x) zbir = zbir + x izlaz (zbir);Instrukcije za ponavljanje s ispitivanjem uvjetadok je uvjet radi ... (for, do, while)(Napomena: petlja se vrti dok god je uvjet istinit.) upii (x); zbir = 0; i = 1; dok je i x; ispii (zbir);Modul 1. Algoritmi i strukture28Podcrtane rijei nazivaju se kljune ili rezervirane rijei.One odreuju pojedine instrukcije i uvijek se tako piu. U programskim jezicima prevode se na engleski.Niz jednostavnih instrukcija (unutar neke druge instrukcije) moe se smatrati jednom sloenom instrukcijom.Primjeri i izadaci:SLIJEDPrimjer 1: Napii algoritam i sastavi dijagram toka za program koji e uitati poluprenik kruga, a izraunati i ispisati prenik, povrinu i obim kruga.Modul 1. Algoritmi i strukture29Zadaci (slijed):Napii algoritam i sastavi dijagram toka za raunanje zbira, razlike, produkta i kolinika dvaju zadanih brojeva.Napii algoritam i sastavi dijagram toka za raunanje obima i povrine pravokutnog trokuta ako su zadane njegove katete.Napii algoritam i sastavi dijagram toka za program koji e raunati prosjek etiri zadana broja.Napii algoritam i sastavi dijagram toka za program koji e raunati aritmetiku sredinu dvaju zadanih brojeva.Napii algoritam i sastavi dijagram toka za program koji e brzinu u m/s pretvarati u km/h.Napii algoritam i sastavi dijagram toka za program koji e vrijeme u satima, minutama i sekundama pretvoriti u vrijeme u sekundama..Napii algoritam i sastavi dijagram toka za program koji e uitati duljinu, visinu i irinu kvadra, a ispisati obim i volumen.Modul 1. Algoritmi i strukture30GRANANJEPrimjer 2: Napii algoritam i sastavi dijagram toka za program koji e uitati dva broja pa ispisati koji je vei.Modul 1. Algoritmi i strukture31Primjer 3: Napii algoritam i sastavi dijagram toka za program koji e uitati stranice trokuta, a ispisati da li je trokut jednakostranian, jednakokraan, raznostranian i/ili pravokutan.Modul 1. Algoritmi i strukture32Zadaci (GRANANJE):Napii algoritam i sastavi dijagram toka za program koji e za uitani broj x ispisati da li je pozitivan, negativan ili nula.Napii algoritam i sastavi dijagram toka za program koji e uitati tri broja, provjeriti mogu li oni biti stranice trokuta i ako mogu izraunati i ispisati povrinu i obim tog trokuta.Napii algoritam i sastavi dijagram toka za program koji e uitati dva broja, a ispisati njihov produkt i kolinik. (Napomena: ako je djelitelj jednak 0, ispii poruku da se ne moe podijeliti.)Napii algoritam i sastavi dijagram toka za program koji e raunati apsolutnu vrijednost uitanog broja.Napii algoritam i sastavi dijagram toka za program koji e uitati prosjek ocjena, a zatim ispisati odgovarajui opi uspjeh.Napii algoritam i sastavi dijagram toka za program koji e uitati dva broja i znak za operaciju (+, -, *, /). U ovisnosti o uitanoj operaciji treba ispisati rezultat ili poruku da je unesen pogrean znak.Napii algoritam i sastavi dijagram toka za raunanje obima i povrine kvadrata ako je zadana duljina stranice kvadrata. Prije raunanja provjeriti da li je A>0, a ako nije, ispisati poruku Stranica kvadrata mora biti pozitivan broj.Napii algoritam i sastavi dijagram toka za program koji e raunati vrijednost funkcije: x2, x0Napii algoritam i sastavi dijagram toka za program koji e uitati dva broja x i y, a zatim ispisati vrijednost funkcije f definirane ovako: 0 , za x=y f = x2 y2 , za x>y y2 x2 , za y>xModul 1. Algoritmi i strukture33PONAVLJANJE (PETLJA)Primjer 4: Napii algoritam i sastavi dijagram toka za program koji e uitati jedno ime, a zatim 25 puta ispisati da je ime pametan.Modul 1. Algoritmi i strukture34Primjer 5: Napii algoritam i sastavi dijagram toka za program koji e uitati 50 brojeva i izraunati njihov zbir.Modul 1. Algoritmi i strukture35Zadaci (PONAVLJANJE-PETLJE):Napii algoritam i sastavi dijagram toka za program koji e uitati 50 brojeva, a iza svakog uitanog broja ispisati njegov korijen i kvadrat.Sastavi algoritam i napravi dijagram toka za program koji e ispisati kvadrate i korijene brojeva od 1 do 25 i to ovako:BROJ KVADRAT KORIJEN 1 1 1 2 4 1.41 ... ... ... 25 625 5.00Sastavi algoritam i napravi dijagram toka za program koji e traiti da se uita jedan broj, a zatim ispisati tablicu mnoenja tim brojem za prvih 20 prirodnih brojeva.Sastavi algoritam i napravi dijagram toka za program koji e uitati 37 brojeva, a izraunati i ispisati njihov produkt.Sastavi algoritam i napravi dijagram toka za program koji e za uitani broj x izraunati i ispisati produkt svih brojeva do njega ukljuujui i njega.Sastavi algoritam i napravi dijagram toka za program koji e uitati 100 brojeva, a izraunati i ispisati posebno sumu pozitivnih, a posebno sumu negativnih.Sastavi algoritam i napravi dijagram toka za program koji e traiti da se uita 50 znakova s tastature i ispisati koliko je bilo znakova *, a zatim jo ispisati i toliko znakova *. (Npr. ako je bilo 7 znakova *, treba jo ispisati *******.)Sastavi algoritam i napravi dijagram toka za program koji e uitati broj x, a ispisati sumu definiranu ovako: SUMA = 12 + 22 + 32 + ... + x2 Sastavi algoritam i napravi dijagram toka za program koji e uitati brojeve x i y, a ispisati broj z definiran ovako:z = 1/y + 2/y + 3/y + ... + x/ySastavi algoritam i napravi dijagram toka za program koji e uitati 25 brojeva, a ispisati zbroj njihovih korijena.Sastavi algoritam i napravi dijagram toka za program koji e uitati dva broja, a ispisati produkt svih brojeva izmeu njih ukljuujui i njih.Sastavi algoritam i napravi dijagram toka za program koji e uitavati znakove s tastature sve dok se ne uita znak $, a zatim ispisati koliko ukupno znakova je bilo uitano.Sastavi algoritam i napravi dijagram toka za program koji e uitati 36 brojeva te ispisati najveeg meu njima i njihov prosjek.Modul 1. Algoritmi i strukture361.3 Realizacija ulaza i izlaza podatakaSvaki program, napisan u bilo kojem programskom jeziku, nema nikakvog smisla ukoliko nema mogunost da komunicira s ureajima s kojih prima podatke kao i s ureajima kojima alje podatke.Ureaji za prihvatanje ulaznih i izdavanje izlaznih podataka postoje u mnogo oblika.Meu najee koritenim fizikim ureajima su tastature, monitori, mobilni ureaji, razni magnetni (HDD), optiki (CD, DVD, BLUE-RAY) i elektroniki (SSD, FLASH memorije...) mediji.Neki ureaji upisuju i itaju podatke sekvencijalno kao serije bajtova, dok drugi ureaji organiziraju podatke u blokove. Pristup tim podacima je sekvencijalan ili direktan, to zavisi od ureaja i reima pristupanja.Standardizovane ulazne i izlazne funkcije zasnivaju se na modelu toka, koji obezbjeuje da ulaz/izlaz izgledaju logiki jednako, bez obzira na angaovani medijum.Model toka je izveden iz UNIX radnog okruenja.Slika 8 prikazuje UNIX-ov model standardnih tokova.Sl. 8 UNIX model standardnih tokovaTri standardna toka nazivaju se standardni ulaz (stdin), standardni izlaz (stdout), i standardni tok za greke (stderr)Slika prkazuje podrazumijevane veze koje se uspostavljaju za ove standardne tokove i pokazuje njihove odnose sa programom koji se izvravaModul 1. Algoritmi i strukture37Tok stdin koji pripada procesu standarno se vezuje na korisnikovu tastaturu. Ovaj tok se baferuje u redove, to znai da proces ne prima nita sve dok korisnik ne pritisne taster ENTER.Izlaz procesa ide na standardni izlazni tok, stdout, koji se standardno vezuje za korisnikov ekran. Ovaj tok se takoe baferuje u redove radi boljih performansi.Trei tok u ovom modelu je standardni tok za greke, stderr, koji je standardno vezan za korisnikov ekran. On je, meutim, nebaferovan da bi se izbjeglo zadravanje poruka o grekama u baferu, to bi ih zamaskiralo od korisnikovog uvida. Prema tome poruke o greci idu na izlazni ureaj bez zadravanja.Standardni model toka u DOS-u (Disk Operating System- Microsoft), prikazan je na slici 9. U skoro svakom pogledu on je isti kao UNIX-ov model. Osnovna razlika je u tome to DOS jo podrava dva standardna toka. To su stdprn, usmjeren na prikljuak na tampa, i stdaux tok, koji ide na standardni prikljuak za serijsku komunikaciju.Kada se program pokrene (KADA POSTANE PROCES), svi standardni fajlovi koje okruenje podrava otvaraju se automatski. Prema tome, korisnikova tastatura i ekran se odmah vide i u UNIX i DOS okruenju. Osim toga DOS-ovi procesi imaju pristup standardnom tampau i serijskom portu ako je odgovarajua oprema instalirana.Windows operativni sistemi nasljeuju model tokova koji vae za UNIX i DOS operativna okruenja.Sl. 9 DOS model standardnih tokovaModul 1. Algoritmi i strukture381.4 Koritenje potprograma tehnike modularizacije 1.4.1 Potprogrami i funkcijePotprogrami - dijelovi programa koji se vie puta ponavljaju ili dijelovi dugakog programa. Program moe da se podijeli na logike cjeline od kojih je svaka zaduena za izvravanje specifinog zadatka. Mogue je da u programu postoji potreba da se isti zadatak obavi vie puta, ali na razliitim mjestima. Umjesto da se naredbe za izvravanje takvog zadatka iznova navode, ideja je da se one izdvoje u posebnu imenovanu cjelinu, POTPROGRAM, i da se po potrebi pozivaju samo navoenjem imena potprograma i eventualnih ulaznih podataka.Potprogramima se postie uteda, mogunost da se isti niz naredbi ponovo iskoristi, a program postaje itljiviji jer se ne posmatra samo kao niz naredbi, ve i kao niz specifinih zadataka. Takoe, prilikom pisanja programa, najlake je tokom analize problema podijeliti program na specifine zadatke, a onda za svaki od njih ispisati odgovarajui niz naredbi koji ga realizuju. GLAVNI PROGRAM POTPROGRAMI SKOK 1SKOK 2Sl. 10 Koncept potprograma--------------PP1--------PP2Modul 1. Algoritmi i strukture39Potprogram se moe pozivati bilo iz glavnog programa ili iz drugog potprograma. Prilikom poziva potprograma vrijednosti sa kojima potprogram treba raditi moraju se prenijeti iz programske jedinice (program ili drugi potprogram) koja ga poziva. Isto tako, rezultati rada potprograma moraju se vratiti programskoj jedinici koja je pozvala potprogram.Svaki potprogram se sastoji od:- zaglavlja potprograma,- tijela potprograma i- naredbe za povratak u pozivajui program.U zaglavlju potprograma, koje se nalazi na poetku potprograma, odreuje se:- ime potprograma,- argumenti koji se prenose u i iz potprograma.U tijelu potprogama nalaze se naredbe koje potprogram treba izvriti.Naredba za povratak u pozivajui program predstavlja logiki kraj potprograma.Potprogramu se mora rei to e dobiti prilikom poziva i to treba vratiti u pozivajui program.Prilikom pisanja potprograma koriste se FORMALNI (dummy) argumenti. Oni se nalaze u listi argumenata pridruenoj simbolikom imenu dodjeljenom potprogramu u njegovom zaglavlju.Ovi argumenti predstavljaju podatke koje e potprogram dobiti iz pozivajueg programa. Na taj nain se specificira potprogramu koje e podatke dobiti. Oni samo predstavljaju tip podataka koje potprogram dobija, a ne i konkretne vrijednosti.zaglavlje pp ime_pp (farg1, farg2,..., fargn)Prilikom pozivanja potprograma koriste se STVARNI argumenti. Oni predstavljaju konkretne vrijednosti sa kojima potprogram treba da radi. Stvarni argumenti su dati u listi argumenata pridruenoj pozivu potprogama. Npr. poziv ime_pp (sarg1, sarg2,..., sargn)Imena formalnih i stvarnih argumenata ne moraju biti, i najee nisu, jednaka.Modul 1. Algoritmi i strukture40Prema nainu poziva (i vraanja rezultata pozivajuoj programsko jedinici) potprogrami se dijele na: - funkcije i - procedure (ope potprograme).Procedure se pozivaju posebnom naredbom i mogu da daju: ni jedan, jedan ili vie podataka kao rezultat pozivanja.Funkcije se pozivaju po imenu i vraaju samo jedan podatak koji ostavljaju na mjestu poziva. Standardna deklaracija funkcije izgleda ovako:povratni_tip_podatka ime_funkcije(lista argumenata);Ukoliko funkcija ne vraa podatak kako rezultat njenog pozivanja, onda njena deklaracija izgleda ovako:void ime_funkcije(lista argumenata);U daljem tekstu, potprograme i funkcije moemo smatrati sinonimima sve dok je ispunjen uvjet da potprogram, kao rezultat svog rada, vraa samo jednu vrijednost to je u programskom jeziku C pravilo za koje nema iznimke.Ukoliko je ispunjen ovaj uvjet, sve to je u gore navedenom tekstu navedeno za potprograme vrijedi u potpunosti i za funkcije.ZADATAK: Grafiki (pomou dijagrama toka) predstaviti program koji izvodi 4 osnovne raunske opereacije, tako da se na zahtjev korisnika izvri jedna raunska operacija. Svaka od operacija treba da bude predstavljena pomou posebnog potprograma (funkcije) koji ima svoju listu argumenata i koji se poziva iz glavnog programa po potrebi.NAPOMENA: U OKVIRU OVOG PREDMETA IZUAVAE SE PROGRAMSKI JEZIK C KOJI NE POZNAJE POJAM POTPROGRAM I PROCEDURA. ZBOG TOGA E SE U GRADIVU KOJE E BITI IZLAGANO DO KRAJA KOLSKE GODINE GOVORITI ISKLJUIVO O FUNKCIJAMA KAKO JEZINIM KONSTRUKCIJAMA KOJE SE KORISTE U OKVIRU PROGRAMSKOG JEZIKA C.Modul 1. Algoritmi i strukture41Modul 1. Algoritmi i strukture4242 1.4.3 Naini prijenosa argumenataPrilikom deklarisanja potprograma navedene su posebne promjenljive koje treba da prihvate ulaz potprograma, a koje smo nazvali argumentima. Te promjenljive se jo nazivajuformalni parametripotprograma.S druge strane, prilikom pozivanja potprograma potrebno je obezbjediti konkretne vrijednosti za argumente. Te vrijednosti se jo nazivajustvarni parametripotprograma. Stvarnih parametara mora biti koliko i formalnih, moraju biti navedeni u odgovarajuem redosljedu, a odgovarajui formalni i stvarni parametri moraju biti istog tipa.Postoje dva naina za prijenos argumenata: - po adresi ili referenci (eng.By Reference) i - po vrijednosti (eng.By Value)Prijenos po adresi bi podrazumijevao da formalni i njemu odgovarajui stvarni parametar, predstavljaju istu memorijsku lokaciju. Stoga bi formalni i njemu odgovarajui stvarni parametar mogli imati razliita imena, ali njihov sadraj bi se nalazio na istoj adresi u memoriji. Tako bi svaka promjena vrijednosti formalnog parametra u okviru potprograma dovela i do promjene vrijednosti odgovarajueg stvarnog parametra. Ukratko, potprogramu, preko njegovih argumenata predajemo adresu na kojoj se nalazi neka varijabla, a ne njenu vrijednost.Prijenos po vrijednosti bi podrazumijevao da se prilikom poziva potprograma kreira posebna memorijska lokacija za formalni parametar i da se u nju kopira vrijednost odgovarajueg stvarnog argumenta. Na taj nain bi formalni i njemu odgovarajui stvarni parametar predstavljali dvije razliite memorijske lokacije i promjena vrijednosti formalnog parametra ne bi uticala na vrijednost stvarnog parametra.Modul 1. Algoritmi i strukture4343MODUL 2. OSNOVNE PROGRAMSKE STRUKTURE 2.1 Struktura programa u programskom jeziku COsnovna pravila pisanja programa u odreenom programskom jeziku nazivamostruktuiranje programa. Jedno od prvih pravila pisanja programa u programskom jeziku C je da razlikujemo velika i mala slova! Isto tako, vano je istaknuti da se sve naredbe, biblioteke funkcije i kljune rijei u C-u piumalimslovima!Pojamstruktura programaodnosi se na osnovna pravila kojih se moramo pridravati prilikom pisanja programa. Ako ih ne potujemo, postupak prevoenja programa nee zavriti uspjeno i program nee raditi.Sve biblioteke funkcije i kljune rijei u C-u piu se malim slovima. Nije svejedno da li smo varijabli u koju emo spremati, npr. duljinu stranice kvadrata, dodijelili ime a ili A.Ovo je, sa strane korisnika, sitna pogreka, ali sa strane kompajlera predstavlja veliku razliku. Ako smo na poetku programa deklarisali varijablu a, a u programu koristimo naziv A, kompajler e nam prijaviti greku u kompajliranju, odnosno upozorie nas da varijabla A nije deklarisana.Osim pravila pisanja imena kljunih rijei malim slovima, postoji jo nekoliko pravila kojih se treba pridravati tokom pisanja programa u programskom jeziku C.Glavna funkcija (main funkcija):Svaki program u C-u sastoji se od niza povezanih funkcija i mora sadravati funkcijumain()u kojoj se nalazi izvrni dio programa. Poetak i kraj funkcije (ili bloka naredbi) oznaava sevitiastimzagradama.( { } )Program napisan u C-u sastavljen je od niza povezanih funkcija. Broj funkcija nije ogranien, ali u u cijelom programu postoji samo jedna funkcija main().Ona oznaava mjesto na kojem poinje izvravanje programaPoetak svake funkcije oznaava se otvorenom vitiastom zagradom ({ - AltGr+B), dok se kraj oznaava zatvorenom vitiastom zagradom ( } AltGr+N)To znai da najmanji C program izgleda ovako:main() //glavna funkcija{ //poetak tijela glavne funkcije} //kraj tijela glavne funkcijeModul 2. Osnovne programske strukture4444Oznaka kraja naredbi:Kraj naredbe u programskom jeziku C oznaava se oznakom ; . Ona oznaava kraj jedne i poetak druge naredbe.Njezino izostavljanje rezultirae grekom tokom kompajliranja, dok e postavljanje oznake ; prije kraja naredbe (unutar sloenih naredbi) rezultirati prijevremenim zavretkom naredbe to e utjecati na rezultat.npr. p = a*a // greka, izraz nije terminiran sa ; p = a*a; // ispravno Biblioteke funkcijaFunkcije potrebne u veini programa (standardne funkcije) nisu sastavni dijelovi programskog jezika C, ve dolaze s kompajlerom. Razvrstane su prema namjeni i spremljene u biblioteke funkcija.Kada je potrebno koristiti funkciju iz odreene biblioteke, ona se jednostavno ukljui pretprocesorskom direktivom #include i programu su dostupne sve funkcije koje sadri biblioteka na koju se odnosi ta direktiva. npr: #include //pretprocesorska direktiva kojom ukljuujemo biblioteke funkcije za IOint main(){ //poetak glavne funkcije printf(Upiite duinu stranice a: ); //poziv bibilioteke fukcije printf() return 0; //povratak iz glavne funkcije} //zavretak glavne funkcijeJedna od vanijih razlika izmeu C-a i ostalih programskih jezika je u tome to je program u C-u sastavljen odniza funkcija.Standardne funkcije (funkcije potrebne u veini programa) nisu ugraene u sam programski jezik C, ve se nalaze ubibliotekama funkcijakoje se isporuuju s kompajlerom.Biblioteke funkcijanastale su standardizacijom C-a, pa je dovoljno na poetku programa najaviti da e se koristiti odreena biblioteka (pomou pretprocesorske direktive #include) i kroz cijeli program su dostupne sve funkcije koje se u njoj nalaze. Tako se, npr. biblioteka u kojoj se nalaze funkcije za ulaz i izlaz podataka nazivastdio.h, matematike funkcije nalaze se u bibliotecimath.h, a funkcije za rad sa znakovnim varijablama u bibliotecistring.h.Modul 2. Osnovne programske strukture4545Komentari Komentarisanje pojedinih linija programskog koda predstavlja jako bitnu strukturu koja je neizostavna tokom pisanja programskog koda. Komentari predstavljaju nain dokumentiranja napisanog programskog koda.U programskom jeziku C postoje dva naina oznaavanja programskih komentara:// na ovaj nain se komentarie samo jedna linija programskog koda/* na ovaj nain se kometarie cijeli programski blok*/Svaki, pa i najmanji program, treba da ima programske komentare.Primjer kompletnog programa napisanog u programskom jeziku C:Zadatak: Napisati C program koji e uitati cijeli broj n. Taj broj mora biti vei od 1 i manji od 100000. Ako ovaj uvjet nije ispunjen ispisati poruku "POGRENO ZADAN BROJ" i zavriti rad. Program treba nai i spisati zbir svih cifara uitanog broja./* Zbir znamenaka cijelog broja */#include // standardna datoteka ulaza i izlaza*/#include // datoteka s matematickim funkcijama */int main(){ int i,m,s,zz; //deklaracija varijabli long n; printf(Zbir cifara cijelog broja\n\n"); //poruka korisiku printf(Unesite cijeli broj n (0 y // netanoPrvenstvo operatora && je vie od prvenstva operatora II. Da bi se postigli odgovarajui redosljed odreivanja vrijednosti pojedinih izraza, potrebno je koristiti zagrade.Primjer: Sljedei izraz prikazan je sa i bez zagrada radi demonstriranja tog efektaSA: (m > n II x > y) && m < x // netano BEZ: m > n II x > y && m < x // ttanoOperatori nad bitovimaOva vrsta operatora daje nam pristup mainskim registrima i rijeima u memoriji na nivou bita. Ovi operatori rade s promjenjivim cjelobrojnog tipa.Rezultat vrijednosti izraza zavisi od toga da li se nad vrijednostima obavlja I, ILI, iskljuivo ILI i ili komplentiranje. Vrijednosti operanada se obavljaju na nivou pojedinih bitovaModul 2. Osnovne programske strukture6565Primjer: Nad dvije vrijednosti je obavljeno I nad bitovima i ILI nad bitovima. Komentari prikazuju binarni ekvivalent heksadecimalne vrijednosti.char rezultat;char b1 = 0x3C;// 00111100char b2 = 0xF0;// 11110000rezultat = b1 & b2; // 00110000rezultat = b1 I b2 // 11111100Poto operacije nad bitovima imaju manje prvenstvo od operacija poreenja, u izrazima kao to slijedi treba koristiti zagrade:(b1 & b2) != b2Operacija I nad bitovima obavlja se prva. Dajui vrijednost 0x30, to je razliito od 0xF0, pa rezultat ima vrijednost tano.Operator ~ je unarni operator koji invertuje vrijednost svakog bita u svom operandu. Npr. ako imamo promjenjivu tipa char sa binarnom vrijednosti 0101010 (hex. 0x55), ~b ima vrijednost 10101010 (hex. 0xAA).Operatori pomjeranja takoe rade na nivou bita. Ovi operatori imaju dva operanda: lijevi operand je objekat koji se pomjera, a desni operand je broj pozicija za koje se pomjera. Oba operanda moraju da budu cjelobrojni tipovi.Modul 2. Osnovne programske strukture6666Dodatni operatori dodjele vrijednostiIzrazi dodjele vrijednosti imaju sljedei opti oblik:izraz1 = izraz1 op izraz2Izraz na lijevoj strani dodjele vrijednosti ponovo se pojavljuje na desnoj strani. Nije potrebno da se taj izraz pie dva puta. Dodjela vrijednosti u jeziku C moe se predstaviti u kraem obliku:izraz1 op= izraz2Primjer:n += 3; /* ekvivalent n = n + 3; */n *= x; /* ekvivalent n = n * x; */n 10) printf("Cijena za %d komada je %.2f KM\n", kolicina, kolicina*jedinicna_cijena*0.95);else printf("Cijena za %d komada je %.2f KM\n", kolicina, kolicina*jedinicna_cijena); return 0;}Modul 2. Osnovne programske strukture7575Ugnjedene if naredbeZa naredbe se kae da su ugnjedene (eng.nested) kada se jedna nalazi unutar druge. to se tie naredbe if, moemo ih uklapati u granu za TANO, u granu za NETANO ili u obje. Uklapanje u granu za tano izgleda ovako:if(izraz1) if(izraz2) naredbaNredbe if uklopljene u granu za tano obino se mogu napisati kompaktnije i jasije kao jedna naredba if sa upravljakim izrazom u obliku sloenog logikog izraza, dobivenog upotrebom logikih operatora.if(izraz1 && izraz2) naredbaOva dva prikazana oblika izvravaju naredbu ako su izraz1 i izraz2 tani. Drugi prikazani oblik je laki za itanje i jasno odraava logiku problema.Ugnjedavanje u granu za netano (else) je uobiajeno u programima pisanim na jeziku C. Evo kako to izgleda u optem obliku:if(izraz1) naredba1else if(izraz2) naredba2 else if(izraz3) naredba3 else naredba4Ova naredba viesmjernog grananja moe se napisati kompaktnije i jasnije pisanjem else i if u istom redu:Modul 2. Osnovne programske strukture7676if(izraz1) naredba1else if(izraz2) naredba2else if(izraz3) naredba3 else naredba4Fraza else if predstavlja drugaiji raspored rijei else i if . Kompajler obje forme zapisa vidi na isti nain. Drugi od ova dva oblika ima dvije vane osobine. Prvo, njegovom upotrebom viesmjerna priroda itave konstrukcije postaje oigledna. Drugo, sprjeava da duboko ugnjedene naredbe ne izau iz okvira ekrana. U svemu drugom identian je prvom obliku.Opcioni else lan (na kraju) je grana koja se podrazumijeva ako niti jedan od izraza u prethodnim granama nije taan. Ako za takav sluaj nije potrebna nikakva aktivnost, lan else na kraju nije potreban. Sl. 2.5.1 Ugnjedene if strukture prikazane dijagramom izvoenjaModul 2. Osnovne programske strukture7777Primjer: Program uporedi.c, koristi viesmjerno grananje da odredi odnos dva cijela broja koja zadaje korisnik./*uporedi.cUporeivanje dva cijela broja i izdavanje rezultata rijeima(a < b, a == b, a > b)*/#include "stdafx.h"#include int main(){int br1, br2;printf("Unesite prvi od dva cijela broja za provjeru: ");scanf("%d", &br1); /*korisniki unos*/printf("Unesite drugi od dva cijela broja za provjeru: ");scanf("%d", &br2); /*korisniki unos*/if (br1 == br2) /*Provjera da li su dva cijela broja jednaka*/ printf("Rezultat: %d = %d\n", br1, br2);else if (br1 > br2) /*Provjera da li je prvi broj vei od drugog*/ printf("Rezultat: %d > %d\n", br1, br2);else printf("Rezultat: %d < %d\n", br2, br1); /*Podrazumijevana naredba*/return 0;}Modul 2. Osnovne programske strukture7878 2.5.1.2 Viesmjerno grananje naredbom switchProgramski jezik C ima jo jedan nain izvoenja viesmjernog grananja, naredbu switch. Ova naredba koristi jedan cjelobrojni izraz da izrauna na koje mjesto da skoi i nekoliko case oznaka kao odredite za skok.Svaka case oznaka mora da bude jedinstven konstantan cjelobrojni izraz. Ako niti jedna od case oznaka ne odgovara upravljakom izrazu, izvravanje programa prelazi na opcionu podrazumijevanu oznaku, ako je ima, ili na naredbu koja sljedi iza naredbe switch.Opti oblik naredbe switch:switch (izraz){ case oznaka1: naredba1 case oznaka2: naredba2 .... default: naredbaN}Zagrade ograniavaju blok koji sadri case oznake i njima pridruene programske naredbePrimjer: Program uzima od korisnika tri vrijednosti , dva cijela broja i operator koji odreuje koju raunsku operaciju je potrebno uraditi nad uitanim brojevima.Modul 2. Osnovne programske strukture7979/*kalkulator.c */#include "stdafx.h"#include #include #include void main(){int broj1, broj2;char op;/*Uitaj od korisnika brojeve i operator*/printf("Unesite prvi broj: ");scanf("%d", &broj1);printf("Unesite drugi broj: ");scanf("%d", &broj2);printf("Unesite operator: ");op = _getch();/*obavi raunanje i prikai rezult*/switch (op){case '+': printf("Zbir je:%d\n", broj1 + broj2); break;case '-': printf("Razlika je:%d\n", broj1 - broj2); break;case '*': printf("Proizvod je:%d\n", broj1 * broj2); break;case '/': if (broj2 == 0) printf("Nemoguce dijeljenje s nulom!!"); else printf("Kolicnik je:%.5f\n", broj1 / (float)broj2); break;default: printf("\nPogresan operator!!\n"); break;}}Modul 2. Osnovne programske strukture8080Naredba breakOva naredba upuuje dalje izvravanje programa na naredbu iza naredbe switch ili naredbe ponavljanja (while, for ili do).Naredba break probija samo jedan nivo. Kada se koristi u ugnjedenim petljama ili u naredbi switch, izvravanje programa se nastavlja u sljedeem vanjskom nivou.Grana defaultOznaka default odgovara lanu else u viesmjernoj naredbi if. To je lan koji sve prihvata i koji se koristii ako vijednosti upravljakog izraza naredbe switch ne odgovara niti jedna druga oznaka.Oznaka default se moe smjestiti bilo gdje u naredbi switch. Ne mora da se nalazi na kraju, iako je to uobiajeno i izgleda najprirodnije. Nakon bloka naredbi pod oznakom default potrebno je napisati naredbu break ili neku drugu naredbu skoka.Propadanje i viestruke oznakeAko iza bloka naredbi izostavimo zavravajuu naredbu, izvravanje e proi (propasti) na sljedei blok.Sljedei odlomak koda ilustruje koritenje propadanja u naredbi switch:switch (izraz){...case oznaka_x: naredba_x; /*propadamo na oznaku y */case oznaka_y: naredba_y; break;...}Ako vrijednosti upravljakog izlaza odgovara oznaka_y, izvrava se samo naredba_y prije nego to izvravanje programa ode izvan naredbe switch.Ako vrijednosti upravljakog izraza odgovara oznaka_x, onda se izvravaju i naredba_x i naredba_y.Modul 2. Osnovne programske strukture8181Naredbu switch moemo uobliiti tako da se dvije ili vie case oznaka odnose na isti kd. To se postie redanjem case oznaka neposredno ispred naredbe. Ovdje se praktino radi o propadanjeu kd kojeg je blok naredbi pridruen prvoj case oznaci, prazan.Npr. ako elimo da koristimo p kao sinonim za +, jednostavno dodamo case oznaku za p neposredno ispred ili iza oznake +, ali obavezno prije prve naredbe pridruene toj oznaci. Kada se program bude izvravao, komande p i + imae isti efekat.switch(op){...case p:case +: /*ovdje ide kd za sabiranje*/ ... break;...}Modul 2. Osnovne programske strukture8282Pitanja i zadaci za provjeru znanja: Linijska struktura i grananje 1. Napisati program za izraunavanje kvadrata uneenog broja.2. Napisati program za raunanje povrine pravougaonika.3. Napisati program za raunanje dijagonale kvadrata, ako su stranice poznate.4. Napisati program za raunanje povrine i zapremine kvadra.5. Avion je poletio u h sati, m minuta i s sekundi, i u letu proveo d sekundi. U koliko sati minuti i sekundi je sletio? 6. Tri take su zadate koordinatama u ravni ( x1, y1, x2, y2, x3, y3 ). Napisati algoritam kojim se izraunava povrina paralelograma iji su vrhovi date take.7. Sa punim rezervoarom kapaciteta V litara preen je put od S km. Napisati algoritam kojim se rauna potronja u litrama na 100 km.8. Napii program koji e za uitani broj x ispisati da li je pozitivan, negativan ili nula.9. Napii program koji e uitati dva broja, a ispisati njihov proizvod i kolinik. (Napomena: ako je djelitelj jednak 0, ispii poruku da se ne moe podijeliti.)10. Napii program koji e uitati prosjek ocjena, a zatim ispisati odgovarajui opi uspjeh.11. Napii program koji e uitati tri broja, provjeriti mogu li oni biti stranice trougla i ako mogu izraunati i ispisati povrinu i obim tog trougla.12. Napii program koji uitava cijeli broj. Ako je on paran, ispisuje njegovog sljedbenika, ako je neparan ispisuje njegovog prethodnika.13. Napii program koji uitava prirodan broj pa ispisuje s kojim je brojevima od 2 do 9 djeljiv.14. Napii program koji uitava tri cijela broja i provjerava da li zadovoljavaju Pitagorinu jednainu.15. Napii program koji uitava prirodni broj pa provjerava da li je taj broj istodobno djeljiv sa 6 i ima cifru najmanje teinske vrijednosti 8.16. Napii program za raunanje opsega i povrine pravouglog trougla ako su zadane njegove katete.17. Napii program koji e vrijeme u satima, minutama i sekundama pretvoriti u vrijeme u sekundama.18. Napii program koji e uitati koordinate dviju taaka pa izraunati i ispisati njihovu udaljenost.19. Napii program koji e uitati duinu, visinu i irinu kvadra, a ispisati povrinu i zapreminu.20. Napii program koji uitava dva broja pa ispisuje rezultate osnovnih aritmetikih operacija.21. Napii program koji uitava stranice trokuta, pa ispisuje povrinu trokuta Heronovom formulom.22. Napii program koji uitava trocifreni prirodan broj pa ispisuje srednju cifru.23. Napiite algoritam koji ispisuje najvei od tri unesena broja.Modul 2. Osnovne programske strukture838324. Napisati program koji za unijeti redni broj mjeseca (januar = 1) ispisuje njegov broj dana. Ako je u pitanju februar, pitati korisnika da li je godina prijestupna.25. Napiite algoritam koji odreuje rjeenja kvadratne jednaine ax2 + bx + c = 0.26. Napisati program koji za unesenu nabavnu cijenu proizvoda obraunava porez od 12% ako je cijena manja od 100 KM, a ako nije porez od 17%. Ispisati iznos poreza i maloprodajnu cijenu proizvoda.27. Napisati program koji na osnovu bodova koje je uenik dobio na testu ispisuje ocjenu. (napomena: nedovoljan 0-9, dovoljan 50-69, dobar 70-84, vrlo dobar 85-94, odlian 95-100)28. Napisati program koji za uneseno x izraunava y prema formuli29. Napisati program koji provjerava da li je unesena godina prestupna.30. Napisati program koji ispituje da li je broj A djeljiv sa brojem B.31. Napisati program koji za unesenu ocjenu ispisuje da li je ona odlina, vrlo dobra, dobra, dovoljna ili nedovoljna. Ispisati upozorenje ako je unos izvan opsega 1-5.32. Napisati program koji za uneseni redni broj mjeseca ispisuje njegovo ime.33. Napisati program koji za uneseno slovo ispisuje njegov morseov kd. Tabelu morseovog koda pronai na internetu.Modul 2. Osnovne programske strukture8484 2.5.2 Naredbe ponavljanja-programske petljeU dosad predstavljenim naredbama za upravljanje tokom izvravanja, izvravanje programa uvijek je bilo prenoeno unaprijed. Izvravanje je takoe mogue prenijeti i unazad na neku prethodnu naredbu. Ako to uradimo, dobivamo naredbe ponavljanja koje jo moemo nazvati i petlje. 2.5.2.1 Petlja whileJedna od osnovnih naredbi ponavljanja je while petlja. Namjena ove petlje je da obezbijedi izvravanje tijela naredbe sve dok upravljaki izraz ima vrijednost tano. Naredba while ima sljedei oblik:while (izraz) naredbaNaredba while provjerava uslov na vrhu petlje (pogledati sliku 2.5.2). To znai da se tijelo naredbe nee izvravati ako odreivanje vrijednosti izraza da vrijednost nula, u suprotnom naredba se izvrava. Sl. 2.5.2 Izvravanje while petljeModul 2. Osnovne programske strukture8585/*while.cdemonstracija koritenja while petljeda se proita red teksta s tastature i prikae znak po znakPRONAI ZNAENJE SVIH NEPOZNATIH FUNKCIJA KORITENIH U OVOM PROGRAMU*/#include "stdafx.h"#include #include int main(){int c;puts("Otkucajte tekst (jedan red) plus ENTER"); while ((c = getchar()) != '\n')putchar(c); /*prikazivanje*/return 0;}Prilikom izvravanja, ovaj program prikazuje jednostavno upustvo i eka da se neto otkuca na tastaturi. Dok se kucaju znakovi, na ekran se vraa nihov eho i oni se prihvataju u ulazni bufer. Kada se pritisne tipka ENTER, program prikazuje tekst linije, ali ne i zavrni znak za novi red.U sljedeem odlomku koda, while petlja tampa (prikazuje) niz znakova za novi red da bi napravila vertikalni prazan prostor u izlaznom toku. Obratiti panju na loritenje cjelobrojne promjenjive n za upravljanje petljom. int n; /*upravljaka promjenjiva*/...n = 5; /*potreban broj praznih mjesta*/while(n > 0){ putchar(\n); --n;}Modul 2. Osnovne programske strukture8686Pojanjenje koda:Program treba da prikae prazne linije (pet u ovom sluaju). Pri svakom prolasku kroz petlju, vrijednost upravljake promjenjive poredi se s nulom. Sve dok je n vee od nule, petlja nastavlja da se izvrava. Svaki put kada se tampa znak za novi red , n se dekrementira (smanjuje za jedan). Konano se n smanuje do nule, vrijednost upravljakog izraza postaje netano (0) i petlja se zavrava . 2.5.2.2 Naredba continueNaredba continue unutar petlje primorava petlju da zapone svoje sljedee ponavljanje. SVE NAREDBE IZA NAREDBE continue SE PRESKAU.Sljedei odlomak koda uitava jedan red znakova iz standardnog ulaznog toka. Svaki znak (taster) se poredi sa kodom za novi red (znakovna konstanta \n) radi odeivanja kada treba prekinuti obradu.int taster;...while((taster = getchar()) != \n){ if(!isdigit(taster)) continue; /*kd za obradu cifara*/ ...}Pojanjenje koda: Naredba if koja se nalazi unutar petlje koristi funkciju isdigit() da detaljnije ispita kd tastera. Ako kd predstavlja znak koji nije cifra, upravljaki izraz ima vrijednost TANO i izvrava se naredba continue, ime se preskau sve ostale naredbe u tijelu petlje. Ako uitani kd predstavlja cifru, upravljaki izraz ima vrijednost NETANO, pa se kd za obradu cifara izvrava. Petlja s izvrava sve dok se ne uita znak za novi red \n.Modul 2. Osnovne programske strukture8787 2.5.2.3 Petlja forAko je tijelo naredbe while veliko, moe da postane teko razumjeti upravljaku informaciju petle i s njom uspostaviti vezu. Upravljake promjenjive inicijaliziraju se negdje ispred naredbe while, a modifikacije tih promjenjivih obino su sakrivene unutar tijela petlje.Naredba for eliminie taj problem tako to upravljake informacije petlja smjeta na jedno mjesto, na vrhu naredbe petlje.Sintaksa for petlje:for (izraz1; izraz2; izraz3) naredbaSlika 2.5.3 pokazuje naredbu for sa tri upravljaka izraza. Izraz za testiranje uslova je izraz2. To odgovara upravljakom izrazu u while petlji. Vrijednost druga dva izraza odreuje se samo zbog njihovih bonih efekata, kao to su dodjela vrijednosti upravljakoj promjenjivoj ili inkrementiranje i dekrementiranje te promjenjive.Sl. 2.5.3 Grafiki prikaz izvravanja for petljePo ulasku u for petlju, odreuje se vrijednost izraza1, a zatim izvravanje ide na izraz za testiranje (izraz2). Ako je vrijednost izraz2 NETANO, petlja se zavrava, ako je ta vrijednost TANA, izvrava se naredba i tada se odreuje vrijednost izraz3, a prije nego to se vratimo na izraz za testiranje (ponovo izraz2). Vrijednost izraz1 odreuje se samo jedanput. Vrijednost ostalih izraza odreuje se pri svakom prolazu kroz petlju.Modul 2. Osnovne programske strukture8888Pisanje ekvivalentnih while i for petljiNaredba for se moe izraziti ekvivalentnom naredbom while, ali se upravljaka informacija rastura. Opti oblik naredbe while koji je ekvivalentan prethodnoj for naredbi je:izraz1;...while (izraz2){ naredba; ... izraz3;}Prema tome, ako je potreban samo test za kontrolu petlje, naredba while je dobar izbor. Ako program sadri osim testiranja i inicijalizaciju i modifikaciju upravljake promjenjive, najprikladnije je koristiti naredbu for.Primjeri programa koji koriste for petlju1.) Potrebno je analizirati rad programa#include int main(void){ int brojac = 1; for (int brojac = 0; brojac 0)putchar(ch);}/***************************************************************//*prikazivanje horizontalnog okvira*/void hokvir(int w){putchar(UGAO); /*prikai ugao*/znak(w - 2, HLIN); /*prikai horizontalnu liniju*/putchar(UGAO); /*prikai ugao*/putchar('\n'); /*prei u novi red*/}/***************************************************************//*prikazivanje tekstualne poruke u sredini*izmeu lijevog i desnog okvira*/void pisitekst(char poruka[]){/*prikai lijevi okvir*/putchar(VLIN);znak(SIROKV - 1, PRAZNO);/*prikai tekst u sredini*/printf("%s", poruka);/*prikai desni okvir*/znak(SIROKV - 1, PRAZNO);putchar(VLIN);putchar('\n');}/****************************************************************/Modul 3: funkcije, stringovi i datoteke109109 3.1.4 RekurzijaJezik C podrava rekurziju. Rekurzija predstavlja sposobnost da funkcija poziva samu sebe.Koritenje rekurzije, u nekim situacijama prua prednost tako to pojednostavljuje logiku rjeenja problema.Rekurzija se prirodno primjenjuje u sistemima za rad s fajlovima kao i u algoritmima za sortiranje.Rekurzija ima i negativne osobine kao to su preveliko koritenje steka i mogunost preoptereenja resursa raunarskog sistema. Primjer:Program rfakt rauna faktorijel nenegativnog broja koritenjem rekurzije. Faktorijel nenegativnog broja n simboliziran je izrazom n!. Vrijednost n! je proizvod uzastopnih cijelih brojeva izmeu 1 i n. Ako npr. n ima vrijednost 4, onda se 4! rauna kao 4*3*2*1, to daje 24. Ovo raunanje rekurzivno se moe predstaviti kao n*((n-1)!) za n>0 (0! se definie kao 1)./* *rfakt.c * *Izraunavanje faktorijela nekog broja primjenom rekurzije */#include "stdafx.h"#include #include #define BRCIF 10long faktorijel(short); /*prototip funkcije faktorijel*/Modul 3: funkcije, stringovi i datoteke110110int main(void){ char ulaz[BRCIF + 1];/*ulazni bafer*/ short broj;/*polazni broj*/ long rezultat;/*rezultat*//*pitaj korisnika za ulazne podatke i uitaj ih*/ printf("Otkucajte nenegativan cijeli broj + ENTER: "); gets_s(ulaz); broj = (short)atoi(ulaz);/*rekurzijom izraunaj faktorijel i prikai ga*/ rezultat = faktorijel(broj); printf("Faktorijel broja %hd je %ld!!\n\n", broj, rezultat); return EXIT_SUCCESS;}/******************************************************************************/long faktorijel(short n){/*deklariua definicija funkcije faktorijel*/ if (n max) max = a[i];/*ispisujemo maksimum*/printf("Max = %d\n", max);}7.) Prepraviti program tako da jedna funkcija uitava lanove u niz, a druga funkcija ispisuje lanove niza unazad.#include "stdafx.h"#include void main(){ int a[10]; for(int i = 0; i < 10; i++){ printf("a[%d]= ", i); scanf_s("%d", &a[i]);} printf("Unazad: \n\n"); for(int i = 9; i >= 0; i--) printf("a[%d]= %d\n", i, a[i]);}Modul 3: funkcije, stringovi i datoteke1171173.2 Stringovi 3.2.1 Pojam STRINGAU prethodnom modulu smo se upoznali s pojmom niza i rekli ta on u stvari predstavlja. U ovom modulu emo se upoznati s pojmom STRINGA i pojasniti nain njegovog definisanja i koritenja.Programski jezik C ne posjeduje tip podatka kojim moemo opisati string kao poseban tip ve se string formira pomou znakovnog niza. Moe se postaviti pitanje u emu je onda razlika izmeu stringa i niza znakova? Odgovor na ovo pitanje emo dobiti u nastavku.Definicija stringa:STRING predstavlja sekvencu karaktera ili simbola koji se nalaze izmeu dva navodna znaka. Sve to se nalazi izmeu para navodnih znakova kompajler interpretira kao string (ukljuujui i bilo koji specijalni znak ili prazno mjesto)Jedan od najeih primjera koritenja stringova je printf() funkcija u kojoj se poruka koju ona ispisuje definira kao string, npr.printf("This is a string.");printf("This is on\ntwo lines!");Ova dva primjera stringa prikazana su na slici 3.3. Decimalne vrijednosti kodova koji predstavljaju pojedine karaktere, a koje e biti pohranjene u memoriji, prikazane su ispod karaktera."This is a string."Modul 3: funkcije, stringovi i datoteke118118"This is on\ntwo lines!"Sl. 3.3 Primjer stringa u memorijiNa primjerima sa slike 3.3 vidimo na kraju svakog stringa specijalni znak \0 (engl. null character). Ovaj znak oznaava kraj stringa i za njega se mora predvidjeti mjesto prilikom deklaracije veliine niza koji e da sadri string. Kada kompajler tokom prevoenja programa doe do ovog znaka u stringu on smatra da je string zavren bez obzira ako se nakon \0 jo neto nalazi. Primjer:/* Prikaz stringa*/#include int main(void){ printf(Znak \0 se koristi da terminira string."); return 0;}Ako prevedemo i pokrenemo ovaj program dobiemo sljedei izlaz: ZnakFunkcija printf() e prekinuti s ispisom znakova nakon to kompajler doe do mjesta gje se nalazi \0 znak za terminiranje stringa.Modul 3: funkcije, stringovi i datoteke119119 3.2.2 Deklarisanje, inicijalizacija i upotreba stringovaKao to smo i prije napomenuli, programski jezik C nema tip varijable kojom se deklarie string. Za ovu svrhu koristimo niz tipa char. Ovo predstavlja najjednostavniji oblik string varijable. Kao to smo i prije nauili niz se deklarie na sljedei nain:char neki_niz[VELICINA_NIZA]; /* simbolika deklaracija */char string[20];/* stvarna deklaracija niza */Gore deklarisani niz moe sadravati string od 19 znakova jer je zadnje mjesto u nizu rezervirano za nul terminator (\0). Naravno, gore deklarisani niz se moe koristiti za spremanje obinog niza od 20 znakova koji ne predstavljaju string (jer u tom sluaju nema \0 znaka pa moemo staviti jedan znak vie). NAPOMENA:Potrebno je zapamtiti da uvijek moramo deklarisati veliinu niza koji emo koristiti za spremanje stringa za bar jedno mjesto vie zbog toga to e kompajler automatski dodati znak \0 na kraju svakog stringa. String se takoe moe definisati i na sljedei nain:char string[] = "Ovo je string.";U ovom primjeru vidimo da nema eksplicitno navedene veliine niza u koji spremamo string. Umjesto nas ovaj posao e automatski odraditi kompajler.Takoe, isto tako se moe inicijalizirati samo dio niza sa stringom:char string[40] = "Ovo je";U ovom sluaju e kompajler inicijalizirati samo prvih 6 karaktera (od string[0] do string[5]) dok e string[7] sadravati znak \0.Modul 3: funkcije, stringovi i datoteke120120Inicijalizacijom znakovnog niza i deklarisanjm njegove vrijednosti kao konstante, onemoguili smo njegovu modifikaciju u programu. Ovo predstavlja dobar nain za definisanje poruka koje ne bi trebalo mijenjati, npr.const char poruka[] = "Ovo nije kraj svijeta";Svaki pokuaj da se promijeni ovako definisan string rezultirae grekom kompajlera.Ukoliko elimo da prikaemo sadraj nekog stringa koji smo pohranili u neki niz, jednostavno koristimo funkciju printf() na sljedei nain:printf("\Poruka je: %s", poruka);%s specifikator slui za prikaz null-terminiranog stringa. Na mjestu gdje se %s pojavljuje , printf() funkcija e sukcesivno ispisivati znakove iz stringa poruka sve dok ne doe do \0 znaka.PRIMJER: U sljedeem primjeru odrediemo duinu dva stringa koja su spremljena u dva niza:/* duzina_stringa.c*/#include "stdafx.h"#include int main(void){ char string1[] = "Biti ili ne biti"; char string2[] = ",pitanje je sad"; int brojac = 0; while (string1[brojac] != '\0') brojac++; printf("\nDuzina stringa \"%s\" je %d karaktera.", string1, brojac);Modul 3: funkcije, stringovi i datoteke121121 brojac = 0; while (string2[brojac] != '\0')brojac++; printf("\nDuzina stringa \"%s\" je %d karaktera.\n", string2, brojac); return 0;} 3.2.3 Mnipulacija sa stringovimaNAPOMENA: size_t je unsigned integer tip sastavljen od najmanje 16 bitova i definiran je sa nekoliko C/C++ standarda (C99 ISO/IEC 9899 standard)U standardnoj biblioteci postoji niz funkcija za manipuliranje sa stringovima. One su deklarirane u datoteci "string.h". Nabrojaemo najvanije od njih.Funkcija strlensize_t strlen(const char *str) rauna duinu stringa str do znaka za treminiranje stringa (ne ukljuuje znak za treminiranje). preko ovog parametra ovo je string iju duinu traimo vraa se duina stringaPRIMJER: Sljedei primjer pokazuje upotrebu funkcije strlen#include #include int main(){ char str[50] = "Ovo je podugacak string" ; int duzina; duzina = strlen(str); printf(Duzina|%s| je |%d|\n", str, duzina); return 0;}Modul 3: funkcije, stringovi i datoteke122122Funkcija strcpychar *strcpy(char *dest, const char *source)- kopira string na koji pokazuje source (izvorni string) u dest (destinacijski string). vraa adresu destinacijski string izvorni stringdestinacijskog stringa (kopija izvornog stringa)PRIMJER: Sljedei primjer pokazuje upotrebu funkcije strcpy#include #include int main(){ char src[40] = "(Ovo je kopirano u) -> dest!!"; char dest[100]; strcpy_s(dest, src); printf("Kopirani string: %s\n", dest); return 0;}Funkcija strcatchar *strcat(char *dest, const char *source) dodaje string na koji pokazuje source na kraj stringa na koji pokazuje dest. vraa adresu rezultirajui izvorni stringdestinacijskog stringa string na koji je dodan source stringModul 3: funkcije, stringovi i datoteke123123PRIMJER: Sljedei primjer pokazuje upotrebu funkcije strcat#include #include int main (){ char src[50], dest[50]; strcpy_s(src, Ovo je izvor"); strcpy_s(dest, Ovo je destinacija"); strcat_s(dest, src); printf(Rezultujui string : |%s|", dest); return 0;}Funkcija strcmpint strcmp(const char *str1, const char *str2) - Usporeuje string str1 sa stringom str2, vraa str2. Usporedba je leksikografska, prema ASCII "abecedi".vraa vrijednosti ili = 0prvi string koji drugi string koji u zavisnosti od rezultata poreenja se poredi se porediModul 3: funkcije, stringovi i datoteke124124PRIMJER: Sljedei primjer pokazuje upotrebu funkcije strcmp#include #include int main(){ char str1[15], str2[15]; int ret; strcpy_s(str1, abcdef"); strcpy_s(str2, "ABCDEF"); ret = strcmp(str1, str2); if(ret > 0) printf("Ret je = %d, a str1 je vei od str2\n", ret); else if(ret < 0) printf("Ret je = %d, a str1 je manji od str2\n", ret); else printf("Ret je = %d, a str1 je jednak str2\n", ret);return 0;}NAPOMENA: Postoje jo mnogobrojne funkcije za rad sa stringovima, a koje su sastavni dio standardne biblideke, meutim zahtijevaju intenzivnu upotrebu pokazivaa. Iz tog razloga emo ih ovaj put zaobii. To nikako ne znai da uenici koji ele da proire svoje znanje iz programiranja ne trebaju da se upoznaju s tim funkcijama.Modul 3: funkcije, stringovi i datoteke125125PRIMJER: U ovom primjeru emo objediniti koritenje gore navedenih funkcija za manipulaciju stringovima unutar jednog programa. Program dobavlja liniju po liniju teksta sve dok se ne otkuca: "kraj". Nakon toga se ispisuje ukupno uneseni tekst.#include #include #include #define MAXCH 2000int main(){ char str[100]; /*string u koji se unosi jedna linija teksta*/ char text[MAXCH]; /*string u koji se zapisuje ukupno uneseni tekst*//*iniciraj string text sa sljedeim tekstom*/ strcpy_s(text, "Unijeli ste tekst:\n"); puts("Otkucajte nekoliko linija teksta."); /*informiraj korisnika*/ puts("Za kraj unosa otkucajte: kraj"); /*kako se vri unos*/ while(gets_s(str) != NULL){ /*dobavljaj string*/ if(strcmp(str, "kraj") == 0) /*prekini unos ako je otkucan "kraj"*/ break;/*prekini unos ako je duina teksta premaila veliinu MAXCH*/ if((strlen(str) + strlen(text)) >= MAXCH) break; strcat_s(text, str); /*dopuni ukupan text sa str*/ strcat_s(text, "\n"); /*i oznai novi red*/ } puts(text); return 0;}Modul 3: funkcije, stringovi i datoteke126126Najjednostavniji nain dobave i ispisa stringa je da se koriste printf() i scanf() funkcije s oznakom formata %s. Npr, sa: char line[100];scanf("%s",str);printf("%s", str); najprije se vri unos stringa (korisnik otkuca niz znakova i ). Zatim se vri ispis tog stringa pomou printf()funkcije.Funkcija scanf() nije pogodna za unos stringova u kojima ima bijelih znakova, jer i oni znae kraj unosa, stoga se za unos i ispis stringa ee koriste funkcije:char *gets(char *str);int puts(char *str);Funkcija gets() dobavlja liniju teksta sa standardnog ulaza (unos se prekida kada je na ulazu '\n') i sprema je u string str, kojeg zakljuuje s nul znakom (\0). Podrazumijeva se da je prethodno rezervirano dovoljno memorije za smjetaj stringa str. Funkcija vraa pokaziva na taj string ili NULL ako nastupi greka.Funkcija puts() ispisuje string str na standardni izlaz. Vraa pozitivnu vrijednost ili -1 (EOF) ako nastupi greka. Jedina razlika izmeu funkcije printf("%s", str) i puts(str) je u tome da funkcija puts(str) uvijek na kraju ispisa dodaje i znak nove linije.ANALIZA PROGRAMSKOG KDAPoetno je string text inicijaliziran na nain da je u njega kopiran string "Unijeli ste tekst:\n" pomou funkcije strcpy(). Kasnije se taj string dopunjuje sa sadrajem stringa str koje unosi korisnik programa u petlji:while (gets(str) != NULL )U tijelu petlje prvo se ispituje sadraj unesenog stringa. Ako je unesen string "kraj", petlja se prekida. To se ispituje iskazom:if(strcmp(str, "kraj") == 0) break;Dopuna stringa text vri se iskazima:strcat(text, str); /* dopuni ukupan tekst sa str*/strcat(text, "\n"); /* i oznaci novi red */Za string tekst je rezervirano MAXCH(2000) bajta, to je vjerojatno dovoljno za prihvat teksta. Ako se pokua unijeti vie znakova, unos se prekida iskazom:if(strlen(str) + strlen(text) >= MAXCH) break;Na kraju se ispisuje string text, koji sadri ukupno otkucani tekst.Modul 3: funkcije, stringovi i datoteke127127Zadaci za uenike koji ele dodatno proiriti znanje o stringovima:zadatak: Modificirajte prethodni program na nain da se program prekine i u sluaju ako se bilo gdje unutar unesenog stringa nalazi rije "kraj". U tu svrhu koristite funkciju strstr().zadatak: Modificirajte prethodni program na nain da se na kraju programa ispie koliko ukupno ima rijei u stringu tekst s vie od tri slova. U tu svrhu koristite funkciju strtok() i strlen().Rijeeni primjeri:Primjer: Program koji u datom stringu utvruje broj pojavljivanja znaka 'a'.#include "stdafx.h"#include int brojanjeZnaka(char znak, char s[]); /*prototip funkcije*/int main(){ int ukupno; char izraz[] = "JU Mjesovita srednja elektrotehnicka i drvopreradjivacka skola Bihac"; printf("Dati string je: %s\n", izraz); ukupno = brojanjeZnaka('a', izraz); printf("Broj pojavljivanja znaka 'a' u datom stringu: "); printf("%d\n", ukupno);}/*deklariua definicija (tijelo) funkcije*/int brojanjeZnaka(char znak, char s[]){ int suma = 0, i = 0; /*brojai*/ while(s[i] != '\0'){ if(s[i] == znak) /* poredjenje trenutnog znaka za datim znakom*/suma++; /* uveaj broja za pogoeni znak*/i++; /* predji na sljedeci karakter stringa*/ } return suma;}Modul 3: funkcije, stringovi i datoteke1281282. Primjer: Program za ispisivanje prvih k ili posljednjih k znakova datog stringa#include "stdafx.h"#include #include void lijevi(char s[], int k);void desni(char s[], unsigned int k);int main(){ char izraz[] = "JU Mjesovita srednja elektrotehnicka i drvopreradjivacka skola Bihac"; printf("Dati string je: %s\n", izraz); printf("Prvih 18 znakova datog stringa je: "); lijevi(izraz, 18); printf("Posljednjih 14 znakova datog stringa je: "); desni(izraz, 14); }void lijevi(char s[], int k){ int i = 0; while(k){ putchar(s[i]);i++;k--; } putchar('\n');}void desni(char s[], unsigned int k){ int i = strlen(s) - k - 1; if(strlen(s) >= k){while(s[i] != '\0'){ i++; putchar(s[i]);} putchar('\n'); } elseputs(s);}Modul 3: funkcije, stringovi i datoteke129129Zadaci za vjebu:1.) Modificirati prethodna dva programa tako da od korisnika trae unos ulaznih podataka koji su bitni za rad programa.2.) Napisati program koji uitava dva stringa, spaja ih u jedan string i prikazuje dobiveni rezultat.3.) Napisati program koji ispisuje uneseni stringu obrnutim redoslijedom.4.) Napisati program koji izbacuje sve praznine (razmake) u uitanom stringu i pokazuje dobiveni rezultat.5.) Napisati program koji iz stringa izbacuje samoglasnike.6.) Napisati program koji provjerava je li uneseni string palindrom.Modul 3: funkcije, stringovi i datoteke1301303.3 Datoteke (FAJLOVI)Ukoliko bi raunar koji radi s nekim od programa mogao da obrauje podatke koji se nalaze samo u RAM memoriji (to je sluaj sa svim programima koje smo do sad pisali), takavi programi ne bi imali puno smisla jer ne posjeduju mogunost da sauvaju promjene koje su uradili nad odreenom grupom podataka.Kao to je poznato iz svakodnevne prakse, svaka ozbilnjija aplikacija zahtijeva zapis podataka na dikove ili druge spremike podataka u vidu (HDD, USB Flash, CD, DVD...) FAJLOVA kojima se moe pristupiti i nakon to program prestane s radom.Programski jezik C posjeduje niz funkcija koje se nalaze standarnom zaglavlju , a koje slue za pisanje ili itanje sa eksternih ureaja (svi ureaji osim RAM memorije). Napomena: svi programi koji e biti koriteni u ovom poglavlju radie iskljuivo s HDD-om. 3.3.1 Koncept FAJL-aU svim dosadanjim primjerima, bilo koji podatak koji korisnik unese dok se program izvrava, bie obrisan nakon to se program prestane izvravati. Ukoliko se taj program ponovo eli koristiti s tim istim podacima, korisnik ih mora ponovo unijeti. Npr. ako napravimo program iji je zadatak da obrauje podatke iz telefonskog imenika (ime, prezime, adresa, br. telefona..), i ukoliko nema mogunost da te podatke spremi u fajl, postavlja se pitanje da li tako koncipiran program ima smisla?. Navjerovatnije nema, jer bi smo svaki put morali unositi podatke o svim korisnicima telefonskih usluga, a to nije dobra praksa u programiranju.Odgovor na ovakav problem bi bio da se svi gore navedeni podaci spreme u FAJL koji se sprema na HDD i svi zapisi u njemu ostaju trajni. Svaki put kada porkrenemo program on na raspolaganju ima te podatke isitavajui ih iz FAJLA. Logino je onda postaviti pitanje ta je to FAJL.? FAJL predstavlja dio izdvojenog prostora na eksternom ureaju u koji se spremaju podaci koje program koristi. On ima svoje ime, tip i veliinu. FAJL u stvari predstavlja serijsku sekvencu bajtova kao to je prikazano na slici 3.4. trenutna pozicija - 2 poetak fajlatrenutna pozicija = poetak fajla + 4 kraj fajla (End Off File-EOF)Sl. 3.4 Struktura fajlaBajt 0Bajt 1Bajt 2Bajt 3................. Bajt nModul 3: funkcije, stringovi i datoteke131131Fajl ima svoj poetak, kraj i trenutnu poziciju koja je definisana kao broj bajtova od poetka fajla. Trenutna pozicija je mjesto u fajlu na kojem se obavlja trenutna operacija (pisanje u fajl ili itanje iz fajla). Trenutnu poziciju moemo pomjeriti na bilo koji dio fajla. Nova trenutna pozicija moe biti specificirana kao pomak (engl. offset) od poetka fajla ili u nekim sluajevima kao pozitivni ili negativni pomak od prethodne trenutne pozicije.Tok fajla (engl. file stream)C biblioteke posjeduju funkcije koje znaju da rade s tokovima podataka (engl. data streams). Tok (engl. stream) predstavlja abstraknu prezemtaciju bilo kojeg eksternog izvora ili odredita za podatke (tastatura, komandna linija, monitor, fajlovi na disku...). Prilikom rada s tokovima, koristimo iste funkcije za itanje ili upis na bilo koji od eksternih ureaja (izvora ili odredita) koji su dodijeljeni toku.Postoje dva naina za upis podataka u tok:fajl se moe zapisaati kao tekstualni u ovom sluaju podaci se u fajl upisuju kao karakteri organizirani u linije gdje je svaka linija terminirana sa znakom za novi red (\n).fajl se moe spremati kao binarni u ovom sluaju podaci se upisuju kao serija bajtova, tano onako kako su zapisani u memoriji,, bez znaka za novi red 3.3.2 Pokaziva na fajlAko elimo da koristimo neki spoljanji fajl u C programu, fajlu je potrebno pridruiti neki tok. Ovaj zadatak pretpostavlja deklarisanje promjenjive zvane pokaziva na fajl i davanje vrijednosti toj promjenjivoj. Vrijednost koja se dodjeljuje dobiva se pozivom funkcije koja pokuava da otvori specificirani fajl. Gledano sa strane korisnika, fajl ima svoje ime i vjerovatno neki sadraj. Sa strane programa, fajl prestavlja tok bajtova kojem se pristupa preko pokazivaa na fajl.Pokaziva na fajl je POKAZIVA. Ispravan pokaziva na fajl pokazuje na jednu STRUKTURU podataka koja je tipa FILE, napravljena naredbom typdef u zaglavlju . Promjenjiva tipa FILE sadri lanove koji uvaju sve podatke potrebne za upravljanje odgovarajuim tokom.Deklaracija promjenjive pf koja je pokaziva na fajl izgleda ovako:FILE *pf;Ova deklaracija prati ablon svih ostalih deklaracija koje smo koristili do sad. Ako ovu deklaraciju itamo unazad, dobijemo da je pf ime promjenjive, koja je pokaziva (*) na objekat tipa FILE.Modul 3: funkcije, stringovi i datoteke1321323.3.3 Pristup fajluNakon to deklariemo pokazivaku promjenjivu na fajl pf, sljedei korak je otvaranje fajla radi pristupa. Funkcija fopen() pokuava da otvori imenovani fajl i pridruuje mu tok oznaen pokazivakom promjenjivom. Ova funkcija dje deklarisana u i ima sljedei oblik:FILE *fopen(const char *filename, const char *mode);Napomena: kvalifikator tipa const u ovom kontekstu znai da funkcija ne pokuava da promijeni vrijednosti koje su joj predate kao argumenti.Argument filename je znakovni niz koji sari ime fajla koji treba otvoriti. Argument mode je znakovni niz koji opisuje nain pristupa i poinje znakovima prikazanim u tabeli 3.1.Sl.3.1 Kodovi mode argumentaModeOpisrOtvaranje tekstualnog fajla za itanjewKreiranje tekstualnog fajla za upisaOtvaranje ili kreiranje tekstualnog fajla za dopisivanjerbOtvaranje binarnog fajla za itanjewbKreiranje binarnog fajla za upisabOtvaranje ili kreiranje binarnog fajla za dopisivanjer+Otvaranje tekstualnog fajla za auriranje (itanje ili upis)w+Kreiranje tekstualnog fajla za auriranjea+Otvaranje ili kreiranje tekstualnog fajla za auriranje (upis ide na kraj)Modul 3: funkcije, stringovi i datoteke133133Znakovni nizovi koji sadre slovo b odnose se na rad sa binarnim fajlovima.Opisi naina pristupa koji sadre a+ na drugom ili treem mjestu nazivaju se nainima auriranja. Auriranje znai da fajl moe da se ita ili da se u njega u moe da upisuje sve dok se javljaju pozivi funkcija za pozicioniranje unutar fajla. Funkcije za pozicioniranje untar fajla su fseek(), fsetpos() i rewind().Iz poziva fopen() normalno se vraa jedan pokaziva na fajl koji moe da se dodijeli pokazivakoj promjenjivoj. Ako navedeni fajl ne moe da se otvori, fopen() vraa NULL da pokae da je u pitanju greka. Ne bi se trebalo preskakati provjere na greke prilikom pristupanja fajlovima jer to predstavlja veoma vaan indikator moguih nepravilnosti u radu programa. Npr, greku predstavlja pokuaj da se proita znak iz fajla koji nije mogao da bude otvoren. Isto tako greka je i pokuaj upisa u takav fajl.Primjer: program listfajl.c pokazuje kako se u programskom jeziku C vri prikazivanje sadraja fajla na standardni izlaz./*listfajl.c*Prikazivanje sadraja fajla na standardni izlaz*/#include "stdafx.h"#include #include #define MAXPUT 128int main(){ int zn; char ime[MAXPUT]; FILE *pf; /*Uitaj od korisnika ime fajla*/ printf("Ime fajla: "); gets(ime); /*provjeri ime i pokuaj da otvori fajl*/ if (ime[0] == '\0'){ fprintf(stderr, "Nije unijeto ime\n"); exit(EXIT_SUCCESS); } pf = fopen(ime, "r"); if (pf == NULL){ fprintf(stderr, "Otvaranje %s nije uspjelo.\n", ime); exit(EXIT_SUCCESS); } /*prikai sadraj fajla*/ while ((zn = fgetc(pf)) != EOF) putchar(zn); return 0;}Modul 3: funkcije, stringovi i datoteke134134Analiza programa:Program listfajl.c deklarie pokaziva na fajl, pita korisnika za ime fajla i pokuava da otvori fajl. Ako otvaranje uspije, program ita znakove iz specificiranog fajla i prikazuje ih na standardni izlazni tok. Ako ne moe da otvori fajl, prikazuje poruku o greci i izlazi sa indikacijom neuspjeha.Program testira ime fajla tako to posmatra njegov prvi znak. Ako je to nulti znak, korisnik je pritisnuo ENTER bez kucanja imena, pa program listfajl prikazuje poruku i izlazi. Izlazni kd ne ukazuje na greku jer greke nije ni bilo. if (ime[0] == '\0'){ fprintf(stderr, "Nije unijeto ime\n"); exit(EXIT_SUCCESS); }Funkcijom fopen() otvaramo fajl tako to joj aljemo dva argumeta, prvi argument je ime fajla,a drugi argument je mod otvaranja fajla (u ovom sluaju fajl se samo otvara za itanje). Vrijednost koju vraa funkcija fopen(), smjeta se u pokaziva pf, koji se provjerava u naredbi if. Ako je vrijednost pf pokazivaa NULL, otvaranje nije uspjelo. U suprotnom, pf je ispravan pokaziva.pf = fopen(ime, "r"); if (pf == NULL){ fprintf(stderr, "Otvaranje %s nije uspjelo.\n", ime); exit(EXIT_SUCCESS); }Pomou funkcije fgetc() i naredbe while(), vri se itanje znakova iz fajla sve dok se ne doe do njegovog kraja. Funkcija fgetc()ima jedan parametar koji specificira tok sa kojeg se ita. Ona vraa cijeli broj, tako da moe dati ispravne znakove ili indikator kraja fajla (EOF). while ((zn = fgetc(pf)) != EOF) putchar(zn);3.3.4 Upisivanje u fajlU prethodnom primjeru smo vidjeli na koji nain se moe pristupiti podacima koji su zapisani u tekstualni fajl i kako se ti podaci prikazuju preko strandardnog izlaznog toka.U narednom primjeru pokuaemo izvriti upis nekog teksta u fajl. Razlika izmeu programa listfajl.c i pisifajl.c je minimalna i treba je detaljno pruiti.Modul 3: funkcije, stringovi i datoteke135135 Primjer: program pisifajl.c pokazuje kako se u programskom jeziku C vri upis sadraja u fajl./* pisifajl.c * upis sadraja u fajl */#include "stdafx.h"#include #include #define MAXPUT 12