osnove racunarstva- materijal za prvu parcijalu- predavanja i tutorijali

Upload: etfunsa

Post on 09-Jul-2015

591 views

Category:

Documents


6 download

TRANSCRIPT

A-PDF Merger DEMO : Purchase from www.A-PDF.com to remove the watermark

Cilj predmeta

Cilj predmeta: jp

OSNOVE RAUNARSTVA 2010/2011

Osnovni cilj ovog predmeta je upoznavanje studenata sa baznim konceptima iz raunarstva to prije svega ukljuuje pristupe rjeavanju problema primjenom algoritamskog pristupa. Ovaj cilj e se prije svega realizirati upozavanjem sa osnovama programiranja u programskom jeziku C.

Doc.dr. Haris upi

Sadraj predmeta (ukratko)Obavezna literatura: Uvod: U d metode i analize rjeavanja problema, algoritmi t d li j j bl l it i

Literatura

1. Biljeke l jd i 1 Bilj k i slajdovi s predavanja (biti d t d j e dostupni na web stranici predmeta: i b t i i d t http://c2.etf.unsa.ba/

Programski jezik C: sintaksa funkcije kontrola toka programa nizovi sintaksa, funkcije, programa, nizovi, pokazivai, strukture, modularnost, biblioteke, rad s datotekama. Pregled nekih od osnovnih koncepata u raunarstvu: brojni sistemi, osnovi Booleove algebre, osnovni pojmovi iz arhitektura raunara, struktura i rad procesora, sabirnice i registri, RAM i ROM memorije, ulaz i izlaz, periferne memorije,struktura i organizacija programa, sistemski softver, operativni sistemi Vana napomena: Kljuni i najvaniji dio predmeta je dio koji se odnosi na upoznavanje sa osnovama programiranja u programskom jeziku C. 2. Skripta: M. Jurak, Pogramski jezik C, http://www.phy.hr/~tniksic/FI/materijali/C.pdf Ostala literatura (ovisno o zainteresiranosti studenata) 1. Brian W. Kernighan, Dennis M. Ritchie, C Programming Language, Prentice Hall g , , g g g g , Inc., 1988. 2 .Al Kelley, Ira Pohl, A Book on C, Addison-Wesley. 3. Mark Burel, Fundamentals of Computer Architecture, Palgrave Macmillan, 2003.

Prisustvo predavanjima, vjebe i ispiti prisustvo predavanjima i vjebama je obavezno j prisustvo predavanjima max. 10 bodova izrada domaih zadaa max 10 bodova I parcijalni ispit max 20 bodova II parcijalni ispit max 20 bodova Student sa najmanje 40 bodova pristupa zavrnom ispitu koji nosi max. 40 bodova (za pozitivnu ocjenu minimalno 20 bodova) 20 40 bodova tijekom semestra popravni ispit iz tema koje 20-40 b d tij k t i i it i t k j student nije poloio parcijalnim ispitima. Usmeni popravni ipit donosi maksimalno 40 bodova a za bodova, pozitivnu ocjenu potrebno je minimalno 20 bodova. Student koji ne zadovolji na popravnom ispitu ponovno upisuje predmet.

Kako postii uspjeh na ovom predmetu?Redovno dolazite na predavanja i vjebe. Na predavanjima i vjebama ete: Razumjeti i usvojiti pojmovni sistem relevantan za ovaj predmet Nauiti i razumjeti temeljne koncepte iz oblasti raunarstva i informatike Stei vjetinu implementacije jednostavnih programskih rjeenja u programskom jeziku C Nauiti razlikovati bitno od nebitnog. Obavezno k ti i Ob kontinuirano itajte i prouavjte preporuenu obaveznu literaturu (biljeke + preporuena it jt jt b lit t (bilj k skripta) Prisustvo predavanjima je izuzetno vano, ali nije dovoljno za potpuno savladavanje koncepata obraenih na predavanjima. Zato je vrlo vano da student kontinuirano ita i prouava obaveznu preporuenu literaturu. j j j Redovno dolazite na vjebe i samostalno rjeavajte zadatke. Kljuna aktivnost koja e vas voditi uspjenom polaganju predmeta je da samostalno ili timski ako je to potrebno rjeavate postavljene zadatke. Zadatke koje ne uspijete rijeiti na vjebama, potrudite se da ih rijeite obavezno kod kue vjebama Redovno i samostalno radite domae zadae Ukoliko je potrebno dodatno proitajte potrebne segmente iz drugih izvora ( literatura WWW, ...) literatura, WWW )

Kako neete postii uspjeh na ovom predmetu?Ne moete oekivati da ete poloiti predmet ako: Ne radite samostalno domae zadae Ne trudite se da samostalno rjeavate zadatke na vjebama Ne it t b N itate obaveznu literaturu lit t Ne dolazite redovno na predavanja i vjebe Ne sluate paljivo predavanja i aktivno uestvujete u nastavi, Ne uestvujete aktivno na vjebama i to je mogue vie zadataka rjeavate samostalno Krenete uiti predmet nekoliko dana prije ispita

Sadraj predavanja P01

Uvod (Povijesni pregled, Turingova maina,...) Pojam i svojstva algoritma Vremenska kompleksnost Programiranje, kompajliranje, greke S k Struktura C programa i uvodni opis d i i Osnovno o varijablama Osnovno o ulazu i izlazu Stil pisanja programa i upotreba komentara

Obavezno itanje literature: Skripta : strane: 8-9, 13-15

ABACUS

Muhamed ibn Musa al Horezmi

arapski matematiar koji je ivio u devetom stoljeu jedan od najcjenjenijih matematiara svih vremena t ti ih Izumljen u Kini prije 3000 godina; j p j g ; Kolone su podijeljene u dva reda Kuglice Kuglice u gornjem dijelu imaju vrijednost 5, dok kuglice u donjem redu imaju vrijednost 1. Jo uvijek je u upotrebi Smatrao je da se matematiki problemi mogu rjeavati upotrebom pravilnog niza koraka

Muhamed ibn Musa al Horezmi (nastavak) Blaise P Bl i Pascal l (1623-1662) Francuski matematiar i filozof Osmislio mehaniki raunar (PASCALINE) Raunar se sastojao od zupanika koji su bili oznaeni ciframa 0 do 9

u svojoj knjizi na arapskom jeziku je opisao pravila za obavljanje aritmetikih operacija nad brojevima zapisanim u dekadskom sistemu. sistemu Original te knjige je izgubljen, ali postoji prijevod na latinski. U l ti k latinskom prijevodu isperd svakog pravila pie: ij d i d k il i Dixit Algorizmi to je u prijevodu: Algorizmi je govorio zadnji dio imena al Horezmi pretvoren je u Algorizmi postepeno Algorizmi je govorio se pretvara u algoritam glasi U poetku su se pd pojmom algoritma podrazumijevala samo pravila za raunanje brojevima j b j i Danas se pod algoritmom podrazumijevaju pravila za obavljanje zadataka u razliitim oblastima, a najee u raunarstvu. oblastima raunarstvu

Charles Babbage (1791-1871) Osmislio koncept maine koju je nazivao analitika maina Maina je imala procesni dio i memoriju.

Alan Turing (1912-1954) Engleski matematiar i filozof 1936 objavljuje rad u kojem opisuje j j j g mainu koja kasnijeje nazvana Turing-ova maina. Turingova maina jedan od kljunih koncepata u modernoj teoriji raunarstva

Neformalni opis Turingove maine

Turingova maina se sastoji od trake, glave za itanje i pisanje i programa. Traka je neograniene duljine i sadri konaan broj simbola Glava ita simbole s tarke i u ovisnosti o stanju maine moe upisati novi simbol preko trenutnog, moe promijeniti trenutno stanje i moe i i b l k t t ij iti t t t j pomjerati glavu lijevo ili desno Program se sastoji od instrukcija. g j j Turingova maina moe rjeavati zadatke kao i dananji raunari.

Formalna matematika definicija Turingove maineTuringova maina TM je 7-orka:

Grafiki prikaz znaenja preslikavanja

TM = ( Q, , , q0, b F, ) Q b, FQ X q0 b F j je konaan skup stanja p j je konaan skup simbola, ulazni alfabet je konaan skup simbola koji se mogu pojaviti na traci,

Si

Sj

x y z

t

y z

= {b} Xje dodatni skup simbola koje maina moe pisati na traci je poetno stanje, q0Q je poseban simbol koji oznaava blank, b je skup f finalnih stanja, FQ je preslikavanje : S G S G {L, R, S}

: S G S G {L, R, S}(Sj, t R) = (Si, x) t, TM se nalazi u stanju Si, ita na traci simbol x, na njegovo mjesto pie simbol t i pomjera glavu t u desno.

(L-lijevo, R-desno, S (L se mogu nai S- ostaje na mjestu) U literaturilijevo R desnoi malo drugaije formalne definicije TM, ali je bitno da sve definicije opisuju mainu istih mogunosti.

Graf stanja Turingove maine Alternativni nain prikaza neke konkretne TM je pomou grafa stanja. stanja Na grafu stanja TM preslikavanje prikazujemo na slijedei nain:x t, L S0 ,L

Primjer Turingove maine Primjer TM koja binarnom broju na traci dodaje broj 2. S0 Na poetku i na kraju je glava pozicionirana na prvom simbolu.11, R 11, L 10, L 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1

S0 S0

S1

00, L

S21, S 1

S0 S1 ,R

Si (Sj, t, L) = (Si,x)

Sj00, R 00, L

01, L

Nain rada TM moemo prikazati i upotrebom instrukcija TM. I t k ij TM su slijedee 5-torke: Instrukcije lij d 5 t k

2(10) = 10(2) 5(10) = 101(2) 7(10) = 111(2)

S3

S4

S2 S3

11, L

x, t, L, >.

S3 S4

Graf t j G f stanja sadri svih sedam elemenata koji d i ih d l t k ji definiraju TM

Pregled razvoja u zadnjih 60 godina(1/3)

Pregled razvoja u zadnjih 60 godina(2/3)

ABC raunar, 1939. godina. Raunar je razvijen na Iowa State University i nije do kraja zavren. ( ) John von Neumann (1903-1957) Predloio arhitekturu i organizaciju raunara koja predstavlja temelj i dananjih raunara. 1945 je razvio raunar EDVAC (eng. Electronic Discrete Variable Automatic Computer) 1943 razvijen raunar ENIAC (eng. Electronic Numerical Integrator and Computer) Raunar se sastojao od preko 17 000 elektronskih cijevi, bilo je teko oko 30 tona i zauzimalo prostoriju od oko 150 kvadratnih metara t

1947 g. i izumljen t lj tranzistor i t 1959 g. Jack Kilby napravio prvi integrirani sklop 1971 g Intelov procesor 4004 g. 1973 g. prvi personalni raunar, Xerox Alto (8 bitni 1973 g. Intelov procesor 8080 (8-bitni mikroprocesor) 1976 g. Apple I g ( ) 1977 g. Raunar VAX(DEC), 32-bitni raunar 1979 g. Control Data Corporation, super raunar Cyber 203

Pregled razvoja u zadnjih 60 godina(3/3)

Pojam algoritma U svakodnevnom ivotu pri obavljanju razliitih poslova izvodimo razliite operacije

1981 Pojavio se operacijski sistem MS-DOS MS DOS 1982 Intelov procesor 80 286 1984 Macintosh 1985 32-bitni Intelov mikroprocesor Intel 386 1985 Operacijski sistem Microsoft Windows 1989 Intelov proceror 486, imao matematiki koprocesor 1993 Intel Pentium 1997 Intel Pentium II 1999 Intel Celeron i Intel Pentim III 2000 Intel Pentium IV I t l P ti 2001 prvi 64 bitni Athlon procesor

nekim zadanim redoslijedom. j Algoritmi se mogu opisati prirodnim govornim jezikom. Onaj ko izvrava taj algoritam (izvritelj algoritma) mora poznavati taj jezik jezik. Druga mogunost opisa algoritama je pomou programskih jezika koji zapravo predstavljaju umjetne jezike jezike. Programski jezici omoguuju zapis algoritama na saet, pregledan, precizan i jednoznaan nain nain. Raunari pri obavljanju zadataka mogu obavljati samo vrlo jednostavne korake. Jezik koji slui za opis algoritama za obavljanje elementarnih operacija koje moe obaviti raunar naziva se mainski jezik.

Svojstva algoritama Za svaki algoritam moraju jasno biti definirani poetni objekti. Algoritam mora sadravati konaan broj koraka koji pokazuje redoslijed operacija koje treba izvesti nad nekim poetnim objektima kako bi na kraju dobili zavrne objekte, odnosno, rezultate. Pri oblikovanju programskog koda svaki korak zamjenjujemo odgovarajuom naredbom (i db (instrukcijom). k ij ) Izvravanje algoritma se naziva algoritamski proces. U toku izvravanja algoritamskog procesa i postupnog oblikovanja zavrnih objekata esto se koriste i neki meurezultati. Postupci izgradnje algoritama nisu jednoznani. Izgradnja algoritama zahtijeva kreativnost.

Primjer algoritma (zbrajanje prvih n prirodnih brojeva)

Ovaj algoritam je opisan pomou Ulaz (n) Suma: 0; Suma:=0; za i:= 1 do n raditi Suma:=Suma+i; vrati (Suma)rijei iz naeg prirodnog jezika. Ovakav zapis algoritma predstavlja pseudokod. Opis je dovoljno precizan da se moe vidjeti nain rjeavanja zadatka. Ipak, opis je manje precizan nego da isti algoritam imamo kodiran u nekom programskom jeziku.

Prednost slinih zapisa algoritama je u injenici da naunici inenjeri i svi koji naunici,koriste razliite algoritme mogu meusobno razmjenjivati ideje koje algoritmi u sebi nose a da ne poznaju neki konkretan vii programski jezik jezik.

Jo jedan algoritam za sabiranje prvih n prirodnih brojeva

Vremenska kompleksnost(1/2) Pored ispravnosti algoritma vano svojstvo algoritma je i trajanje algoritamskogprocesa. Trajanje algoritamskog procesa izraavamo kao broj osnovnih operacija koje algoritam treba izvesti. Za izvoenje svake operacije potrebno je neko vrijeme. P t Potpuno precizna analiza svih algoritama sa aspekta t j j algoritamskog procesa i li ih l it kt trajanja l it k je nemogua.

Suma= 1 + 2 + 3 + 4+ + n-3+ n-2 + n-1+n Svaki par brojeva ima sumu n+1; Ima n/2 takvih parova parova. Suma = n / 2 (n+1)

drugi algoritam za sabiranje prvih n brojeva

ulaz (n) Suma=n/2(n+1); vrati (Suma)

Z d Zadovoljavamo se pretpostavkom da j t j j algoritamskog procesa lj t t k d je trajanje l it k proporcionalno ukupnom broju operacija. S j t algoritma k j aproksimativno izraava trajanje algoritamskog procesa Svojstvo l it koje k i ti i t j j l it k naziva se vremenska kompleksnost.

Koji od dva algoritma je efikasniji, a time i bolji?

Vremenska kompleksnost(2/2) Prvi algoritam ima vremensku kompleksnost koja je proporcionalna sa n. Tada kaemo da algoritam ima vremensku kompleksnost O(n)

Zato vii programski jezici?

Mainski jezik jje vrlo nepraktian jer od p g j p j programera zahtijeva detaljno j jpoznavanje arhitekture mikroprocesora i ostalih komponenti u arhitekturi raunara. Zbog toga su dizajnirani umjetni jezici koji su prikladniji za programere jer u naelu ne zahtijevaju detalnjo poznavanje arhitekture raunara. Ti jezici se nazivaju vii programski jezici. p g jezici moraju biti tako dizajnirani da se p g j j programi napisani u p Vii programski j njima mogu prevoditi u mainski jezik raunara da bi se mogli izvoditi. p g jezici su znaajno p j poveavli p produktivnost kreiranja softvera. j Vii programski j

Vremenska kompleksnost drugog algoritma ne ovisi o n, odnosno, trajanjealgoritamskog procesa je priblino konstantno bez obzira na vrijednost n.

Tada kaemo da algoritam ima vremensku kompleksnost O(1)Openito, Openito ako je trajanje nekog algoritamskog procesa proporcionalno s n2 njegovu vremensku kompleksnost zapisujemo kao O(n2). p j p g j je j j Slino zapisujemo vremensku kompleksnost i u drugim situacijama kada j trajanje algoritamskog procesa, na primjer, proporcionalno s n3, nlog (n) itd.

U veini sluajeva analiza vreemnske kompleksnosti algoritama je vrlo sloena sloena. Ako neki problem moemo rjeiti s vie razliitih algoritama, u veini sluajeva se izabire onaj koji ima manju vremensku kompleksnost.

Da li je jedino vano detaljno znati neki programski jezik? Pisanje programa u nekom viem programskom jeziku zahtijeva da sedetaljno d t lj poznaju pravila k j opisuju t j j ik j il koja i j taj jezik. j g jezika i strogo p g pridravanje p j prilikom p g programiranja u tom j Uenje nekog j jeziku mogu na neki umanjiti vanost osnovnih svojstava nekog algoritma.

Programiranje i izbor programskog jezika Programiranje je proces kojim neki algoritam pretvaramo pomou nekog odprogramskih jezika u programski kod te na taj nain oblikujemo opis algoritma kod, pomou dotinog programskog jezika.

Neki od viih programskih jezika: Fortran Pascal Ada Cobol C C++ Java C# Visula Basic itd. Basic, itd

Za uspjeno oblikovanje novog programa nije iskljuivo vano da je program sa aspekta formalnih pravila nekog jezika ispravan, nego je vano i to da je algoritam koji se opisuje tim jezikom ispravan i dovoljno efikasan.

Svaki od navedenih programskih j p g jezika ima svoje specifinosti koje g ine j p j ga prikladnijim u odnosu na neki drugi jezik za neku domenu njegove primjene. g jezik C karakterizira visok stupanj openitosti u smislu primjene u p j p p j Programski j razliitim problemskim domenama, odnosno sferama ljudskog djelovanja za koje se oblikuju programi koji rjeavaju probleme iz tih oblasti.

Programiranje, kompajliranje, povezivanje, greke(1/3)Unos programskog koda (ASCII ) datoteka) programski kod

Programiranje, kompajliranje, povezivanje, greke(2/3)

Unos izvornog koda p g g programa ( g source code) p (eng. ) pomou nekog ASCII geditora teksta.

sintaksne greke (eng. syntax errors)

kompajliranjebiblioteka potprograma

Editori teksta su danas u pravilu ugraeni u razvojna okruenja koja programer koristi Kompajliranje izvornog koda programa u objektni kod pomou kompajlera kompajlera.

greke u toku izvoenja (eng. run-time errors)

objektni kod greke povezivanja (eng. linker ) errors)

Kompajler nam daje sintaksne greke u programu (pravopisne i formalne) Programer ispravlja sintaksne greke u izvornom kodu i opet pokree kompajler.

izvrni kod

povezivanje

testni podaciizvoenje programa

rezultati

logike greke

Programiranje, kompajliranje, povezivanje, greke(3/3) Povezivanje kompajliranog programa u izvrni program (eng linking)(Povezuju se potprogramske binlioteke (stdio h math h string h ) (stdio.h, math.h, string.h,). Linker otkriva pogreke, a programer ispravlja greke i opet pokree kompajler.

Struktura C programa i uvodni opis (1/3) U C programima je obavezna jedna i samo jedna funkcija main (). Funkcija main () oznaava mjesto na kojem poinje izvravanje programa programa. Nakon svake naredbe stoji znak ; (terminator) koji oznaava kraj jedne i poetak druge naredbe. naredbe

Izvoenje izvrnog programa. Odredimo neke testne podatke i oekivane rezulate. Greke koje otkrivamo u toku izvoenja programa (eng. run-time errors). Logike greke (Program ne javlja nikakvu greku ali daje pogrene rezultate). Ispravlja se izvorni programski kod i ponovno pokree kompajliranje programa.

Niz naredbi grupiranih u jednu logiku cjelinu predstavlja blok naredbi. Poetak bloka naredbi oznaava se znakom { . Zavretak bloka naredbi oznaava se znakom } , pri emu iza tog znaka ne stavljamo znak ; (terminator) .

Struktura C programa i uvodni opis (2/3) Ako se blok sastoji od samo jedne naredbe tada se znakovi { i }ne moraju koristiti. Sve varijable koje koristi neki C program moraju se deklarirati. Komentari se stavljaju izmeu znakova /* i */. Komentare koristimo za dokumentiranje programa. P Programski j ik C nije pozicijski a t znai d programski k d moe poeti u bilo ki jezik ij i ij ki to i da ki kod ti bil kojoj liniji. Komentari naredbe i izrazi se mogu nalaziti u vie linija Komentari, linija.

Struktura C programa i uvodni opis (3/3) Programskom jezik C razlikuje velika i mala slova. Na primjer, - Rez- rez - REZ - rEz

nije isto

Moemo izabrati proizvoljno mjesto za poetak pisanja naredbe. Dozvoljeno je pisanje vie naredbi u istom retku. (Ali, da li je to preporuljivo raditi, to je pitanje?)

Kljune rijei (ANSI standard)(ANSI American National Standatds Institutre)

Varijable Varijable su promjenljivi podaci koji e tijekom izvoenja programa moi poprimiti razliite vrijednosti vrijednosti. Svakoj varijabli se pridruuje neko ime.

Kljune rijei predstavljaju identifikatore koji za kompajler imaju tanoodreeno znaenje. Sve kljune rijei u C-u se piu malim slovima.

auto break case char const continue default do double else l enum

extern float for goto if int long register return short h t signed

sizeof static struct switch typedef union unsigned void volatile while hil 32 rijei

Varijable zauzimaju odreeni prostor u memoriji, to ovisi o tipu varijable. Imena varijabli se sastoje od slova i brojeva, pri emu prvi znak mora biti _ slovo ili znak _. Nije dozvoljeno koristiti kljune rijei kao imena varijabli. Varijable se obavezno moraju deklarirati prije koritenja u programu. Opi oblik za deklaraciju: tip_podataka lista_varijabli;

Nazivi varijabli u listi se odvajaju zarezom. Broj znakova u imenu moe biti proizvoljan, ali je znaajan prvi 31 znak.

Osnovno o tipovima podataka Programski jezik C ima sljedee osnovne tipove podataka: znakovni tip cjelobrojni tip realni tip realni ti sa d l i tip dvostrukom t k preciznou Svaki tip podataka zauzima odreeni prostor u memoriji. Pravilnim izborom tipova podataka poveeva se efikasnost programa. Tipove podataka definiramo ovisno o rasponu vrijednosti koji e neka varijabla poprimiti tijekom izvoenja programa.

Osnovno o deklaraciji varijabli Primjer deklaracije varijabli:

char a; int b,c; float x1 x2; x1,x2;

char int float double d bl

Razlika izmeu pojedinih tipova podataka je u broju bitova koje zauzimaju prilikomp pohranjivanja u memoriji. j j j Openito:koliina memorije koju zauzima neka varijabla ovisi o konkretnom kompajleru. Grafiki, varijable moemo prikazati na slijedei nain:Ovakav prikaz e nam u nekim buduim primjerima omoguiti lake razumijevanje tih primjera.

8 bi bitova a

16 bi bitova b X1

32 bi bita

c

X2

Nepotpuni opis ulaza i izlaza (funkcije scanf() i printf()) (1/2) Programski jezik C nema ugraene ulazno-izlazne naredbe, pa se ulaz i izlaz podataka ostvaruje upotebom funkcija. Funkcije se nalaze u standardnoj U/I datoteci i definirane su ANSI standardom. Formatirani ulaz: Opi oblik funkcije: scanf(kontrolni niz li t argumenata); f(k t l i i , lista t ) Kontrolni niz sadri izmeu ostalog oznake formata. Oznaka formata se sastoji od znaka % i ti f d k tipa formata. t Neki od formata za unos su: %c %d %f uitava jedan znak; uitava cijeli broj; uitava broj s pokretnim zarezom.

Nepotpuni opis ulaza i izlaza (funkcije scanf() i printf()) (2/2) Kontrolni niz moe sadravati i ostale znakove koji slue za povezivanje unesenih podataka s argumentima u listi argumenata. Formatirani izlaz Opi oblik funkcije koja slui za formatirani ispis na standardni izlaz je: printf(kontrolni niz, lista argumenata); Kontrolni niz se sastoji od dva tipa znakova. Prvi tip je oznaka formata ispisa koja se sastoji od obaveznog znaka % i oznake tipa formata koji se nalazi odmah iza %. Neki od formata za ispis su: %c % %d % %f ispisuje jedan i i j j d znak; k ispisuje zadani argument u decimalnom zapisu; ispisuje zadani a gu e t kao b oj s po et sp suje ada argument ao broj pokretnim zarezom. ae o

Podaci koji se unesu pridruuju se argumentima iz liste argumenata.

Drugi tip znakova kontrolnog niza predstavlja poruku.

Jedan jednostavan primjer(1/2)pretprocesorska naredba#include int main(){ int b1,b2,b3,rez; / ucitavanje /*ucitavanje cijelih rez=b1+b2+b3; /*ispis unesenih cijelih brojeva i rezultata sabiranja*/ printf("%d+%d+%d=%d",b1,b2,b3,rez); ; return 0; } brojeva / brojeva*/ scanf("%d %d %d",&b1,&b2,&b3);

Jedan jednostavan primjer(2/2) Varijable b1, b2, b3 i rez su deklarirane kao cjelobrojne (integer).varijable. Deklaracijom varijabli se odreuje ime i tip varijable Funkcija main() oznaava mjesto poetka izvravanja programa. Kao i ostale funkcije, funkcija main() ima mogunost prijenosa podataka u funkciju preko argumenata. scanf () predstavlja poziv funkcije za formatirano uitavanje podataka.

poetak funkcije main deklaracija varijabli

Kontrolni niz kraj funkcije main. Lista argumenata

printf () predstavlja poziv funkcije za ispis podataka. Vie o ovim funkcijama emo govoriti kasnije U naredbi za dodjeljivanje vrijednosti rez=b1+b2+b3; lijeva i desna strana su povezane operatorom pridruivanja = . Operator pridruivanja (=) je potrebno razlikovati od usporedbenog operatora za ispitivanje jednakosti koji je predstavljen dvostrukim znakom (= =).

komentari

Pretprocesorske naredbenaredba #include predstavlja tzv. pretprocesorsku

Upotreba simbolikih konstanti i komentara (1/2) Koritenje simbolikih konstanti doprinosi veoj openitosti i preglednosti programa. Simbolike konstante se moraju definirati izvan svih funkcija, pa se najee definiraju na poetku programa. Opi oblik naredbe za definiranje simbolikih konstanti je: #define simboliko_ime vrijednost

naredbu kojom se ukljuuje datoteka stdio.h u program. Prije procesa prevoenja izvornog C programskog koda u mainski jezik, pokree se tzv. pretprocesor. Ovisno o pretprocesorskim naredbama, pretprocesor mijenja programski kod a zatim se tako promijenjeni programski kod prevodi. Promjene se zapisuju u privremenu datoteku, te na taj nain datoteka s izvornim programskim kodom ostaje nepromijenjena.

Treba primijetiti da izmeu simbolikog imena i vrijednosti ne postoji znak pridruivanja =, kao i to da na kraju naredbe nema oznake ; (terminatora).

Pri prevoenju (kompajliranju) programa sve simbolike konstante sezamjenjuju definiranim vrijednostima. f

Upotreba simbolikih konstanti i komentara (2/2) Upotreba simbolikih konstanti je jako korisna u programima gdje se odreene konstante koriste na vie mjesta, a postoji mogunost njihove promjene. Na primjer, ako u nekom programu koristimo vrijednost porezne stope od 0.15 (15%) a dolo je do promjene na 0.2 (20%), tada nije potrebno obavljati izmjene na svim mjestima u programu gdje je god koritena porezna stopa, nego je dovoljno promijeniti vrijednost konstante koja predstavlja poreznu stopu. int main() { float fl t

Primjer(upotreba simbolikih konstanti)#include #define PI 3.14 Ako bi bilo potrebno promijeniti vrijednost PI, na p j primjer zbog vee preciznosti, dovoljno j to uiniti g p , j je u ovoj liniji.

R, P, V; R P V

/* Unos poluprecnika sa tastature i izracunavanje */ printf (\ Unesite poluprecnik:); scanf (%f, &R); P=(R R) PI; P=(R*R)*PI; V=(4/3)*R*R*R*PI; / /* Ispis na monitoru*/ monitoru / printf(\n Povrsina kruga sa poluprecnikom %2f je %.2f,R,P); p printf(\n Zapremina kugle sa p ( p g poluprecnikom %2f j %.2f,R,V); p je , , ); return 0; }

Komentari Komentari poinju znakom /* i zavravaju znakom */. Sve to se nalazi unutar znakova /* */ ne utjee na tok izvoenja programa. Poveavaju razumljivost programa. Mogu se nalaziti u vie linija. linija Nije dozvoljeno koristiti komentar unutar komentara.

Vanost stila pisanja programa i upotrebe komentara#include int main(){ int b1 b2 b1,b2, b3,rez; scanf("%d %d %d",&b1,&b2, &b3); rez=b1+b2+b3; printf("%d+%d+%d=%d",b1, b2,b3,rez); return 0; }

isti programi#include int main(){ int b1,b2,b3,rez; /*ucitavanje cijelih rez=b1+b2+b3; brojeva*/ scanf("%d %d %d",&b1,&b2,&b3);

donji program je pregledniji i j jasniji zbog stila p j g pisanja,zbog j , g upotrebe komantara, te zbog umetanja praznih redova.

/*ispis unesenih cijelih brojeva i rezultata sabiranja*/ printf("%d+%d+%d=%d",b1,b2,b3,rez); return 0; }

Sadraj predavanja 02

Cjelobrojni tip podataka(1/3) Cjelobrojni tip podataka moe imati slijedee prefikse:

Cjelobrojni tip podataka Realni tip podataka Aritmetiki operatori I Izrazi i Operatori inkrement i dekrement Kontrola toka programa Naredba za jednostruki izbor Naredba za dvostruki izbor Naredba za viestruki izbor Ponavljanje naredbi/petlja for Napomena: dio gore navedenih stranica iz skripte sadri i koncepte koji nee biti obraeni na ovom predavanju. Studentima se savjetuje da ipak proitaju i taj dio. Skripta : strane: 16 - 26 + 96 - 106 Obavezno itanje literature:

- signed i d - unsigned - long

omoguuje pridruivanje i pozitivnih i negativnih vrijednosti; j id i j iti ih ti ih ij d ti omoguuje pridruivanje samo pozitivnih vrijednosti; omoguuje da se proiri raspon cjelobrojnih vrijednosti koje varijabla moe poprimiti;

- short

suava raspon cjelobrojnih vrijednosti koje varijabla moe poprimiti. poprimiti

Cjelobrojni tip deklariran sa prefiksom long omoguuje veu preciznost u odnosu na deklaraciju ka je koriten prefiks short short. Pretpostavljeni prefiks cjelobrojnog tipa je signed.

+ Primjeri koji ilustriraju sve uvedenekoncepte

Cjelobrojni tip podataka(2/3) Pretpostavim da int zauzima dva bajta. To znai da ta varijabla moe poprimiti vrijednosti izmeu: -32768 i 32767 Na primjer, neka je stanje u 16-bitnom registru:

Cjelobrojni tip podataka(3/3) ANSI C ne postavlja ogranienja na preciznost prikaza varijabli koristei prefikse short i long, pri emu ipak vrijedi:

prec(short) prec(int) prec(long)gdje prec oznaava preciznost, odnosno broj cifri.

int signed unsigned short long short long Primjeri nekih ekvivalentnih deklaracija su grupirani zajedno: signed long int a; long int a; signed long a; long a; unsigned short int a; g unsigned short a; signed int a; int a; p precizan p prikaz deklaracije cjelobrojnih varijabli

1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 Uz pretpostavku da je koriten zapis dvojnog komplementa vrijedi:- ako je varijabla deklarirana kao signed int vrijednost varijable je -1. 1 - ako je varijabla deklarirana kao unsigned int vrijednost varijable je 65535=216-1.

Primjer uticaja prefiksa na cjelobrojnu varijablu#include int main() i i () { int a; unsigned int b; a=-1; b=a; printf(\n a=%d b=%u,a,b); return 0; } Izvoenje ovog programa daje rezultat: a = -1 b = 65535 (uz pretpostavku da tip int u konkretnoj implementaciji C-a zauzima 16 bitova) a = -1 b = 4294967295 (uz pretpostavku da tip int u konkretnoj implementaciji C1 C a zauzima 32 bita)

Realni tip podataka(1/3) U programiranju esto imamo potrebu deklarirati varijablu koja modelira neku fizikalnu veliinu ili neku drugu vrstu podatka realnim brojem. Ti brojevi su esto vrlo mali i vrlo veliki. Obino za prikaz velikih i malih brojeva koristimo slijedeu notaciju: jedno decimalno mjesto isperd take eksponent

34542000=3.4542107 Slino se mogu prikazati i binarni brojevi brojevi. Na primjer: 0.000000101=1.012-7 1010.11 1.01011 2 1010 11=1 01011 23 Ovakav zapis brojeva nazivamo normalizirani zapis.

Realni tip podataka(2/3)Na prvom mjestu j je uvijek j j jedinica.

Realni tip podataka(3/3)

0 . 0 0 0 0 0 0 1 0 1 = 1 . 0 1 2 -7 1010.11=1.01011 23

float double long

Kod gore prikazanog naina zapisa binarnih brojeva, na prvom mjestu jeuvijek jedinica. To znai, da se ta jedinica ne mora niti zapisivati jer je moemo podrazumijevati. Na taj nain se tedi jedan bit, to doprinosi veoj preciznosti. Taj Taj bit se naziva skriveni bit (eng. hidden bit) Primjeri moguih deklaracija: - float a; - double b; - long double c;

precizan prikaz j j deklaracije varijabli realnog tipa

IEEE standard zapisa realnih brojeva(IEEE Institute (IEEE-Institute of Electrical and Electronics Engineers)

Primjer prikaza realnog broja tipa float

P31 30

K23 22

M0

Potrebno je odrediti prikaz broja 6.625 koji je pridru\en varijabli deklariranoj kao float. 6.625(10) = 110.101(2) Binarni broj dalje moemo zapisati na slijedei nain: 110.101=1.1010122 Izraunajmo karakteristiku: K= 2 + 127=129 129(10) =10000001(2) Nakon izbacivanja vodee jedinice i take za mantisu dobivamo:10101 Prema tome, broj 6.625 kao tip float e biti zapisan na slijedei nain:

P oznaava predznak (1 bit) g j - 1 negativan broj - 0 pozitivan broj K oznaava karakteristiku (8 bitova) - binarni eksponent+127 - raspon bi binarnog eksponenta j -126 - 127 k t je 126 - raspon karakteristike je 0 - 255 M oznaava mantisu, pri emu se vodea jedinica ne zapisuje (23 bita).

0 10000001 10101000000000000000000

ta je sa zapisom broja 0? Poto je u normaliziranom zapisu vodea uvijek jedinica, postavlja se pitanjekako prikazati broj 0. Vrjedi slijedei dogovor:

Zapis +, - i not a numberPrikaz broja + je: 0 11111111 00000000000000000000000 Svi bitovi mantise su 0, karakteristika ima vrijednost 255, a bit predznaka je 0.

Kada su svi bitovi karakteristike i svi bitovi mantise jednaki nuli, onda se radi o prikazu realnog broja 0. Gornji dogovor ima za posljedicu da postoje pozitivna nula i negativna nula, pri emu su oba prikaza ravnopravna. Dogovor je da se pri usporedbi ta dva prikaza smatraju jednakim.

Prikaz broja - je: broja 1 11111111 00000000000000000000000 Svi bitovi mantise su 0, karakteristika ima vrijednost 255, a bit predznaka je 1. Gore prikazani brojevi se najee dobiju zbog dijeljenja s nulom.

pozitivna nula negativna nula

00000000000000000000000000000000 10000000000000000000000000000000predznak karakteristika

mantisa

Neki specijalni sluajevi Ako karakteristika ima vrijednost 255, te postoje bitovi mantise koji nisu 0, onda se zapis klasificira kao not a number ( ij b j) t b (nije broj) Ovakav zapis se moe dobiti zbog toga to je prilikom izvoenja neke operacije dolo do greke. Primjer zapisa klasificiranog kao not a number:

Aritmetiki operatori Binarni operatori: + * / % sabiranje bi j oduzimanje mnoenje dijeljenje modulo

0 11111111 10000000000000000000001 Postoje i specijalni sluajevi kada je vrijednost karakteristike 0 a postoje bitovi 0, mantise koji nisu nula. Takav zapis nazivamo denormalizirani zapis denormalizirani zapis Ne podrazumijeva da je skriveni bit jednak 1 i smatra se da je vodei bit mantise 0. j p je ( p ) Vrijednost eksponenta j -126 (ne koristi se formula K=binarni eksponent +127) Primjer: 0 00000000 01010000000000000000000 (=0.01012-126)

Operator modulo (%) daje ostatak cjelobrojnog dijeljenja. Moe se primijeniti samo na cjelobrojne tipove podataka.

Izrazi Izrazi se sastoje od operatora, operanada i zagrada. Svaki izraz daje neki rezultat rezultat. Primjeri izraza:

ta radi naredba i=i+1; ?

Naredba i=i+1; je jed a od najee koritenih naredbi u p og a a ju a edba ; jedna ajee o e a edb programiranju. Poto kod poetnika uperator pridruivanja unosi odreene dileme jer ih podsjea j , j na znaenje znaka = u matematici, na ovom mjestu bi ta zabuna trebala da se ukloni. Znaenje naredbe

2 x+5 2*x+5 (a+b)/2 Brojevi 2 i 5 u gornjim izrazima su konstante konstante. Znakovi {*, +, /} predstavljaju operatore Varijable x, a i b predstavlaju varijable,odnosno, operande.

i=i+1;je: Pridruiti novu vrijednost varijabli i a ta nova vrijednost se dobije tako da se trenutna vrijednost te varijable uvea za 1.

Za pridruivanje vrijednosti varijablama koristi se znak =.Na primjer, slijedea naredba: i=10; varijabli i pridruuje vrijednost 10.

.

. 9 ..

i

8 ..

Primjer (operator modulo)#include int main() i i () { int a,b,o; a=7; b=3; o=a%b; printf(\n Ostatak dijeljenja %d i %d je %d.,a,b,o); return 0; }

Prioritet operatora Prioritet operatora *, / i % je vii od operatora + i -. Na primjer u izrazu: primjer,

x=a/b+c*dprvo e se izvesti operacije dijeljenja i mnoenja, a nakon toga i operacija sabiranja. Kod operatora s istim prioritetom, izvravanje operacija ide od lijeve strane prema desnoj. Prioritet izvoenja operacija se moe mijenjati upotrebom zagrada. Na primjer, u izrazu:

Izvoenjem programa dobit e se: Ostatak dijeljenja 7 i 3 je 1.

s=(x*(a-b)+1)/2 ( ( ) )/operacija dijeljenja e biti izvedena posljedna.

Operatori inkrement i dekrement Unarni opertori. ++ -operator inkrement - uveaj za jedan; operator dekrement- umanji za jedan.

Operatori inkrement i dekrement u izrazimaU izrazima nije svejedno da li operatori ++ i -- stoje ispred ili iza varijable. O poloaju operatora u odnosu na varijablu ovisi kada e se vrijednost varijable poveati(++) ili smanjiti(- -). Ako operator stoji ispred varijable, onda se vrijednost varijable prvo promijeni a

Mogu se pisati iza ili ispred varijable varijable.

x=x+1; x=x-1;

x++; x--;

zatim se promijenjena vrijednost koristi u izrazu. Ako operator stoji iza varijable, onda se u izrazu uzima trenutna vrijednost varijable, a tek nakon izraunavanja izraya se promijeni vrijednost varijable. Na primjer, neka je x=100. Izraunavanjem izraza: y ++x; y=++x; vrijednost varijable x e se prvo poveati za 1, a zatim e se ta vrijednost pridruiti varijabli y y. Dakle, varijabla y e poprimiti vrijednost 101.

Na primjer, iza odsjeka programa: . x=15; x++; vrijednost varijable x je 16. Isto vrijedi i u sluaju da je umjesto x++ napisano ++x.

Operatori inkrement i dekrement u izrazima(2/2)

Kontrola toka programa.Naredba n

Suprotno, izraunavanjem izraza:

Kod proceduralnih programskih jezika naredbe se

y=x++;varijabli y e se pridruiti vrijednost varijable x (a to je 100), a zatim e se poveati za 1 vrijednost varijable x. Vrijednost varijable y nakon izraunavanja gornjeg izraza je 100, dok je vrijednost varijable x tada 101. Prikladnim odabirom operatora inkrement i dekrement moe se poveati razumljivost programskog koda koda. Operatori ++ i -- se ne mogu primijeniti na konstante i na aritmetike izraze. To znai da su slijedei izrazi pogreni: (2*x+y)++ 5.672++

izvravaju sekvencijalno, a to znai redoslijedom kojim su napisane. Naredbe za kontrolu toka programa omoguuju: - ponavljanje jedne ili vie naredbi; - preusmjeravanje toka programa. Naredba +2 Naredba n+1

..

Naredba za jednostruki izbor Opi oblik naredbe za jednostruki izbor je:

Primjer(naredba za jednostruki izbor)#include int main() { int a,b; printf(\n Unesite prvi cijeli broj); scanf(%d,&a); printf( \n printf(\n Unesite drugi cijeli broj); broj ); scanf(%d,&b); if (a==b) { printf(\n Unijeli ste iste brojeve); } }

.

if (uvjet) { blok naredbi; }

NE uvjet

Uvjet moe biti bilo koji aritmetiki ili logiki izraz. Bl k naredbi moe imati jednu ili vie naredbi. Blok dbi i ij d i dbi Uvjet je istinit ako je rezultat izraza razliit od nule. Ako je uvjet istinit, blok naredbi se izvrava. U suprotnom, naredbe koje se nalaze u bloku se preskau.

DA blok narebi

.

ta bi bilo kad bi uvjet glasio a=b, a za unos u program je: 1. a=10, b=3 2. a=0, b=0

Naredba za dvostruki izbor Opi oblik naredbe za jednostruki izbor je:

Primjer (naredba za dvostruki izbor)#include int main() { int br; printf(\n U i tf(\ Unesite cijeli b j) it ij li broj); scanf(%d,&br); if (br%2) { printf(\n Unijeli ste neparan broj); } else { printf( \n printf(\n Unijeli ste paran broj); broj ); } return 0; }

.NE

DA if (uvjet) { blok naredbi1; } blok narebi 1 else { blok naredbi2; }

uvjet

blok narebi 2

.

Uvjet moe biti bilo koji aritmetiki ili logiki izraz. Ako je uvjet ispunjen (vrijednost izraza je razliita od 0, izvrava se blok naredbi1 i preskae blok naredbi2. U suprotnom(uvjet nije ispunjen, tj. izraz ima vrijednost 0), izvrava se blok narebi2, a preskae se blok naredbi1.

Viestruki izbor(if-else if-else) Opi oblik pisanja naredbi za viestruki izbor je: ( j ) if (uvjet 1) { blok naredbi 1; } else if (uvjet 2) { blok naredbi 2; } .. else if (uvjet n-1) { blok naredbi n-1; } else l { blok naredbi n; }

Primjer (program za rjeavanje kvadratne jednadbe)#include #include Ukljuuje se datoteka math.h u kojoj je definicija funkcije pow() koja je koritena u programu.

Ovakav oblik naredbi if-else if-else omoguava uzastopno ispitivanje niza uvjeta. Ako je bilo koji uvjet istinit (razliit od nule) izvrava se blok naredbi pridruen tom uvjetu, dok se svi ostali blokovi naredbi preskau k Broj uvjeta nije ogranien Uvjet moe biti logiki ili aritmetiki izraz printf(\n Unesite k fi ij i f(\ i koeficijente k d kvadratne j d d b a,b,c:"); jednadzbe b ") scanf("%f %f %f", &a,&b,&c); D=b*b -4.0*a*c; /* diskriminanta */ if (D > 0) { t = sqrt(D); q Blok naredbi koji e x1 = (-b + t)/(2*a); se izvriti ako je diskriminanta D x2 = (-b - t)/(2*a); p printf (\n Rjesenja su: x1=%f ( \n x1 %f x2=%f\n", x1, x2); x2 %f\n , pozitivna } int main() { float a, b, c, x1, x2, x1Re, x2Re, x1Im, x2Im, t, D;

Nastavak primjera programa za rjeavanje kvadratne jednadbeelse if (D == 0) { x1 = -b/(2*a); printf (\n Rjesenja su: x1=x2=%f\n", x1); } Blok naredbi koji e else se izvriti ako je { diskriminanta D di k i i t t = sqrt(-D); jednaka nuli x1Re = -b/(2*a); x2Re = x1Re; x1Im = t/(2*a); x2Im = -x1Im; printf (\n Rjesenja su: x1 = (%f %f)\n", x1Re x1Im); ( \n (%f,%f)\n x1Re, printf ( x2 = (%f,%f)\n", x2Re, x2Im); Blok naredbi koji e } se izvriti ako je j return 0 0; diskriminanta D } negativna

Programska petlja forOpi oblik programske petlje for: for (izraz1;izraz2;izraz3) { blok naredbi; } Ispitivanje uvjeta izlaza iz petlje se ispituje na poetku poetku. To znai da postoji mogunost da se blok naredbi ne izvede niti jednom. izraz1 pridruuje kontrolnoj varijabli petlje poetnu vrijednost. Ovaj izraz se izvrava samo jednom. Ako trebamo ve naredbi u izrazu, onda ih odvajamo zarezom izraz2 predstavlja izraz kojim se provjerava da li kontrolna varijabla petlje ispunjava uvjet izlazka iz petlje. Provjera se vri prije svake iteracije. izraz3 definira na koji nain se mijenja kontrolna varijabla. Izraz se izvrava nakon svakog prolaska kroz petlju. Ako trebamo vie naredbi u izrazu, odvajamo ih zarezom.

Primjer Ispis na monitoru niza brojeva od 1 do 10

#include int main() { int broj; for(broj=1; broja+5 je a>(a+5) izraz

Primjeri redoslijeda izvravanja relacijskih izrazaredoslijed izvravanja (10>5) (2*100) 5 2*100 vee >= vee ili jednako < manje j , > < < > >=, 7 6=3 istina la la

g j j Za gornje sudove uvedimo sljedee simbole: A= 4>3 B= 4>7 C= 6=3 Tada, gornje logike varijable imaju slijedee vrijednosti: A 1, B=0, C 0 A=1, B 0, C=0 Gore prikazani primjeri nazivaju se osnovni ili atomni sudovi.

LA 0 T

ISTINA 1

Istinitost atomnih sudova utvruje se neposrednim zakljuivanjem o sudu

Upotreba matematike logike u raunarstvu Istinitost sloenih sudova utvruje se upotrebom formula. j Formule se sastoje od: - atoma (osnovnih sudova) - l ikih operatora logikih t - zagrada Obino se koriste slijedei logiki operatori: simbol operatora negacija konjunkcija disjunkcija implikacija dvostrana i lik ij d t implikacija znaenje sud A 4>3 4 3 4>7 6=3 Primjer Pogledajmo slijedee sudove:

Negacija Operator negacije djeluje na jedan atom. j g j je: Tablica definicije negacije j A 0 1 A 1 0

Vrijednost A 1 0 0

Vrijednost A 0 1 1

sud B 43 4 3 47 63

suprotni opertori

Konjunkcija i disjunkcija Tablice definicija konjunkcije i disjunkcije su: konjunkcija: k j k ij A 0 0 1 1 B 0 1 0 1 AB 0 0 0 1 disjunkcija: A 0 0 1 1 B 0 1 0 1 AB 0 1 1 1

Neki korisni aksiomi (zakoni) (1/2)

Aksiom 1: Zakon neutralnog elementa Postoje neutralne vrijednosti 0 i 1 s obzirom na operacije i tako da vrijedi: A 0 = A A 1= A Aksiom 2: Zakon komutacije AB=BA AB=BA Aksiom 3: zakon distribucije A (B C) = (A B) (A C) A (B C) = (A B) (A C)

Formula (A B) ima vrijednost 1 onda i samo onda kada i jedan i drugi atom imaju vrijednost 1. Formula (A B) ima vrijednost 1 ako je jedan atom istinit ili ako su oba atoma istinita. istinita

Neki korisni aksiomi (zakoni) (2/2) Zakon idempotencije: AA=A AA=A Zakon asocijacije: (A B) C=A (B C) ( (A B) C=A (B C) ) C ( De Morganov zakon: (A B) = A B (A B) = A B Zakon apsorpcije: A (A B) = A A (A B) = A

Programska petlja while

Opi oblik petlje while je: uvjet while (uvjet) blok naredbi; DA blok naredbi

NE

Uvjet moe biti varijabla, aritmetiki izraz ili logiki izraz. Uvjet ponavljanja petlje se isptuje na poetku. To znai da postoji mogunost da se blok naredbi ne izvri niti jednom jednom. Blok naredbi u petlji se ponavlja sve dok je uvjet istinit (razliit od nule). Kada uvjet postane neistinit, program se nastavlja prvom naredbom iza petlje

Odnos programskih petlji while i for Poto petlje for i while imaju ispitivanje uvjeta na poetku, vrijedi da se svaka programska petlja for moe zamijeniti petljom while i obrnuto obrnuto.

Jednostavan primjer Program uitava cijeli broj N, a na standardnom izlazu ispisuje parne brojeve koji su manji ili jednaki od N N. #include

for (i ra 1 i ra 2 i ra 3) (izraz1; izraz2; izraz3) { blok naredbi; }

izraz1; while (izraz2) { blok naredbi; izraz3, }

Kad e se koristiti koja petlja ovisi o pristupu programera i njegovim navikama.

int main() { int b, N; t ; printf("\n Unesite cijeli broj manji od 100:"); scanf("%d",&N); b=2; Ispisuje se vrijednost varijable b i while(b>2; c=c>>3; c=c