sadržaj predmeta (ukratko) - · pdf fileprisustvo predavanjima, vježbe i ispiti •...
TRANSCRIPT
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.
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
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.
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.
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
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.
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.
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.
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?)
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
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 (= =).
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;}
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;
}