Osnove racunarstva- materijal za prvu parcijalu- predavanja i tutorijali

October 14, 2017 | Author: Etf_Unsa | Category: N/A
Share Embed Donate


Short Description

Download Osnove racunarstva- materijal za prvu parcijalu- predavanja i tutorijali...

Description

Ciljj predmeta: p

OSNOVE RAČUNARSTVA Č 2010/2011

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 osnovama programiranja u programskom jeziku C.

Doc.dr. Haris Šupić

Sadržaj predmeta (ukratko)

Literatura ‰ Obavezna literatura:

‰ Uvod: U d metode t d i analize li rješavanja j š j problema, bl algoritmi l it i

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

‰ Programski jezik C: sintaksa, sintaksa funkcije funkcije, kontrola toka programa programa, nizovi, nizovi 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.

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, g , Dennis M. Ritchie,, C Programming g g Language, g g , Prentice Hall Inc., 1988. 2 .Al Kelley, Ira Pohl, A Book on C, Addison-Wesley. 3. Mark Burel, Fundamentals of Computer Architecture, Palgrave Macmillan, 2003.

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

Cilj predmeta

Prisustvo predavanjima, vježbe i ispiti • prisustvo predavanjima i vježbama je obavezno j ⇒ max. 10 bodova • prisustvo predavanjima

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 predmet ƒ Naučiti i razumjeti temeljne koncepte iz oblasti računarstva i informatike

• izrada domaćih zadaća ⇒ max 10 bodova

ƒ Steći vještinu implementacije jednostavnih programskih rješenja u programskom jeziku C

• I parcijalni ispit ⇒ max 20 bodova

ƒ Naučiti razlikovati bitno od nebitnog.

• II parcijalni ispit ⇒ max 20 bodova • Student sa najmanje 40 bodova pristupa završnom ispitu koji nosi max. 40 bodova (za pozitivnu ocjenu minimalno 20 bodova) • 20-40 20 40 bodova b d tijekom tij k semestra t ⇒ popravnii ispit i it iz i tema t koje k j student nije položio parcijalnim ispitima.

) Obavezno Ob kkontinuirano ti i čitajte čit jt i proučavjte č jt preporučenu č obaveznu b literaturu lit t (bilješke (bilj šk + preporučena č 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 literaturu. j i samostalno rješavajte j j zadatke. )Redovno dolazite na vježbe ƒ Ključna aktivnost koja će vas voditi uspješnom polaganju predmeta je da samostalno ili timski ako je to potrebno rješavate postavljene zadatke.

• Usmeni popravni ipit donosi maksimalno 40 bodova bodova, a za

ƒ Zadatke koje ne uspijete riješiti na vježbama, vježbama potrudite se da ih riješite obavezno kod kuće

pozitivnu ocjenu potrebno je minimalno 20 bodova.

)Redovno i samostalno radite domaće zadaće

• Student koji ne zadovolji na popravnom ispitu ponovno

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

upisuje predmet.

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

Sadržaj predavanja P01

Ne možete očekivati da ćete položiti predmet ako: ' Ne radite samostalno domaće zadaće ' Ne trudite se da samostalno rješavate zadatke na vježbama ' Ne N čitate čit t obaveznu b literaturu lit t ' Ne 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

• Uvod (Povijesni pregled, Turingova mašina,...) • Pojam i svojstva algoritma • Vremenska kompleksnost • Programiranje, kompajliranje, greške

Obavezno čitanje literature:

• Struktura S k C programa i uvodni d i opis i • Osnovno o varijablama • Osnovno o ulazu i izlazu • Stil pisanja programa i upotreba komentara

Skripta : strane: 8-9, 13-15

Muhamed ibn Musa al Horezmi

ABACUS

•arapski matematičar koji je živio u devetom stoljeću •jedan od najcjenjenijih matematičara t tič svih ih vremena •Izumljen j u Kini prije p j 3000 godina; g ; •Kolone su podijeljene u dva reda

•Smatrao je da se matematički problemi mogu rješavati upotrebom pravilnog niza koraka

Kuglice u gornjem dijelu imaju vrijednost 5, dok kuglice •Kuglice u donjem redu imaju vrijednost 1. •Još uvijek je u upotrebi

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. sistemu • Original te knjige je izgubljen, ali postoji prijevod na latinski. • U llatinskom ti k prijevodu ij d isperd i d svakog k pravila il piše: iš Dixit Algorizmi što je u prijevodu: Algorizmi je govorio • zadnji dio imena al Horezmi pretvoren je u Algorizmi

Blaise Bl i Pascal P l (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 č ciframa 0 do 9

Charles Babbage (1791-1871)

• postepeno ‘Algorizmi je govorio’ se pretvara u ‘algoritam glasi’

• Osmislio koncept mašine koju je nazivao analitička mašina

• U početku su se pd pojmom algoritma podrazumijevala samo pravila za računanje č j brojevima b j i

• Mašina je imala procesni dio i memoriju.

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

Neformalni opis Turingove mašine

Alan Turing (1912-1954) • Engleski matematičar i filozof

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

• 1936 objavljuje rad u kojem opisuje

programa.

j kasnijeje j j nazvana Turing-ova g mašinu koja

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

mašina.

• Glava čita simbole s tarke i u ovisnosti o stanju mašine može upisati

• Turingova mašina jedan od ključnih

novii simbol i b l preko k trenutnog, t t može ž promijeniti ij iti trenutno t t stanje t j i može ž

koncepata u modernoj teoriji računarstva

pomjerati glavu lijevo ili desno • Program se sastoji od instrukcija. g mašina može rješavati j zadatke kao i današnji j računari. • Turingova

Formalna matematička definicija Turingove mašine

Grafički prikaz značenja preslikavanja δ

Turingova mašina TM je 7-orka:

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

jje konačan skup p stanja j

•Σ

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 ∈ Γ

•F

je skup finalnih f stanja, F⊆Q

•δ

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

(L lijevo (L-lijevo, R R-desno, desno SS 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.

Sj

Si





x y z







t

y z



δ : S× G → S × G × {L, R, S} (Sj, t, t R) = δ (Si, x) • TM se nalazi u stanju Si, čita na traci simbol ‘x’, na njegovo mjesto piše simbol ‘t’ t i pomjera glavu u desno.

Primjer Turingove mašine

Graf stanja Turingove mašine • Alternativni način prikaza neke konkretne TM je pomoću grafa stanja. stanja

• Primjer TM koja binarnom broju na traci dodaje broj 2. S0 • Na početku i na kraju je glava pozicionirana na prvom simbolu. 1→1, R

• Na grafu stanja TM preslikavanje δ prikazujemo na slijedeći način: Si

→ ,L

S1

0→0, L

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

• Način rada TM možemo prikazati i upotrebom instrukcija TM. • Instrukcije I t k ij TM su slijedeće lij d ć 5-torke: 5t k

. >

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 završ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 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 kvadratnih metara t

S2

0→0, R 0→0, L

→ ,R

S3

S4

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

1

S0

1

0

1

S0

1

0

1

S0

1

0

1

S1

1

0

1

S2

1

0

1

S3

1

1

1

S3

1

1

1

S4

1

1

1

→1, 1 S

0→1, L

2(10) = 10(2)

0

1→0, L

1→1, L

S0

x → t, L

1

1→1, L

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

Pregled razvoja u zadnjih 60 godina(2/3)

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

Pojam algoritma

Pregled razvoja u zadnjih 60 godina(3/3)

• U svakodnevnom životu pri obavljanju različitih poslova izvodimo različite operacije • 1981 Pojavio se operacijski sistem MS-DOS MS DOS

nekim zadanim redoslijedom. j

• 1982 Intelov procesor 80 286

• Algoritmi se mogu opisati prirodnim govornim jezikom.

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

• Onaj ko izvršava taj algoritam (izvršitelj algoritma) mora poznavati taj jezik jezik. • Druga mogućnost opisa algoritama je pomoću programskih jezika koji zapravo predstavljaju umjetne jezike jezike.

• 1993 Intel Pentium

• Programski jezici omogućuju zapis algoritama na sažet, pregledan, precizan i

• 1997 Intel Pentium II

jednoznačan način način.

• 1999 Intel Celeron i Intel Pentim III

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

• 2000 Intel I t l Pentium P ti IV

• Jezik koji služi za opis algoritama za obavljanje elementarnih operacija koje može

• 2001 prvi 64 bitni Athlon procesor

obaviti računar naziva se mašinski jezik.

Svojstva algoritama

Primjer algoritma (zbrajanje prvih n prirodnih brojeva)

• Za svaki algoritam moraju jasno biti definirani početni objekti. • 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 db (i (instrukcijom). k ij ) • 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đurezultati. • Postupci izgradnje algoritama nisu jednoznačni. • Izgradnja algoritama zahtijeva kreativnost.

• Ovaj algoritam je opisan pomoću Ulaz (n) Suma:=0; Suma: 0; za i:= 1 do n raditi Suma:=Suma+i; vrati (Suma)

riječi iz našeg prirodnog jezika. • Ovakav zapis algoritma predstavlja pseudokod. • Opis je dovoljno precizan da se može vidjeti naćin rješavanja zadatka. • 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 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 jezik.

Još jedan algoritam za sabiranje prvih n prirodnih brojeva

Vremenska kompleksnost(1/2) • Pored ispravnosti algoritma važno svojstvo algoritma je i trajanje algoritamskog procesa.

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

• Ima n/2 takvih parova parova.

• Trajanje algoritamskog procesa izražavamo kao broj osnovnih operacija koje algoritam treba izvesti. • Za izvođenje svake operacije potrebno je neko vrijeme. • Potpuno P t precizna i analiza li svih ih algoritama l it sa aspekta kt ttrajanja j j algoritamskog l it k procesa je nemoguća.

drugi algoritam za sabiranje prvih n brojeva

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

• Zadovoljavamo Z d lj se pretpostavkom t t k da d jje ttrajanje j j algoritamskog l it k procesa proporcionalno ukupnom broju operacija. • Svojstvo S j t algoritma l it kkoje j aproksimativno k i ti izražava i ž trajanje t j j algoritamskog l it k procesa naziva se vremenska kompleksnost.

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

Vremenska kompleksnost(2/2)

Zašto viši programski jezici?

• Prvi algoritam ima vremensku kompleksnost koja je proporcionalna sa n. Tada kažemo da algoritam ima vremensku kompleksnost O(n)

• Mašinski jjezik jje vrlo nepraktičan p jer j od p programera g zahtijeva j detaljno j

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

poznavanje arhitekture mikroprocesora i ostalih komponenti u arhitekturi

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

računara.

Tada kažemo da algoritam ima vremensku kompleksnost O(1) Općenito ako je trajanje nekog algoritamskog procesa proporcionalno s n2 njegovu Općenito, vremensku kompleksnost zapisujemo kao O(n2).

• Zbog toga su dizajnirani umjetni jezici koji su prikladniji za programere jer u načelu ne zahtijevaju detalnjo poznavanje arhitekture računara. •Ti jezici se nazivaju viši programski jezici.

p j vremensku kompleksnost p i u drugim g situacijama j kada jje trajanje j j Slično zapisujemo

programski g jjezici moraju j biti tako dizajnirani j da se p programi g napisani p u • Viši p

algoritamskog procesa, na primjer, proporcionalno s n3, n·log (n) itd.

njima mogu prevoditi u mašinski jezik računara da bi se mogli izvoditi.

• U većini slučajeva analiza vreemnske kompleksnosti algoritama je vrlo složena 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 kompleksnost.

programski g jjezici su značajno j p povećavli p produktivnost kreiranja j softvera. • Viši p

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

Programiranje i izbor programskog jezika

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

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

d t lj poznaju detaljno j pravila il kkoja j opisuju i j ttajj jjezik. ik

programskih jezika u programski kod kod, te na taj način oblikujemo opis algoritma pomoću dotičnog programskog jezika.

j nekog g jjezika i strogo g p pridržavanje j p prilikom p programiranja g j u tom • Učenje jeziku mogu na neki umanjiti važnost osnovnih svojstava nekog

• Neki od viših programskih jezika: Fortran • Pascal • Ada • Cobol

algoritma.

Za uspješno š oblikovanje novog programa nije isključivo č važno ž da je 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.

•C • C++ • Java • C# • Visula Basic Basic, itd. itd

• Svaki od navedenih p programskih g jjezika ima svoje j specifičnosti p koje j g ga čine prikladnijim u odnosu na neki drugi jezik za neku domenu njegove primjene. g jjezik C karakterizira visok stupanj p j općenitosti p u smislu primjene p j u • Programski različitim problemskim domenama, odnosno sferama ljudskog djelovanja za koje se oblikuju programi koji rješavaju probleme iz tih oblasti.

Programiranje, kompajliranje, povezivanje, greške(1/3) Unos programskog koda (ASCII datoteka))

programski kod

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

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

sintaksne greške (eng. syntax errors)

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

kompajliranje biblioteka potprograma

programer koristi • Kompajliranje izvornog koda programa u objektni kod pomoću kompajlera kompajlera.

greške u toku izvođenja (eng. run-time errors)

izvršni kod

objektni kod

povezivanje

• Kompajler nam daje sintaksne greške u programu (pravopisne i formalne) greške povezivanja (eng. linker errors))

testni podaci izvođenje programa

rezultati

logičke greške

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

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

Struktura C programa i uvodni opis (1/3)

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

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

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

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

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

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

• Izvođenje izvršnog programa.

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

• Odredimo neke testne podatke i očekivane rezulate.

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

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

• Završetak bloka naredbi označava se znakom } , pri čemu iza tog znaka ne

• Logičke greške

stavljamo znak ; (terminator) .

(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 (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. • Programski P ki jjezik ik C nije ij pozicijski i ij ki a tto znači či d da programski ki kkod d može ž početi č ti u bilo bil kojoj liniji. • Komentari, Komentari naredbe i izrazi se mogu nalaziti u više linija 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

• 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?)

Ključne riječi (ANSI standard)

Varijable

(ANSI ⇔ American National Standatds Institutre)

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

poprimiti različite vrijednosti vrijednosti.

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

auto

extern

• Varijable su promjenljivi podaci koji će tijekom izvođenja programa moći • Svakoj varijabli se pridružuje neko ime.

sizeof

• Varijable zauzimaju određeni prostor u memoriji, što ovisi o tipu varijable.

break

float

static

• Imena varijabli se sastoje od slova i brojeva, pri čemu prvi znak mora biti

case

for

struct

_ slovo ili znak ‘_’.

char

goto

switch

• Nije dozvoljeno koristiti ključne riječi kao imena varijabli.

const

if

typedef

continue

int

union

default

long

unsigned

do

register

void

double

return

volatile

else l

short h t

while hil

enum

signed

• Varijable se obavezno moraju deklarirati prije korištenja u programu. 32 riječi

•Opći oblik za deklaraciju: 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 deklaraciji varijabli

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

• Primjer deklaracije varijabli:

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

znakovni tip

char

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

cjelobrojni tip

int

pohranjivanja p j j u memoriji. j

realni tip

float

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

realni l i ti tip sa d dvostrukom t k

d bl double

preciznošću

kompajleru. • Grafički, varijable možemo prikazati na slijedeći način:

8 bi bitova • Svaki tip podataka zauzima određeni prostor u memoriji. • Pravilnim izborom tipova podataka povećeva se efikasnost programa.

a

16 bi bitova

32 bi bita

b

X1

c

X2

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

Ovakav prikaz će nam u nekim budućim primjerima omogućiti lakše razumijevanje tih primjera.

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

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

podataka ostvaruje upotebom funkcija.

unesenih podataka s argumentima u listi argumenata.

• Funkcije se nalaze u standardnoj U/I datoteci i definirane su ANSI standardom.

• Formatirani izlaz

• Formatirani ulaz:

• Opći oblik funkcije koja služi za formatirani ispis na standardni izlaz je: printf(“kontrolni niz”, lista argumenata);

• Opći oblik funkcije: scanf(“kontrolni f(“k t l i niz i “ “, li lista t argumenata); t ) • Kontrolni niz sadrži između ostalog oznake formata. Oznaka formata se sastoji

• Kontrolni niz se sastoji od dva tipa znakova. • Prvi tip je oznaka formata ispisa koja se sastoji od obaveznog znaka % i oznake

od d znaka k % i titipa fformata. t

tipa formata koji se nalazi odmah iza %.

• Neki od formata za unos su:

• Neki od formata za ispis su:

%c %d %f

učitava jedan znak; učitava cijeli broj; učitava broj s pokretnim zarezom.

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

% %c

i i j jjedan ispisuje d znak; k

%d

ispisuje zadani argument u decimalnom zapisu;

%f %

ispisuje sp suje zadani ada a argument gu e t kao ao b broj oj s po pokretnim et zarezom. ae o

• Drugi tip znakova kontrolnog niza predstavlja poruku.

Jedan jednostavan primjer(1/2) pretprocesorska naredba #include

početak funkcije main

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

deklaracija varijabli brojeva*/ brojeva /

varijable. • Deklaracijom varijabli se određuje ime i tip varijable • Funkcija main() označava mjesto početka izvršavanja programa.

preko argumenata.

rez=b1+b2+b3;

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

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

Kontrolni niz

• printf () predstavlja poziv funkcije za ispis podataka. Više o ovim funkcijama ćemo govoriti kasnije

}

kraj funkcije main. komentari

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

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

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

; return 0;

Jedan jednostavan primjer(2/2)

Lista argumenata

• 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 ispitivanje jednakosti koji je predstavljen dvostrukim znakom (= =).

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

Pretprocesorske naredbe •naredba #include

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

predstavlja tzv. pretprocesorsku

naredbu kojom se uključuje datoteka stdio.h u program.

• Simboličke konstante se moraju definirati izvan svih funkcija, pa se najčešće

• Prije procesa prevođenja izvornog C programskog koda u mašinski jezik,

definiraju na početku programa.

pokreće se tzv. pretprocesor.

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

• Ovisno o pretprocesorskim naredbama, pretprocesor mijenja programski kod

simboličko_ime

vrijednost

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

a zatim se tako promijenjeni programski kod prevodi.

pridruživanja =, kao i to da na kraju naredbe nema oznake ; (terminatora). • Promjene se zapisuju u privremenu datoteku, te na taj način datoteka s izvornim programskim kodom ostaje nepromijenjena.

• Pri prevođenju (kompajliranju) programa sve simboličke konstante se zamjenjuju definiranim f 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

Primjer(upotreba simboličkih konstanti) #include #define PI 3.14

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

int main() { fl t float

Ako bi bilo potrebno promijeniti vrijednost PI, na primjer p j zbog g veće preciznosti, p , dovoljno j jje to učiniti u ovoj liniji.

R P R, P, V V;

korištena porezna stopa, nego je dovoljno promijeniti vrijednost konstante /* Unos poluprecnika sa tastature i izracunavanje */

koja predstavlja poreznu stopu.

printf (“\ Unesite poluprecnik:”); scanf (“%f”, &R); P=(R R) PI; P=(R*R)*PI; V=(4/3)*R*R*R*PI;

⇒ Komentari • Komentari počinju znakom /* i završavaju znakom */. • Sve što se nalazi unutar znakova /* */ ne utječe na tok izvođenja

/* Ispis na monitoru*/ / monitoru /

programa. • Povećavaju razumljivost programa.

printf(“\n Povrsina kruga sa poluprecnikom %2f je %.2f”,R,P); printf(“\n p ( Zapremina p kugle g sa p poluprecnikom p %2f j je %.2f”,R,V); , , ); return 0;

• Mogu se nalaziti u više linija. linija • Nije dozvoljeno koristiti komentar unutar komentara.

}

Važnost stila pisanja programa i upotrebe komentara #include int main(){ int b1 b1,b2, 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

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

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

brojeva*/

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; }

Sadržaj predavanja 02

Cjelobrojni tip podataka(1/3) • Cjelobrojni tip podataka može imati slijedeće prefikse:

• Cjelobrojni tip podataka • Realni tip podataka • Aritmetički operatori

Obavezno čitanje literature:

• Izrazi I i • Operatori inkrement i dekrement

Skripta : strane: 16 - 26 + 96 - 106

- signed i d

omogućuje ć j pridruživanje id ži j i pozitivnih iti ih i negativnih ti ih vrijednosti; ij d ti

- unsigned

omogućuje pridruživanje samo pozitivnih vrijednosti;

- long

omogućuje da se proširi raspon cjelobrojnih vrijednosti koje

• Kontrola toka programa

varijabla može poprimiti;

• Naredba za jednostruki izbor • Naredba za dvostruki izbor

Napomena: dio gore navedenih

• Naredba za višestruki izbor

stranica iz skripte sadrži i koncepte

• Ponavljanje naredbi/petlja for

koji neće biti obrađeni na ovom predavanju. Studentima se savjetuje da ipak pročitaju i taj dio.

+

- short

sužava raspon cjelobrojnih vrijednosti koje varijabla može poprimiti. poprimiti

• Cjelobrojni tip deklariran sa prefiksom long omogućuje veću preciznost u odnosu na deklaraciju ka je korišten prefiks short short. • Pretpostavljeni prefiks cjelobrojnog tipa je signed.

• Primjeri koji ilustriraju sve uvedene koncepte

Cjelobrojni tip podataka(2/3) • Pretpostavim da int zauzima dva bajta.

Cjelobrojni tip podataka(3/3) • ANSI C ne postavlja ograničenja na preciznost prikaza varijabli koristeći prefikse short i long, pri čemu ipak vrijedi:

• To znači da ta varijabla može poprimiti vrijednosti između: -32768 i 32767

prec(short) ≤ prec(int) ≤ prec(long) gdje prec označava preciznost, odnosno broj cifri.

• Na primjer, neka je stanje u 16-bitnom registru:

1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1

int signed

short

unsigned

long short

• Uz pretpostavku da je korišten 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.

p precizan p prikaz deklaracije cjelobrojnih varijabli

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 short a; unsigned

signed int a; int a;

Primjer uticaja prefiksa na cjelobrojnu varijablu

Realni tip podataka(1/3) • U programiranju često imamo potrebu deklarirati varijablu koja modelira neku

#include

fizikalnu veličinu ili neku drugu vrstu podatka realnim brojem.

int main() i i () { int a; unsigned int b; a=-1; b=a; printf(“\n a=%d b=%u”,a,b); return 0; }

• Ti brojevi su često “vrlo mali” i “vrlo veliki”. • Obično za prikaz velikih i malih brojeva koristimo slijedeću notaciju: jedno decimalno mjesto isperd tačke

34542000=3.4542·107 • Slično se mogu prikazati i binarni brojevi brojevi.

• Izvođenje ovog programa daje rezultat:

• Na primjer:

a = -1 b = 65535 (uz pretpostavku da tip int u konkretnoj implementaciji C-a zauzima 16 bitova) a = -1 1 b = 4294967295 (uz pretpostavku da tip int u konkretnoj implementaciji CC a zauzima 32 bita)

0.000000101=1.01·2-7 1010 11=1 1010.11 1.01011 01011 ·2 23 • Ovakav zapis brojeva nazivamo normalizirani zapis.

Realni tip podataka(2/3)

0 . 0 0 0 0 0 0 1 0 1 = 1 . 0 1 · 2 -7

Realni tip podataka(3/3) Na prvom mjestu jje uvijek j jjedinica. float

1010.11=1.01011 ·23

double

• Kod gore prikazanog načina zapisa binarnih brojeva, na prvom mjestu je uvijek jedinica.

long

•To znači, da se ta jedinica ne mora niti zapisivati jer je možemo podrazumijevati. Na taj način se štedi jedan bit, što doprinosi većoj preciznosti. Taj bit se naziva skriveni bit (eng. hidden bit) •Taj

eksponent

• Primjeri mogućih deklaracija: - float a; - double b; - long double c;

precizan prikaz j varijabli j deklaracije realnog tipa

IEEE standard zapisa realnih brojeva

Primjer prikaza realnog broja tipa float

(IEEE-Institute (IEEE Institute of Electrical and Electronics Engineers)

P 31

K 30

• Potrebno je odrediti prikaz broja 6.625 koji je pridru\en varijabli deklariranoj kao float.

M 23

22

6.625(10) = 110.101(2)

0

•Binarni broj dalje možemo zapisati na slijedeći način:

• P označava predznak (1 bit)

110.101=1.10101•22

g brojj - 1 negativan - 0 pozitivan broj

• Izračunajmo karakteristiku: K= 2 + 127=129

• K označava karakteristiku (8 bitova)

129(10) =10000001(2)

- binarni eksponent+127 - raspon binarnog bi eksponenta k t jje -126 126 - 127 - raspon karakteristike je 0 - 255 • M označava mantisu, pri čemu se vodeća jedinica ne zapisuje (23 bita).

Šta je sa zapisom broja 0?

• Nakon izbacivanja vodeće jedinice i tačke za mantisu dobivamo:10101 • Prema tome, broj 6.625 kao tip float će biti zapisan na slijedeći način:

0 10000001 10101000000000000000000

Zapis +∞, -∞ i “not a number” Prikaz “broja” +∞ je:

• Pošto je u normaliziranom zapisu vodeća uvijek jedinica, postavlja se pitanje kako prikazati broj 0. • Vrjedi slijedeći dogovor:

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

“pozitivna nula” “negativna nula”

00000000000000000000000000000000 10000000000000000000000000000000 predznak karakteristika

0 11111111 00000000000000000000000

mantisa

Prikaz “broja” broja -∞ ∞ je: 1 11111111 00000000000000000000000 • Svi bitovi mantise su 0, karakteristika ima vrijednost 255, a bit predznaka je 1. • Gore prikazani brojevi se najčešće dobiju zbog dijeljenja s nulom.

Neki specijalni slučajevi

Aritmetički operatori

• Ako karakteristika ima vrijednost 255, te postoje bitovi mantise koji nisu 0, onda se

• Binarni operatori:

zapis klasificira kao

+ * / %

nott a number b ((nije ij b broj) j) • Ovakav zapis se može dobiti zbog toga što je prilikom izvođenja neke operacije došlo do greške. • Primjer zapisa klasificiranog kao not a number:

0 11111111 10000000000000000000001

sabiranje bi j oduzimanje množenje dijeljenje modulo

• Operator modulo (%) daje ostatak cjelobrojnog dijeljenja. • Može se primijeniti samo na cjelobrojne tipove podataka.

• Postoje i specijalni slučajevi kada je vrijednost karakteristike 0 0, a postoje bitovi mantise koji nisu nula. • Takav zapis nazivamo “denormalizirani denormalizirani zapis” zapis • Ne podrazumijeva da je skriveni bit jednak 1 i smatra se da je vodeći bit mantise 0. j eksponenta p jje -126 ((ne koristi se formula K=binarni eksponent p +127)) • Vrijednost • Primjer: 0 00000000 01010000000000000000000 (=0.0101•2-126)

Izrazi

Šta radi naredba i=i+1; ?

• Izrazi se sastoje od operatora, operanada i zagrada. • Svaki izraz daje neki rezultat rezultat.

• Naredba a edba i=i+1; ; je jed jedna a od najčešče ajčešče korištenih o še naredbi a edb u p programiranju. og a a ju

• Primjeri izraza:

• Pošto kod početnika uperator pridruživanja unosi određene dileme jer ih podsjeća

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.

Za pridruživanje vrijednosti varijablama koristi se znak =.

j znaka = u matematici,, na ovom mjestu j bi ta zabuna trebala da se ukloni. na značenje • Značenje naredbe

i=i+1; je: “Pridružiti novu vrijednost varijabli i a ta nova vrijednost se dobije tako da se trenutna vrijednost te varijable uveća za 1”.

Na primjer, slijedeća naredba: i=10; varijabli i pridružuje vrijednost 10.

i

…….

…….

8

9

…..

…..

Primjer (operator modulo) #include

Prioritet operatora • Prioritet operatora *, / i % je viši od operatora + i -.

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; }

Izvođenjem programa dobit će se: Ostatak dijeljenja 7 i 3 je 1.

• Na primjer primjer, u izrazu:

x=a/b+c*d prvo će se izvesti operacije dijeljenja i množenja, a nakon toga i operacija sabiranja. • Kod operatora s istim prioritetom, izvršavanje operacija ide od lijeve strane prema desnoj. • Prioritet izvođenja operacija se može mijenjati upotrebom zagrada. • Na primjer, u izrazu:

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

Operatori inkrement i dekrement • Unarni opertori. ++ --

Operatori inkrement i dekrement u izrazima U izrazima nije svejedno da li operatori ++ i -- stoje ispred ili iza varijable.

operator inkrement - uvećaj za jedan; operator dekrement- umanji za jedan.

• Mogu se pisati iza ili ispred varijable varijable.

• O položaju operatora u odnosu na varijablu ovisi kada će se vrijednost varijable povećati(++) ili smanjiti(- -). • Ako operator stoji ispred varijable, onda se vrijednost varijable prvo promijeni a

x=x+1;

x++;

x=x-1;

x--;

• Na primjer, iza odsječka programa: …. x=15; x++; … vrijednost varijable x je 16. •Isto vrijedi i u slučaju da je umjesto x++ napisano ++x.

zatim se promijenjena vrijednost koristi u izrazu. • Ako operator stoji iza varijable, onda se u izrazu uzima trenutna vrijednost varijable, a tek nakon izračunavanja izraya se promijeni vrijednost varijable. • Na primjer, neka je x=100. Izračunavanjem izraza: y ++x; y=++x; vrijednost varijable x će se prvo povećati za 1, a zatim će se ta vrijednost pridružiti varijabli yy. • Dakle, varijabla y će poprimiti vrijednost 101.

Operatori inkrement i dekrement u izrazima(2/2)

Kontrola toka programa

• Suprotno, izračunavanjem izraza:

………….

• Kod proceduralnih programskih jezika naredbe se

y=x++;

izvršavaju sekvencijalno, a to znači redoslijedom

varijabli y će se pridružiti vrijednost varijable x (a to je 100), a zatim će se povećati za

kojim su napisane.

1 vrijednost varijable x.

• Naredbe za kontrolu toka programa omogućuju:

• Vrijednost varijable y nakon izračunavanja gornjeg izraza je 100, dok je vrijednost

- ponavljanje jedne ili više naredbi;

varijable x tada 101.

- preusmjeravanje toka programa.

Naredba n

Naredba n+1

• Prikladnim odabirom operatora inkrement i dekrement može se povećati razumljivost programskog koda koda. • Operatori ++ i -- se ne mogu primijeniti na konstante i na aritmetičke izraze.

Naredba +2

• To znači da su slijedeći izrazi pogrešni:

…………..

(2*x+y)++ 5.672++

Primjer(naredba za jednostruki izbor)

Naredba za jednostruki izbor • Opći oblik naredbe za jednostruki izbor je:

if (uvjet) { blok naredbi; }

• Uvjet može biti bilo koji aritmetički ili logički izraz. • Blok Bl k naredbi dbi može ž imati i i jednu j d ili više iš naredbi. dbi

#include

………….

NE

int main() { int a,b;

uvjet

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”); }

DA blok narebi

• Uvjet je istinit ako je rezultat izraza različit od nule. • Ako je uvjet istinit, blok naredbi se izvršava. • U suprotnom, naredbe koje se nalaze u bloku se preskaču.

}

………….

Š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

Primjer (naredba za dvostruki izbor)

Naredba za dvostruki izbor • Opći oblik naredbe za jednostruki izbor je:

………….

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

#include

NE

uvjet

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

blok narebi 2

………….

• Uvjet može biti bilo koji aritmetički ili logički izraz. • Ako je uvjet ispunjen (vrijednost izraza je različita od 0, izvršava se blok naredbi1 i preskače blok naredbi2. • U suprotnom(uvjet nije ispunjen, tj. izraz ima vrijednost 0), izvršava se blok narebi2, a preskače se blok naredbi1.

Višestruki izbor (if-else if-else)

}

Primjer (program za rješavanje kvadratne jednadžbe)

Opći oblik pisanja naredbi za višestruki izbor je: ( j 1) ) if (uvjet { blok naredbi 1; } else if (uvjet 2) { blok naredbi 2; } …………….. else if (uvjet n-1) { blok naredbi n-1; } else l { blok naredbi n; }

#include #include

Uključuje se datoteka math.h u kojoj je definicija funkcije pow() koja je korištena u programu.

• Ovakav oblik naredbi if-else if-else omogućava uzastopno ispitivanje niza uvjeta.

int main() { float a, b, c, x1, x2, x1Re, x2Re, x1Im, x2Im, t, D;

• Ako je bilo koji uvjet istinit (različit od nule) izvršava se blok naredbi pridružen tom uvjetu, dok se svi ostali blokovi naredbi preskaču k č • Broj uvjeta nije ograničen • Uvjet može biti logički ili aritmetički izraz

printf(”\n i f(”\ Unesite i k koeficijente fi ij k kvadratne d j jednadzbe d d b a,b,c:"); 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 izvršiti ako je diskriminanta D x2 = (-b - t)/(2*a); pozitivna p printf (”\n ( \n Rjesenja su: x1=%f x1 %f x2=%f\n", x2 %f\n , x1, x2); }

Programska petlja for

Nastavak primjera programa za rješavanje kvadratne jednadžbe

Opći oblik programske petlje for: else if (D == 0) { x1 = -b/(2*a); printf (”\n Rjesenja su: x1=x2=%f\n", x1); } Blok naredbi koji će else se izvršiti ako je { di diskriminanta ki i t D t = sqrt(-D); jednaka nuli x1Re = -b/(2*a); x2Re = x1Re; x1Im = t/(2*a); x2Im = -x1Im; printf (”\n ( \n Rjesenja su: x1 = (%f (%f,%f)\n %f)\n", x1Re, x1Re x1Im); printf (” x2 = (%f,%f)\n", x2Re, x2Im); Blok naredbi koji će } se izvršiti ako jje return 0; 0 diskriminanta D } negativna

Primjer • Ispis na monitoru niza brojeva od 1 do 10

#include int main() { int broj; for(broj=1; broj 5

(10>5)

TRUE

• Na primjer, redoslijed izvršavanja izraza

2*100(a+5)

• Dakle, Dakle prvo se obavi peracija sabiranja sabiranja, a nakon toga se poredi rezultat sabiranja sa vrijednošću varijable a. operator značenje _______________________ == jednako ! != nije ij jjednako d k > veće >= veće ili jednako < manje j >=, >, > 7 6=3

istina laž laž

• Pod pojmom logičkog suda podrazumijevamo tvrdnju koja se može vrednovati kao

gornje j sudove uvedimo sljedeće j simbole: • Za g

istinita ili kao lažna. • Simboli predstavljaju logičke varijable.

A= “4>3” B= “4>7” C= “6=3” • Tada, gornje logičke varijable imaju slijedeće vrijednosti:

g varijabla j može imati samo dvije j vrijednosti: j LAŽ i ISTINA. • Logička

A=1, A 1, B B=0, 0, C=0 C 0

ao označavanje ača a je sudo sudova a koriste o ste se simboli. s bo • Za

•Za označavanje tih dviju vrijednosti koriste se različite oznake: • Gore prikazani primjeri nazivaju se osnovni ili atomni sudovi. LAŽ 0 T

ISTINA 1 ⊥

• Istinitost atomnih sudova utvrđuje se neposrednim zaključivanjem o sudu

Upotreba matematičke logike u računarstvu

Negacija

• Istinitost složenih sudova utvrđuje se upotrebom formula.

• Operator negacije djeluje na jedan atom.

j od: • Formule se sastoje

j negacije g j jje: • Tablica definicije

- atoma (osnovnih sudova) - logičkih l ičkih operatora t - zagrada

Primjer

• Obično se koriste slijedeći logički operatori: simbol operatora

¬A

0

1

1

0

Pogledajmo slijedeće sudove:

značenje

¬

negacija



konjunkcija



disjunkcija



implikacija



d dvostrana t iimplikacija lik ij

sud A

Vrijednost A

Vrijednost ¬A

sud B

“4>3” 4 3

1

0

“4≤3” 4 3

“4>7”

0

1

“4≤7”

“6=3”

0

1

“6≠3”

suprotni opertori

Konjunkcija i disjunkcija

Neki korisni aksiomi (zakoni) (1/2)

• Tablice definicija konjunkcije i disjunkcije su: k j k ij konjunkcija:

Aksiom 1: Zakon neutralnog elementa disjunkcija:

A

B

A∧B

A

B

A∨B

0

0

0

0

0

0

0

1

0

0

1

1

1

0

0

1

0

1

1

1

1

1

1

1

• 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

A

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

Neki korisni aksiomi (zakoni) (2/2)

Programska petlja while

• Zakon idempotencije: A∨A=A A∧A=A

• Opći oblik petlje while je:

• Zakon asocijacije:

while (uvjet) blok naredbi;

uvjet

NE

DA

(A ∨ B) ∨ C=A ∨ (B ∨ C) ((A ∧ B)) ∧ C C=A ∧ ((B ∧ C)

blok naredbi

• De Morganov zakon: • Uvjet može biti varijabla, aritmetički izraz ili logički izraz.

¬(A ∧ B) = ¬A ∨ ¬B

• Uvjet ponavljanja petlje se isptuje na početku. To znači da postoji mogućnost da

¬(A ∨ B) = ¬A ∧ ¬B

se blok naredbi ne izvrši niti jednom jednom. • Blok naredbi u petlji se ponavlja sve dok je uvjet istinit (različit od nule).

• Zakon apsorpcije:

• Kada uvjet postane neistinit, program se nastavlja prvom naredbom iza petlje

A ∨ (A ∧ B) = A A ∧ (A ∨ B) = A

Odnos programskih petlji while i for • Pošto petlje for i while imaju ispitivanje uvjeta na početku, vrijedi da se svaka programska petlja for može zamijeniti petljom while i obrnuto obrnuto.

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

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

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

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

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



00000011

c=c>>3;



00000001

c=c
View more...

Comments

Copyright ©2017 KUPDF Inc.
SUPPORT KUPDF