sadržaj predmeta (ukratko) - · pdf fileprisustvo predavanjima, vježbe i ispiti •...

13
OSNOVE RAČUNARSTVA 2009/2010 D d H i Š ić Doc.dr. Haris Šupić Cilj predmeta Cilj predmeta: Osnovni cilj ovog predmeta je upoznavanje studenata sa baznim konceptima iz računarstva što prije svega uključuje pristupe rješavanju problema primjenom algoritamskog pristupa Ovaj cilj će se prije svega realizirati upozavanjem sa algoritamskog pristupa. Ovaj cilj će se prije svega realizirati upozavanjem sa osnovama programiranja u programskom jeziku C. Sadržaj predmeta (ukratko) Uvod: metode i analize rješavanja problema, algoritmi Programski jezik C: sintaksa, funkcije, kontrola toka programa, nizovi, pokazivači strukture modularnost biblioteke rad s datotekama pokazivači, strukture, modularnost, biblioteke, rad s datotekama. Pregled nekih od osnovnih koncepata u računarstvu: brojni sistemi, osnovi Booleove algebre, osnovni pojmovi iz arhitektura računara, struktura i rad procesora, sabirnice i registri, RAM i ROM memorije, ulaz i izlaz, periferne memorije,struktura i organizacija programa, sistemski softver, operativni sistemi Važna napomena: Ključni i najvažniji dio predmeta je dio koji se odnosi na upoznavanje sa osnovama programiranja u programskom jeziku C. Literatura Obavezna literatura: 1. Bilješke i slajdovi s predavanja (biti će dostupni na web stranici predmeta: http://c2.etf.unsa.ba/ 2. Skripta: M. Jurak, Pogramski jezik C, http://www.phy.hr/~tniksic/FI/materijali/C.pdf 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 Inc., 1988. 2 Al K ll I P hl AB k C Addi W l 2 .Al Kelley, Ira Pohl, A Book on C, Addison-Wesley. 3. Mark Burel, Fundamentals of Computer Architecture, Palgrave Macmillan, 2003.

Upload: doancong

Post on 07-Feb-2018

220 views

Category:

Documents


4 download

TRANSCRIPT

Page 1: Sadržaj predmeta (ukratko) - · PDF filePrisustvo predavanjima, vježbe i ispiti • prisustvo predavanjima i vježbama je obavezno • prisustvo predavanjima ⇒max. 10 bodova •

OSNOVERAČUNARSTVA

2009/2010

D d H i Š ićDoc.dr. Haris Šupić

Cilj predmeta

Cilj predmeta:

Osnovni cilj ovog predmeta je upoznavanje studenata sa baznim konceptima iz

računarstva što prije svega uključuje pristupe rješavanju problema primjenom

algoritamskog pristupa Ovaj cilj će se prije svega realizirati upozavanjem saalgoritamskog pristupa. Ovaj cilj će se prije svega realizirati upozavanjem sa

osnovama programiranja u programskom jeziku C.

Sadržaj predmeta (ukratko)

Uvod: metode i analize rješavanja problema, algoritmi

Programski jezik C: sintaksa, funkcije, kontrola toka programa, nizovi,

pokazivači strukture modularnost biblioteke rad s datotekamapokazivači, strukture, modularnost, biblioteke, rad s datotekama.

Pregled nekih od osnovnih koncepata u računarstvu: brojni sistemi, osnovi

Booleove algebre, osnovni pojmovi iz arhitektura računara, struktura i rad

procesora, sabirnice i registri, RAM i ROM memorije, ulaz i izlaz, periferne

memorije,struktura i organizacija programa, sistemski softver, operativni sistemi

Važna napomena:

Ključni i najvažniji dio predmeta je dio koji se odnosi na upoznavanje sa j j j p j j p j

osnovama programiranja u programskom jeziku C.

Literatura

Obavezna literatura:

1. Bilješke i slajdovi s predavanja (biti će dostupni na web stranici predmeta:

http://c2.etf.unsa.ba/

2. Skripta: M. Jurak, Pogramski jezik C, http://www.phy.hr/~tniksic/FI/materijali/C.pdf2. 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

Inc., 1988.

2 Al K ll I P hl A B k C Addi W l2 .Al Kelley, Ira Pohl, A Book on C, Addison-Wesley.

3. Mark Burel, Fundamentals of Computer Architecture, Palgrave Macmillan, 2003.

Page 2: Sadržaj predmeta (ukratko) - · PDF filePrisustvo predavanjima, vježbe i ispiti • prisustvo predavanjima i vježbama je obavezno • prisustvo predavanjima ⇒max. 10 bodova •

Prisustvo predavanjima, vježbe i ispiti

• prisustvo predavanjima i vježbama je obavezno• prisustvo predavanjima ⇒ max. 10 bodova• izrada domaćih zadaća ⇒ max 10 bodova• izrada domaćih zadaća ⇒ max 10 bodova• I parcijalni ispit ⇒ max 20 bodova• II parcijalni ispit ⇒ max 20 bodova• Student sa najmanje 40 bodova pristupa završnom ispitukoji nosi max. 40 bodova (za pozitivnu ocjenu minimalno 20 bodova)bodova)• 20-40 bodova tijekom semestra ⇒ popravni ispit iz tema koje student nije položio parcijalnim ispitima.• Usmeni popravni ipit donosi maksimalno 40 bodova, a za pozitivnu ocjenu potrebno je minimalno 20 bodova.

St d t k ji d lji i it• Student koji ne zadovolji na popravnom ispitu ponovno upisuje predmet.

d d l i d j i j žb d ji i j žb ć

Kako postići uspjeh na ovom predmetu?

Redovno dolazite na predavanja i vježbe. Na predavanjima i vježbama ćete:Razumjeti i usvojiti pojmovni sistem relevantan za ovaj predmetNaučiti i razumjeti temeljne koncepte iz oblasti računarstva i informatikeSteći vještinu implementacije jednostavnih programskih rješenja u programskom jeziku CSteći vještinu implementacije jednostavnih programskih rješenja u programskom jeziku CNaučiti razlikovati bitno od nebitnog.Obavezno kontinuirano čitajte i proučavjte preporučenu obaveznu literaturu (bilješke + preporučena

skripta)skripta)Prisustvo predavanjima je izuzetno važno, ali nije dovoljno za potpuno savladavanje koncepata obrađenih na predavanjima. Zato je vrlo važno da student kontinuirano čita i proučava obaveznu preporučenu literaturupreporučenu literaturu.

Redovno dolazite na vježbe i samostalno rješavajte zadatke.Ključna aktivnost koja će vas voditi uspješnom polaganju predmeta je da samostalno ili timski ako je

to potrebno rješavate postavljene zadatke.p j p jZadatke koje ne uspijete riješiti na vježbama, potrudite se da ih riješite obavezno kod kuće

Redovno i samostalno radite domaće zadaće

Ukoliko je potrebno dodatno pročitajte potrebne segmente iz drugih izvora ( literatura, WWW, ...)

Kako nećete postići uspjeh na ovom predmetu?

Ne možete očekivati da ćete položiti predmet ako:

Ne radite samostalno domaće zadaćeNe radite samostalno domaće zadaće

Ne trudite se da samostalno rješavate zadatke na vježbama

Ne čitate obaveznu literaturu

N d l it d d j i j žbNe dolazite redovno na predavanja i vježbe

Ne slušate pažljivo predavanja i aktivno učestvujete u nastavi,

Ne učestvujete aktivno na vježbama i što je moguće više zadataka

rješavate samostalno

Krenete učiti predmet nekoliko dana prije ispita

Sadržaj predavanja P01

• Uvod (Povijesni pregled, Turingova mašina,...)

• Pojam i svojstva algoritma

• Vremenska kompleksnost

• Programiranje, kompajliranje, greške

• Struktura C programa i uvodni opis

• Osnovno o varijablama

Obavezno čitanje literature:

Skripta : strane: 8-9 13-15Osnovno o varijablama

• Osnovno o ulazu i izlazu

• Stil pisanja programa i upotreba komentara

Skripta : strane: 8-9, 13-15

Page 3: Sadržaj predmeta (ukratko) - · PDF filePrisustvo predavanjima, vježbe i ispiti • prisustvo predavanjima i vježbama je obavezno • prisustvo predavanjima ⇒max. 10 bodova •

ABACUS

•Izumljen u Kini prije 3000 godina;

•Kolone su podijeljene u dva reda

•Kuglice u gornjem dijelu imaju vrijednost 5, dok kuglice u donjem redu imaju vrijednost 1.

•Još uvijek je u upotrebiJoš uvijek je u upotrebi

Muhamed ibn Musa al Horezmi

•arapski matematičar koji je živio u devetom stoljeću•jedan od najcjenjenijih matematičara svih vremena•Smatrao je da se matematički•Smatrao je da se matematički problemi mogu rješavati upotrebom pravilnog niza koraka

Muhamed ibn Musa al Horezmi (nastavak)

• u svojoj knjizi na arapskom jeziku je opisao pravila za obavljanje aritmetičkih operacija nad brojevima zapisanim u dekadskom sistemu.

• Original te knjige je izgubljen, ali postoji prijevod na latinski.

• U latinskom prijevodu isperd svakog pravila piše:

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 početku su se pd pojmom algoritma podrazumijevala samo pravila• U početku su se pd pojmom algoritma podrazumijevala samo pravila za računanje brojevima

• Danas se pod algoritmom podrazumijevaju pravila za obavljanje zadataka u različitim oblastima, a najčešće u računarstvu.

Blaise PascalBlaise Pascal(1623-1662)

• Francuski matematičar i filozof• Osmislio mehanički računar (PASCALINE)• Računar se sastojao od zupčanika koji su bili označeni

Charles Babbage

ciframa 0 do 9

(1791-1871)• Osmislio koncept mašine koju je nazivao analitička mašina• Mašina je imala procesni dio i memoriju• Mašina je imala procesni dio i memoriju.

Page 4: Sadržaj predmeta (ukratko) - · PDF filePrisustvo predavanjima, vježbe i ispiti • prisustvo predavanjima i vježbama je obavezno • prisustvo predavanjima ⇒max. 10 bodova •

Alan Turing (1912-1954)

• Engleski matematičar i filozof

• 1936 objavljuje rad u kojem opisuje mašinu koja kasnijeje nazvana Turing-ova mašina.mašina.

• Turingova mašina jedan od ključnih koncepata u modernoj teoriji računarstvap j j

Neformalni opis Turingove mašine

• Turingova mašina se sastoji od trake, glave za čitanje i pisanje i programa.

• Traka je neograničene duljine i sadrži konačan broj simbola

• Glava čita simbole s tarke i u ovisnosti o stanju mašine može upisati novi simbol preko trenutnog, može promijeniti trenutno stanje i može pomjerati glavu lijevo ili desnopomjerati glavu lijevo ili desno

• Program se sastoji od instrukcija.

• Turingova mašina može rješavati zadatke kao i današnji računari.

T i ši TM j 7 k

Formalna matematička definicija Turingove mašine

Turingova mašina TM je 7-orka:

TM = ( Q, Σ, Γ, q0, b, F, δ )

• Q je konačan skup stanja• Σ je konačan skup simbola, ulazni alfabetΣ je konačan skup simbola, ulazni alfabet• Γ je konačan skup simbola koji se mogu pojaviti na traci,

Γ = Σ ∪ {b} ∪ X• X je dodatni skup simbola koje mašina može pisati na traci• q0 je početno stanje, q0∈Q• b je poseban simbol koji označava blank, b ∈ Γb je poseban simbol koji označava blank, b ∈ Γ• F je skup finalnih stanja, F⊆Q• δ je preslikavanje δ : S× G → S × G × {L, R, S}

(L-lijevo, R-desno, S- ostaje na mjestu)U literaturi se mogu naći i malo drugačije formalne definicije TM, ali je bitno da sve definicije opisuju mašinu istih mogućnosti.

Grafički prikaz značenja preslikavanja δ

S SSi Sj

t… … x y z … … … t y z …

δ : S× G → S × G × {L, R, S}

(Sj, t, R) = δ (Si, x)

• TM se nalazi u stanju Si čita na traci simbol ‘x’

δ : S G → S G {L, R, S}

TM se nalazi u stanju Si, čita na traci simbol x , na njegovo mjesto piše simbol ‘t’ i pomjera glavu u desno.

Page 5: Sadržaj predmeta (ukratko) - · PDF filePrisustvo predavanjima, vježbe i ispiti • prisustvo predavanjima i vježbama je obavezno • prisustvo predavanjima ⇒max. 10 bodova •

Graf stanja Turingove mašine

• Alternativni način prikaza neke konkretne TM je pomoću grafa stanja.

• Na grafu stanja TM preslikavanje δ prikazujemo na slijedeći

način:

SjSi

x → t, L

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

• Način rada TM možemo prikazati i upotrebom instrukcija TM.Način rada TM možemo prikazati i upotrebom instrukcija TM.• Instrukcije TM su slijedeće 5-torke:

<S t L S ><Si, x, t, L, Sj>.

P i j TM k j bi b j t i d d j b j 2

Primjer Turingove mašine

S0

S0 1 0 1

1 0 1

1→1 R

• Primjer TM koja binarnom broju na traci dodaje broj 2.• Na početku i na kraju je glava pozicioniranana prvom simbolu.

S0

S0 1 0 1

1 0 1

S S

1→1, R

→ , L

1→1, L1→0, L

S0

S1 1 0 1

1 0 1S0 S1 S20→0, L

0→1, L→1, S

1

S2 1 0 1

1 0 1

S3 S4

0→0, R0→0, L

→ , R2(10) = 10(2)

5 = 101 S3

S3 1 1 1

1 1 1

1→1, L

5(10) = 101(2)

7(10) = 111(2)

S4 1 1 1Graf stanja sadrži svih sedam elemenata koji definiraju TM

Pregled razvoja u zadnjih 60 godina(1/3)

• ABC računar, 1939. godina.Računar je razvijen na Iowa State University i nije do kraja j j y j jzavršen.• John von Neumann (1903-1957)• Predložio arhitekturu i organizaciju računara koja predstavlja temelj i današnjih računara.• 1945 je razvio računar EDVAC (eng. Electronic Discrete Variable Automatic Computer)

1943 ij č ENIAC ( El t i N i l• 1943 razvijen računar ENIAC (eng. Electronic Numerical Integrator and Computer)Računar se sastojao od preko 17 000 elektronskih cijevi, bilo je

teško oko 30 tona i zauzimalo prostoriju od oko 150 kvadratnihteško oko 30 tona i zauzimalo prostoriju od oko 150 kvadratnih metara

Pregled razvoja u zadnjih 60 godina(2/3)

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

Page 6: Sadržaj predmeta (ukratko) - · PDF filePrisustvo predavanjima, vježbe i ispiti • prisustvo predavanjima i vježbama je obavezno • prisustvo predavanjima ⇒max. 10 bodova •

Pregled razvoja u zadnjih 60 godina(3/3)

• 1981 Pojavio se operacijski sistem MS-DOS1982 I t l 80 286• 1982 Intelov procesor 80 286

• 1984 Macintosh• 1985 32-bitni Intelov mikroprocesor Intel 386p• 1985 Operacijski sistem Microsoft Windows• 1989 Intelov proceror 486, imao matematički koprocesor

1993 I t l P ti• 1993 Intel Pentium• 1997 Intel Pentium II• 1999 Intel Celeron i Intel Pentim III• 2000 Intel Pentium IV• 2001 prvi 64 bitni Athlon procesor

Pojam algoritma

• U svakodnevnom životu pri obavljanju različitih poslova izvodimo različite operacije nekim zadanim redoslijedom.

• Algoritmi se mogu opisati prirodnim govornim jezikom.

• Onaj ko izvršava taj algoritam (izvršitelj algoritma) mora poznavati taj jezik.

• Druga mogućnost opisa algoritama je pomoću programskih jezika koji zapravo predstavljaju umjetne jezike.

• Programski jezici omogućuju zapis algoritama na sažet pregledan precizan i• Programski jezici omogućuju zapis algoritama na sažet, pregledan, precizan i jednoznačan način.

• Računari pri obavljanju zadataka mogu obavljati samo vrlo jednostavne korake.p j j g j j

• Jezik koji služi za opis algoritama za obavljanje elementarnih operacija koje može obaviti računar naziva se mašinski jezik.

Svojstva algoritama

• Za svaki algoritam moraju jasno biti definirani početni objekti.

• Algoritam mora sadržavati konačan broj koraka koji pokazuje redoslijed• Algoritam mora sadržavati konačan broj koraka koji pokazuje redoslijed operacija koje treba izvesti nad nekim početnim objektima kako bi na kraju dobili završne objekte, odnosno, rezultate.

• Pri oblikovanju programskog koda svaki korak zamjenjujemo odgovarajućom naredbom (instrukcijom).

• Izvršavanje algoritma se naziva algoritamski proces.

• U toku izvršavanja algoritamskog procesa i postupnog oblikovanja završnih objekata često se koriste i neki međurezultatiobjekata često se koriste i neki međurezultati.

• Postupci izgradnje algoritama nisu jednoznačni.

• Izgradnja algoritama zahtijeva kreativnost.Izgradnja algoritama zahtijeva kreativnost.

Primjer algoritma (zbrajanje prvih n prirodnih brojeva)

• Ovaj algoritam je opisan pomoću

riječi iz našeg prirodnog jezikaUlaz (n)Suma:=0;

i 1 d diti

riječi iz našeg prirodnog jezika.

• Ovakav zapis algoritma predstavlja

pseudokod.za i:= 1 do n raditiSuma:=Suma+i;

vrati (Suma)

• Opis je dovoljno precizan da se može

vidjeti naćin rješavanja zadatka.vrati (Suma)• Ipak, opis je manje precizan nego da isti algoritam imamo kodiran u nekom programskom jeziku.

• Prednost sličnih zapisa algoritama je u činjenici da naučnici, inženjeri i svi koji

koriste različite algoritme mogu međusobno razmjenjivati ideje koje algoritmi u

sebi nose a da ne poznaju neki konkretan viši programski jezik.

Page 7: Sadržaj predmeta (ukratko) - · PDF filePrisustvo predavanjima, vježbe i ispiti • prisustvo predavanjima i vježbama je obavezno • prisustvo predavanjima ⇒max. 10 bodova •

Još jedan algoritam za sabiranje prvih n prirodnih brojeva

Suma= 1 + 2 + 3 + 4+ …………+ n-3+ n-2 + n-1+n• Svaki par brojeva ima sumu n+1;Svaki par brojeva ima sumu n 1;

• Ima n/2 takvih parova.Suma = n / 2 · (n+1)

ulaz (n)S /2 ( +1)

drugi algoritam za sabiranje prvih n brojeva Suma=n/2·(n+1);

vrati (Suma)sabiranje prvih n brojeva

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

Vremenska kompleksnost(1/2)

• Pored ispravnosti algoritma važno svojstvo algoritma je i trajanje algoritamskog procesa.

• Trajanje algoritamskog procesa izražavamo kao broj osnovnih operacija koje algoritam treba izvesti.

Z i đ j k ij t b j k ij• Za izvođenje svake operacije potrebno je neko vrijeme.

• Potpuno precizna analiza svih algoritama sa aspekta trajanja algoritamskog procesa je nemoguća.je nemoguća.

• Zadovoljavamo se pretpostavkom da je trajanje algoritamskog procesa proporcionalno ukupnom broju operacija.

• Svojstvo algoritma koje aproksimativno izražava trajanje algoritamskog procesa naziva se vremenska kompleksnost.

P i l it i k k l k t k j j i l

Vremenska kompleksnost(2/2)

• Prvi algoritam ima vremensku kompleksnost koja je proporcionalna sa n.

V k k l k t d l it i i d t j j

Tada kažemo da algoritam ima vremensku kompleksnost O(n)

• Vremenska kompleksnost drugog algoritma ne ovisi o n, odnosno, trajanje

algoritamskog procesa je približno konstantno bez obzira na vrijednost n.

Tada kažemo da algoritam ima vremensku kompleksnost O(1)Tada kažemo da algoritam ima vremensku kompleksnost O(1)

Općenito, ako je trajanje nekog algoritamskog procesa proporcionalno s n2 njegovu vremensku kompleksnost zapisujemo kao O(n2).p p j ( )Slično zapisujemo vremensku kompleksnost i u drugim situacijama kada je trajanje algoritamskog procesa, na primjer, proporcionalno s n3, n·log (n) itd.

• U većini slučajeva analiza vreemnske kompleksnosti algoritama je vrlo složena. • Ako neki problem možemo rješiti s više različitih algoritama, u većini slučajeva se izabire onaj koji ima manju vremensku kompleksnostse izabire onaj koji ima manju vremensku kompleksnost.

Zašto viši programski jezici?

• Mašinski jezik je vrlo nepraktičan jer od programera zahtijeva detaljno poznavanje arhitekture mikroprocesora i ostalih komponenti u arhitekturipoznavanje arhitekture mikroprocesora i ostalih komponenti u arhitekturi računara.

• Zbog toga su dizajnirani umjetni jezici koji su prikladniji za programere jer u g g j j j j p j p g jnačelu ne zahtijevaju detalnjo poznavanje arhitekture računara.

•Ti jezici se nazivaju viši programski jezici.

• Viši programski jezici moraju biti tako dizajnirani da se programi napisani u njima mogu prevoditi u mašinski jezik računara da bi se mogli izvoditi.

• Viši programski jezici su značajno povećavli produktivnost kreiranja softvera.

Page 8: Sadržaj predmeta (ukratko) - · PDF filePrisustvo predavanjima, vježbe i ispiti • prisustvo predavanjima i vježbama je obavezno • prisustvo predavanjima ⇒max. 10 bodova •

Da li je jedino važno detaljno znati neki programski jezik?

• Pisanje programa u nekom višem programskom jeziku zahtijeva da se

detaljno poznaju pravila koja opisuju taj jezik.

• Učenje nekog jezika i strogo pridržavanje prilikom programiranja u tom

jeziku mogu na neki umanjiti važnost osnovnih svojstava nekogjeziku mogu na neki umanjiti važnost osnovnih svojstava nekog

algoritma.

Za uspješno oblikovanje novog programa nije isključivo važno da

je program sa aspekta formalnih pravila nekog jezika ispravanje program sa aspekta formalnih pravila nekog jezika ispravan,

nego je važno i to da je algoritam koji se opisuje tim jezikom

ispravan i dovoljno efikasan. p j

Programiranje i izbor programskog jezika

• Programiranje je proces kojim neki algoritam pretvaramo pomoću nekog od

programskih jezika u programski kod, te na taj način oblikujemo opis algoritma

pomoću dotičnog programskog jezika.

• Neki od viših programskih jezika:

Fortran• Pascal• Ada

• C• C++• Java

• Cobol • C#• Visula Basic, itd.

• Svaki od navedenih programskih jezika ima svoje specifičnosti koje ga čine prikladnijim u odnosu na neki drugi jezik za neku domenu njegove primjene.

• Programski jezik C karakterizira visok stupanj općenitosti u smislu primjene u• Programski jezik C karakterizira visok stupanj općenitosti u smislu primjene u različitim problemskim domenama, odnosno sferama ljudskog djelovanja za koje se oblikuju programi koji rješavaju probleme iz tih oblasti.

U k

Programiranje, kompajliranje, povezivanje, greške(1/3)

Unos programskogkoda (ASCII datoteka)

programski kod

kompajliranjesintaksne greške(eng. syntax errors) biblioteka

objektni kodgreške u toku izvođenja

potprograma

i ji š i k d

greške povezivanja(eng. linker

g j(eng. run-time errors)

povezivanje izvršni kod( g

errors)

l ičk

testni podaci

izvođenje programa rezultati logičke greške

Programiranje, kompajliranje, povezivanje, greške(2/3)

• Unos izvornog koda programa (eng. source code) pomoću nekog ASCII

dit t k teditora teksta.

• Editori teksta su danas u pravilu ugrađeni u razvojna okruženja koja

programer koristi (Na primjer mi ćemo na vježbama koristiti MS Visualprogramer koristi (Na primjer, mi ćemo na vježbama koristiti MS Visual

Studio razvojno okruženje, koje naravno ima ugrađen editor teksta).

• Kompajliranje izvornog koda programa u objektni kod pomoću kompajlera. p j j g p g j p p j

• Kompajler nam daje sintaksne greške u programu (pravopisne i formalne)

• Programer ispravlja sintaksne greške u izvornom kodu i opet pokrećeProgramer ispravlja sintaksne greške u izvornom kodu i opet pokreće

kompajler.

Page 9: Sadržaj predmeta (ukratko) - · PDF filePrisustvo predavanjima, vježbe i ispiti • prisustvo predavanjima i vježbama je obavezno • prisustvo predavanjima ⇒max. 10 bodova •

Programiranje, kompajliranje, povezivanje, greške(3/3)

• Povezivanje kompajliranog programa u izvršni program (eng linking)

(Povezuju se potprogramske binlioteke (stdio.h, math.h, string.h,…).

• Linker otkriva pogreške, a programer ispravlja greške i opet pokreće kompajler.

• Izvođenje izvršnog programa.

• Odredimo neke testne podatke i očekivane rezulate.

• Greške koje otkrivamo u toku izvođenja programa (eng. run-time errors).

• Logičke greške

(Program ne javlja nikakvu grešku ali daje pogrešne rezultate).

• Ispravlja se izvorni programski kod i ponovno pokreće kompajliranje programa.

Struktura C programa i uvodni opis (1/3)

• U C programima je obavezna jedna i samo jedna funkcija main ().

• Funkcija main () označava mjesto na kojem počinje izvršavanje programa.

• Nakon svake naredbe stoji znak ; (terminator) koji označava kraj jedne i početak druge naredbe.

• Niz naredbi grupiranih u jednu logičku cjelinu predstavlja blok naredbi.

• Početak bloka naredbi označava se znakom { .

• Završetak bloka naredbi označava 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 između znakova /* i */.

• Komentare koristimo za dokumentiranje programa• Komentare koristimo za dokumentiranje programa.

• Programski jezik C nije pozicijski a to znači da programski kod može početi u bilo kojoj liniji.

• Komentari, naredbe i izrazi se mogu nalaziti u više linija.

Struktura C programa i uvodni opis (3/3)

• Programskom jezik C razlikuje velika i mala slova. Na primjer,

- Rez

- rez- REZ

rEznije isto

- rEz

M ž i b i i lj j č k i j db• Možemo izabrati proizvoljno mjesto za početak pisanja naredbe.

• Dozvoljeno je pisanje više naredbi u istom retku.

(Ali, da li je to preporučljivo raditi, to je pitanje?)

Page 10: Sadržaj predmeta (ukratko) - · PDF filePrisustvo predavanjima, vježbe i ispiti • prisustvo predavanjima i vježbama je obavezno • prisustvo predavanjima ⇒max. 10 bodova •

Klj č ij či d t lj j id tifik t k ji k jl i j t č

Ključne riječi (ANSI standard)(ANSI ⇔ American National Standatds Institutre)

• Ključne riječi predstavljaju identifikatore koji za kompajler imaju tačno određeno značenje.

• Sve ključne riječi u C-u se pišu malim slovima

auto extern sizeofbreak float static

Sve ključne riječi u C u se pišu malim slovima.

break float staticcase for structchar goto switchconst if typedefcontinue int uniondefault long unsigned

32 riječi

default long unsigneddo register voiddouble return volatileelse short whileenum signed

Varijable

• Varijable su promjenljivi podaci koji će tijekom izvođenja programa moći poprimiti različite vrijednosti.• Svakoj varijabli se pridružuje neko ime.• Varijable zauzimaju određeni prostor u memoriji, što ovisi o tipu varijable.• Imena varijabli se sastoje od slova i brojeva pri čemu prvi znak mora bitiImena varijabli se sastoje od slova i brojeva, pri čemu prvi znak mora biti slovo ili znak ‘_’.• Nije dozvoljeno koristiti ključne riječi kao imena varijabli.• Varijable se obavezno moraju deklarirati prije korištenja u programu.•Opći oblik za deklaraciju:

tip podataka lista varijabli;tip_podataka lista_varijabli;

•Nazivi varijabli u listi se odvajaju zarezom.

• Broj znakova u imenu može biti proizvoljan, ali je značajan prvi 31 znak.

Osnovno o tipovima podataka

• Programski jezik C ima sljedeće osnovne tipove podataka:

znakovni tip char

cjelobrojni tip int

realni tip float

realni tip sa dvostrukom double

preciznošćupreciznošću

• Svaki tip podataka zauzima određeni prostor u memoriji.p p p j

• Pravilnim izborom tipova podataka povećeva se efikasnost programa.

•Tipove podataka definiramo ovisno o rasponu vrijednosti koji će neka varijabla poprimiti tijekom izvođenja programa.

Osnovno o deklaraciji varijabli

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

• Primjer deklaracije varijabli:

• Razlika između pojedinih tipova podataka je u broju bitova koje zauzimaju prilikom pohranjivanja u memoriji.

• Općenito:količina memorije koju zauzima neka varijabla ovisi o konkretnom• Općenito:količina memorije koju zauzima neka varijabla ovisi o konkretnom kompajleru.

• Grafički, varijable možemo prikazati na slijedeći način: Ovakav prikaz će nam u nekim budućim primjerima omogućiti

8 bitova 16 bitova 32 bita

budućim primjerima omogućiti lakše razumijevanje tih primjera.

a b X1

c X2

Page 11: Sadržaj predmeta (ukratko) - · PDF filePrisustvo predavanjima, vježbe i ispiti • prisustvo predavanjima i vježbama je obavezno • prisustvo predavanjima ⇒max. 10 bodova •

Nepotpuni opis ulaza i izlaza (funkcije scanf() i printf()) (1/2)

• Programski jezik C nema ugrađene ulazno-izlazne naredbe, pa se ulaz i izlaz podataka ostvaruje upotebom funkcija.

F nkcije se nala e standardnoj U/I datoteci i definirane s ANSI standardom• Funkcije se nalaze u standardnoj U/I datoteci i definirane su ANSI standardom.

• Formatirani ulaz:

O ći blik f k ij• Opći oblik funkcije:

scanf(“kontrolni niz “, lista argumenata);

K t l i i d ži i đ t l k f t O k f t t ji• Kontrolni niz sadrži između ostalog oznake formata. Oznaka formata se sastoji od znaka % i tipa formata.

• Neki od formata za unos su:Neki od formata za unos su:

%c učitava jedan znak;%d učitava cijeli broj;%f učitava broj s pokretnim zarezom%f učitava broj s pokretnim zarezom.

• Podaci koji se unesu pridružuju se argumentima iz liste argumenata.

K t l i i ž d ž ti i t l k k ji l ž i j

Nepotpuni opis ulaza i izlaza (funkcije scanf() i printf()) (2/2)

• Kontrolni niz može sadržavati i ostale znakove koji služe za povezivanje unesenih podataka s argumentima u listi argumenata.

• Formatirani izlazFormatirani izlaz

• Opći oblik funkcije koja služi za formatirani ispis na standardni izlaz je:

printf(“kontrolni niz”, lista argumenata);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 oznakePrvi 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 ispisuje jedan znak;%d ispisuje zadani argument u decimalnom zapisu;%f i i j d i t k b j k t i%f ispisuje zadani argument kao broj s pokretnim zarezom.

• Drugi tip znakova kontrolnog niza predstavlja poruku.

Jedan jednostavan primjer(1/2)

#include <stdio.h>int main(){

pretprocesorska naredba

početak funkcije main(){int b1,b2,b3,rez;/*ucitavanje cijelih brojeva*/

scanf("%d %d %d",&b1,&b2,&b3);

deklaracija varijablip j

scanf( %d %d %d ,&b1,&b2,&b3);rez=b1+b2+b3;

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

}kraj funkcije main

Kontrolni niz

Lista argumenata

komentari

kraj funkcije main. Lista argumenata

Jedan jednostavan primjer(2/2)

• Varijable b1, b2, b3 i rez su deklarirane kao cjelobrojne (integer).

• Deklaracijom varijabli se određuje ime i tip varijable.

• Funkcija main() označava mjesto početka izvršavanja programa.

• Kao i ostale funkcije, funkcija main() ima mogunost prijenosa podataka u funkciju preko argumenata.

• scanf () predstavlja poziv funkcije za formatirano učitavanje podataka.

• printf () predstavlja poziv funkcije za ispis podataka.

Više o ovim funkcijama ćemo govoriti kasnije

• U naredbi za dodjeljivanje vrijednosti rez=b1+b2+b3;lijeva i desna strana su povezane operatorom pridruživanja = .

• Operator pridruživanja (=) je potrebno razlikovati od usporedbenog operatora za• Operator pridruživanja (=) je potrebno razlikovati od usporedbenog operatora za ispitivanje jednakosti koji je predstavljen dvostrukim znakom (= =).

Page 12: Sadržaj predmeta (ukratko) - · PDF filePrisustvo predavanjima, vježbe i ispiti • prisustvo predavanjima i vježbama je obavezno • prisustvo predavanjima ⇒max. 10 bodova •

Pretprocesorske naredbe

•naredba #include <stdio.h> predstavlja tzv. pretprocesorsku naredbu kojom se uključuje datoteka stdio.h u program.

• Prije procesa prevođenja izvornog C programskog koda u mašinski jezik, pokreće 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 način datoteka s izvornim programskim kodom ostaje nepromijenjena.

Upotreba simboličkih konstanti i komentara (1/2)

• Korištenje simboličkih konstanti doprinosi većoj općenitosti i preglednosti programa.

• Simboličke konstante se moraju definirati izvan svih funkcija pa se najčešće• Simboličke konstante se moraju definirati izvan svih funkcija, pa se najčešće definiraju na početku programa.

• Opći oblik naredbe za definiranje simboličkih konstanti je:

#define simboličko_ime vrijednost• Treba primijetiti da između simboličkog imena i vrijednosti ne postoji znak

id ži j k i t d k j db k (t i t )pridruživanja =, kao i to da na kraju naredbe nema oznake ; (terminatora).

• Pri prevođenju (kompajliranju) programa sve simboličke konstante sePri prevođenju (kompajliranju) programa sve simboličke konstante se zamjenjuju definiranim vrijednostima.

Upotreba simboličkih konstanti i komentara (2/2)

• Upotreba simboličkih konstanti je jako korisna u programima gdje se određene konstante koriste na više mjesta, a postoji mogućnost njihove promjene. Na primjer, ako u nekom programu koristimo vrijednost porezne stope od 0.15 (15%) a došlo je do promjene na 0.2 (20%), tada nije potrebno obavljati izmjene na svim mjestima u programu gdje je god korištena porezna stopa nego je dovoljno promijeniti vrijednost konstantekorištena porezna stopa, nego je dovoljno promijeniti vrijednost konstante koja predstavlja poreznu stopu.

⇒ Komentari⇒ Komentari

• Komentari počinju znakom /* i završavaju znakom */.

• Sve što se nalazi unutar znakova /* */ ne utječe na tok izvođenja j j

programa.

• Povećavaju razumljivost programa.

• Mogu se nalaziti u više linija.

• Nije dozvoljeno koristiti komentar unutar komentara.

Primjer(upotreba simboličkih konstanti)

#include <stdio.h>#define PI 3.14 Ako bi bilo potrebno promijeniti vrijednost PI, na

primjer zbog veće preciznosti, dovoljno je to učiniti u ovoj linijiint main()

{float R, P, V;

u ovoj liniji.

/* Unos poluprecnika sa tastature i izracunavanje */

printf (“\ Unesite poluprecnik:”);%scanf (“%f”, &R);

P=(R*R)*PI;V=(4/3)*R*R*R*PI;

/* Ispis na monitoru*/

printf(“\n Povrsina kruga sa poluprecnikom %2f je %.2f”,R,P);i tf(“\ Z i k l l ik %2f j % 2f” R V)printf(“\n Zapremina kugle sa poluprecnikom %2f je %.2f”,R,V);

return 0;}

Page 13: Sadržaj predmeta (ukratko) - · PDF filePrisustvo predavanjima, vježbe i ispiti • prisustvo predavanjima i vježbama je obavezno • prisustvo predavanjima ⇒max. 10 bodova •

Važnost stila pisanja programa i upotrebe komentara

#include <stdio.h>int main(){int 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; }

d ji j l d iji i

#include <stdio.h>

isti programi • donji program je pregledniji i jasniji zbog stila pisanja,zbog upotrebe komantara, te zbog umetanja praznih redova

int main(){int b1,b2,b3,rez;/*ucitavanje cijelih brojeva*/

umetanja praznih redova.

scanf("%d %d %d",&b1,&b2,&b3);rez=b1+b2+b3;

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

}