210
1 Sveučilište J.J. Strossmayera u Osijeku Elektrotehnički fakultet PROGRAMIRANJE I (predavanja u ak. god. 2005./2006.) P2006-01-02-03-04 doc.dr.sc. Goran Martinović www.etfos.hr/~martin [email protected] Tel: 031 224-766 Soba: 1-13 Osijek, listopad 2006. PREDAVANJA (2h) Predavanja se izvode kao Power Point prezentacija Ukratko se izlažu osnovni pojmovi o računalnoj i programskoj opremi, te uvod u programiranje Za šira znanja o pojedinim temama preporuča se dostupna literatura

PREDAVANJA (2h) - etfos.unios.hrjbalen/doks/SVA predavanja_25-01-2010.pdf · J. Šribar, B. Motik, “Demistificirani C/C++”, Element, Zagreb, 2001 L. Budin, “Informatika za 1

  • Upload
    phamthu

  • View
    221

  • Download
    2

Embed Size (px)

Citation preview

Page 1: PREDAVANJA (2h) - etfos.unios.hrjbalen/doks/SVA predavanja_25-01-2010.pdf · J. Šribar, B. Motik, “Demistificirani C/C++”, Element, Zagreb, 2001 L. Budin, “Informatika za 1

1

Sveučilište J.J. Strossmayera u OsijekuElektrotehnički fakultet

PROGRAMIRANJE I(predavanja u ak. god. 2005./2006.)

P2006-01-02-03-04

doc.dr.sc. Goran Martinovićwww.etfos.hr/~martin

[email protected]: 031 224-766

Soba: 1-13

Osijek, listopad 2006.

PREDAVANJA (2h)

Predavanja se izvode kao Power Point prezentacija

Ukratko se izlažu osnovni pojmovi o računalnoj i programskoj opremi, te uvod u programiranje

Za šira znanja o pojedinim temama preporuča se dostupna literatura

Page 2: PREDAVANJA (2h) - etfos.unios.hrjbalen/doks/SVA predavanja_25-01-2010.pdf · J. Šribar, B. Motik, “Demistificirani C/C++”, Element, Zagreb, 2001 L. Budin, “Informatika za 1

2

LABORATORIJSKE VJEŽBE (2h)

Asistenti:

Marina Pešut, dipl. inž.

Zoran Balkić, dipl.inž.

Hrvoje Gašparović, dipl.inž.

Zvonimir Radoš, dipl.inž.

Laboratorij 3-27 i/ili 3-28

Upute a za laboratorijske vježbe od asistenata (s weba)

Vježbe su obavezne, a izostanak se mora ispričati inadoknaditi u prvom slobodnom terminu?!

Uvjet za dobivanje potpisa su odrađene sve laboratorijske vježbe i redovito pohađanje predavanja

4

Literatura:KnjigeDarko Grundler, “Primijenjeno računalstvo”, Graphis, Zagreb, 2000.

V. Bolt, T. Čukman, “C/C++ kroz primjere”, ProCon, Zagreb, 1994

J. Šribar, B. Motik, “Demistificirani C/C++”, Element, Zagreb, 2001

L. Budin, “Informatika za 1. razred gimnazije”, Element, Zagreb 1999.

Časopisi i wwwBug, …

Skripta i predavanjaBilješke i materijali s predavanja

Sve dostupne skripte i ostala literatura

Page 3: PREDAVANJA (2h) - etfos.unios.hrjbalen/doks/SVA predavanja_25-01-2010.pdf · J. Šribar, B. Motik, “Demistificirani C/C++”, Element, Zagreb, 2001 L. Budin, “Informatika za 1

3

5

SADRŽAJ:Osnovni pojmovi i povijesni pregled računalstva. Osnove ustroja računala: središnja procesorska jedinica, vanjske jedinice. Sustavska i primjenska programska podrška računala. Mrežni rad i Internet. Zapis brojeva i znakova u računalu. Osnove matematičke logike. Algoritmi: elementi, zapis, vremenska i prostorna složenost kroz primjere. Programiranje, elementi jezika, postupak izrade programa, jezici različite složenosti, pojam i primjeri prevoditelja, interpretera i preglednika. Programski jezik C kroz primjere: struktura programa, ključne riječi, tipovi podataka, predprocesrskenaredbe, varijable, aritmetički i logički izrazi, ulaz i izlaz podataka, grananje i ponavljanje u programu, funkcije, pojam pokazivača, polja i strukture, rad s datotekama.

6

ZNANJA I VJEŠTINE:Nužna znanja iz načela rada i građe računala. Uspješna uporaba aktualnih sustavskih i primjenskih programa. Osnove programiranja i ostvarenje jednostavnih programa u programskom jeziku C.

Page 4: PREDAVANJA (2h) - etfos.unios.hrjbalen/doks/SVA predavanja_25-01-2010.pdf · J. Šribar, B. Motik, “Demistificirani C/C++”, Element, Zagreb, 2001 L. Budin, “Informatika za 1

4

Potreba za brojanjem

Da bi na vrijemeorganizirali svojevjerske obrede i proslave plemenskivračevi (shamani) sumorali na neki načinbrojati dane, mjesece, godišnjadoba

50000-20000 BC - Prve metode brojanja

Prva metoda brojanja je korištenje 10 prstiju (dekadski brojevni sustav); prsti sudjelotvorni kod brojanja ali nisu prikladniza računanjeKamenčići za brojeve veće od 10Urezivanje zareza na kosti ili štapuKamenčići u rupamaZapisivanje crtica

Page 5: PREDAVANJA (2h) - etfos.unios.hrjbalen/doks/SVA predavanja_25-01-2010.pdf · J. Šribar, B. Motik, “Demistificirani C/C++”, Element, Zagreb, 2001 L. Budin, “Informatika za 1

5

3000 BC - AbacusIzumljen u KiniPrvi put opisan u Babilonu, a unapređene verzije se koriste od 1300 BC Stupci kuglica su podijeljeni u dva područja. Kugliceu gornjem vrijede 5 puta više od kuglica u donjemretku.

Oko 1900 BC -Stonehenge prvo računalo !?

Građevinapronađena naSalysbury Plain u EngleskojNeki znanstvenicismatraju da jeslužila za proračunastronomskihpodataka

Page 6: PREDAVANJA (2h) - etfos.unios.hrjbalen/doks/SVA predavanja_25-01-2010.pdf · J. Šribar, B. Motik, “Demistificirani C/C++”, Element, Zagreb, 2001 L. Budin, “Informatika za 1

6

820.g. - Decimalni brojevi

Muhammed idn Musa Al-Khwarizmi (780 AD - 850 AD),perzijski matematičar, uveo je Hindu decimalni sustav i počeo se koristiti pojmom nulaU knjizi: Al-jabr wa'l muqabalah je opisao Diophantovu algebarsku jednadžbu (moderna riječ algebra je izvedena odovuda). U knjizi rječima opisuje postupke izračunavanja koje danas nazivamo algoritmima (to je zvučalo kao: Alkhwarizm)Prošlo je tisuću godina da bi netko uočio njegov uradak. Bila je to Ada Lovelace who gave him the honors due. It was also she who coined the word Algorithm(12)

1623.g. - Prvi mehanički kalkulator

Wilhelm Schickard izumio i načinio prvimehanički kalkulator.

Page 7: PREDAVANJA (2h) - etfos.unios.hrjbalen/doks/SVA predavanja_25-01-2010.pdf · J. Šribar, B. Motik, “Demistificirani C/C++”, Element, Zagreb, 2001 L. Budin, “Informatika za 1

7

Patentirano mehaničko računalo(Blaise Pascal 1623.-62.)

Stroj se je sastojao od zupčanika. Svaki je na plošnoj straniimao označene znamenke 0 do 9. Ovaj princip je korištenkod mehaničkih računa do kasnih 1960-tih. Njegova ideja se još i danas koristi kod mjerača protokavode plina i ugradivih brojčanika

1642. kada je imao 16 godinaizumio je PACALINE

Prvi komercijalni uspjeh u prodajimehaničkih računala

Gottfried Wilhelm von Leibnitz (1646.-1716.), njemački filozof i matematičar razvio jeračunalo koje je zbrajalo, oduzimalo, množilo, dijelilo i vadilo drugi korijenPod nazivom Arithmometer prodaje se 1862.-1935.

Page 8: PREDAVANJA (2h) - etfos.unios.hrjbalen/doks/SVA predavanja_25-01-2010.pdf · J. Šribar, B. Motik, “Demistificirani C/C++”, Element, Zagreb, 2001 L. Budin, “Informatika za 1

8

1594. Logaritamsko računalo

Lord John Napier(1550.-1617.) škotski matematičar, razvio je metodu izračunavanja prirodnog logaritmaIzumio je neku vrstu mehaničkog logaritamskog računala poznatog po imenu "Napier Bones"

Charles Babbage (1791.-1871.) -difrencijalni stroj

1821.g. počinje dizajnirati i izgraditi "diferencijalni stroj"za izradu logaritamskihtablicaStroj je bio pokretanvodenom parom i bio jepotpuno automatiziranIdeju diferencijalnog strojanapušta kada mu na pametdolazi nova i puno bolja

Page 9: PREDAVANJA (2h) - etfos.unios.hrjbalen/doks/SVA predavanja_25-01-2010.pdf · J. Šribar, B. Motik, “Demistificirani C/C++”, Element, Zagreb, 2001 L. Budin, “Informatika za 1

9

1863.g. Charles Babbage - analitički stroj

Novi koncept računala (analitički stroj)Stroj se upravlja bušenim karticamaImao je dva osnovna dijela: procesni dio i memorijuBabbage za života stroj nije dovršio jer jenjegova ideja bila prenapredna za tadašnjutehnologiju1863.g. Sheutz i Wiberg su konačno izgradiliovaj stroj

Ada Augusta Byron, kontesa od Lovelace (1815-1852) - "prvi programer"

Kao matematičarka i znanstvenica i kolegicaCharlesa Babbagea pisalaje prve programeI ostali matematičari tog vremena su započeliprogramirati kako bi programi bili gotovi kadase dovrši strojNjoj u čast je programskijezik ADA je dobio ime

Page 10: PREDAVANJA (2h) - etfos.unios.hrjbalen/doks/SVA predavanja_25-01-2010.pdf · J. Šribar, B. Motik, “Demistificirani C/C++”, Element, Zagreb, 2001 L. Budin, “Informatika za 1

10

19

1850 – Logaritamsko računalo ("Šiber")

Logaritamsko računalo kakvo je bilo u uporabi sve do pojave digiralnih džepnih kalkulatoraDugo je to bio statusni simbol inženjera

1890. - Hollerithove tabulirajuće mašine

1890.g Herman Hollerith jenapravio elektromehaničkiuređaj koji je koristiobušene karticeNamjena je ubrzanjepostupka brojanja glasovau SADBrojanje glasova je na ovajnačin bilo tri puta brže odručnog prebrojavanja

Page 11: PREDAVANJA (2h) - etfos.unios.hrjbalen/doks/SVA predavanja_25-01-2010.pdf · J. Šribar, B. Motik, “Demistificirani C/C++”, Element, Zagreb, 2001 L. Budin, “Informatika za 1

11

1924. - Rođenje IBM-a

Herman Hollerith osnivaTabulating Machine Company koja prodajenjegove mašine vladamadiljem svijeta1924.g. kompanija se preimenuje u International Bussiness Machines (IBM), danas jednog od giganatau proizvodnji računala

Turingov stroj

Alan Turing (1912.-1954.) - matematičar i filozof, utemeljitelj računarskih znanosti.

1936. Jednostavni zamišljeni stroj koji se sastoji odtrake, glave za čitanje-pisanje, te programa.

Traka je neograničene duljine, a sadrži konačni brojsimbola nakon kojih slijede praznine. Broj simbola se može mijenjati tijekom izvođenja programa.

Glava za čitanje-pisanje čita i analizira simbole s trake i u ovisnosti o trenutnom stanju stroja može upisati novisimbol preko trenutnog, izmijeniti trenutno stanje stoja, te se pomicati lijevo ili desno po traci.

Page 12: PREDAVANJA (2h) - etfos.unios.hrjbalen/doks/SVA predavanja_25-01-2010.pdf · J. Šribar, B. Motik, “Demistificirani C/C++”, Element, Zagreb, 2001 L. Budin, “Informatika za 1

12

Program predstavlja konačni slijed instrukcija, koje kažuglavi što će pisati i kako će se pomicati u ovisnosti odsimbola na traci i stanju stroja.

Ako je programiran ispravno ovaj jednostavni strojmože riješiti bilo koji problem kao i današnje računalo, doduše presporo, ali ipak radi!

Elektroničko-mehaničko računaloHarvard Mark I

1937.g. Howard Iken na Harvardskom sveučilištu i uz pomoć IBM-a razvija elektromehanički uređajKoristio je bušene karticeKorišten je do 1959. u američkoj mornarici

Page 13: PREDAVANJA (2h) - etfos.unios.hrjbalen/doks/SVA predavanja_25-01-2010.pdf · J. Šribar, B. Motik, “Demistificirani C/C++”, Element, Zagreb, 2001 L. Budin, “Informatika za 1

13

25

Magnetske trake i bušene kartice

1928 - Fritz Pleumer (Njemačka) patentirao je svoju magnetsku trakuBušene kartice od 45 kolona zamjenjuju se onima s 80. To je bio jedan od najvažnijih nosača podataka sve do 1990-tih. Zato što je IBM definirao 80 kolonske kartice kao vlastiti standard, obzirom na njegov značaj u proizvodnji uređaja, to je ubrzo postao industrijski standard.1932. proizveden magnetski disk (G. Taushek-Austrija)

ABC računalo

1939.g. prvoelektroničko digitalnoračunalo (Iowa State University)Razvili su ga Atanasoff& Clifford Berry i nazvali ga Atanasoff& Berry Computer (iliABC )Nikad nije do krajazavršen

Page 14: PREDAVANJA (2h) - etfos.unios.hrjbalen/doks/SVA predavanja_25-01-2010.pdf · J. Šribar, B. Motik, “Demistificirani C/C++”, Element, Zagreb, 2001 L. Budin, “Informatika za 1

14

ENIAC - Electronic Numeral Integrator and Computer

1943.g. John.W.Mauchly i Presper Eckert naUniversity of Pennsylvania razvijaju za vojnepotrebe novo elektroničko računalo ENIAC (Electronic Numeral Integrator and Computer)ENIAC je prvo elektroničko računalo koje jeradiloSastojalo se od 17468 elektronskih cijevi, biloje teško 30t, snage 174 kWKorišten za rješavanje balističkih problema1000 puta brži od Mark I

ENIAChttp://ftp.arl.mil/ftp/historic-computers/jpeg/eniac1.jpg

Page 15: PREDAVANJA (2h) - etfos.unios.hrjbalen/doks/SVA predavanja_25-01-2010.pdf · J. Šribar, B. Motik, “Demistificirani C/C++”, Element, Zagreb, 2001 L. Budin, “Informatika za 1

15

John Louis von Neumann (1903.-1957.)

kvantna mehanika, teorija igara, pionir računarskihznanosti (arhitektura računala)

Fukcijski von Neumannov model računala

Podaci i instrukcije Rezultati

Rezultati InstrukcijeArgumenti

Upravljački signali

ULAZNI DIO SPREMNIK IZLAZNI DIO

ARITMETIČKO LOGIČKA JEDINICA

UPRAVLJAČKA JEDINICA

Page 16: PREDAVANJA (2h) - etfos.unios.hrjbalen/doks/SVA predavanja_25-01-2010.pdf · J. Šribar, B. Motik, “Demistificirani C/C++”, Element, Zagreb, 2001 L. Budin, “Informatika za 1

16

EDVAC

1945. EDVAC (Electronic Discrete Variable Automatic Computer) je razvioJohn von NeumanEDVAC je prvo računalokoje je izvršni program držao u radnoj memorijii koje je koristilomagnetske diskove.

UNIVAC I

UNIVAC I (Universal Automatic Computer) jeprvo računalo za prodajuRazvio ga je Remington Rand 1951.g.

Page 17: PREDAVANJA (2h) - etfos.unios.hrjbalen/doks/SVA predavanja_25-01-2010.pdf · J. Šribar, B. Motik, “Demistificirani C/C++”, Element, Zagreb, 2001 L. Budin, “Informatika za 1

17

Računala na bazi poluvodiča

1947.g. prvi RAM (Random Access Memory)

23.12.1947. izumljen tranzistor (W. Bratain, J. Bardeen, W. Shockley u Bell laboratoriju)

1951.g. prva komercijalna računalas tranzistorima (UNIVAC)

1959.g. izrađen prototipintegriranog sklopa (J. Kilby)

Računala na bazi poluvodiča

1957.g osnovan Digital Equipment Corporation (DEC) • Proizvode se računala PDP-1• U uporabi je prevodilac FORTRAN 1

1960.g. početak razvoja operacijskog sustava UNIX

1963.g. prvo malo uspješno komercijalno računalo PDP-8 (DEC)1971.g. INTEL 4004 procesor

Page 18: PREDAVANJA (2h) - etfos.unios.hrjbalen/doks/SVA predavanja_25-01-2010.pdf · J. Šribar, B. Motik, “Demistificirani C/C++”, Element, Zagreb, 2001 L. Budin, “Informatika za 1

18

1973. Prvo osobno računaloXEROX ALTO

Alto je projektiran i izveden (Chuck Thacker, Butler Lampson) u Xerox Palo Alto Research Center

Nije na vrijeme komercijaliziran

Imao je menu-driven, ikone, miša, grafiku visoke rezolucije, 8 inčnediskove visokog kapaciteta, Ethernet

Koristio je programski jezikSmalltalk ( osnova za današnjuJAVU)

MIKRORAČUNALA

1973.g. Intel 8080, 8-bitni mikroprocesor1975.g. prvo osobno računalo Altair 88001976.g. Apple I1977.g. 32-bitno računalo VAX (DEC), Apple II1981.g. Operacijski sustav Microsoft DOS1982.g. Intel 80286 poznatiji kao 286 prvi procesor koji je

mogao izvoditi programe pisane za njegove prethodnike1984.g. Macintosh1985.g. Microsoft Windows

Page 19: PREDAVANJA (2h) - etfos.unios.hrjbalen/doks/SVA predavanja_25-01-2010.pdf · J. Šribar, B. Motik, “Demistificirani C/C++”, Element, Zagreb, 2001 L. Budin, “Informatika za 1

19

Mikroračunala - mikroprocesori

1985.g. 32-bitni mikroprocesor Intel 386TM sadržavao je275,000 tranzistora i bio je "multi tasking," tj. mogao je izvršavati više programa u isto vrijeme.

1979-88.g. super računala CDC - Control Data Corporation (Cyber 203, Cyber 205, Cyber 960)

1972.-85.g. super računala Cray Research Comp. (Cray-1, Cray X-MP, Cray-2, Cray Y-MP)

1989. Intel 486TM označava stvarni prelazak s računala upravljanih komandama operacijskog sustava na računala upravljana mišem ili srodnim uređajima. Imao je ugrađen matematički koprocesor, koji je mnogostruko ubrzava računanje kompleksnih matematičkih funkcija

Novi mikroprocesori

1993. Intel Pentium® omogućuje ugradnju "realnog svijeta" u računalo (govor, muzika, rukopis, digitalna fotografija)

1994.g. PowerPC1995. Intel Pentium® Pro (aplikacije za 32-bitne servere i

radne stanice). Pentium® Pro procesor sadrži oko 5.5 miliona tranzistora.

1997. Intel Pentium® II sastoji se od 7.5 miliona tranzistora, a dizajniran je za djelotvorno procesiranje video, audio i grafičkih podataka.

1998.The Pentium® II XeonTM dizajniran je da bi poboljšao rad srednjih i jakih servera i radnih stanica.

Page 20: PREDAVANJA (2h) - etfos.unios.hrjbalen/doks/SVA predavanja_25-01-2010.pdf · J. Šribar, B. Motik, “Demistificirani C/C++”, Element, Zagreb, 2001 L. Budin, “Informatika za 1

20

Novi mikroprocesori

1999. Intel Celeron® namijenjen je poboljšanju programa za tržište (igre, edukacija)

1999. Intel Pentium® III ima ugrađene nove funkcije koje dramatično poboljšavaju svojstva programa za obradu digitalne slike, 3-D prikaza, audio i video zapisa, prepoznavanja govora, što se obilno koristi u kretanju po Internet mreži. U njega je ugrađeno oko 9.5 milionatranzistora, a korištena je 0.25-mikronska tehnologija.

1999. Pentium® III XeonTM poboljšava rad servera i radnih stanica. Dizajniran je za multiprocesorske sustave.

Novi mikroprocesori

2000. Pentium® 4 (filmovi profesionalne kvalitete,TV preko Interneta, video, govor i 3D grafika u realnom vremenu, brzo enkodiranje muzike za MP3. Sastoji se od 42 miliona tranzistora, a izveden je u 0.18 mikronskojtehnologiji.

2001. Intel® XeonTM namijenjen je za radne stanice s dual-procesorom, te multi-procesorskim serverskimkonfiguracijama koje stižu uskoro.

2001. Intel® ItaniumTM procesor je prvi u porodici 64-bitnihprodukata iz Intela. Namijenjen je high-end, enterprise-class serverima i radnima stanicama. Nova arhitektura zasnovanana Explicitly Parallel Instruction Computing (EPIC) design tehnologiji

Page 21: PREDAVANJA (2h) - etfos.unios.hrjbalen/doks/SVA predavanja_25-01-2010.pdf · J. Šribar, B. Motik, “Demistificirani C/C++”, Element, Zagreb, 2001 L. Budin, “Informatika za 1

21

41

Temeljna građa osobnog raTemeljna građa osobnog raččunalaunala

Najčešća podjela pojmova kod računala jeste na sklopovlje (engl. hardvere, očvrsje) i programe (engl. softvere)

42

Page 22: PREDAVANJA (2h) - etfos.unios.hrjbalen/doks/SVA predavanja_25-01-2010.pdf · J. Šribar, B. Motik, “Demistificirani C/C++”, Element, Zagreb, 2001 L. Budin, “Informatika za 1

22

43

ULAZNO-IZLAZNISKLOPOVI

(U/I)

MEMORIJASREDIŠNJA JEDINICA

ZA OBRADU(CPU)

Pod sklopovljem računala

podrazumijevaju se svi oni električni, elektronički i mehanički dijelovi od kojih je građeno računalo i pojedini njegovi priključci, odnosno, sve ono što se može opipati kod računala.

Von Neumannova arhitektura računala sastoji se od tri glavna dijela:

44

SREDIŠNJA JEDINICA ZA OBRADU obrađuje podatke, upravlja i nadzire protok podataka između pojedinih dijelova sustava, te usklađuje pravilan rad cijelog računala.

MEMORIJA pohranjuje podatke i programe, te ih po potrebi stavlja na raspolaganje ostalim dijelovima računala.

ULAZNO-IZLAZNI SKLOPOVI omogućuju prijenos podataka između računala i okoline.

Page 23: PREDAVANJA (2h) - etfos.unios.hrjbalen/doks/SVA predavanja_25-01-2010.pdf · J. Šribar, B. Motik, “Demistificirani C/C++”, Element, Zagreb, 2001 L. Budin, “Informatika za 1

23

45

SrediSrediššnja jedinica za obradu nja jedinica za obradu ((englengl. . centralcentral processingprocessing unitunit, CPU) , CPU)

Ima dva glavna zadatka:1. OBRADA PODATAKA (aritmetičke i logičke operacije s

podacima, premještanje i svrstavanje podataka, te ostale moguće operacije s podacima koje se obavljaju pod nadzorom programa)

2. NADZOR I USKLAĐIVANJE DJELOVANJA CJELOKUPNOG SUSTAVA (sinkroniziranje i koordiniranje obrade podataka)

Kod PC-ja CPU je mikroprocesor(lijevo INTEL Pentium 4s Socket 423 utorom, desno Athlon i s 462)

46

Snaga srediSnaga središšnje jedinice za obradunje jedinice za obradu

SNAGA CPU ovisi o količini podataka koju može obraditi jedinici vremena.

Na to utječe više čimbenika:Frekvencija koraka ili takta (engl. clock), jer ona obrađuje podatke u koracima (Pentium 4 (478) 2 GHz).

Količina bitova koju istodobno može obraditi CPU(8, 16, 32, 64 - bitni mikroprocesori).Građa (arhitektura) i osobito način na koji dobavlja i obrađuje podatke

Jedinice mjere snage CPU: MIPS (engl. Mega instructions per seconds)MFLOPS (engl. Mega floating points instructionsper seconds)

Page 24: PREDAVANJA (2h) - etfos.unios.hrjbalen/doks/SVA predavanja_25-01-2010.pdf · J. Šribar, B. Motik, “Demistificirani C/C++”, Element, Zagreb, 2001 L. Budin, “Informatika za 1

24

47

Programska podrška

Sustavska (System)Namijenjena je pokretanju računala i zatim što djelotvornijem iskorištenju.

Primjenska (Application)Namijenjena je rješavanju konkretnih korisničkih poslova

48

Sustavska programskapodrškaOperacijski sustavi

omogućavaju prikladnu upotrebu računalaomogućavaju djelotvorno iskorištavanje sklopovskih i programskih komponenti računalnih sustava

Pomoćni programi operacijskog sustavaniz korisnih gotovih rješenja (npr. formatiranje diska)

Interpreteri i prevodiociomogućavaju prevođenje korisnikovih rješenja pisanih u prikladnom jeziku (programskom) na mašinski jezik.

Page 25: PREDAVANJA (2h) - etfos.unios.hrjbalen/doks/SVA predavanja_25-01-2010.pdf · J. Šribar, B. Motik, “Demistificirani C/C++”, Element, Zagreb, 2001 L. Budin, “Informatika za 1

25

49

Operacijski sustavi

50

Operacijski sustavi

Najpoznatiji operacijski sustaviCP/M (8-bitni) za Intelov mikroprocesor 8080 i Zilogov Z80 MS DOS 1.0 (1981.) – prva verzijaMS DOS 6.22 (1994.) – posljednja verzijaUNIXMicrosoft Windows

Page 26: PREDAVANJA (2h) - etfos.unios.hrjbalen/doks/SVA predavanja_25-01-2010.pdf · J. Šribar, B. Motik, “Demistificirani C/C++”, Element, Zagreb, 2001 L. Budin, “Informatika za 1

26

51

MS Windows

MS Windows 1.xx (predverzija 1983.)

MS Windows 2.xx (za mikroprocesor "386")

MS Windows 3.xx (pravi GUI, Program i File Manager)

MS Windows 3.11 (zadnje verzije koje su još imale DOS ispod)

MS Windows 95

MS Windows 98

MS Windows Me (Millenium Edition)

52

MS Windows NTPrva verzija Windows NT je bila 3.132-bitni operacijski sustavWindows NT 3.51 (razvoj u dva smjera)

Windows NT 4.0

Page 27: PREDAVANJA (2h) - etfos.unios.hrjbalen/doks/SVA predavanja_25-01-2010.pdf · J. Šribar, B. Motik, “Demistificirani C/C++”, Element, Zagreb, 2001 L. Budin, “Informatika za 1

27

OS/2OS/2Win32Win32

POSIXPOSIX

Environment SubsystemsEnvironment Subsystems

Win32Win32User/GDIUser/GDI

UserUserModeMode

ExecutiveExecutiveDevice DriversDevice Drivers KernelKernel

Hardware Abstraction Layer (HAL)Hardware Abstraction Layer (HAL)

KernelKernelModeMode

SystemSystemand Serverand ServerProcessesProcesses

11 3322

UserUserApplicationApplicationSubsystem DLLSubsystem DLL

LPCLPC

Windows NT, 2000 i XPpojednostavljena građa

Most Win32 Kernel APIsMost Win32 User and GDI APIsA few Win32 APIs33

2211

NTDLL.DLLNTDLL.DLL

54

MS Windows 2000 i XP

Windows 2000 Windows 2000 ProfessionalWindows 2000 ServerWindows 2000 Advanced ServerWindows 2000 Datacenter Server

Windows XPProfessional EditionHome EitionMedia Center Edition

LinkoviMicrosoft Hrvatska XPMicrosoft XP

Page 28: PREDAVANJA (2h) - etfos.unios.hrjbalen/doks/SVA predavanja_25-01-2010.pdf · J. Šribar, B. Motik, “Demistificirani C/C++”, Element, Zagreb, 2001 L. Budin, “Informatika za 1

28

55

Windows 2000 građa

56

Operacijski sustav UNIX

Razvijen u Bellovom laboratoriju 1969.Inačice operacijskog sustava

ULTRIX (1984.)AIX (IBM 1990.)Solaris (Sun Microsystems1991.)Linux (studen LinusTorvald 1991.)

Page 29: PREDAVANJA (2h) - etfos.unios.hrjbalen/doks/SVA predavanja_25-01-2010.pdf · J. Šribar, B. Motik, “Demistificirani C/C++”, Element, Zagreb, 2001 L. Budin, “Informatika za 1

29

57

PrevoditeljiPoznatiji prevoditelji

BASIC (1964.)Algol 58, 60, 68 (ALGOrithmic Language 1958.)PASCAL (Niklaus Wirth) 1971.-FORTRAN (FORmula TRANslator, IBM 1954.-)COBOL (Common Business OrientedLanguage, CODASYL 1959.)PL/1 (IBM sredina 1960-tih)ADA (razvoj započeo 1975., dovršen 1995.)Visual Basic, Delphi (Borland)C ( Dennis M. Ritchie 1970.)C++ (Bjarne Stroustrup )SmallTalk, Java (SUN)PHP (Hypertext Preprocessor) – skriptni jezik

58

Primjenska programska podrška

Programi za obradu tekstaEDIT, Wordstar, WordPerfect (stari programi) MS WordVentura PublisherTeXHTML (Hiper Text Markup Language)

Programi za obradu crteža i slikaCorelDraw, Corel Photo PaintPaintbrush, Paint Shop ProMS Photo EditorPainter

Page 30: PREDAVANJA (2h) - etfos.unios.hrjbalen/doks/SVA predavanja_25-01-2010.pdf · J. Šribar, B. Motik, “Demistificirani C/C++”, Element, Zagreb, 2001 L. Budin, “Informatika za 1

30

59

Programi za posluživanje baza podatakaParadox, dBase, ClarionMS AccessIngres, Informix, OracleTablični kalkulatoriLotus 123MS ExcellAntivirus programi

SophosInternet alati

Internet explorerNetscapeMS FrontPage

Primjenska programska podrška

60

Svojstva grafičkog sučeljaWYSIWYG (What You See Is What You Get) prikaz - što se vidina ekranu bit će ispisano i na pisaču.Korištenje grafičkih simbola (ikona)Lijep i razumljiv prikaz na ekranuOsiguranje neposrednog rukovanja elementima na ekranu (npr. pomicanje margine dokumenta mišem)Korisnik uvijek prvo odabire objekt, a zatim označava aktivnostOsnovna komunikacija s korisnikom s pomoću miša, a dodatnapreko standardnih elemenata kao što su izbornici i okviri za vođenjedijalogaPodržava rad s više aplikacija istovremeno uz istu tehniku rada u svim aplikacijama

Page 31: PREDAVANJA (2h) - etfos.unios.hrjbalen/doks/SVA predavanja_25-01-2010.pdf · J. Šribar, B. Motik, “Demistificirani C/C++”, Element, Zagreb, 2001 L. Budin, “Informatika za 1

31

61

Svojstva grafičkog sučelja

Korisnik ne treba poznavati pravila pisanja naredbi da bi pokrenuoželjenu akciju.Nezavisnost akcija pokrenutih kroz GUI o programu koji se izvršava, npr. ispis dokumenta na pisač se obavlja na isti način bez obzira izkojeg programa pokrenut (Ecel, MS Word, CorelDraw...).Moguća kontrola radnog okruženja s jednog mjesta i razmjenainformacija između programa (npr. upotrebom clipboard područjau memoriji).

62

Smanjenje prozora na minimalnu veličinu

Smanjenje ili povećanje prozora na prethodnu veličinu

Potpuno zatvaranje prozora (aplikacije)

Povećanje prozora na maksimalnu veličinu

Page 32: PREDAVANJA (2h) - etfos.unios.hrjbalen/doks/SVA predavanja_25-01-2010.pdf · J. Šribar, B. Motik, “Demistificirani C/C++”, Element, Zagreb, 2001 L. Budin, “Informatika za 1

32

63

Treba znati koristitiMS Word (*.doc)

MS Excel (*.xls)MS Power Point (*.ppt)Neki od programa za crtanje i obradu slike, te ostale alate po potrebi

Treba znati što jeBaza podataka i MS Access

Page 33: PREDAVANJA (2h) - etfos.unios.hrjbalen/doks/SVA predavanja_25-01-2010.pdf · J. Šribar, B. Motik, “Demistificirani C/C++”, Element, Zagreb, 2001 L. Budin, “Informatika za 1

1

1

Sveučilište J.J. Strossmayera u OsijekuElektrotehnički fakultet

PROGRAMIRANJE I(predavanja u ak. god. 2005./2006.)

P2006-01-02-03-04

doc.dr.sc. Goran Martinovićwww.etfos.hr/~martin

[email protected]: 031 224-766

Soba: 0-14

Osijek, listopad 2006.

RAČUNALNE MREŽE

Računalnu mrežu sačinjava skup računala, sklopovljei programska podrška koja omogućuje međusobnukomunikaciju između dva ili više računala.Ovisno o vlasništvu medija za prijenos razlikuju se:

lokalne mreže (Local Area Networks - LAN)gradske mreže (Metropolitan Area Network - MAN)globalne mreže (Wide Area Networks - WAN)

Page 34: PREDAVANJA (2h) - etfos.unios.hrjbalen/doks/SVA predavanja_25-01-2010.pdf · J. Šribar, B. Motik, “Demistificirani C/C++”, Element, Zagreb, 2001 L. Budin, “Informatika za 1

2

PROTOKOL

Za ispravnu komunikaciju dvaju računala oba morajupoštovati unaprijed dogovorena pravila (protokol).Najrašireniji protokol u lokalnim mrežama jeEthernet. On definira fizičke karakteristikepriključaka na medij za prijenos:

koaksijalni kabelsvjetlovodelektrička svojstva signalakao i oblik paketa koji putuje Ethernet medijem.

INTERNET

Internet je najraširenija svjetska mreža kojaobjedinjuje tisuće lokalnih mreža i stotine tisućaračunala. To je konkretna računalna mreža, za razlikuod "interneta" pod kojim se treba podrazumijevatiprincip ili koncept spajanja lokalnih mreža.Zajedno sa Internet mrežom razvijena je i porodicamrežnih protokola koja se najčešće označava kaoTCP/IP (Transmision Control Protocol/Internet Protocol), ali se pod imenom TCP/IP često se podrazumijevaju i konkretne mrežne usluge kao štoje udaljena prijava za rad ili prijenos datoteka.

Page 35: PREDAVANJA (2h) - etfos.unios.hrjbalen/doks/SVA predavanja_25-01-2010.pdf · J. Šribar, B. Motik, “Demistificirani C/C++”, Element, Zagreb, 2001 L. Budin, “Informatika za 1

3

TCP/IP MREŽNI PROTOKOL

TCP/IP mrežni protokol koristi hijerarhijskikomunikacijski model podijeljen na 4 razine:

Razina mrežnog sučelja (Network interface) rješavaproblem pristupanja fizičkom mediju koji se koristi zaprijenos. Najčešće je to programski veznik koji komuniciras Ethernet karticom (device driver), a može biti i posebankomunikacijski podsistem ili kompletno računalo za vezu s mrežom.Internet razina (Internet) ostvaruje komunikaciju izmeđudva računala. Radi s IP paketima (datagramima) i brine se da datagrami najkraćim putem stignu do odredišta.

TCP/IP MREŽNI PROTOKOLPrijenosna razina (Transport) ostvaruje komunikacijuizmeđu dva procesa jer je uz ostvarenu komunikaciju s udaljenim računalom (posao Internet razine), potrebnouspostaviti i komunikaciju između određenih programa naračunalima. Programi na udaljenim računalima se adresiraju kao port number. Poruke se razbijaju nadatagrame, a na odredištu se ponovno sastavljaju u originalne poruke.Razina primjene (Application) sadrži neke od programakao što su npr. program za prijenos datoteka (ftp), program za udaljenu prijavu za rad (telnet)

Page 36: PREDAVANJA (2h) - etfos.unios.hrjbalen/doks/SVA predavanja_25-01-2010.pdf · J. Šribar, B. Motik, “Demistificirani C/C++”, Element, Zagreb, 2001 L. Budin, “Informatika za 1

4

INTERNET ADRESE

Svako računalo u TCP/IP mreži mora imatijedinstvenu adresu osim ako lokalna mreža nijespojena na Internet, ali dva računala u istoj lokalnojmreži ne smiju imati istu adresu.Internet adresa se sastoji od četiri dekadska brojaodvojena točkom (npr. 161.53.201.00). Pojedini brojne smije biti veći od 255 jer je to najveći pozitivancijeli broj koji se može zapisati u jednom byteu.Adresa je podijeljena na dva logička dijela. Prvisadrži adresu koja jednoznačno definira mrežu nekeustanove (net), a drugi adresu računala u mreži(host).

DOMENA

Ukoliko je omogućeno korištenje domena pomoćuNIS (Network Information Service) ili DNS(Domain Name Service), tada se udaljenom računalumože pristupiti i pomoću slovnog naziva računalazajedno s nazivom domene u kojoj se nalazi (npr. drava.etfos.hr).Domene su logička imena i upotrebljavaju se kaozamjena za adrese. Lakše je zapamtiti imedrava.etfos.hr nego 161.53.201.100. Domene sunapravljene kao hijerarhijske (stablaste) strukture.

Page 37: PREDAVANJA (2h) - etfos.unios.hrjbalen/doks/SVA predavanja_25-01-2010.pdf · J. Šribar, B. Motik, “Demistificirani C/C++”, Element, Zagreb, 2001 L. Budin, “Informatika za 1

5

DOMENENa "najvišoj" razini nekada su se nalazile samo četiridomene: COM (komercijalna), EDU (obrazovna), GOV (vladina) i MIL (vojna), a odnosile su se samona prostor SAD. Kako se Internet proteže u mnogozemalja u svijetu, dogovoreno je da "najviša" razinadomene uz spomenute četiri određuje državu na kojuse ta domena odnosi:

hr - Republika Hrvatskait - Italijaau - Australija itd.

Unutar državne domene odgovorne institucijeodređuju "poddomene" i tako se dobiva hijerarhijskastruktura.

Udaljena prijava za rad

telnetWinSCP ili slično

Page 38: PREDAVANJA (2h) - etfos.unios.hrjbalen/doks/SVA predavanja_25-01-2010.pdf · J. Šribar, B. Motik, “Demistificirani C/C++”, Element, Zagreb, 2001 L. Budin, “Informatika za 1

6

Prijenos datoteka

ftp (File Transfer Protocol)Cuteftp ili sličan program

Elektronička pošta (E-mail)Elektronička pošta omogućava izmjenu poruka izmeđukorisnika računala. Poruka može sadržavati tekst, grafičkeprikaze, video slike, itd. Pošta se sakuplja u poštanskompretincu, tj. posebnoj sistemskoj datoteci.Prema Internet formatu adresa primatelja ima dva dijela kojasu odvojena znakom "@": local_part@domain_part. Lokalni dio adrese (local_part) se analizira kada pismo dođena odredište koje je definirano s domain_part. Za E-mail adresu svakog studenta ili nastavnika je uvedenalias u obliku: [email protected]: [email protected] podrška: MS Outlook, Eudora i ostali

Page 39: PREDAVANJA (2h) - etfos.unios.hrjbalen/doks/SVA predavanja_25-01-2010.pdf · J. Šribar, B. Motik, “Demistificirani C/C++”, Element, Zagreb, 2001 L. Budin, “Informatika za 1

1

Sveučilište J.J. Strossmayera u OsijekuElektrotehnički fakultet

PROGRAMIRANJE I(predavanja u ak. god. 2005./2006.)

P2006-06

doc.dr.sc. Goran Martinovićwww.etfos.hr/~martin

[email protected]: 031 224-766

Soba: 0-14

Osijek, listopad 2006.

UVOD U GRAĐU RAČUNALA

Opća organizacija računala

Page 40: PREDAVANJA (2h) - etfos.unios.hrjbalen/doks/SVA predavanja_25-01-2010.pdf · J. Šribar, B. Motik, “Demistificirani C/C++”, Element, Zagreb, 2001 L. Budin, “Informatika za 1

2

Uobičajena organizacija mikroračunala

Uobičajeni način rada računala

Page 41: PREDAVANJA (2h) - etfos.unios.hrjbalen/doks/SVA predavanja_25-01-2010.pdf · J. Šribar, B. Motik, “Demistificirani C/C++”, Element, Zagreb, 2001 L. Budin, “Informatika za 1

3

Koraci izvođenja programaSmještenog u programskojMemoriji(dohvati - dekodiraj - izvrši)

Sadržaj i interpretiranje sadržaja memorije

Page 42: PREDAVANJA (2h) - etfos.unios.hrjbalen/doks/SVA predavanja_25-01-2010.pdf · J. Šribar, B. Motik, “Demistificirani C/C++”, Element, Zagreb, 2001 L. Budin, “Informatika za 1

4

Sadržaj i interpretiranje sadržaja memorije

OSNOVNI DIGITALNI SKLOPOVI

Logički sklopovi,funkcije i tablice stanja

Page 43: PREDAVANJA (2h) - etfos.unios.hrjbalen/doks/SVA predavanja_25-01-2010.pdf · J. Šribar, B. Motik, “Demistificirani C/C++”, Element, Zagreb, 2001 L. Budin, “Informatika za 1

5

Problem invertora

Problem EX-ILI vrata

Kombiniranilogičkisklopovi

Page 44: PREDAVANJA (2h) - etfos.unios.hrjbalen/doks/SVA predavanja_25-01-2010.pdf · J. Šribar, B. Motik, “Demistificirani C/C++”, Element, Zagreb, 2001 L. Budin, “Informatika za 1

6

Pretvorbatablice stanja uminterme

Pretvorbamintermiu shemu sklopa

D bistabil

4-bitni bistabil

Page 45: PREDAVANJA (2h) - etfos.unios.hrjbalen/doks/SVA predavanja_25-01-2010.pdf · J. Šribar, B. Motik, “Demistificirani C/C++”, Element, Zagreb, 2001 L. Budin, “Informatika za 1

7

JK bistabil

KODERI, DEKODERI I 7-SEGMENTNI POKAZIVAČI

Page 46: PREDAVANJA (2h) - etfos.unios.hrjbalen/doks/SVA predavanja_25-01-2010.pdf · J. Šribar, B. Motik, “Demistificirani C/C++”, Element, Zagreb, 2001 L. Budin, “Informatika za 1

8

16x4 RAM

Page 47: PREDAVANJA (2h) - etfos.unios.hrjbalen/doks/SVA predavanja_25-01-2010.pdf · J. Šribar, B. Motik, “Demistificirani C/C++”, Element, Zagreb, 2001 L. Budin, “Informatika za 1

9

OSNOVE GRAĐEMIKRORAČUNALA

Pojednostavljena organizacija memorije

Page 48: PREDAVANJA (2h) - etfos.unios.hrjbalen/doks/SVA predavanja_25-01-2010.pdf · J. Šribar, B. Motik, “Demistificirani C/C++”, Element, Zagreb, 2001 L. Budin, “Informatika za 1

10

Instrukcije zbrajanja i oduzimanja

Page 49: PREDAVANJA (2h) - etfos.unios.hrjbalen/doks/SVA predavanja_25-01-2010.pdf · J. Šribar, B. Motik, “Demistificirani C/C++”, Element, Zagreb, 2001 L. Budin, “Informatika za 1

11

Page 50: PREDAVANJA (2h) - etfos.unios.hrjbalen/doks/SVA predavanja_25-01-2010.pdf · J. Šribar, B. Motik, “Demistificirani C/C++”, Element, Zagreb, 2001 L. Budin, “Informatika za 1

12

Primjeri instrukcija

PRIMJENA OSOBNIH RAČUNALA

2.1. 2.1. Prikazivanje znakova na računaluPrikazivanje znakova na računalu

• Različiti načini zapisivanja, tumačenje zapisanog. Sve simbole iz vanjskog svijeta potrebno je pretvoriti u binarni zapis, kojim su predočeni svi podaci unutar računala

Kodiranje i kodne norme• Kôd je skup dogovorenih znakova pomoću kojih se

omogućuje jednoznačna razmjena podataka. Binarni kôd je skup binarnih brojeva koji imaju propisano normirano značenje

• Prirodni binarni kôd ili NBC• BCD kôd je 4 bitni: 7310 0111 0011

Page 51: PREDAVANJA (2h) - etfos.unios.hrjbalen/doks/SVA predavanja_25-01-2010.pdf · J. Šribar, B. Motik, “Demistificirani C/C++”, Element, Zagreb, 2001 L. Budin, “Informatika za 1

13

PRIMJENA OSOBNIH RAČUNALA

ASCII kôd

• engl. American Standard Code for InformationInterchange

• Svakom znaku pripisuje 7 bitni binarni broj, sadrži ukupno 128 znakova

Primjer ASCII kôdova:

Znak Dek Hex BinA 65 41 1000001B 66 42 1000010

PRIMJENA OSOBNIH RAČUNALA

Binaarni kôdovi (nastavak)

Unicode svakom znaku pripisuje 16 bitni binarni broj, pa sadrži ukupno 216=65 536 znakova

• Do sada je definirano približno 25 000 znakova

EBCDIC kôd je norma koju primjenjuje tvrtka IBM u svojim velikim računalima i nekim mini-računalima.

• Svakom znaku pripisuje 8 bitni binarni broj, pa sadrži ukupno 28=256 znakovaHrvatski znakovi i norme: CROSCII, ISO 10646, IBM CP 852, Microsoft CP 1250, ...

Page 52: PREDAVANJA (2h) - etfos.unios.hrjbalen/doks/SVA predavanja_25-01-2010.pdf · J. Šribar, B. Motik, “Demistificirani C/C++”, Element, Zagreb, 2001 L. Budin, “Informatika za 1

14

PRIMJENA OSOBNIH RAČUNALA

Brojevni sustavi

• Br. sustav s bazom brojanja B ima znamenke0,1,2,...,B-1

Primjerice:– B=10 Dekadski br.s. - 0,1,2,3,4,5,6,7,8,9– B=2 Binarni br.s. - 0,1– B=8 Oktalni br.s. - 0,1,2,3,4,5,6,7– B=16 Heksadekadski br.s. -

0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F

PRIMJENA OSOBNIH RAČUNALA

Binarni brojevni sustav

Primjer zapisivanja broja:5710 = 5*101 + 7*100 = 1*25 + 1*24 + 1*23 + 0*22 + 0*21 + 1*20

= 1110012' Za binarno prikazivanje informacija je potreban

najveći broj elemenata u usporedbi s ostalim prikazima, a broj bita za prikaz brojeva je ograničen iz tehničkih razloga.

' Uređaji koji obrađuju i pohranjuju binarne informacije fizički se izvode pomoću električnih elemenata s 2 stabilna stanja, a koji su veoma brzi i jeftini.

Page 53: PREDAVANJA (2h) - etfos.unios.hrjbalen/doks/SVA predavanja_25-01-2010.pdf · J. Šribar, B. Motik, “Demistificirani C/C++”, Element, Zagreb, 2001 L. Budin, “Informatika za 1

15

PRIMJENA OSOBNIH RAČUNALA

Primjer pretvorbe dekadskog broja u binarni

57 : 2 = 28 1 1 1 0 0 1128 : 2 = 14014 : 2 = 707 : 2 = 313 : 2 = 111 : 2 = 01

Binarni broj tvore ostaci dijeljenja s 2, odozgo prema dolje

PRIMJENA OSOBNIH RAČUNALA

Negativni binarni brojevi

Registar je skup memorijskih elemenata koji pamte znamenke binarnog broja, što znači da je za određeno računalo unaprijed propisana dužina registra, a time i brojevno područje unutar kojeg se kreću brojevi.

Page 54: PREDAVANJA (2h) - etfos.unios.hrjbalen/doks/SVA predavanja_25-01-2010.pdf · J. Šribar, B. Motik, “Demistificirani C/C++”, Element, Zagreb, 2001 L. Budin, “Informatika za 1

16

PRIMJENA OSOBNIH RAČUNALA

PrimjerOperacija 7-5 u računalu s registrom od 4 bita obavit će

se kao 7+(-5). Binarni prikaz broja -5 je: 1011

Komplement do baze-1 1111 Komplement do baze 1010(jedinični komplement) -0101 (dvojni komplement) +0001

1010 1011

Dokaz da je dobiveni broj -5 Operacija oduzimanja 7-51011 (-5) 0111 ( 7)+0101 (+5) +1011 (-5)0000 0010 ( 2)

Preliv 1 Preliv 1

PRIMJENA OSOBNIH RAČUNALA

Razlomljeni binarni brojevi

' Razlomljeni binarni brojevi sadrže “binarnu točku”, analogno decimalnom zarezu, odnosno točki u anglo-američkoj notaciji.

Primjer zapisivanja razlomljenog broja:5.5710 = 5*100 + 7*10-1 + 5*10-2 =

= 1*22 + 0*21 + 1*20 + 1*2-1 + 1*2-2 == 101.112

Page 55: PREDAVANJA (2h) - etfos.unios.hrjbalen/doks/SVA predavanja_25-01-2010.pdf · J. Šribar, B. Motik, “Demistificirani C/C++”, Element, Zagreb, 2001 L. Budin, “Informatika za 1

17

PRIMJENA OSOBNIH RAČUNALA

Oktalni brojevni sustav

Koristi se za skraćeno zapisivanje binarnih sadržaja kada je to spretno.

Primjer:36- bitni broj 001 110 000 101 111 001 010 011 111 000 100 001

oktalni ekviv. 1 6 0 5 7 1 2 3 7 0 4 1

Heksadecimalni brojevni sustav

Koristi se za skraćeno zapisivanje binarnih sadržaja.Primjer:16- bitni broj 0111 1011 0011 1110heksadecimalni ekviv. 7 B 3 E

PRIMJENA OSOBNIH RAČUNALA

Ostali pojmovi

• BIT je temeljna jedinica za informaciju, najmanja količina informacije (ime nastalo iz engl. BInary digiT - binarna znamenka)

• Bajt (byte) je binarni broj s 8 znamenki (bajt se sastoji od 8 bitova)10010101 11101101 01010010

1KB = 210 bajta = 1024 bajta1MB = 1024×1024 bajta = 1048576 bajta1GB = 1024×1024×1024 bajta = 1073741824 bajta

Page 56: PREDAVANJA (2h) - etfos.unios.hrjbalen/doks/SVA predavanja_25-01-2010.pdf · J. Šribar, B. Motik, “Demistificirani C/C++”, Element, Zagreb, 2001 L. Budin, “Informatika za 1

18

PRIMJENA OSOBNIH RAČUNALA

• Slog (nibble) je binarni broj s 4 znamenke.

• Riječ (word) je određena količina bitova, koja se u računalu obrađuje kao cjelina.

• Obrada podataka (data processing) je izvođenje sustavnih postupaka nad podacima, koristeći pri tome skup pravila i postupaka. Primjerice: prikupljanje, pohrana, dobavljanje i obnova podataka.

Decimalni i binarni ekvivalenti

BROJEVI, KODOVI I ARITMETIKA

Page 57: PREDAVANJA (2h) - etfos.unios.hrjbalen/doks/SVA predavanja_25-01-2010.pdf · J. Šribar, B. Motik, “Demistificirani C/C++”, Element, Zagreb, 2001 L. Budin, “Informatika za 1

19

Potencije broja 2

Primjer pretvorbe DEC -> BIN

DEC, HEX i BIN sustavi

Primjeri pretvorbe

Page 58: PREDAVANJA (2h) - etfos.unios.hrjbalen/doks/SVA predavanja_25-01-2010.pdf · J. Šribar, B. Motik, “Demistificirani C/C++”, Element, Zagreb, 2001 L. Budin, “Informatika za 1

20

Primjeri pretvorbe

8421 kod i primjeri pretvorbe

Page 59: PREDAVANJA (2h) - etfos.unios.hrjbalen/doks/SVA predavanja_25-01-2010.pdf · J. Šribar, B. Motik, “Demistificirani C/C++”, Element, Zagreb, 2001 L. Budin, “Informatika za 1

21

Binarno oduzimanje

Binarno zbrajanje

Binarno množenje

Brojevi s predznakom

Page 60: PREDAVANJA (2h) - etfos.unios.hrjbalen/doks/SVA predavanja_25-01-2010.pdf · J. Šribar, B. Motik, “Demistificirani C/C++”, Element, Zagreb, 2001 L. Budin, “Informatika za 1

22

Brojevi s predznakomi njihovi binarni ekvivalenti

Pronalaženje decimalnog ekvivalenta za dvojni komplement broja

Page 61: PREDAVANJA (2h) - etfos.unios.hrjbalen/doks/SVA predavanja_25-01-2010.pdf · J. Šribar, B. Motik, “Demistificirani C/C++”, Element, Zagreb, 2001 L. Budin, “Informatika za 1

23

Dio liste ASCII skupa znakova

Page 62: PREDAVANJA (2h) - etfos.unios.hrjbalen/doks/SVA predavanja_25-01-2010.pdf · J. Šribar, B. Motik, “Demistificirani C/C++”, Element, Zagreb, 2001 L. Budin, “Informatika za 1

1

Sveučilište J.J. Strossmayera u OsijekuElektrotehnički fakultet

PROGRAMIRANJE I(predavanja u ak. god. 2005./2006.)

P2006-07

doc.dr.sc. Goran Martinovićwww.etfos.hr/~martin

[email protected]: 031 224-766

Soba: 0-14

Osijek, listopad 2006.

Različiti načini zapisivanja, tumačenje zapisanog. Sve simbole iz vanjskog svijeta potrebno je

pretvoriti u binarni zapis, kojim su predočeni svi podaci unutar računala

Kodiranje i kodne norme• Kôd je skup dogovorenih znakova pomoću kojih se

omogućuje jednoznačna razmjena podataka. Binarni kôd je skup binarnih brojeva koji imaju propisano normirano značenje

• Prirodni binarni kôd ili NBC• BCD kôd je 4 bitni: 7310 0111 0011

PRIKAZIVANJE ZNAKOVA I BROJEVA NA RAČUNALUPRIKAZIVANJE ZNAKOVA I BROJEVA NA RAČUNALU

Page 63: PREDAVANJA (2h) - etfos.unios.hrjbalen/doks/SVA predavanja_25-01-2010.pdf · J. Šribar, B. Motik, “Demistificirani C/C++”, Element, Zagreb, 2001 L. Budin, “Informatika za 1

2

ASCII kôd

• engl. American Standard Code for InformationInterchange

• Svakom znaku pripisuje 7 bitni binarni broj, sadrži ukupno 128 znakova

Primjer ASCII kôdova:

Znak Dek Hex BinA 65 41 1000001B 66 42 1000010

Binaarni kôdovi (nastavak)

Unicode svakom znaku pripisuje 16 bitni binarni broj, pa sadrži ukupno 216=65 536 znakova

• Do sada je definirano približno 25 000 znakova

EBCDIC kôd je norma koju primjenjuje tvrtka IBM u svojim velikim računalima i nekim mini-računalima.

• Svakom znaku pripisuje 8 bitni binarni broj, pa sadrži ukupno 28=256 znakovaHrvatski znakovi i norme: CROSCII, ISO 10646, IBM CP 852, Microsoft CP 1250, ...

Page 64: PREDAVANJA (2h) - etfos.unios.hrjbalen/doks/SVA predavanja_25-01-2010.pdf · J. Šribar, B. Motik, “Demistificirani C/C++”, Element, Zagreb, 2001 L. Budin, “Informatika za 1

3

Brojevni sustavi

• Br. sustav s bazom brojanja B ima znamenke0,1,2,...,B-1

Primjerice:– B=10 Dekadski br.s. - 0,1,2,3,4,5,6,7,8,9– B=2 Binarni br.s. - 0,1– B=8 Oktalni br.s. - 0,1,2,3,4,5,6,7– B=16 Heksadekadski br.s. -

0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F

Binarni brojevni sustav

Primjer zapisivanja broja:5710 = 5*101 + 7*100 = 1*25 + 1*24 + 1*23 + 0*22 + 0*21 + 1*20

= 1110012' Za binarno prikazivanje informacija je potreban

najveći broj elemenata u usporedbi s ostalim prikazima, a broj bita za prikaz brojeva je ograničen iz tehničkih razloga.

' Uređaji koji obrađuju i pohranjuju binarne informacije fizički se izvode pomoću električnih elemenata s 2 stabilna stanja, a koji su veoma brzi i jeftini.

Page 65: PREDAVANJA (2h) - etfos.unios.hrjbalen/doks/SVA predavanja_25-01-2010.pdf · J. Šribar, B. Motik, “Demistificirani C/C++”, Element, Zagreb, 2001 L. Budin, “Informatika za 1

4

Primjer pretvorbe dekadskog broja u binarni

57 : 2 = 28 1 1 1 0 0 1128 : 2 = 14014 : 2 = 707 : 2 = 313 : 2 = 111 : 2 = 01

Binarni broj tvore ostaci dijeljenja s 2, odozgo prema dolje

Negativni binarni brojevi

Registar je skup memorijskih elemenata koji pamte znamenke binarnog broja, što znači da je za određeno računalo unaprijed propisana dužina registra, a time i brojevno područje unutar kojeg se kreću brojevi.

Page 66: PREDAVANJA (2h) - etfos.unios.hrjbalen/doks/SVA predavanja_25-01-2010.pdf · J. Šribar, B. Motik, “Demistificirani C/C++”, Element, Zagreb, 2001 L. Budin, “Informatika za 1

5

PrimjerOperacija 7-5 u računalu s registrom od 4 bita obavit će

se kao 7+(-5). Binarni prikaz broja -5 je: 1011

Komplement do baze-1 1111 Komplement do baze 1010(jedinični komplement) -0101 (dvojni komplement) +0001

1010 1011

Dokaz da je dobiveni broj -5 Operacija oduzimanja 7-51011 (-5) 0111 ( 7)+0101 (+5) +1011 (-5)0000 0010 ( 2)

Preliv 1 Preliv 1

Razlomljeni binarni brojevi

' Razlomljeni binarni brojevi sadrže “binarnu točku”, analogno decimalnom zarezu, odnosno točki u anglo-američkoj notaciji.

Primjer zapisivanja razlomljenog broja:5.5710 = 5*100 + 7*10-1 + 5*10-2 =

= 1*22 + 0*21 + 1*20 + 1*2-1 + 1*2-2 == 101.112

Page 67: PREDAVANJA (2h) - etfos.unios.hrjbalen/doks/SVA predavanja_25-01-2010.pdf · J. Šribar, B. Motik, “Demistificirani C/C++”, Element, Zagreb, 2001 L. Budin, “Informatika za 1

6

Oktalni brojevni sustav

Koristi se za skraćeno zapisivanje binarnih sadržaja kada je to spretno.

Primjer:36- bitni broj 001 110 000 101 111 001 010 011 111 000 100 001

oktalni ekviv. 1 6 0 5 7 1 2 3 7 0 4 1

Heksadecimalni brojevni sustav

Koristi se za skraćeno zapisivanje binarnih sadržaja.Primjer:16- bitni broj 0111 1011 0011 1110heksadecimalni ekviv. 7 B 3 E

Ostali pojmovi

• BIT je temeljna jedinica za informaciju, najmanja količina informacije (ime nastalo iz engl. BInary digiT - binarna znamenka)

• Bajt (byte) je binarni broj s 8 znamenki (bajt se sastoji od 8 bitova)10010101 11101101 01010010

1KB = 210 bajta = 1024 bajta1MB = 1024×1024 bajta = 1048576 bajta1GB = 1024×1024×1024 bajta = 1073741824 bajta

Page 68: PREDAVANJA (2h) - etfos.unios.hrjbalen/doks/SVA predavanja_25-01-2010.pdf · J. Šribar, B. Motik, “Demistificirani C/C++”, Element, Zagreb, 2001 L. Budin, “Informatika za 1

7

• Slog (nibble) je binarni broj s 4 znamenke.

• Riječ (word) je određena količina bitova, koja se u računalu obrađuje kao cjelina.

• Obrada podataka (data processing) je izvođenje sustavnih postupaka nad podacima, koristeći pri tome skup pravila i postupaka. Primjerice: prikupljanje, pohrana, dobavljanje i obnova podataka.

Decimalni i binarni ekvivalenti

BROJEVI, KODOVI I ARITMETIKA

Page 69: PREDAVANJA (2h) - etfos.unios.hrjbalen/doks/SVA predavanja_25-01-2010.pdf · J. Šribar, B. Motik, “Demistificirani C/C++”, Element, Zagreb, 2001 L. Budin, “Informatika za 1

8

Potencije broja 2

Primjer pretvorbe DEC -> BIN

DEC, HEX i BIN sustavi

Primjeri pretvorbe

Page 70: PREDAVANJA (2h) - etfos.unios.hrjbalen/doks/SVA predavanja_25-01-2010.pdf · J. Šribar, B. Motik, “Demistificirani C/C++”, Element, Zagreb, 2001 L. Budin, “Informatika za 1

9

Primjeri pretvorbe

8421 kod i primjeri pretvorbe

Page 71: PREDAVANJA (2h) - etfos.unios.hrjbalen/doks/SVA predavanja_25-01-2010.pdf · J. Šribar, B. Motik, “Demistificirani C/C++”, Element, Zagreb, 2001 L. Budin, “Informatika za 1

10

Binarno oduzimanje

Binarno zbrajanje

Binarno množenje

Brojevi s predznakom

Page 72: PREDAVANJA (2h) - etfos.unios.hrjbalen/doks/SVA predavanja_25-01-2010.pdf · J. Šribar, B. Motik, “Demistificirani C/C++”, Element, Zagreb, 2001 L. Budin, “Informatika za 1

11

Brojevi s predznakomi njihovi binarni ekvivalenti

Pronalaženje decimalnog ekvivalenta za dvojni komplement broja

Page 73: PREDAVANJA (2h) - etfos.unios.hrjbalen/doks/SVA predavanja_25-01-2010.pdf · J. Šribar, B. Motik, “Demistificirani C/C++”, Element, Zagreb, 2001 L. Budin, “Informatika za 1

12

Dio liste ASCII skupa znakova

Page 74: PREDAVANJA (2h) - etfos.unios.hrjbalen/doks/SVA predavanja_25-01-2010.pdf · J. Šribar, B. Motik, “Demistificirani C/C++”, Element, Zagreb, 2001 L. Budin, “Informatika za 1

1

Sveučilište J.J. Strossmayera u OsijekuElektrotehnički fakultet

PROGRAMIRANJE I(predavanja u ak. god. 2005./2006.)

P2006-08 - ALGORITMI

doc.dr.sc. Goran Martinovićwww.etfos.hr/~martin

[email protected]: 031 224-766

Soba: 0-14

Osijek, listopad 2006.

1.1. Pojam algoritma i osnovna svojstva algoritama1.1. Pojam algoritma i osnovna svojstva algoritama

- riječ algoritam – dolazi od imena arapskog matematičara Muhamed ibn Musa al Horezmi (IX.st.)

- al Horezmi = Algorizmi = Algorithmus = Algoritam

U prvo su vrijeme algoritmima nazivana samo pravila računanja s brojevima zapisanim u dekadskom sustavu, da bi se kroz naredna stoljeća taj naziv počeo upotrebljavati za pravila obavljanja raznovrsnih zadataka.

Pojavom računala pojam algoritma se rasprostranio u područje računarstva, a zatim i u druge djelatnosti.

Matematička teorija algoritama bavi se mogućim oblicima algoritama i istražuje svojstva samih algoritama.

Algoritmi se koriste za jasno utvrđivanje pravila dostizanja nekog postavljenog cilja.

Page 75: PREDAVANJA (2h) - etfos.unios.hrjbalen/doks/SVA predavanja_25-01-2010.pdf · J. Šribar, B. Motik, “Demistificirani C/C++”, Element, Zagreb, 2001 L. Budin, “Informatika za 1

2

Primjer 1Primjer 1.

ZBRAJANJE DVAJU ILI VIŠE DECIMALNIH BROJEVA

ZADATAK:

Napisati decimalne brojeve jedan ispod drugog tako da znamenke iste težine budu u istom vertikalnom stupcu (decimalne točke su pritom jedna ispod druge). Ako kod nekih brojeva lijevo ili desno nedostaju znamenke, zamisliti da su na tim mjestima zapisane nule. Zatim zbrajati znamenke u istom stupcu i pribrajati im eventualni prijenos s nižeg mjesta. Počinje se zbrajanjem zdesna (brojevnim mjestom najmanje težine) i smatra se da je tu prijenos jednak nuli. Postupak se zaustavlja kada se dosegne krajnji lijevi stupac.

Tako je, primjerice:

3.14159

.52

+ 27.

___________________

30.66159

1. konačnostkonačnost – napisanim postupkom trebamo doći do konačnog rješenja

2. preciznost preciznost (determiniranost) – pojedini koraci algoritma propisuju točno što trebamo izvršiti u pojedinim uvjetima

3. učinkovitostučinkovitost (efektivnost) – algoritam treba trošiti što manje kapaciteta procesora, memorije računala i ostalih resursa

Uz svaki algoritam moraju jasno biti definirani početni objekti nad kojima se obavljaju operacije. Kao ishod provođenja algoritma pojavljuju se završni objekti ili rezultati.

Algoritam mora biti sastavljen od konačnog broja koraka koji ukazuju na slijed operacija koje treba obaviti nad početnim objektima kako bi se dobili završni objekti ili rezultati. Svaki korak opisuje se instrukcijom.

Obavljanje algoritma naziva se algoritamskim procesom. Tijekom odvijanja algoritamskog procesa i postupne izgradnje završnog objekta mogu se pojaviti i neki međurezultati.

Za obavljanje algoritma potreban je izvoditelj algoritma koji razumije algoritam i zna točno obaviti svaki korak algoritma.

Svojstva algoritama

Page 76: PREDAVANJA (2h) - etfos.unios.hrjbalen/doks/SVA predavanja_25-01-2010.pdf · J. Šribar, B. Motik, “Demistificirani C/C++”, Element, Zagreb, 2001 L. Budin, “Informatika za 1

3

Vrste algoritama

~ specijalizirani – primjenjuju se samo na pojedine početne objekte (primjer: recept za baklavu, površina kruga...)

~ općeniti – dozvoljavaju različite vrijednosti početnih objekata (primjer: algoritam za zbrajanje bilo kojih decimalnih brojeva, površina bilo kojeg lika...)

Kod općenitih algoritama definira se klasa ulaznih objekata koji su dozvoljeni u izvođenju.

Djelovanje algoritma je ispravno samo nad dozvoljenom klasom ulaznih objekata i rezultira klasom izlaznih objekata.

Algoritam je upotrebljiv ako se za bilo koji član iz početne klase objekata može dobiti rezultat iz klase dozvoljenih završnih objekata u konačnom vremenu, tj. uz konačni broj koraka u algoritamskom procesu.

Neki teorijski uporabljivi algoritmi su krajnje neprikladni za uporabu jer trajanje njihovog izvođenja može biti neprihvatljivo dugo. Uvođenjem ograničenja takvi algoritmi mogu postati upotrebljivi što znači da se algoritam zaustavlja kada se pojavi prepreka ili nakon određenog broja koraka.

Primjer 2.Primjer 2.

Promotrimo primjer algoritma čiji algoritamski proces mora biti prekinut zbog prepreke u jednom od koraka. Početni objekt je prirodni broj. Algoritam je opisan sa slijedećih pet koraka:

1. Početni prirodni broj pomnožiti s brojem 2 i prijeći na drugi korak

2. Dobivenom broju dodati broj 1 i prijeći na treći korak

3. Naći ostatak dijeljenja te sume s brojem 3 i prijeći na 4. korak

4. Podijeliti početni broj s dobivenim ostatkom iz koraka 3. Taj kvocijent je završni objekt. Prijeći na peti korak.

5. Zaustaviti algoritamski proces.

Ako je početna vrijednost jednaka 6, tada će se u pojedinim koracima dobivati slijedeći rezultati:

korak 1. 6 × 2 = 12;

korak 2. 12 + 1 = 13;

korak 3. ostatak dijeljenja s 3 je 1;

korak 4. 6 ÷ 1 = 6;

korak 5. kraj.

Page 77: PREDAVANJA (2h) - etfos.unios.hrjbalen/doks/SVA predavanja_25-01-2010.pdf · J. Šribar, B. Motik, “Demistificirani C/C++”, Element, Zagreb, 2001 L. Budin, “Informatika za 1

4

Međutim, ako je početna vrijednost jednaka 7, tada se u pojedinim koracima dobiva:

korak 1. 7 × 2 = 14;

korak 2. 14 + 1 = 15;

korak 3. ostatak dijeljenja s 3 je 0;

korak 4. 6 ÷ 0, dijeljenje s nulom nije dozvoljeno i algoritamski proces se ne može završiti.

Ovaj neupotrebljivi algoritam se može pretvoriti u upotrebljivi, ako se u trećem koraku ugradi

ograničenje koje dozvoljava prijelaz u četvrti korak samo ako je ostatak dijeljenja različit od nule,

a u protivnom javlja nastalu iznimku i prelazi na peti korak.

Modificirani algoritam bi glasio:

1. Početni prirodni broj pomnožiti s brojem 2 i prijeći na drugi korak.

2. Dobivenom broju dodati broj 1 i prijeći na treći korak.

3. Naći ostatak dijeljenja te sume s brojem 3. Ako je ostatak jednak nuli, javiti nastalu

iznimku i prijeći na peti korak, inače prijeći na četvrti korak.

4. Podijeliti početni broj s ostatkom. Taj kvocijent je završni objekt. Prijeći na peti korak

5. Završiti algoritamski proces.

1.2. Jezik za zapisivanje algoritama 1.2. Jezik za zapisivanje algoritama –– instrukcije za obavljanje operacijainstrukcije za obavljanje operacija

Izvođenje algoritama može se događati potpuno mehanički što znači da izvoditelji ne moraju

biti ljudi nego strojevi (računala). Algoritme je moguće opisati na bilo kojem govornom jeziku ili umjetnim jezicima (moraju biti dovoljno izgrađeni da bi se njima mogli opisati raznovrsni algoritmi). Algoritmi zapisani dobro oblikovanim umjetnim jezikom mogu biti mnogo sažetiji, obično su mnogo pregledniji i mogu se jednoznačno tumačiti. U tom slučaju algoritmi se nazivaju programima, a jezici programskim jezicima. Objekti se tada nazivaju podacima, a klase objekata tipovima podataka.

Ako se želi da algoritme automatski obavljaju računala, onda algoritme treba prevesti u program sastavljen od instrukcija koje služe za upravljanje strojem. Računala mogu obavljati samo vrlo jednostavne korake, pa se algoritmi moraju zapisati jezikom u kojem postoje samo vrlo jednostavne instrukcije. U tom slučaju govorimo o strojnom jezikuračunala.

Page 78: PREDAVANJA (2h) - etfos.unios.hrjbalen/doks/SVA predavanja_25-01-2010.pdf · J. Šribar, B. Motik, “Demistificirani C/C++”, Element, Zagreb, 2001 L. Budin, “Informatika za 1

5

~ Jezici za zapisivanje algoritama ~

- strojni jezici – teško razumljivi i vrlo neprikladni za čovjeka

- viši programski jezici – razumljiviji čovjeku

- primjeri viših programskih jezika :

¤ FORTRAN ( FORmula TRANslator )

¤ BASIC ( Beginner’s All – purpose Symbolic Instruction Code )

¤ ALGOL ( ALGOrithmic Language )

¤ Pascal

¤ Ada

¤ C...

S obzirom da su vrste osnovnih objekata u takvim jezicima relativno jednostavne i da najčešće poprimaju oblik brojki ili slova, objekti se najčešće nazivaju podacima, a klase objekata tipovima podataka.

Pojedini koraci u algoritmu zapisuju se instrukcijama koje su sastavljene od simbola operatora (kazuje koju operaciju treba provesti s odabranim operandima - argumentima).

Početne vrijednosti objekata nazivaju se ulaznim podacima, a završne vrijednosti objekata izlaznim podacima programa.

Stvaranje programa započinje njegovim zasnivanjem u jeziku zasnivanja programa( engl. Program Desing Language – PDL ), a zatim se tako zapisan algoritam prepisuje u konačni oblik u nekom višem programskom jeziku.

Instrukcije se grubo mogu podijeliti na tri vrste:

¤ instrukcije za obavljanje operacija;

¤ instrukcije za određivanje toka programa;

¤ instrukcije za ulaz i izlaz podataka;

Argumente zovemo ulaznim varijablama, a rezultate izlaznim varijablama i svaku od njih označavamo svojim simbolom – imenom.

- pr. operatori za izvođenje aritmetičkih operacija:

+ za zbrajanje

- za oduzimanje

* za množenje

/ za dijeljenje

Page 79: PREDAVANJA (2h) - etfos.unios.hrjbalen/doks/SVA predavanja_25-01-2010.pdf · J. Šribar, B. Motik, “Demistificirani C/C++”, Element, Zagreb, 2001 L. Budin, “Informatika za 1

6

Zagrade su samo okrugle. Pomoću njih se mijenja uobičajeni redoslijed obavljanja operacija.

Rezultat obavljene operacije neke instrukcije zapisuje se u varijablu rezultata.

Simbol operatora pridruživanja rezultata varijabli: :=

- pr. instrukcija koja zbroj dvaju brojeva a i b zapisuje kao rezultat c

C := A+B; čitamo: varijabli C pridružiti vrijednost zbroja

varijabli A i B

Za označavanje simbola varijabli koriste se velika slova ili više uzastopno napisanih velikih slova i znamenki, s tim da prvi znak uvijek bude slovo.

Napomena! Znak pridruživanja ne smije se zamijeniti sa znakom jednakosti u matematici.

Argumenti ( ulazne varijable ) nepromjenjive veličine nazivaju se konstantama.

Primjer:

funkcija instrukcija_____________________________________________

y = x Y := X;y = a * x + b Y := A * X + B;y = x * y Y := X * Y;y = 1 / x Y := 1 / X;y = x * x + 1 Y := X * X + 1;y = x * ( x –1 ) Y := X * ( X – 1 )y = a * ( x * ( x – 1 ) + b ) Y := A * ( X * ( X – 1 ) + B );

Page 80: PREDAVANJA (2h) - etfos.unios.hrjbalen/doks/SVA predavanja_25-01-2010.pdf · J. Šribar, B. Motik, “Demistificirani C/C++”, Element, Zagreb, 2001 L. Budin, “Informatika za 1

7

PrimjerPrimjer:

- sljedeći slijed instrukcija određuje redom prvih pet potencija ulazne varijable X:

Y := 1;

Y := Y * X;

Y := Y * X;

Y := Y * X;

Y := Y * X;

Y := Y * X;

Nakon prve instrukcije varijabla Y poprima vrijednost 1. Nakon obavljanja druge instrukcije Y poprima vrijednost X, a nakon treće vrijednost X * X = X2. Sljedeće instrukcije redom izračunavaju slijedeće potencije varijable X. Nakon zadnje instrukcije varijabla Y poprima vrijednost X5.

Napomena! Svaki broj različit od nule na nultu potenciju ima vrijednost 1, tako da se prvo pridruživanje Y := 1 može smatrati nultom potencijom varijable X.

BrojPotencija

Rezultat

~ Grupe instrukcija i programi ~

Grupiranje instrukcija označava se vertikalnom crtom ispred cijele grupe. U nekim višim programskim jezicima početak i kraj grupe označava se posebnim

znacima iliposebnim riječimapr. Pascal: početak – begin C: početak – {

kraj – end kraj – } - ključne ili rezervirane riječi – odabrane riječi ili kratice za označavanje nekog djelovanja u algoritmu (obično se tiskaju masnim slovima ili se podcrtavaju)

32168421

25

24

23

22

21

20

Page 81: PREDAVANJA (2h) - etfos.unios.hrjbalen/doks/SVA predavanja_25-01-2010.pdf · J. Šribar, B. Motik, “Demistificirani C/C++”, Element, Zagreb, 2001 L. Budin, “Informatika za 1

8

Početak programa označava se riječju početak, a njegov završetak riječju kraj i točkom iza te riječi. Instrukcije programa se pišu jedna ispod druge, te se pretpostavlja da će one biti obavljane onim redom kojim su zapisane.

Program pisan jezikom zasnivanja ima slijedeći izgled:

početak

instrukcija 1;

instrukcija 2;

instrukcija 3;

.

:

instrukcija N;

kraj .

1.3. 1.3. Instrukcije za odreInstrukcije za određđivanje toka programa, ivanje toka programa, slikovni prikaz programaslikovni prikaz programa

Jedna od važnih instrukcija za određivanje toka programa određena je ključnim riječima:

“ ako je … onda … inače “.

Ona služi za donošenje odluke o obavljanju jedne od dviju alternativnih grupa instrukcija koje se može nazvati granama.

- tri ključne riječi instrukcije ako je, onda i inače (engleski if, then, else)

U zapisivanju algoritama ova se instrukcija piše na slijedeći način:ako je uvjet

ondaprva instrukcija grane 1;.:zadnja instrukcija grane 1;

inačeprva instrukcija grane 2;.:zadnja instrukcija grane 2;

Page 82: PREDAVANJA (2h) - etfos.unios.hrjbalen/doks/SVA predavanja_25-01-2010.pdf · J. Šribar, B. Motik, “Demistificirani C/C++”, Element, Zagreb, 2001 L. Budin, “Informatika za 1

9

- kada se piše “uvjet” podrazumijeva se da se ispituje njegova ispunjenost

Vertikalne crte ispred niza instrukcija jedne grane označavaju da se čitava grana može smatrati jednom grupnom instrukcijom.

Ako se pojedina grana sastoji samo od jedne instrukcije, ona se može pisati u istom retku s ključnom riječi onda, odnosno inače, i tada se ispred nje ne piše vertikalna crta:

ako je uvjet

onda instrukcija grane1

inače instrukcija grane2;

Napomena! Kada neposredno iza instrukcije u programu dolazi ključna riječ (primjerice iza “instrukcija grane1” piše inače) nije potrebno upotrijebiti razdjelnik “;”, jer ključna riječ istovremeno služi i kao razdjelnik.

Kada postoji samo jedna grana koja se obavlja uz ispunjeni uvjet, tada otpada ključna riječ inače i njezina grana, pa struktura složene instrukcije izgleda ovako:

ako je uvjet

onda

prva instrukcija grane ;

;

zadnja instrukcija grane;

ili, ako se uz ispunjenje uvjeta obavlja samo jedna instrukcija:

ako je uvjet

onda instrukcija grane

Page 83: PREDAVANJA (2h) - etfos.unios.hrjbalen/doks/SVA predavanja_25-01-2010.pdf · J. Šribar, B. Motik, “Demistificirani C/C++”, Element, Zagreb, 2001 L. Budin, “Informatika za 1

10

PrimjerPrimjer: Neka se za vrijednosti x < 5 želi izračunavati funkcija y = 2x2 + 3, a za vrijednosti x>= 5 funkcija y = (2x+3)2 – 1,

Program koji obavlja taj zadatak bi mogao glasiti ovako:

programako je X < 5

ondaY := X * X ;Y := 2 * Y ;Y := Y + 3

inačeY := 2 * X ;Y := Y + 3 ;Y := Y + Y ;Y := Y - 1 ;

kraj.

PrimjerPrimjer: Funkcija apsolutne vrijednosti varijable /x/ definirana je ovako:y = { /x/ = x ako je x >= 0;y = { /x/ = - x ako je x < 0

Složena instrukcija koja za danu vrijednost nezavisne varijable X određuje apsolutnu vrijednost i pridružuje je varijabli Y, glasila bi ovako:

ako je X < 0onda Y := - Xinače Y := X;

Uz pretpostavku da se varijabla X kasnije više neće upotrebljavati u izvornom obliku, pa prema tome ne smeta ako se njezina vrijednost promijeni, algoritam se može modificirati u:

ako je X < 0onda X := - X

Y := X;

Page 84: PREDAVANJA (2h) - etfos.unios.hrjbalen/doks/SVA predavanja_25-01-2010.pdf · J. Šribar, B. Motik, “Demistificirani C/C++”, Element, Zagreb, 2001 L. Budin, “Informatika za 1

11

~ Slikovni prikazi algoritma ~Dijagram toka programa:

Instrukcije za obavljanje operacijaInstrukcije za obavljanje operacija – pravokutnici s podebljanim strelicama koje označavaju redoslijed njihova izvođenja;

Ulazni priključci argumenataUlazni priključci argumenata – označeni su s gornje strane pravokutnika crticom koja na vrhu ima mali kružić;

RezultatRezultat – crtica s kružićem s donje strane pravokutnika;

Uz oznake priključaka mogu se napisati imena varijabli.

Argumenti se dovode na ulazne priključke, a na izlaznim priključcima se pojavljuje rezultat.

Izlazni priključci jedne instrukcije mogu biti spojeni na ulazne priključke drugih instrukcija.

Za slikovni prikaz instrukcije odlučivanja koristi se rombromb koji ima dvije izlazne strelice koje određuju daljnji tok odvijanja programa ovisno o ispunjenju uvjeta koji se ispituje.

Page 85: PREDAVANJA (2h) - etfos.unios.hrjbalen/doks/SVA predavanja_25-01-2010.pdf · J. Šribar, B. Motik, “Demistificirani C/C++”, Element, Zagreb, 2001 L. Budin, “Informatika za 1

12

Argumenti instrukcija mogu se definirati na dva načina:

1. instrukcije koje pridružuju pojedinim varijablama konstantne 1. instrukcije koje pridružuju pojedinim varijablama konstantne vrijednosti (pridruživanje vrijednosti (pridruživanje unutar samog programa)unutar samog programa)

X := 10; - vrijednosti varijabli se utvrđuju prilikom pisanja programa

Y := 2; - varijable poprimaju zadane vrijednosti tijekom izvođenja

Z := 10.3; programa i to u trenutku završetka instrukcije pridruživanja

2. instrukcije za zadavanje vrijednosti varijabli tijekom odvija2. instrukcije za zadavanje vrijednosti varijabli tijekom odvijanja algoritamskog procesanja algoritamskog procesa

( (dovodovođđenje varijabli izvana)enje varijabli izvana)

ulaz (X) ; - varijable poprimaju vrijednosti u trenutku nakon završetka

ulaz (X, Y) ; instrukcije koja prihvaća te vrijednosti iz okoline

ulaz (X, Y, Z) ; - vrijednosti “ ulaze ” izvana u varijable programa – ulazna

instrukcija

izlaz (X) ; - neke od rezultata je potrebno prenijeti u okolinu u kojoj će se koristiti

izlaz (X, Y) ; - vrijednosti “ izlaze “ u okolinu – izlazne instrukcijeizlaz (X, Y, Z) ;

Instrukcije pridruživanja konstante i načini crtanja ulaznih i izlaznih instrukcija:

Page 86: PREDAVANJA (2h) - etfos.unios.hrjbalen/doks/SVA predavanja_25-01-2010.pdf · J. Šribar, B. Motik, “Demistificirani C/C++”, Element, Zagreb, 2001 L. Budin, “Informatika za 1

13

Instrukcija pridruživanja konstante i ulazna instrukcija nemaju ulaznih priključaka, dok izlazna instrukcija nema izlaznih priključaka.

Napomena! Podebljane crte koje povezuju instrukcije označavaju redoslijed njihova obavljanja, a vertikalne dvostruke crte s horizontalnim ograncima simboliziraju varijable. Horizontalne strelice koje vode od izlaznih priključaka instrukcija prema crti varijable “stavljaju” na crtu varijable novu vrijednost. Horizontalne strelice usmjerene od crte dovode na ulazne priključke instrukcije vrijednosti varijable.

Tijekom odvijanja algoritamskog procesa vrijednost na vertikalnoj crti varijable se mijenja samo onda kada neka instrukcija na nju postavlja novu vrijednost.

1.4. Instrukcije za ponavljanje dijelova programa1.4. Instrukcije za ponavljanje dijelova programa

Izračunavanje prvih deset potencija varijable X može se zapisati kao cjeloviti program na slijedeći način:

početakulaz (X) ;Y := 1 ;Y := Y * X ;izlaz (Y) ;Y := Y * X ;izlaz (Y) ;Y := Y * X ;izlaz (Y) ;Y := Y * X ;izlaz (Y) ;Y := Y * X ;izlaz (Y) ;Y := Y * X ;izlaz (Y) ;

Page 87: PREDAVANJA (2h) - etfos.unios.hrjbalen/doks/SVA predavanja_25-01-2010.pdf · J. Šribar, B. Motik, “Demistificirani C/C++”, Element, Zagreb, 2001 L. Budin, “Informatika za 1

14

Y := Y * X ;izlaz (Y) ;Y := Y * X ;izlaz (Y) ;Y := Y * X ;izlaz (Y) ;Y := Y * X ;izlaz (Y) ;

kraj.

Program bi mogao biti kraći kada bismo ga mogli napisati na ovaj način:

početakulaz (X) ;Y := 1;10 puta ponoviti

Y:= Y * X ;izlaz (Y) ;

kraj .

U hrvatskom jeziku za zasnivanje programa to možemo napisati na sljedeći način:

početakulaz (X) ;Y := 1;za I := 1 do 10 činiti

Y:= Y * X ;izlaz (Y) ;

kraj .

Kako bismo nadzirali broj ponavljanja petlje, uvodimo upravljačku varijablu I. Njezina je početna vrijednost jednaka 1 i pri svakom ponavljanju vrijednost joj se povećava za 1 i ponavljanje se zaustavlja kada ona dosegne vrijednost 10.

Taj se postupak naziva inkrementiranje (povećavanje za 1). Suprotan postupak naziva se dekrementiranje (smanjivanje za 1).

Na temelju ovog primjera može se uvesti općenita algoritamska konstrukcija koja omogućuje ponavljanje dijelova programa s unaprijed zadanim brojem ponavljanja.

Page 88: PREDAVANJA (2h) - etfos.unios.hrjbalen/doks/SVA predavanja_25-01-2010.pdf · J. Šribar, B. Motik, “Demistificirani C/C++”, Element, Zagreb, 2001 L. Budin, “Informatika za 1

15

Uvodimo upravljačku varijablu I koja poprima vrijednosti iz skupa prirodnih brojeva i mijenja se od neke početne vrijednosti PV do neke konačne vrijednosti KV. Varijabla se pri svakom ponavljanju povećava za 1. Ponavljanje prestaje kada upravljačka varijabla poprimi svoju konačnu vrijednost.

Ponavljanje se zapisuje ovako:

za I := PV do KV činiti

instrukcija 1 ;

instrukcija 2 ;

.

:

instrukcija N ;

Djelovanje instrukcije ponavljanja može se razjasniti sljedećim programom:

I := PV ;

instrukcija 1 ;

instrukcija 2 ;

.

:

instrukcija N ;

I := I +1 ;

ako je I <= KV

onda “vrati se na instrukciju 1” ;

Page 89: PREDAVANJA (2h) - etfos.unios.hrjbalen/doks/SVA predavanja_25-01-2010.pdf · J. Šribar, B. Motik, “Demistificirani C/C++”, Element, Zagreb, 2001 L. Budin, “Informatika za 1

16

Slikovni prikaz ovog programa prikazan je na slijedećoj slici:

- PV i KV su konstante

~ Ponavljanje s ispitivanjem uvjeta ~

Koriste se dvije vrste petlje:

1.) petlje s ispitivanjem uvjeta prije izvođenja niza instrukcija

2.) petlje s ispitivanjem uvjeta nakon izvođenja niza instrukcija

Petlja s ispitivanjem uvjeta prije izvođenja niza instrukcija prikazuje se slijedećom konstrukcijom:

dok je uvjet činiti

instrukcija 1 ;

instrukcija 2 ;

.

:

instrukcija N ;

odrediti uvjet

Na početku se ispituje uvjet, ako je uvjet ispunjen obavlja se niz instrukcija ispred kojih je vertikalna crta.

Pretpostavlja se da se tijekom izvođenja instrukcija mijenjaju vrijednosti varijabli koje određuju moguću promjenu uvjeta.

Page 90: PREDAVANJA (2h) - etfos.unios.hrjbalen/doks/SVA predavanja_25-01-2010.pdf · J. Šribar, B. Motik, “Demistificirani C/C++”, Element, Zagreb, 2001 L. Budin, “Informatika za 1

17

Nakon niza instrukcija vraća se na početak niza instrukcija i ispituje uvjet.

Kada se ustanovi da uvjet nije ispunjen, instrukcije se prestaju ponavljati. Instrukcija “odrediti uvjet” samo simbolički označava to djelovanje i ne mora se posebno pojavljivati u petlji. Važno je samo da se unutar petlje nekako dogodi promjena uvjeta.

Ako se nizom instrukcija uvjet nikada ne bi promijenio, petlja bi se ponavljala trajno.

Petlja s ispitivanjem uvjeta nakon izvođenja niza instrukcija prikazuje se sljedećom konstrukcijom.:

ponavljati

instrukcija 1 ;

instrukcija 2 ;

instrukcija N ;

.

:

odrediti uvjet

do uvjet

Uvjet se ispituje nakon obavljanja niza instrukcija. Niz instrukcija se ponavlja sve dok uvjet nije ispunjen. Kada se djelovanjem instrukcija dogodi ispunjenje uvjeta, ponavljanje prestaje i program počinje izvoditi instrukciju koja slijedi iza petlje.

Page 91: PREDAVANJA (2h) - etfos.unios.hrjbalen/doks/SVA predavanja_25-01-2010.pdf · J. Šribar, B. Motik, “Demistificirani C/C++”, Element, Zagreb, 2001 L. Budin, “Informatika za 1

18

Slika a) prikazuje petlju “dok je”. Zbog pravilne uporabe ove petlje treba znati sljedeće:

• uvjet se ispituje na početku petlje

• prije ulaska u petlju mora biti poznata početna vrijednost uvjeta UV

• instrukcije u petlji bit će ponavljane dok je uvjet ispunjen, tj. petlja se napušta kada uvjet prestaje biti ispunjen

• može se dogoditi da pri ulasku u petlju uvjet nije ispunjen, pa se instrukcije petlje tada neće obaviti nijednom

Slika b) prikazuje petlju “ponavljati”. Zbog pravilne uporabe ove petlje treba znati sljedeće:

• uvjet se ispituje na kraju petlje

• nije potrebno poznavati vrijednost uvjeta UV pri ulasku u petlju

• instrukcije u petlji bit će ponavljane dok uvjet nije ispunjen, tj. petlja se napušta kada se uvjet ispuni

• instrukcije petlje obavit će se sasvim pouzdano barem jedanput

Algoritmi se uvijek mogu prilagoditi tako da je moguća uporaba ili jedne ili druge vrste petlje.

Petlja “za” može se prevesti u petlju “dok je” ili u petlju”ponavljati”.

PrimjerPrimjer: množenje dvaju prirodnih brojeva x i y može se svesti na uzastopno pribrajanje množenika y onoliko puta kolika je vrijednost množitelja x. Množenje se može ostvariti pomoću petlji “dok je” ili “ponavljati”:

ulaz ( X , Y ) ; ili ulaz ( X , Y )

Z := 0 ; Z := 0 ;

dok je X > 0 činiti ponavljati

Z := Z + Y ; Z := Z + Y ;

X := X - 1 ; X := X - 1 ;

izlaz (Z) ; izlaz (Z) ;

Page 92: PREDAVANJA (2h) - etfos.unios.hrjbalen/doks/SVA predavanja_25-01-2010.pdf · J. Šribar, B. Motik, “Demistificirani C/C++”, Element, Zagreb, 2001 L. Budin, “Informatika za 1

19

1.5. Složene instrukcije 1.5. Složene instrukcije –– programske funkcijeprogramske funkcije

Složeni operatori kao što su izračunavanje rezultata dijeljenja – div (X, Y) ili određivanje ostatka mod (X, Y) koriste se višestruko u nekom programu pa ih pišemo u obliku programskih funkcija.

Funkcija je složena instrukcija koja dobiva svoje ime. Uz ime funkcije navode se u zagradama ulazne varijable – argumenti funkcije, a vrijednost koja se izračunava istaknuta je instrukcijom vratiti (rezultat). Opis funkcije završava ključnom riječi kraj.

Funkcije div i mod mogu se opisati na sljedeći način:

div ( X , Y ) mod ( X , Y )

R := Y ; R := Y ;

Q := 0 ; Q := 0 ;

dok je R >= X činiti dok je R >= X činiti

R := R – X ; R := R – X ;

Q := Q + 1; Q := Q + 1;

vratiti (Q) ; vratiti (Q) ;

kraj. kraj.

- sličnost funkcija div i mod – istovremeno izračunavaju kvocijent i ostatak

- različitost funkcija div i mod – rezultat koji vraćaju

- riječi div i mod mogu se smatrati oznakama, tj. simbolima operacija, jednako kao i simboli +, -, *, /, samo što se pišu ispred argumenata, a ne između njih.

Primjer: Primjer: za određivanje najveće zajedničke mjere M ( X, Y ) dvaju prirodnih brojeva

postoji jedan od najstarijih zapisanih algoritama. Opisao ga je EuklidEuklid (grčki matematičar,

3 st.p.n.e.) i utemeljio na sljedećim razmatranjima:

- ako su dva prirodna broja X i Y jednaka, njihov je najveći zajednički djelitelj Z jednak jednom od njih

- ako su X i Y različiti, tada razlika većeg i manjeg broja i manji broj imaju jednak najveći zajednički djelitelj kao i zadani par brojeva.

Page 93: PREDAVANJA (2h) - etfos.unios.hrjbalen/doks/SVA predavanja_25-01-2010.pdf · J. Šribar, B. Motik, “Demistificirani C/C++”, Element, Zagreb, 2001 L. Budin, “Informatika za 1

20

Euklidov se algoritam može zapisati sljedećim programom:

ulaz ( X, Y ) ;U := X ;V := Y ;dok je U = V činiti

ako je U > Vonda U := U – Vinače V := V – U ;

Z := U ;izlaz (Z)

Provjera algoritma može se načiniti s nekim odabranim parovima vrijednosti X i Y. Na primjer, ako je X = 24, a Y = 18, tada su međurezultati prikazani tablicom.

Dakle, najveći zajednički djelitelj je Z = 6.

Euklidov algoritam se može modificirati tako da se umjesto višestrukog odbijanja obavi dijeljenje prirodnih brojeva, te da se ostatak dijeljenja uspoređuje s većim brojem.

6 6Krajnje vrijednosti

24 186 186 12

Početne vrijednosti

U V

Page 94: PREDAVANJA (2h) - etfos.unios.hrjbalen/doks/SVA predavanja_25-01-2010.pdf · J. Šribar, B. Motik, “Demistificirani C/C++”, Element, Zagreb, 2001 L. Budin, “Informatika za 1

21

Taj algoritam glasi:

ulaz ( X, Y ) ;U := X ;V := Y ;R := 1 ;dok je R = 0 činiti

ako je U > Vonda

U := mod ( U, V )

R := U ;W := V

inačeV := mod ( V, U )

R := V ;W := U ;

izlaz ( W )

Početna vrijednost varijable R određena je s R := 1. Međutim, to bi mogla biti i bilo koja druga vrijednost različita od nule.

Važno je samo osigurati da se pokrene prvi prolaz kroz petlju. Provjera algoritma s vrijednostima varijabli X = 24 i Y = 18 i dalje.

Treba zapaziti da je drugu varijantu algoritma složenije zapisati, ali da se ona kod većine slučajeva obavlja u manje prolaza kroz petlju. Međutim, kada je funkcija mod ( u, v ) ostvarena uzastopnim odbijanjem, tada je broj osnovnih operacija koje treba obaviti podjednak u obje varijante.

6 0 0 6Krajnje vrijednosti

24 18 1 –6 18 6 18

Početne vrijednosti

U V R W

Page 95: PREDAVANJA (2h) - etfos.unios.hrjbalen/doks/SVA predavanja_25-01-2010.pdf · J. Šribar, B. Motik, “Demistificirani C/C++”, Element, Zagreb, 2001 L. Budin, “Informatika za 1

22

~ Neke praktične funkcije ~

•funkcija za određivanje apsolutne vrijednosti cijelog broja•funkcija za određivanje većeg, odnosno manjeg od dvaju brojevaOdređivanje apsolutne vrijednosti nekog broja iz skupa cijelih brojeva može se definirati kao funkcija:

abs (X)ako je X < 0

onda Y := -Xinače Y := X ;

vratiti (Y) ;kraj .

Određivanje apsolutne vrijednosti unutar nekog programa :

Y := abs (X) ; - definirana funkcija se primjeni u operatoru pridruživanjaA := abs (B) ;A := abs (A) ;

Funkciju za odabiranje većeg od dva broja označavamo s max, a funkciju za odabiranje manjeg nazivamo min:

max ( X, Y ) min ( X, Y )

ako je X > Y ako je X > Y

onda Z := X onda Z := Y

inače Z := Y ; inače Z := X ;

vratiti (Z) ; vratiti (Z) ;

kraj . kraj .

Napomena! Imena operanada mogu se proizvoljno odabrati.

Euklidov algoritam može se također napisati kao funkcija. Umjesto oznake M ( X, Y ) koja se koristi u matematici, uvodi se oznaka nzm ( X, Y ) – najmanja zajednička mjera.

Page 96: PREDAVANJA (2h) - etfos.unios.hrjbalen/doks/SVA predavanja_25-01-2010.pdf · J. Šribar, B. Motik, “Demistificirani C/C++”, Element, Zagreb, 2001 L. Budin, “Informatika za 1

23

Funkcija se definira na sljedeći način:

nzm ( X, Y )

dok je X = Y činiti

U := min ( X, Y ) ;

V := max ( X, Y ) ;

X := U ;

Y := V – U ;

vratiti ( X )

kraj

1.6. Stvaranje algoritama i njihova vremenska složenost1.6. Stvaranje algoritama i njihova vremenska složenost

Stvaranje algoritama je kreativna djelatnost te oni nastaju na različite načine.

Iskustveno stvaranje algoritama se sastoji od opažanja i eksperimentiranja (fizika, kemija…)

Vrste algoritama:

1. Imitacijski algoritmi – oponašaju ili imitiraju ponašanje stvarnih objekata

2. Eksperimentalni algoritmi – usko su povezani s imitacijskim algoritmima

– nastaju na temelju eksperimentiranja u neživoj prirodi,

organskom svijetu ili u društvu

3. Teorijski algoritmi – najsloženiji, objedinjuju imitacijske i eksperimentalne algoritme

4. Konstrukcijski algoritmi – čine skup svih prethodnih algoritama

– slaganjem prethodnih algoritama mogu se konstruirati

novi algoritmi

Page 97: PREDAVANJA (2h) - etfos.unios.hrjbalen/doks/SVA predavanja_25-01-2010.pdf · J. Šribar, B. Motik, “Demistificirani C/C++”, Element, Zagreb, 2001 L. Budin, “Informatika za 1

24

~ Ekvivalentni algoritmi i složenost algoritama ~

Dva algoritma su ekvivalentna kada su:

• klase ulaznih objekata dozvoljene i za jedan i za drugi algoritam

• rezultati jednog i drugog algoritma za jednake ulazne objekte jednaki

Ispravnost ili korektnost algoritama

- algoritam je korektan ako za sve objekte iz klase dozvoljenih ulaznih objekata omogućuje određivanje rezultata i ako je taj rezultat ispravan pri svim mogućim vrijednostima ulaznih varijabli

- provjeravanjem algoritma s različitim vrijednostima ulaznih varijabli ne može se potpuno sigurno utvrditi da li je algoritam ispravan

- ako se otkrije i samo jedan pogrešan rezultat, može se tvrditi da je algoritam nekorektan

Trajanje algoritamskog procesa

– odgovara broju osnovnih operacija koje treba izvesti, odnosno proporcionalno jeukupnom broju operacija

– naziva se još i vremenska složenost ili kompleksnost algoritma

– zapisuje se kao O ( n )

– ako je trajanje algoritma proporcionalno s brojem ulaznih vrijednosti, pišemo da jenjegova složenost O ( n )

– algoritam konstantnog trajanja ima složenost npr. O ( 1 )

Page 98: PREDAVANJA (2h) - etfos.unios.hrjbalen/doks/SVA predavanja_25-01-2010.pdf · J. Šribar, B. Motik, “Demistificirani C/C++”, Element, Zagreb, 2001 L. Budin, “Informatika za 1

25

Tablica različitosti trajanja algoritamskog procesa mjerena brojem operacija koje treba obaviti:

broj operacijan prvi alg. drugi alg. 1 2 52 4 53 6 5. . .: : :

10 20 5. . .: : :

100 200 5. . .: : :

1000 2000 5

1.7. Kako se čitaju programi?1.7. Kako se čitaju programi?

Složene programe je vrlo teško čitati, naročito ako nisu komentirani. Oni se stoga razlažu na manje cjeline, tzv. module koji su razumljiviji. To se može načiniti smo onda kada je već pri pisanju program modularno sagrađen. Osnovna zamisao je program načiniti od odsječaka koji se međusobno nadovezuju, što je preduvjet strukturiranog programiranja.

Primjer: Primjer: Program za izračunavanje pete potencije varijable x može se napisati na sljedeći način:

ulaz ( X ) ;

Y : = 1 ;

Y : = Y * X ;

Y : = Y * X ;

Y : = Y * X ;

Y : = Y * X ;

Y : = Y * X ;

izlaz ( Y) ;

Page 99: PREDAVANJA (2h) - etfos.unios.hrjbalen/doks/SVA predavanja_25-01-2010.pdf · J. Šribar, B. Motik, “Demistificirani C/C++”, Element, Zagreb, 2001 L. Budin, “Informatika za 1

26

Dijagram:

• početno stanje je označeno kao stanje 0

• u tom stanju operandi imaju vrijednost X0 i Y0

• početno stanje varijable X bit će određeno nakon što program obavi instrukciju ulaz (X ) , a početno stanje varijable Y određeno je instrukcijom pridruživanja konstante Y : = 1

• vrijednosti u sljedećim stanjima označene su redom indeksima od 1 do 5

• analizom programa, koja se lakše obavlja promatranjem dijagrama toka, može se redom pisati vrijednosti varijabli u pojedinim stanjima:

Page 100: PREDAVANJA (2h) - etfos.unios.hrjbalen/doks/SVA predavanja_25-01-2010.pdf · J. Šribar, B. Motik, “Demistificirani C/C++”, Element, Zagreb, 2001 L. Budin, “Informatika za 1

27

stanje 0: XoYo

stanje 1: X1 = XoY1 = Yo * Xo

stanje 2: X2 = XoY2 = Y1 * X1 = Yo * Xo * Xo = Yo * Xo2

sta nje 3: X3 = XoY3 = Y2 * X2 = Yo * Xo2 * Xo = Yo * Xo3

stanje 4: X4 = XoY4 = Y3 * X3 = Yo * Xo3 * Xo = Yo * Xo4

stanje 5: Y5 = Y4 * X4 = Yo * Xo4 * Xo = Yo * Xo5

U stanju 5 pronalazi se konačni rezultat Y5. Uz Yo = 1, dobiva se Y5 = Xo5, što se i željelo postići.

Program za izračunavanje pete potencije može se napisati pomoću petlje “ za “:

ulaz ( X ) ;Y := 1 ;za I := 1 do 5 činiti

Y := Y * X ;izlaz ( Y ) ;

Pri čitanju tog programa stanje se mora očitati nakon svakog prolaza kroz petlju, tako da se dobiva potpuno jednaki opis stanja kao za prethodni program. To znači da petlje u programu treba čitati tako da se zamišlja kao da su instrukcije petlje napisane uzastopce onoliko puta koliko se petlja ponavlja.

Page 101: PREDAVANJA (2h) - etfos.unios.hrjbalen/doks/SVA predavanja_25-01-2010.pdf · J. Šribar, B. Motik, “Demistificirani C/C++”, Element, Zagreb, 2001 L. Budin, “Informatika za 1

28

Primjer: Ustanoviti kakvu funkciju obavlja sljedeći program:Primjer: Ustanoviti kakvu funkciju obavlja sljedeći program:

ulazulaz ( X ) ;( X ) ;Y := A ;Y := A ;Y := X * Y + B ;Y := X * Y + B ;Y := X * Y + C ;Y := X * Y + C ;Y := X * Y + D ; Y := X * Y + D ; izlazizlaz ( Y ) ;( Y ) ;

Konstante A, B, C i D odreKonstante A, B, C i D određđene su unutar prethodnih instrukcija. ene su unutar prethodnih instrukcija.

Tablica stanja izgleda ovako:

X Yulaz ( X ) XoY := A ; Y1 = AY := X * Y + B ; Y2 = Xo * Y1 + BY := X * Y + C ; Y3 = Xo * Y2 + CY := X * Y + D ; Y4 = Xo * Y3 + Dizlaz ( Y ) Xo A * Xo3 + B * Xo2 + C * Xo + D

Konačna vrijednost varijable Y dobivena je uzastopnim uvrštavanjem vrijednosti varijabli:

Y = Y4 = Xo * Y3 + D= Xo * ( Xo * Y2 + C ) + D= Xo * ( Xo * ( Xo * Y1 + B ) ) + D= Xo * ( Xo * (Xo * A + B ) + C ) + D= Xo2 * ( Xo * A + B ) + C * Xo + D= A * Xo3 + B * Xo2 + C * Xo + D

Program računa vrijednost polinoma trećeg stupnja s koeficijentima a, b, c i d, i to po Hornerovoj formuli, tj. izračunava funkciju:

f ( x ) = ( ( a * x + b ) * x + c ) * x + d.

Page 102: PREDAVANJA (2h) - etfos.unios.hrjbalen/doks/SVA predavanja_25-01-2010.pdf · J. Šribar, B. Motik, “Demistificirani C/C++”, Element, Zagreb, 2001 L. Budin, “Informatika za 1

1

Sveučilište J.J. Strossmayera u OsijekuElektrotehnički fakultet

PROGRAMIRANJE I(predavanja u ak. god. 2006./2007.)

P2006-09doc.dr.sc. Goran Martinović

www.etfos.hr/[email protected]

Tel: 031 224-766Soba: 0-14

Osijek, listopad 2006.

PRIMJENA OSOBNIH RAČUNALA

9. Računalni programi9. Računalni programi

99.1. .1. NaredbaNaredba9.2. Program9.2. Program9.3. Niži programski jezici9.3. Niži programski jezici9.4. Viši programski jezici9.4. Viši programski jezici9.5. Strukturno programiranje9.5. Strukturno programiranje9.6. Objektno orijentirani programi9.6. Objektno orijentirani programi9.7. Brzi razvoj namjenskih programa (RAD)9.7. Brzi razvoj namjenskih programa (RAD)9.8. Programski jezici neovisni o9.8. Programski jezici neovisni o

sklopovlju i operacijskom sustavusklopovlju i operacijskom sustavu

Page 103: PREDAVANJA (2h) - etfos.unios.hrjbalen/doks/SVA predavanja_25-01-2010.pdf · J. Šribar, B. Motik, “Demistificirani C/C++”, Element, Zagreb, 2001 L. Budin, “Informatika za 1

2

RAČUNALNI PROGRAMI (RAČUNALNI PROGRAMI (englengl. . softwaresoftware))

Računalo bez programa beskorisni je uređaj, a ovisno o programu koji se izvršava računalo može obavljati različite poslove.

Programskim dijelom računalaProgramskim dijelom računala ili programskom programskom potporompotporom naziva se skup programa koji se mogu izvršavati na računalu.

Za programe koji su pohranjeni na tvrdom disku računala i koji su prilagođeni radu na tom računalu kaže se da su instaliraniinstalirani.

Programski dio računala (instalirani programi) redovito korisnika košta višekošta više od sklopovskog dijela računala.

9.1. NAREDBA (9.1. NAREDBA (englengl. . commandcommand) ) Temeljni pojmoviTemeljni pojmovi

Programer (naredbodavac) naredbom upučujeračunalo (izvršitelja) na obavljanje željene radnje.

Najniža razina naredbe je binarni prikaz koji se sastoji od niza nula i jedinica.

U najužem smislu naredba je neka kombinacija U najužem smislu naredba je neka kombinacija električnih napona koja dovedena na odgovarajuće električnih napona koja dovedena na odgovarajuće stezaljke središnje jedinice za obradu izaziva stezaljke središnje jedinice za obradu izaziva izvršenje željene radnjeizvršenje željene radnje.

Page 104: PREDAVANJA (2h) - etfos.unios.hrjbalen/doks/SVA predavanja_25-01-2010.pdf · J. Šribar, B. Motik, “Demistificirani C/C++”, Element, Zagreb, 2001 L. Budin, “Informatika za 1

3

NAREDBA NAREDBA

Prikaz naredbePrikaz naredbe

Binarni: 10100101Heksadekadski: A5Mnemonički: SUM A,BViši oblik naredbe: Write(‘Hura’);

Niska razina naredbe jest ona koja je bliska binarnom prikazu, a viša razina ili viši oblik naredbe onaj koji je razumljiviji i prihvatljiviji čovjeku.

9.2. Program 9.2. Program

ProgramProgram je skup naredaba nanizanih strogo utvrđenim redoslijedom, čijim izvršavanjem se obavlja željeni posao.

Čovjek koji piše program naziva se

programerprogramer,

a postupak nastanka programa naziva se

programiranjeprogramiranje.

Page 105: PREDAVANJA (2h) - etfos.unios.hrjbalen/doks/SVA predavanja_25-01-2010.pdf · J. Šribar, B. Motik, “Demistificirani C/C++”, Element, Zagreb, 2001 L. Budin, “Informatika za 1

4

PROGRAMPROGRAM

Sintaksa Sintaksa

Način korištenja naredaba u programu i njihovo slaganje strogo je propisano pravilima programskog jezika, a naziva se sintaksasintaksa.

Primjerice:

FORTRAN: print *,’Hura’ ili write(*,’(‘’Hura’’)’)BASIC: PRINT “Hura”Pascal: Write(‘Hura’);C: printf(“Hura”);

Sintaksne pogreške najčešće otkriva program prevoditeljprevoditelj.

PROGRAMPROGRAM

Logička ispravnost programa Logička ispravnost programa

Logičku ispravnost programa, Logičku ispravnost programa, tj. ispravnost u smislu da program obavlja željenu radnju, mora osigurati programer.

Primjerice:

Matematika: P = r2 Π

C - sa sint. i log. pogreškom: P = r + r * 3.14C - s logičkom pogreškom: P = r + r * 3.14;C - ispravno: P = r * r * 3.14;

DebuggerDebugger je program (ili sklop) koji može pomoći pri otklanjanju logičkih pogrešaka u programu (ili sklopovskom dijelu računala).

Page 106: PREDAVANJA (2h) - etfos.unios.hrjbalen/doks/SVA predavanja_25-01-2010.pdf · J. Šribar, B. Motik, “Demistificirani C/C++”, Element, Zagreb, 2001 L. Budin, “Informatika za 1

5

PROGRAMPROGRAM

Pisanje programa Pisanje programa

Analiza zadatka: raščlamba i razumijevanje zadatkaDijagram toka: grafički prikaz programaDefiniranje ulaza i izlaza: oblik i vrsta ulaznih i izlaznih podatakaPisanje programa: pisanje niza naredaba koje tvore programProvjera (testiranje) programa:

provjeru ispravnosti programa obavlja proizvođač programa i neovisni ispitivačiIzrada dokumentacije: dokumentacija za korisnika i programere

PrimjerPrimjer

dijagramadijagrama

toka toka

STARTSTART

Unos podataka i Unos podataka i provjeraprovjera

Podaci Podaci ispravni ispravni

??

Obrada Obrada podatakapodataka

Poruka o Poruka o pogreškipogreški

ObraObrađđeni eni svi podaci svi podaci

??

Otisnuti Otisnuti rezultaterezultate

STOPSTOP

NENE

NENE

DADA

DADA

Page 107: PREDAVANJA (2h) - etfos.unios.hrjbalen/doks/SVA predavanja_25-01-2010.pdf · J. Šribar, B. Motik, “Demistificirani C/C++”, Element, Zagreb, 2001 L. Budin, “Informatika za 1

6

PROGRAMPROGRAM

Životni ciklus programa Životni ciklus programa

9.3. Niži programski jezici9.3. Niži programski jeziciStrojni jezik

U užem smislu strojni jezik računala (engl. machine language, machine code) binarni je prikaz programa za računalo.

To je jedini oblik programa koji razumije računalo, te se svaki drugi oblik programa mora prevesti u strojni jezik prije nego se izvodi.

100000000101110000000010000000001010010011101010100100000001100111110110000101001011111010010100101101100000101000000001000000001010010011101011010000000101111011000010100101111110100101001011010000000010111000000001000000000101001001110101010010000000110011111011000010100101111101001010010110110000010100

Page 108: PREDAVANJA (2h) - etfos.unios.hrjbalen/doks/SVA predavanja_25-01-2010.pdf · J. Šribar, B. Motik, “Demistificirani C/C++”, Element, Zagreb, 2001 L. Budin, “Informatika za 1

7

AsemblerAsembler

programski jezik i program za prevoprogramski jezik i program za prevođđenjeenje

Primjer naredbi napisanih u asembleru:MOV A,#03CAL TIME_DELAYCLR P1.6CLR P1.6

Programer, koji piše program u programskom jeziku programskom jeziku asembleruasembleru mora dobro poznavati građu računala.

Program za prevoProgram za prevođđenje enje asemblerasembler prevodi jednu po jednu naredbu programskog jezika asembler u odgovarajuću binarnu naredbu strojnog jezika.

9.4. Viši programski jezici 9.4. Viši programski jezici

Viši programski jezici (engl. high levellanguages, HLL) su svi jezici čije se naredbe ne mogu izravno prevesti u binarne naredbe strojnog jezika.

Svaka naredba višeg programskog jezika prevodi se u više naredbi strojnog jezika.

main(void){float povrsina, polumjer;printf(“\n Upiši polumjer kruga: “); scanf(“%f”,&polumjer); povrsina = polumjer * polumjer * 3.14;printf(“Povrsina kruga je: %f”,povrsina);

}

Svi programski jezici, osim strojnog jezika, nazivaju se SIMBOLIČKIM JEZICIMA.

Page 109: PREDAVANJA (2h) - etfos.unios.hrjbalen/doks/SVA predavanja_25-01-2010.pdf · J. Šribar, B. Motik, “Demistificirani C/C++”, Element, Zagreb, 2001 L. Budin, “Informatika za 1

8

VIŠI PROGRAMSKI JEZICIVIŠI PROGRAMSKI JEZICIZnačajkeZnačajke

PREDNOSTI (u odnosu na strojni jezik):jednostavnost pisanja programa,njihova razumljivost,prenosivost.

NEDOSTACI (u odnosu na strojni jezik):relativno sporije izvođenje,nemogućnost izravnog nadzora sklopovskih dijelova računala.

Prednosti viših programskih jezika u odnosu na strojni jezik tako su velike da se danas strojni jezik kod osobnih računala rabi samo iznimno i kada je to prijeko potrebno.

99.4.1. .4.1. Generacije programskih jezikaGeneracije programskih jezika

Ne postoji jednoznačno određenje podjele programskog jezika na generacije, ali se oni najčešće dijele kako slijedi:

Jezici prve generacije (engl. first generationlanguages): strojni jezicistrojni jezici

Jezici druge generacije (engl. second generationlanguages): asembleriasembleri

Jezici treće generacije (engl. third generationlanguages): programski jezici opće namjeneprogramski jezici opće namjene (npr. FORTRAN, ALGOL, COBOL, BASIC, Pascal, C, C++)

Jezici četvrte generacije (engl. fourth generationlanguages): programski jezici uske namjeneprogramski jezici uske namjene (npr. dBASE, SQL, PostScript)

Jezici pete generacije (engl. fifth generationlanguages)...

Page 110: PREDAVANJA (2h) - etfos.unios.hrjbalen/doks/SVA predavanja_25-01-2010.pdf · J. Šribar, B. Motik, “Demistificirani C/C++”, Element, Zagreb, 2001 L. Budin, “Informatika za 1

9

9.4.2. Jezici prevoditelji9.4.2. Jezici prevoditelji

Središnja jedinica za obradu može prihvaćati program samo u strojnom jeziku. Program u višem jeziku potrebno prije izvođenja prevesti na strojni jezik (engl. machine code, object code).

INTERPRETER je program koji izvršava druge programe, tj. INTERPRETER je jezički prevoditelj koji svaku naredbu izvornog programa (engl. source code) u trenutku izvođenja programa prevodi u binarni oblik strojnog jezika (engl. machine code, object code).

KOMPAJLER (kompilator, engl. compiler) je program za prevođenje izvornog programa (engl. sourcecode) u strojni jezik (engl. machine code, objectcode) samo jednom i to tijekom prevođenja ili kompajliranja.

Jezici prevoditeljiJezici prevoditeljiSvojstvaSvojstva

INTERPRETER:Prednosti: prevođenje naredbu po naredbu omogućava otkrivanje sintaksnih pogrešaka i interaktivno ispravljanje, tj. otkrivanje pogrešaka pri svakom izvođenju programa i automatsko prevođenje pri popravkama programa.Nedostaci: sporiji rad od kompajlera, nužnost davanja izvornog programa korisniku.Primjeri programa koje prevodi interpretek: Lotus, dBase, GW Basic.

KOMPAJLER:Prednosti: brži rad od interpretera, zaštičenizvorni program.Nedostaci: odvojenost prevedenog i izvornog programa.Primjeri programa koje prevodi kompajler: C, Turbo Pascal, Clipper.

Page 111: PREDAVANJA (2h) - etfos.unios.hrjbalen/doks/SVA predavanja_25-01-2010.pdf · J. Šribar, B. Motik, “Demistificirani C/C++”, Element, Zagreb, 2001 L. Budin, “Informatika za 1

10

9.4.3 Viši programski jezici opće namjene9.4.3 Viši programski jezici opće namjene

Postoji mnogo ovih jezika, a mi ćemo spomenuti samo one koji su povijesno značajni ili su u širokoj upotrebi:

Jezici opće namjene su oni programski jezici koji nisu namijenjeni uskom području primjene, već je njima moguće rješavati širok raspon zadataka.

Programski jezik BASIC (Programski jezik BASIC (prvoslovnicaprvoslovnica od od englengl. . beginnerbeginner’s all’s all--purposepurpose symbolicsymbolic instructioninstruction codecode, , u u prijevoduprijevodu “jezik opće namjene za početnike”):“jezik opće namjene za početnike”): (JohnG. Kemeny i Thomas E. Kurtz 1962.-1964.) Odigrao je veliku ulogu u približavanju računala i programskih postupaka ljudima koji nisu specijalisti za računala i omogućio je stručnjacima raznih struka rješavanje zadataka pomoću računala.

PREDNOSTI: jednostavnost, razumljivost, rasprostranjenost gotovo na svim vrstama računala.NEDOSTACI: nestrukturiranost jezika, pa je temeljni prigovor sadržan u izjavi E. Dijkstra: “Studenti koji su bili prvo izloženi BASIC-u su beznadno mentalno osakaćeni kao potencijalni programeri.”Popularne INAČICE: True BASIC, MS Quick BASIC, MS Visual BASIC.Poznati ZAGOVORNICI: Bill Gates, Jerry Pournelle.

Page 112: PREDAVANJA (2h) - etfos.unios.hrjbalen/doks/SVA predavanja_25-01-2010.pdf · J. Šribar, B. Motik, “Demistificirani C/C++”, Element, Zagreb, 2001 L. Budin, “Informatika za 1

11

Programski jezik C (prvotno razvijeni CPL, BCPL, B):Programski jezik C (prvotno razvijeni CPL, BCPL, B):(Dennis Ritchie 1972.) Najpopularniji je programski jezik opće namjene. Razvijen je usporedo s operacijskim sustavom Unix, koji je i napisan u C-u. Vrlo je složen i velikih mogućnosti, a namijenjen je ponajprije stručnjacima koji se profesionalno bave pisanjem programa.

Ima dobra SVOJSTVA viših programskih jezika, ali i mogućnost manipulacije sklopovskim dijelovima računala na niskoj razini. Popularne INAČICE: Microsoft C, Borland Turbo C, Watcom C, nekoliko objektno orijentiranih inačica C++.

Programski jezik COBOL (Programski jezik COBOL (prvoslovnicaprvoslovnica od od englengl. . commoncommon businessbusiness orientedoriented languagelanguage, , u prijevoduu prijevodu“opći poslovno orijentirani jezik”):“opći poslovno orijentirani jezik”): (grupa stručnjaka u odboru konferencije CODASYL potkraj 50.-tih g. 20.st.) Jedan je od prvih viših programskih jezika. Namijenjen je poslovanju u bankama, obračunima tvrtki, obraćunima plaća i sl.

Programski jezik FORTRAN (skraćenica od Programski jezik FORTRAN (skraćenica od englengl. . formula formula translationtranslation, u prijevodu, u prijevodu “prevoditelj formula”):“prevoditelj formula”): (JohnBackus 1954.-1958.) Najstariji je viši programski jezik. Namijenjen je ponajprije tehničkoj i znanstve-noj uporabi, gdje je potrebno obavljati raznovrsne računske operacije.

INAČICE: FORTRAN II, FORTRAN IV, FORTRAN 66, FORTRAN 77, FORTRAN 90, Microsoft FORTRAN, LaheyComputer Systems Personal FORTRAN, MicrowayFORTRAN.

Programski jezik LOGO: Programski jezik LOGO: (Wallyy Fuerzeig i SeymourPapert 1966.-1968.) Namijenjen je djeci i ostalim početnicima na računalu. Prvi je programski jezik koji je omogućavao jednostavno crtanje pomoću računala bez složenog programiranja. Temelji se na jeziku LISP.

Page 113: PREDAVANJA (2h) - etfos.unios.hrjbalen/doks/SVA predavanja_25-01-2010.pdf · J. Šribar, B. Motik, “Demistificirani C/C++”, Element, Zagreb, 2001 L. Budin, “Informatika za 1

12

Programski jezik PASCAL (dobio ime po Programski jezik PASCAL (dobio ime po BlaiseBlaisePascaluPascalu):): (Niklaus Wirth 1967.-1971.) Posebice omogućuje strukturno programiranje, koje olakšava pisanje, održavanje i popravak programa. Prvotno je bio namijenjen učenju strukturnog programiranja, ali je stekao veliku popularnost u akademskim krugovima. Danas ga koriste neprofesionalci kao “razbibrigu”, ali i za profesionalne primjene. Zasnovan je na ALGOL-u, a po mogućnostima je između BASIC-a i C-a.

Popularne INAČICE za PC: Turbo Pascal, BorlandPascal, MetaWare Pascal, IBM Pascal, ObjectPascal for Mac, UCSD Pascal.Poznati KRITIČAR: Brian Kenighan - jedan od autora C-a.

Viši programski jezici opće namjeneViši programski jezici opće namjeneIZBOR PROGRAMSKOG JEZIKAIZBOR PROGRAMSKOG JEZIKA

CBasic, PascalUpravljanje nizovima znakovaBasic, FortranAda, Asembler, CPr.za rad u realnom vremenu

FortranBasic, Asembler, C

Za okružja s ograničenom memorijom

BasicC, PascalDinamička upotreba memorije

C, FortranPascal, AdaPr.jednostavni za nadgradnju

PascalFortranMatematički programi

Interpreter poput Basic-a

Asembler, CBrzo izvođenje programaPascal,Ada, AsemblerBasicKratki i nekvalitetni projekti

Asembler, BasicAda, C/C++, Pascal

Strukturirani programi

Najlošiji jeziciNajlošiji jeziciNajbolji jeziciNajbolji jeziciTip programaTip programa

Page 114: PREDAVANJA (2h) - etfos.unios.hrjbalen/doks/SVA predavanja_25-01-2010.pdf · J. Šribar, B. Motik, “Demistificirani C/C++”, Element, Zagreb, 2001 L. Budin, “Informatika za 1

13

9.5. Strukturno programiranje9.5. Strukturno programiranje

METODE strukturnog programiranja: Modularno programiranje,Deklariranje svih varijabli prije korištenja (primjerice na početku programa),Izbjegavanje nekih naredbi nestrukturnogprogramiranja (primjerice goto).

Tjeraju programere na programersku disciplinu i urednost, ograničavaju slobodu programera.PRIMJERI: Pascal, dBase, Ada.

Strukturno programiranje (Strukturno programiranje (englengl. . structuredstructured prograprogra--mingming) skup je programskih metoda koje vode k ) skup je programskih metoda koje vode k logičlogič--kojkoj organizaciji i čitljivosti programa. Logička organizaciji i čitljivosti programa. Logička organizacija olakšava pisanje, održavanje i organizacija olakšava pisanje, održavanje i popravak programa.popravak programa.

9.6. Objektno orijentirani programi9.6. Objektno orijentirani programi

Glavne značajke objektno orijentiranih programa Glavne značajke objektno orijentiranih programa ((englengl. . objectobject orientedoriented programsprograms, OOP) su kvaliteta , OOP) su kvaliteta i pouzdanost, te povećana proizvodnost programera i pouzdanost, te povećana proizvodnost programera pri uporabi OOP.pri uporabi OOP.

POBUDE STVARANJA OOP: Pisati programe analogno gradnji složenih sustava: sastavnjenem od gotovih komponenti, tzv. objekata (engl. Object, class), koji mogu međusobno razmjenjivati poruke,Pisanje dijelova programa zasebno, te njihovo povezivanje i korištenje u različitim progra-mima.

Page 115: PREDAVANJA (2h) - etfos.unios.hrjbalen/doks/SVA predavanja_25-01-2010.pdf · J. Šribar, B. Motik, “Demistificirani C/C++”, Element, Zagreb, 2001 L. Budin, “Informatika za 1

14

Objektno orijentirani programiObjektno orijentirani programiSVOJSTVASVOJSTVA

Objekt je zaseban program, koji je sposoban obraditi određenu zadaću. Sastoji se od apstraktnih apstraktnih podatakapodataka (engl. abstract data types) i postupaka postupaka (engl. methods).Apstraktni podaciApstraktni podaci je naziv za podatke čiji je oblik nedostupan izvan objekta. Glavni program nema izravan pristup takvim podacima. Operacije s apstraktnim podacima mogu obavljati samo postupcipostupci.Objekt može biti napisan u programu različitom od onog u kome programer piše program. Programer ne zna ništa o tome kako je objekt napisan (zatvorenostzatvorenost, engl. encapsulation), nego treba znati samo propisani oblik slanja poruke objektu.

Objektno orijentirani programiObjektno orijentirani programiSVOJSTVA (nastavak)SVOJSTVA (nastavak)

Mogućnost nasljenasljeđđivanja ivanja (engl. inheritance) svojstava prije napisanog objekta, kako se ne bi morao pisati zajednički dio. VišezadaćnostVišezadaćnost (engl. polymorphism) je mogućnost da se dobije odgovarajući rezultat pri slanju iste poruke različitim objektima.PREDNOSTI: Pisanje programa pomoću objekata jednostavnije je i s gledišta preslikavanja stvarnog svijeta (primjerice poslovnog svijeta) u oblik zarumljiv računalu, tj. u odnose među objektima.NEDOSTACI: Zbog načina rada OOP u načelu se sporije izvršavaju od tradicionalnih programa.ZAPREKE U KORIŠTENJU OOP: navika programera na tradicionalno programiranje i mnogo gotovih starih programa.

Page 116: PREDAVANJA (2h) - etfos.unios.hrjbalen/doks/SVA predavanja_25-01-2010.pdf · J. Šribar, B. Motik, “Demistificirani C/C++”, Element, Zagreb, 2001 L. Budin, “Informatika za 1

15

Objektno orijentirani programiObjektno orijentirani programiPRIMJERI PROGRAMSKIH JEZIKAPRIMJERI PROGRAMSKIH JEZIKA

Programski jezik Simula 67: Programski jezik Simula 67: neka obilježja OOPProgramski jezik C++ (naziv od Programski jezik C++ (naziv od inkrementinkrement operatora operatora ++): ++): (Rick Mascitti 1980.-1983.) To je objektno orijentirana inačica C-a. Omogućava tradicionalno i objektno programiranje unutar istog programa (tzv. hibridni objektno orijentirani programi). Programski jezik Programski jezik ObjectObject PascalPascal: : je objektno orijentirana inačica Pascal-a. Programski jezik Programski jezik SmalltalkSmalltalk: : (Adele Goldberg i Alan Kay 1972.-1980.) Bio je prvi OOP. Glavne novosti koje je uveo su: objektno programiranje, uporaba grafičkog korisničkog sučelja s prozorima, uporaba miša, objedinjavanje operacijskog sustava i programskog jezika u nedjeljivu cjelinu.

9.7. Brz razvoj namjenskih programa (RAD)9.7. Brz razvoj namjenskih programa (RAD)

Glavna razlika izmeGlavna razlika izmeđđu RAD i tradicionalnih metoda u RAD i tradicionalnih metoda programiranja jest mogućnost usporednog razvoja programiranja jest mogućnost usporednog razvoja različitih dijelova programa, upotreba gotovih različitih dijelova programa, upotreba gotovih programa, te jednostavna izrada GUI.programa, te jednostavna izrada GUI.

Pojavom OS s grafičkim korisničkim sučeljem (engl. graphic user interface, GUI) raste potreba za prikladnim programskim jezicima i alatima za jednostavnu i brzu izradu korisničkog sučelja i jednostavnu i brzu izradu korisničkog sučelja i pripadnog programapripadnog programa.

Polovicom 90.tih g. 20.st. razvijaju se programski alati za brz razvoj namjenskih programa pod zajedničkim nazivom RAD (RAD (englengl. . rapidrapid applicationapplicationdevelopmentdevelopment).).

Page 117: PREDAVANJA (2h) - etfos.unios.hrjbalen/doks/SVA predavanja_25-01-2010.pdf · J. Šribar, B. Motik, “Demistificirani C/C++”, Element, Zagreb, 2001 L. Budin, “Informatika za 1

16

Brz razvoj namjenskih programa (RAD)Brz razvoj namjenskih programa (RAD)SVOJSTVASVOJSTVA

Mogućnost usporednog i neovisnog razvoja GUI od usporednog i neovisnog razvoja GUI od ostatka programaostatka programa ima sljedeće važne prednosti: brz razvoj programa i jednostavno održavanje.Upotrebom RAD alata crta se GUIUpotrebom RAD alata crta se GUI, a njegovi dijelovi se biraju iz knjižnice objekata (primjerice: izbornici, prozori, dugmad). Nedostatak je što se Nedostatak je što se 20% programa piše tradicionalno.20% programa piše tradicionalno.RAD alati mogu koristiti i objekte napisane u nekom drugom jeziku, pa postoje programske programske trvrtketrvrtke za za proizvodnju objekata opće namjene.proizvodnju objekata opće namjene.RAD alti uvode nove metode programiranja, nove metode programiranja, primjerice spiralno programiranjeprimjerice spiralno programiranje. Za razliku od tradicionalnih postupaka (dijagram programa, pseudo kôd), ovdje se počinje s izradom GUI. Nakon primjedbi korisnika o radnom prostoru, pristupa se ispravljanju i dogradnji programa.

Brz razvoj namjenskih programa (RAD)Brz razvoj namjenskih programa (RAD)PRIMJERI PROGRAMSKIH JEZIKAPRIMJERI PROGRAMSKIH JEZIKA

Programski jezik Programski jezik VisualVisual BasicBasic (ili VB): (ili VB): (Microsoft 1991.) To je prvi programski jezik s mogućnostima višestruke upotrebe gotovih programskih objekata.Programski jezik Programski jezik DelphiDelphi:: (Borland 1995.) Iskoristio je sve prednosti VB, a odklonio nedostatke. Imao je najbrži prevoditelj, podržavao poslužitelj/klijent tehnologiju, objedinjenu razvojnu okolinu, podršku bazama podataka.Drugi programski jezici:

Visual C++ Visual C++ (Microsoft),PowerBuilder PowerBuilder (PowerSoft),SQLWindows SQLWindows (Gupta),PowerObjects PowerObjects (Oracle).

Page 118: PREDAVANJA (2h) - etfos.unios.hrjbalen/doks/SVA predavanja_25-01-2010.pdf · J. Šribar, B. Motik, “Demistificirani C/C++”, Element, Zagreb, 2001 L. Budin, “Informatika za 1

17

9.8. Programski jezici neovisni o sklopovlju i 9.8. Programski jezici neovisni o sklopovlju i operacijskom sustavuoperacijskom sustavu

Pojavom lokalnih mreža, a posebice Interneta Pojavom lokalnih mreža, a posebice Interneta potaknut je razvoj novih programskih jezika za potaknut je razvoj novih programskih jezika za pisanje znakovima koje prihvaća svako računalo pisanje znakovima koje prihvaća svako računalo (prenosivost (prenosivost programa, a da proizvoprograma, a da proizvođđač ne mora ač ne mora isporučiti izvorni program).isporučiti izvorni program).

Jednom napisani i prevedeni program u načelu se može izvršavati na bilo kojem računalu.U praksi to nije tako: strojni jezik koji je rezultat prevođenja ne može se izvršavati na različitim vrstama računala, već na onom na kojem je program preveden.

ProgProg. jezici neovisni o sklop. i . jezici neovisni o sklop. i operoper. . sussus. . -- nastavak:nastavak:NAJPOZNATIJI JEZICINAJPOZNATIJI JEZICI

1.Programski jezik HTML (1.Programski jezik HTML (englengl. . hypetexthypetext markupmarkuplanguagelanguage): ): (T. Berners-Lee 1980.-1989.) Ograničenih je mogućnosti i ne spada u jezike opće namjene. Namijenjen je prikazu hipertekst dokumenta, tj. prikaz HTML dokumenta na zaslonu monitora, bez obzira na vrstu računala ili OS-a. Izvorni HTML program je skup naredbi napisanih ASCII znakovima.

HIPERTEKST HIPERTEKST pruža mogućnost povezivanja uzajamno vezanih tekstualnih podataka u ukupnom skupu tekstualnih podataka, i to tako da je jednostavnom radnjom moguće pomoću te veze doći od jednog do drugog (s njime vezanog) podatka, koji može biti na drugom računalu.

Page 119: PREDAVANJA (2h) - etfos.unios.hrjbalen/doks/SVA predavanja_25-01-2010.pdf · J. Šribar, B. Motik, “Demistificirani C/C++”, Element, Zagreb, 2001 L. Budin, “Informatika za 1

18

HTML HTML -- nastavak:nastavak:NAJPOZNATIJI PREGLEDNICINAJPOZNATIJI PREGLEDNICI

Internet Explorer, Lynx, Netscape Navigator, NCSA Mosaic

2.Programski jezik VRLM (2.Programski jezik VRLM (englengl. . virtualvirtual realityreality markupmarkuplanguagelanguage, , virtualvirtual realityreality modelingmodeling languagelanguage): ): (Prva međunarodna WWW konferencija 1994.) VRLM je proširenje HTML jezika za prikazivanje prividne stvarnosti na zaslonu monitora.

3.Programski jezik Java3.Programski jezik Java: (James Goslink 1990.-1995.) To je snažan OOP opće namjene, nalik na C++.

ProgProg. jezici neovisni o sklop. i . jezici neovisni o sklop. i operoper. . sussus. . NAJPOZNATIJI JEZICINAJPOZNATIJI JEZICI -- nastavaknastavak

Page 120: PREDAVANJA (2h) - etfos.unios.hrjbalen/doks/SVA predavanja_25-01-2010.pdf · J. Šribar, B. Motik, “Demistificirani C/C++”, Element, Zagreb, 2001 L. Budin, “Informatika za 1

19

Java Java -- nastavaknastavak

Može se koristiti neovisno o Internetu.PREVODITELJ: prevodi izvorni Java program u tzv. Java Bytecodes (strojni jezik za tzv. Java prividno računalo), koji je neovisan o računalu i operacijskom sustavu.Na računalu na kojem se želi izvršiti program mora postojati program prevoditelj Java Bytecodesprograma u strojni jezik.PREDNOST: Prenosivost, brže prevođenje i nemogućnost prepravljanja programa od strane korisnika.NEDOSTACI: prevođenje u dva koraka.PRIMJENA: u području Interneta (Java Appletprogram) i neovisno o tom području.JavaSCript: programski jezik između HTML-a i Jave, za skromnije korisnike.

Page 121: PREDAVANJA (2h) - etfos.unios.hrjbalen/doks/SVA predavanja_25-01-2010.pdf · J. Šribar, B. Motik, “Demistificirani C/C++”, Element, Zagreb, 2001 L. Budin, “Informatika za 1

1

1

Sveučilište J.J. Strossmayera u OsijekuElektrotehnički fakultet

PROGRAMIRANJE I(predavanja u ak. god. 2006./2007.)

P2006-11PREGLED JEZIKA C

doc.dr.sc. Goran Martinovićwww.etfos.hr/~martin

[email protected]: 031 224-766

Soba: 0-14

Osijek, listopad 2006.

2

1 Kratki pregled C-a

• 1.1 Prvi C program• 1.1.1 Struktura programa• 1.1.2 Komentari programa• 1.1.3 Ključne riječi• 1.1.4 Kompiliranje i pokretanje programa

• 1.2 Pretprocesorske direktive• 1.3 Varijable i aritmetički izrazi• 1.4 Ulaz i izlaz• 1.5 If-else, logički i relacijski izrazi• 1.6 For petlja• 1.7 Funkcije• 1.8 Pokazivači, polja i strukture

Page 122: PREDAVANJA (2h) - etfos.unios.hrjbalen/doks/SVA predavanja_25-01-2010.pdf · J. Šribar, B. Motik, “Demistificirani C/C++”, Element, Zagreb, 2001 L. Budin, “Informatika za 1

2

3

1.1. Prvi C program/* Datoteka: prvi.c *//* Program racuna sumu elemenata polja. Broj elemenata za *//* koji se racuna suma unosi se s tipkovnice */

#include <stdio.h>#include <stdlib.h>

#define MAXN 10

float suma (int n);float data[MAXN]={234.56, -82.76, 324.89, 9323.7, 3.56,

-2345.67, 45.97, 12341.4, -298.32, 70.5 };

main(){

int i,n;float sum;

printf("Unesite broj elemenata: ");scanf("%d", &n);

if(n>MAXN||n<1) {printf("\n\n Pogreska: nedozvoljen broj elemenata\n");exit(1);

}else

sum=suma(n);

for(i=0;i<n;i++)printf("\n%9.2f",data[i]);

printf("\n---------\n");printf("%9.2f\n", sum);

return 0;}

float suma(int n){int i;float s=0;

for(i=0;i<n;i++)s+=data[i];

return(s);}

4

1.1.1 Struktura programa

- C – programski jezik slobodnog formata – nema pravila što se tiče stila pisanja

- naredbe mogu početi u bilo kojem stupcu reda, te se mogu umetnuti i prazni redovi za odvajanja pojedinih cjelina programa

- u istom redu moguće je napisati nekoliko naredbi odvojenih točka-zarezom, npr.

int i,n; printf(“Unesite broj elemenata:”);scanf(“%d”, &n);

- ključne riječi i naredbe se pišu malim slovom

- velika i mala slova u imenima se razlikuju, ali se mogu ravnopravno koristiti (npr. imena varijable Sum, SUM ili sum)

- varijable se inače pišu malim slovom, a simboličke konstante velikim

Page 123: PREDAVANJA (2h) - etfos.unios.hrjbalen/doks/SVA predavanja_25-01-2010.pdf · J. Šribar, B. Motik, “Demistificirani C/C++”, Element, Zagreb, 2001 L. Budin, “Informatika za 1

3

5

- C programi moraju sadržavati linije:

main(){}

- u svakom programu mora postojati jedna glavna funkcija – main(to je ujedno mjesto gdje počinje izvođenje programa), tj.

- naredba iza prve otvorene vitičaste zagrade u main funkciji je prva naredba koja se izvodi

- dio programa između vitičastih zagrada ({ }) naziva se blok

- jedan blok se može nalaziti unutar drugog bloka

- svaka naredba završava s ;- komentari se pišu unutar /* i */ znakova i ne moraju završavati

točka-zarezom, jer ih prevoditelj ignorira- linije s imenima funkcija (main i suma), te vitičaste zagrade ne

završavaju točka-zarezom, jer se ne radi o izvršnim naredbama

6

1.1.2 Komentari

- povećavaju čitljivost programa- mogu se protezati i u nekoliko linija, zauzeti cijelu liniju ili se nalaziti iza

završne naredbe u istom redu- dobro je komentirati svaku funkciju pomoću uvodnog komentara, te

kritične naredbe unutar funkcija- ne komentirati svaki red u programu poput ovog:

prinft (“unesi n: ”) /* Ispisuje na zaslonu: Unesi n: */- preporuka: komentirati program za vrijeme pisanja, a ne poslije- prva tri reda programa - komentari s nazivom programa i kratkim

objašnjenjem njegove svrhe:

/* Datoteka: prvi.c *//* Program računa sumu elemenata polja. Broj elemenata za *//* koji se računa suma unosi se s tipkovnice */

Page 124: PREDAVANJA (2h) - etfos.unios.hrjbalen/doks/SVA predavanja_25-01-2010.pdf · J. Šribar, B. Motik, “Demistificirani C/C++”, Element, Zagreb, 2001 L. Budin, “Informatika za 1

4

7

1.1.3 Ključne riječi

- C (prema ANSI standardu) sadrži 32 ključne riječi:

auto double int structbreak else long switchcase enum register typedefchar exstern return unionconst float short unsignedcontinue for signed voiddefault goto sizeof volatiledo if static while

- navedene riječi i sintaksna pravila čine osnovnu definiciju jezika- uz svaki C prevoditelj obavezno dolazi standardna biblioteka funkcija koja

sadrži funkcije za izvršavanje ulazno-izlaznih operacija, složenihmatematičkih operacija, manipuliranje stringovima i slično

8

1.1.4 Prevođenje i pokretanje programa

- ovisi o operacijskom sustavu i prevoditelju- npr. na UNIX operacijskom sustavu C program se može prevesti

naredbom:cc prvi.c

- kao rezultat uspješnog prevođenja dobit će se datoteka a.out- u MS–DOS–u na PC računalima

- za Microsoft C prevoditelj: cl prvi.c- za Borland C++: bcc prvi.c- ili Make Program …

- kao rezultat dobije se izvršna datoteka prvi.exe- moderni prevoditelji podržavaju integrirano razvojno okruženje unutar

kojeg se pišu, uređuju, ispravljaju, testiraju i izvode programi- za Visual Studio: Build

Page 125: PREDAVANJA (2h) - etfos.unios.hrjbalen/doks/SVA predavanja_25-01-2010.pdf · J. Šribar, B. Motik, “Demistificirani C/C++”, Element, Zagreb, 2001 L. Budin, “Informatika za 1

5

9

1.2 Pretprocesorske naredbe

- pretprocesor u skladu s vlastitim naredbama vrši transformaciju programa prije prevođenja

- pretprocesorska naredba#include <stdio.h>

nalaže prevoditelju da u program uključi standardno zaglavlje koje sadrži definiciju tipova i funkcijske prototipove (npr. za printf i scanffunkcije)

- pretprocesorskom naredbom

#define MAXN 10

definira se simbolička konstanta MAXN s vrijednošću 10- osnovna svrha ove direktive je parametrizacija programa- ako je u programu potrebno zamijeniti MAXN, odnosno vrijednost 10 s

nekom drugom, dovoljno je promijeniti samo vrijednost simboličke konstante u # define naredbi

10

1.3 Varijable i aritmetički izrazi

- u C-u sve varijable moraju biti deklarirane prije početka njihova korištenja

- C poznaje samo 4 osnovna tipa: cjelobrojni (int), znakovni (char), i dva realna (float i double)

- varijabla može poprimiti različite vrijednosti, dok konstante nikada ne mijenjaju svoju vrijednost

- C dozvoljava nekoliko vrsta konstanti: brojeve (cjelobrojne i realne), znakovne i nizove znakova ili stringove (riječi i fraze), kao npr.

127 -34.768 ‘B’ “Osijek” “Danas je lijep dan”

Page 126: PREDAVANJA (2h) - etfos.unios.hrjbalen/doks/SVA predavanja_25-01-2010.pdf · J. Šribar, B. Motik, “Demistificirani C/C++”, Element, Zagreb, 2001 L. Budin, “Informatika za 1

6

11

• int i,n; deklarira cjelobrojne (int) varijable i, n- one mogu poprimiti samo cjelobrojne vrijednosti bez decimalnog dijela

• float sum; deklarira realnu varijablu sum jednostruke preciznostiOsim realnog tipa jednostruke preciznosti, u C-u se može deklarirati i varijabla realnog tipa dvostruke preciznosti pomoću ključne riječi double, npr. double sum.Opseg tipova int, float i double obično su 16 bita za int, 32 bita za float i 64 bita za double, te char (znakovni) koji obično zauzima jedan bajt na većini računala.Osnovnim tipom smatramo i tip void. On označava funkciju koja ne vraća vrijednost ili osnovne tipove pokazivača na varijable nepoznatih tipova.Složeni tipovi podataka: polja, strukture i unije osnovnih tipova.

12

Globalne varijable- varijable deklarirane izvan funkcija- vidljiva od mjesta definiranja do kraja programa, te traje cijelo vrijeme

izvođenje programa

Lokalne varijable- deklarirane u funkcijama- vidljiva u bloku ili funkciji u kojoj je deklarirana (znači da se varijablama

i, n i sum može pristupiti samo u funkciji main), a prestaje postojati nakon završetka funkcije ili bloka u kojem je definirana

Izraz pridruživanja- sadrži znak jednakosti kao operator pridruživanja i završava s ;

S=0; /*varijabli s pridružuje se vrijednost 0 */ - osim pridruživanja konstantnih vrijednosti, varijablama se pridružuju

vrijednosti izraza i povratne vrijednosti funkcija

Page 127: PREDAVANJA (2h) - etfos.unios.hrjbalen/doks/SVA predavanja_25-01-2010.pdf · J. Šribar, B. Motik, “Demistificirani C/C++”, Element, Zagreb, 2001 L. Budin, “Informatika za 1

7

13

Matematički operatori koje podržava C

- zbrajanje (+), množenje (*), oduzimanje (-) i dijeljenje (/)- modul – operator ostatka pri cjelobrojnom dijeljenju (%)- operatori za povećanje i smanjivanje varijabli za 1++ i – –

i=i+1;j=j+1;

- to se u C-u može jednostavnije zapisati pomoću operatera za povećavanje i smanjivanje:i++; ili ++i;j– –; ili – –j;

- u izrazima u kojima se s obje strane jednakosti pojavljuje ista varijabla moguće je skraćivanje:x=x+5;x+=5; skraćenoIzraz: s+=data[i]; ekvivalentan je izrazu: s=s+data[i];

14

1.4 Ulaz i izlaz

Ulazno – izlazne funkcije:

- printf ispisuje na standardni izlaz (zaslon) argumente prema odgovarajućem formatu:printf (“Unesite broje elemenata: “);scanf (“%d”, &n);

- poziva se argumentom “unesite...” – ispisuje niz znakova između navodnika, a niz znakova predstavlja stringkonstantu

Page 128: PREDAVANJA (2h) - etfos.unios.hrjbalen/doks/SVA predavanja_25-01-2010.pdf · J. Šribar, B. Motik, “Demistificirani C/C++”, Element, Zagreb, 2001 L. Budin, “Informatika za 1

8

15

- C za niz znakova (string) nema poseban tip, već se on predstavlja pomoću polja znakova:char tekst[24]=“Unesite broj elemenata: ”;

- funkcija scanf varijablama pridružuje unesenu vrijednost s tipkovnice

- scanf se poziva s dva argumenata “%d” i &n i pretvara ulaz u cjelobrojnu vrijednost koju pridružuju varijabli n

- “%d” predstavlja specifikator formata prema kojem se niz znakova unesenih pomoću tipkovnice pretvara u cjelobrojnu vrijednostprintf (“%9.2f\n”, sum)

- sadrži specifikator formata %9.2f za ispis vrijednosti (float) realne varijable sum- značenje specifikatora:

9 - cijeli realan broj raspona devet znakova.2 - mora imati dva mjesta iza decimalne točkef - ispisuje kao realni broj (broj s pomičnim zarezom)

16

Primjeri specifikatora formata:

%5d cijeli broj širok najviše 5 znakova;%d cijeli broj;%ld dugi cijeli broj;%5f realan broj širok najviše 5 znakova;%c znak;%s niz znakova;\n znak novog reda;

Page 129: PREDAVANJA (2h) - etfos.unios.hrjbalen/doks/SVA predavanja_25-01-2010.pdf · J. Šribar, B. Motik, “Demistificirani C/C++”, Element, Zagreb, 2001 L. Budin, “Informatika za 1

9

17

1.5 If-else i logički izrazi

Opći oblik if-else naredbe:

if (izraz)blok1

elseblok2

- blok1 i blok2 predstavljaju jednu ili više naredbi;- ako se radi o jednoj naredbi, završava s ;- ako se radi o više naredbi, stavljaju se u vitičaste zagrade

18

Primjer if-else naredbe:

if (n>MAXN I I n<1) {printf(“\n\n Pogreska: nedozvoljen broj elemenata\n”);exit (1);}

elsesum=sum(m);

- logički izraz: “ako je n veći od MAXN ili manji od 1”- uvjet provjerava ispravnost utipkane vrijednosti za broj

elemenata n- exit omogućava prisilan izlazak iz programa- inače bi program završio nailaskom na posljednju } f-je main- ako je n veći od maksimalno dozvoljene vrijednosti ili manji

od 1, tada se prekida izvođenje programa- u protivnom računanje sume

Page 130: PREDAVANJA (2h) - etfos.unios.hrjbalen/doks/SVA predavanja_25-01-2010.pdf · J. Šribar, B. Motik, “Demistificirani C/C++”, Element, Zagreb, 2001 L. Budin, “Informatika za 1

10

19

Ostali podržani relacijski i logički operatori- relacijski operatori: <=, >=, = = (znak jednakosti, = pridruživanje)

- logički operatori: && (I), ! (NE)

Primjer:

Ispituje je li c jednako ‘N’, tj. sadrži li znakovna varijabla c slovo N i je li sadržaj varijable x jednak vrijednosti izraza y/10+z.

char c;int x, y, z;...if (c= =‘N’)printf(“c sadrži N”);

elseprintf (“c ne sadrži N”);

...if(x= =y/10+z)

x+=10;else

x+=z;

20

1.6 For petlja• for petlja unutar zagrada sadrži tri izraza (prvi.c)

for (i=0;i<n;i++)– prvi (i=0) se izračunava samo jednom na početku (inicijalizacija

varijable brojila)– drugi (i<n) predstavlja uvjet koji kontrolira izvršavanje petlje– treći (i++) je korak povećanja (ili smanjenja) brojila koji se

izvršava nakon izvođenja tijela petlje

• while petlja- ispituje uvjet na početku: ako je ispunjen, izvršava se tijelo petlje- u suprotnom se prekida, te se izvodi prava naredba iza petlje

• do–while petlja

- ispituje uvjet na kraju: ako je ispunjen, izvođenje petlje se nastavlja- u suprotnom prestaje s izvođenjem petlje

- tijelo do–while petlje se uvijek izvršava barem jednom

Page 131: PREDAVANJA (2h) - etfos.unios.hrjbalen/doks/SVA predavanja_25-01-2010.pdf · J. Šribar, B. Motik, “Demistificirani C/C++”, Element, Zagreb, 2001 L. Budin, “Informatika za 1

11

21

Petlje while i do-while ekvivalentne for petlji (u primjeru za ispis elementa polja)

i=0;while (i<n) {printf(“%9.2f\n”, data [i]);

i++:}

i=0;do {

printf(“%9.2f\n”, data[i]);i++;

} while (i<n);

Skraćeni oblici:

i=0;while (i<n)printf(“%9.2f\n”, data[i++]);

i=0;do printf (“%9.2f\n”, data [i]);while (++i<n);

22

1.7 Funkcije

- C program je sastavljen od funkcija i deklaracija- sadrži barem jednu funkciju (main)- predstavlja logičku cjelinu nekog posla

U prvi.c koriste se

- funkcije printf i scanf iz standardne biblioteke - printf (ispis na zaslon), scanf (učitavanje podataka s tipkovnice)- dodatna funkcija suma

Definicija funkcija ima oblik:

[tip] ime_funkcija ([deklaracija parametara]){

tijelo funkcije (blok naredbi)}

- funkcija ne mora sadržavati ni jedan parametar, pa se koriste prazne zagrade ()

Page 132: PREDAVANJA (2h) - etfos.unios.hrjbalen/doks/SVA predavanja_25-01-2010.pdf · J. Šribar, B. Motik, “Demistificirani C/C++”, Element, Zagreb, 2001 L. Budin, “Informatika za 1

12

23

Funkcija suma:

float suma (int n)

- tip (int) i ime (n) parametra- tip rezultata koji funkcija vraća (float)- imena parametara su lokalna (mogu se ponoviti u drugim funkcijama)

Poziv funkcije suma:

sum=suma(n);

- vrijednost koju vraća funkcija suma, pridružuje se varijabli sum- vraćanje vrijednosti obavlja naredba return općeg oblika

return izraz;

- ovdje funkcija suma vraća realnu vrijednost sume n elemenata polja datareturn (s);

- ako funkcija ne treba vraćati vrijednost, deklarira se da vraća tip void- return bez izraza vrši kontrolu, ali ne vraća vrijednost- kada return vraća vrijednost različitu od 0, program neispravno završava- deklaracije funkcije gore (prototip), mora se podudarati s definicijom funkcije suma- prototip – pomaže otkrivanju grešaka u tipovima, broju argumenata ili korištenja

bez deklariranja.

24

1.8 Pokazivači, polja i strukture

• pokazivači su varijable koje sadrže adresu na kojoj se nalazi podatak određenog tipa

• deklariranje pokazivačaint *iptr;– ne sadri cjelobrojnu vrijednost, već adresu na kojoj se nalazi

neka cjelobrojna vrijednost– dereferentnim operatorom (*) označava se da iptr nije

cjelobrojna varijabla, već pokazivač na cjelobrojnu varijablu• pokazivačima se vrijednost pridružuje:

- upotrebom adresnog operatora (&) koji u pokazivač smješta adresu na kojoj se nalazi varijabla

- upotrebom funkcije malloc (calloc i sličnih) koja rezervira traženu količinu memorijskog prostora

Page 133: PREDAVANJA (2h) - etfos.unios.hrjbalen/doks/SVA predavanja_25-01-2010.pdf · J. Šribar, B. Motik, “Demistificirani C/C++”, Element, Zagreb, 2001 L. Budin, “Informatika za 1

13

25

Primjeri:

int i; - deklarira se varijabla iint *ip; - deklarira se pokazivač na cjelobrojnu vrijednost – ipip = &i; - adresa varijable i smjestit će se u pokazivaču ip, pa će

sljedeći izrazi biti ekvivalentni:i=10;*p= 10; - znači da objektu na koji pokazuje pokazivač p (cjelobrojna

varijabla i) pridružuje vrijednost 10

Pokazivači se primjenjuju u prijenosu podataka u funkcije po adresi ilireferenci.

26

Primjer:

Funkcija koja treba vraćati dvije vrijednosti: najveću i najmanju vrijednostpolja. Zato se u funkciji kao parametar koristi pokazivač na varijablu koja trebasadržavati jednu od (najmanju) traženih vrijednosti.

int minmax (int a[ ], int n, int *min); /*predstavlja funkciju koja treba*/ { /*vraćati dvije vrijednosti:*/

int max; /*najveću i najmanju vrijednost*/*min = max = a [0]; /*polja */for (int i=1, 1<n; i++)

if (*min > a [i] )*min = a [i];

else if (max < a[i])max = a[i];

return max;}

Page 134: PREDAVANJA (2h) - etfos.unios.hrjbalen/doks/SVA predavanja_25-01-2010.pdf · J. Šribar, B. Motik, “Demistificirani C/C++”, Element, Zagreb, 2001 L. Budin, “Informatika za 1

14

27

Druga primjena pokazivača – dinamička alokacija memorije i dinamičkihstruktura. Umjesto trajnog rezerviranja memorije, rabi se pokazivač, aslobodna memorija se od OS-a traži standardnim funkcijama i podešava srealloc (oslobađa s free).

double *results;results = (double *)malloc (STEP*sizeof(double));

Veza pokazivača i polja - svaka varijabla koja je u deklarirana kao poljepredstavlja istovremeno i pokazivač na prvi element polja, pa su za poljea[50] sljedeći izrazi ekvivalentni.

*a = = a[0];*(a+1) = = a [1];*(a+2) = = a [2];a+3 = = &a[3];

28

Prijenos polja kao argumenata funkcija putem pokazivača povlačiekvivalentnost sljedećih funkcija:

int reverse (int a[50]);int reverse (int *a);

Zato se kod 1D polja domenzija polja ne mora navesti.

int strupper (char s[]);int strupper (char *s);

Jedina razlika između pokazivača i polja: vrijednost pokazivača može seslobodno mijenjati, dok se ime polja (koja predstavlja njegovu adresu) ne Može, jer je ime polja pokazivačka konstanta. Zato su za: dozvoljeni: ali nisu dozvoljeni:

int a[50];int *ip;char s[20];char *sp;

ip=ip+5;sp=“Dozvoljeno”;

a=a+5;s=“Nije dozvoljeno”;

Page 135: PREDAVANJA (2h) - etfos.unios.hrjbalen/doks/SVA predavanja_25-01-2010.pdf · J. Šribar, B. Motik, “Demistificirani C/C++”, Element, Zagreb, 2001 L. Budin, “Informatika za 1

15

29

Strukture - korisnički tipovi podataka sastavljeni iz jednostavnih tipova.Definiranje strukture:

struct [ime strukture] {član strukture;član strukture;...

} [imena strukturnih varijabli];

Primjer:Deklariranje varijable adresa kao strukture od tri člana

struct adresna forma {char grad [20];char ulica [25];int k_broj;

} adresa;

Svakom od ovih članova pristupa se navođenjem imena varijable i člana, npr.adresa.k_broj = 18;strcpy (adresa.ulica, “Zvonimirova”);puts (adresa.grad);

30

Strukturu je moguće deklarirati i kao polje.

Primjer:Deklaracija predstavlja polje od 100 adresa

struct adresna_forma adresa [100];

Pokazivači mogu pokazivati i na strukture podataka.

Primjer:Pokazivač na strukturu:

struct adresna_forma *adresa;

Pri uporabi pokazivača na strukture koristi se operator ->:adresa->k_broj = 18;strcpy (adresa->ulica, “Zvonimirova”);puts (adresa->grad);

Page 136: PREDAVANJA (2h) - etfos.unios.hrjbalen/doks/SVA predavanja_25-01-2010.pdf · J. Šribar, B. Motik, “Demistificirani C/C++”, Element, Zagreb, 2001 L. Budin, “Informatika za 1

1

1

Sveučilište J.J. Strossmayera u OsijekuElektrotehnički fakultet

PROGRAMIRANJE I(predavanja u ak. god. 2006./2007.)

P2006-11TIPOVI PODATAKA U C-u

doc.dr.sc. Goran Martinovićwww.etfos.hr/~martin

[email protected]: 031 224-766

Soba: 0-14

Osijek, listopad 2006.

2

2 Tipovi podataka

• 2.1 Imena varijabli• 2.2 Tipovi podataka• 2.3 Veličina podataka• 2.4 Konstante• 2.5 Deklaracije

Page 137: PREDAVANJA (2h) - etfos.unios.hrjbalen/doks/SVA predavanja_25-01-2010.pdf · J. Šribar, B. Motik, “Demistificirani C/C++”, Element, Zagreb, 2001 L. Budin, “Informatika za 1

2

3

2.1 Imena varijabli

Dodjela imena varijablama vrši se prema sljedećim pravilima:- imena su sastavljena od slova i brojeva- prvi znak mora biti slovo ili znak podcrtavanja (_): zamjenjuje praznine u

imenima, ali ne koristiti ih na početku imena- velika i mala slova se razlikuju (uobičajeno mala slova za varijable, a

velika za simboličke konstante)- duljina imena varijabli može biti proizvoljna, od čega su barem prvih 31

znakova nekog imena značajni- ključne riječi kao što su for, if, else, while, int itd. su rezervirane i ne mogu

se koristiti kao imena varijabli, a isto se odnosi i na imena bibliotečnih funkcija

Primjeri ispravnih imena varijabli su:suma god99_prodaja x1 y novi_datum

Primjeri neispravnih imena varijabli su:99god_prodaja novi+datum double moja dividenda

Preporuka – imena varijabli davati prema njihovoj namjeni.

4

2.2 Tipovi podataka

pridruživanje samo pozitivnih vrijednostisigned

dozvoljava pridruživanje i pozitivnih i negativnih vrijednostiunsigned

povećava raspon vrijednosti koje varijabla može sadržavatilong

smanjuje raspon vrijednosti koje varijabla može sadržavati short

realni tip u dvostrukoj preciznostidouble

realni tipfloat

cjelobrojni tipint

znakovni tipchar

TipDeklaracijsko ime

Nekoliko osnovni tipova, te prefiksi ili kvalifikatori koji se s njima kombiniraju.

Page 138: PREDAVANJA (2h) - etfos.unios.hrjbalen/doks/SVA predavanja_25-01-2010.pdf · J. Šribar, B. Motik, “Demistificirani C/C++”, Element, Zagreb, 2001 L. Budin, “Informatika za 1

3

5

kratki cjelobrojni bez predznakaunsigned short int

kratki cjelobrojnishort

cjelobrojniint

znakovni (bez predznaka)unsigned char

kratki cjelobrojni s predznakomsigned short int

kratki cjelobrojni (ekvivalentan char)short int

cjelobrojni s predznakomsigned int

cjelobrojni bez predznakaunsigned int

znakovni s predznakom (ekvivalentan char)signed char

znakovnichar

TipDeklaracijsko ime

6

realni dvostruke precioznostidouble

realnifloat

dugi cjelobrojni (ekvivalentan long)long int

dugi cjelobrojnilong

dugi cjelobrojni s predznakomsigned long int

dugi cjelobrojni bez predznakaunsigned long int

dugi realni dvostruke precioznostilong double

TipDeklaracijsko ime

Page 139: PREDAVANJA (2h) - etfos.unios.hrjbalen/doks/SVA predavanja_25-01-2010.pdf · J. Šribar, B. Motik, “Demistificirani C/C++”, Element, Zagreb, 2001 L. Budin, “Informatika za 1

4

7

2.2.1 Tip void

Void se koristi samo kao dio izvedenog tipa iako se sintaksno ponaša kao osnovni tip. Varijable tipa void ne postoje. Void se koristi za označavanje funkcija koje ne vraćaju vrijednost, npr:

void message (char msg [], int n)

ili kao temeljni tip pokazivača na podatke nepoznatih tipova, npr:

void *ptr;

Pokazivač tipa void * može se pridružiti pokazivaču bilo kojeg tipa. Ponajprijese koristi za prijenos pokazivača u funkcije koje ne trebaju sadržavati nijednupretpostavku o tipu objekta.

8

2.3 Veličine podataka

Najjednostavniji tip varijable je znakovni (char).Varijabla znakovnog tipa može sadržavati samo jedan znak koji jepredstavljen na većini računala ASCII kodom dužine 1 bajt.C ne sadrži string (niz znakova) tip varijable, već se niz znakova pohranjujeputem polja znakova.

Cjelobrojne (int) varijable sadrže brojeve koji ne sadrže decimalne točke, npr:

8 -153 0 4369 5120

Realni brojevi sadrže decimalne konstante, a predstavljaju se s dva tipa:- float- double

Tablica prikazuje raspon vrijednosti tipova u C-u. On ovisi o tipu računala iprevoditelja.

Page 140: PREDAVANJA (2h) - etfos.unios.hrjbalen/doks/SVA predavanja_25-01-2010.pdf · J. Šribar, B. Motik, “Demistificirani C/C++”, Element, Zagreb, 2001 L. Budin, “Informatika za 1

5

9

Rasponi vrijednosti tipova podataka u C-u

1.7E-308 – 1.7E+308double3.4E-38 – 3.4E+38float

0 – 4294967295 unsigned long int–2147483648 – 2147483647 signed long int–2147483648 – 2147483647 long int

–32768 – 32767 signed short int

–32768 – 32767short int

3.4E-4932 – 3.4E+4932long double

0 – 65535unsigned short int

–32768 – 32767signed int0 – 65535unsigned int

–32768 – 32767int–128 – 127signed char

0 – 255unsigned char–128 – 127char

Raspon vrijednostiTip

10

Veličine objekata mogu se definirati na više načina.

Sve što možemo jamčiti u smislu veličine tipova je:

l=sizeof(char)≤sizeof(short)≤sizeof(int)≤sizeof(long)sizeof(float)≤sizeof(double)

- tipovi long int i long double određuju cijele i realne brojeve povećanetočnosti

- ako se radi s vrlo velikim brojevima ili pak vrlo malim decimalnim brojevimakoristi se long varijabla, a u protivnom int ili double varijable. Tako se štedimemorija i povećava brzina izvođenja programa.

- deklaracijom unsigned varijable dobije se dvostruko veći raspon vrijednosti,ali one moraju biti pozitivne

- preporuka: duljina podataka treba zadovoljiti što veći broj potreba

Page 141: PREDAVANJA (2h) - etfos.unios.hrjbalen/doks/SVA predavanja_25-01-2010.pdf · J. Šribar, B. Motik, “Demistificirani C/C++”, Element, Zagreb, 2001 L. Budin, “Informatika za 1

6

11

2.4. Konstante2.4.1 Cjelobrojne konstante

- nema decimalne točke- može se prikazati u tri različita brojevna sustava:

dec 7 20 64 110 8092 65535hex 0x07 0x14 0x40 0x6E 0x1F9C 0xFFFFoct 07 024 0100 0156 017634 0177777

- oktalne konstante imaju prefiks 0- heksadecimalne konstante imaju prefiks 0x

(vrijedi samo za cjelobrojne konstante)- cjelobrojne long konstante pišu se s l (el) ili L na kraju, npr:34567821L -176987941 0xfff4L

- unsigned se piše s u ili U na kraju,56456U 39782u 0x7EBU

- unsigned long konstante pišu se s ul ili UL nastavkom, npr:3246787869UL 1232432457ul 0x77FE69UL

- cijeli brojevi preveliki za int, automatski će se uzeti kao long konstante

12

2.4.2 Realne konstante

- sadrže decimalnu točku ili eksponent ili oba elementa, npr:365.64 7.8 .007 6e-8

- tip konstanti je float i double. Podrazumijeva se double ako u deklaraciji konstante nije naveden float tip ili oznaka float konstante (f ili F na kraju), npr:365.12f 1e-5F

- pored f ili F, za konstante realnih brojeva mogu se koristiti i l ili L za oznaku long double konstanti, npr:

1.44e+205l 45.7e-302L

Page 142: PREDAVANJA (2h) - etfos.unios.hrjbalen/doks/SVA predavanja_25-01-2010.pdf · J. Šribar, B. Motik, “Demistificirani C/C++”, Element, Zagreb, 2001 L. Budin, “Informatika za 1

7

13

2.4.3 Znakovne konstante

- sve znakovne konstante u C-u zatvorene su jednostrukim znakovimanavodnika koji služi za njihovo uključivanje, npr.:‘A’ ‘c’ ‘!’ ‘d’ ‘*’ ‘\x41’

- znakovne konstante zauzimaju 1 bajt memorije i predstavljene su ASCIIkodom znakova, pa je npr. A je u memoriji prikazan kodom 65 (0x41)

- znakovne se konstante mogu predstavljati hex. konstantom, što je posebno pogodno za ASCII znakove koji nemaju odgovarajuće tipke na tipkovnici

- tablica pokazuje značenje znakova (escape sekvenci) koji se koriste pri ispisu i predstavljeni su kosom crtom:

Primjer:- uključenje prijelaza u novi red:

printf (“Pritisnite enter za nastavak\n”);- definiranje simboličke konstante za escape sekvencu:

#define ZVONO ‘\a’ /* zvucni signal terminala (ASCII kod 7) */

14

nul znak\0

Heksadecimalni broj\xhh

Oktalni broj\ooo

vertikalni tabulator\v

tabulator\t

carraige return (postavljanje kursora na početak retka)\r

prelazak u novi red\n

formfeed (pomicanje za list papira)\f

backspace (pomicanje) za jedno mjesto ulijevo\b

alarm (zvučni signal)\a

Značenje Escape sekvenca

Page 143: PREDAVANJA (2h) - etfos.unios.hrjbalen/doks/SVA predavanja_25-01-2010.pdf · J. Šribar, B. Motik, “Demistificirani C/C++”, Element, Zagreb, 2001 L. Budin, “Informatika za 1

8

15

2.4.4 Znakovni niz (string)

- string konstanta uvijek je predstavljena dvostrukim znakovima navoda unutar kojih se može naći bilo koji znak ili grupa njih, Npr. “moj program” “Osijek” “Danas je 01.10.2004.”

- ovaj tip znakova nema ključnu riječ, već se predstavlja poljem znakova

- ako string konstanta sadrži samo znamenke, ne radi se o broju, pa se ne mogu vršiti matematičke operacije

- ispis znakovnog niza (“moj program”) postiže se naredbom:printf (“moj program”);

- sve string konstante završavaju s nul znakom, a pomoću njega prevoditelj zna gdje završava string konstanta u memoriji (slika)

- nul znak je poseban znak (ASCII kod 0) i različit je od 0 (ASCII kod 48)

- jednoznamenkasta string konstanta (npr. “A”) razlikuje se od od obične znakovne konstante (‘A’), jer uključuje i dodatni nul znak, pa se ovi tipovi ne mogu miješati

- duljina stringa određena je brojem znakova do nul znaka

\0

m

a

r

g

o

r

p

j

o

m

A

\0

A

‘A’ “A”

16

2.4.5. Numerirane konstante

- predstavljaju listu konstantnih cjelobrojnih vrijednosti koje su simbolički postavljene unutar vitičastih zagrada,. Npr.:enum dani {PON, UTO, SRI, CET, PET, SUB, NED};(PON ima vrijednost 0, UTO 1 itd.)

- vrijednosti elemenata liste mogu se eksplicitno zadati unutar enumdeklaracije i to:- za svaki element:enum poz_broj {Australija=43, Hrvatska=385, SAD=1};- za pojedine elemente, pri čemu vrijednosti koje nisu zadane, rastu od posljednje zadane:enum ljetni_mjeseci { LIPANJ=6, SRPANJ, KOLOVOZ, RUJAN};

Page 144: PREDAVANJA (2h) - etfos.unios.hrjbalen/doks/SVA predavanja_25-01-2010.pdf · J. Šribar, B. Motik, “Demistificirani C/C++”, Element, Zagreb, 2001 L. Budin, “Informatika za 1

9

17

2.4.6. Konstantni izrazi

- sastavljeni od konstanti koji se mogu izračunati prije prevođenja- mogu se rabiti bilo gdje u programu gdje se može pojaviti konstanta

Linije koje sadrže konstantne izraze:

#define MAXN 10char a[MAXN+1]char a_pola [(MAXN+1)/2]

18

- varijable moraju biti deklarirane prije korištenja- deklariranjem se navodi tip i lista od jedne ili više varijabli

int i,j,rezultat;char c,red[25];double x,y

2.5 Deklaracije

Varijable, se mogu deklarirati na dva mjesta:- iza otvorene zagrade bloka naredbi (na vrhu funkcije) => lokalne varijable- ispred funkcijskih definicija, npr. main() => globalne varijableLokalne varijable traju samo u bloku u kojoj su definirane, dok globalne vrijede od mjesta definiranja do kraja programa.Lokalne varijable nazivaju se zato još i automatske, a za njihovo eksplicitno definiranje koristi se riječ auto (nije obavezna).Ako se jedna varijabla koristi u više datoteka jednog programa, mora se deklarirati kao vanjska, korištenjem ključne riječi extern, npr.:

extern int min;

Page 145: PREDAVANJA (2h) - etfos.unios.hrjbalen/doks/SVA predavanja_25-01-2010.pdf · J. Šribar, B. Motik, “Demistificirani C/C++”, Element, Zagreb, 2001 L. Budin, “Informatika za 1

10

19

Globalne varijable su same po sebi statičke, a lokalne varijable mogu se deklarirati kao statičke pomoću ključne riječi static, npr.:

static int zbroj;

Prilikom deklariranja varijable se mogu inicijalizirati početnim vrijednostima:

char zvono=‘\a’;int raspon=MAXNUM+1;float x=1.27e-8, y=34.56;

Pri deklariranju stringova, treba osigurati i jedno mjesto za nul-znak, npr.:

char str[7]=“Zagreb”; (6 znakova + nul-znak, ali strlen vraća 6)

Prema standardu, automatske varijable za koje ne postoji eksplicitna inicijalizacija poprimaju nedefinirane vrijednosti,a statičke i globalne vrijednosti nula.

20

Deklaraciji varijable čija se vrijednost neće mijenjati može se dodijeliti constprefiks, npr.:

const double pi=3.1415926536const char menu ( )=“File”;

Ključna riječ volatile naglašava da se vrijednost varijable može promijeniti bilo kada izvan kontrole samog programa (obično prekidna rutina računala):

volatile int i;

Page 146: PREDAVANJA (2h) - etfos.unios.hrjbalen/doks/SVA predavanja_25-01-2010.pdf · J. Šribar, B. Motik, “Demistificirani C/C++”, Element, Zagreb, 2001 L. Budin, “Informatika za 1

11

21

Primjer:Program koji prikazuje deklaraciju i inicijalizaciju varijabli i njihov ispis

/* Datoteka: tipovi.c *//* Primjer deklaracija i inicijaliziranja razlicitih tipova */

#include <stdio.h>

#define ESC '\x1B'

main(){

short int i=0;long int j=250000L;float e=2.71;double x=24.7e+107;char c1='Z';char c2=ESC;char s[10]="Zagreb";printf(" i=%d\n j=%ld\n e=%f\n x=%lf\n", i, j, e, x);printf(" c1=%c\n c2=%c\n s=%s\n", c1, c2, s);

return 0;}

Page 147: PREDAVANJA (2h) - etfos.unios.hrjbalen/doks/SVA predavanja_25-01-2010.pdf · J. Šribar, B. Motik, “Demistificirani C/C++”, Element, Zagreb, 2001 L. Budin, “Informatika za 1

1

1

Sveučilište J.J. Strossmayera u OsijekuElektrotehnički fakultet

PROGRAMIRANJE I(predavanja u ak. god. 2006./2007.)

P2006-12OPERATORI U C-u

doc.dr.sc. Goran Martinovićwww.etfos.hr/~martin

[email protected]: 031 224-766

Soba: 0-14

Osijek, listopad 2006.

2

12.Operatori

12.1 Matematički operatori12.2 Operatori i izrazi dodjeljivanja12.3 Miješanje tipova u izrazima12.4 Relacijski operatori12.5 Logički operatori12.6 Bit operatori12.7 Prioritet operatora

Page 148: PREDAVANJA (2h) - etfos.unios.hrjbalen/doks/SVA predavanja_25-01-2010.pdf · J. Šribar, B. Motik, “Demistificirani C/C++”, Element, Zagreb, 2001 L. Budin, “Informatika za 1

2

3

- simboli koji se koriste za zbrajanje, oduzimanje, množenje, dijeljenje iizračunavanje ostatka cjelobrojnog dijeljenja

- znakovi + i – mogu se koristiti kao binarni operatori za predstavljanje zbrajanja i oduzimanja (stoje između dva operanda) ili kao unarnioperatori za predstavljanje pozitivnih i negativnih brojeva u unarnimoperacijama (operator ispred jednog operanda)

Modul (ostatak cjelobrojnog dijeljenja)%

Dijeljenje/

Množenje*

Oduzimanje-

Zbrajanje+

ZnačenjeSimbol

12.1 Matematički operatori

Primjeri:a=b*c;d=70/7;c=-a; /*unarna op.*/x=-25; /*unarna op.*/

65/7 =965%7 =264%8 = 0

4

/* Datoteka: matoper.c *//* Primjer s matematickim operatorima (racunanje aritmeticke *//* sredine) */

#include <stdio.h>

main(){

float sredina, x1, x2, x3;int n1,n2,n3;

x1=100.352;x2=97.5;x3=99.65;n1=1;n2=4;n3=2;

sredina=(n1*x1+n2*x2+n3*x3)/(n1+n2+n3);printf("\nSrednja vrijednost je %f \n", sredina);

return 0;}

Objašnjenje

- traži se: aritmetička sredinavrijednosti spremljenih u x1, x2, x3

- x1, x2, x3 → varijable- varijable n1, n2 i n3 → frekvencijapojavljivanja odgovarajućih xvrijednosti

sredina=(n1*x1+n2*x2+n3*x3) / (n1+n2+n3);

izraz množi vrijednost s brojem njihovapojavljivanja, zbraja ih i dijeli s ukupnimbrojem pojavljivanja svih vrijednosti

- rezultat se ispisuje pomoću printf funkcije

- srednja vrijednost je 98.521713

Page 149: PREDAVANJA (2h) - etfos.unios.hrjbalen/doks/SVA predavanja_25-01-2010.pdf · J. Šribar, B. Motik, “Demistificirani C/C++”, Element, Zagreb, 2001 L. Budin, “Informatika za 1

3

5

Prioritet matematičkih operatora (samo za matematičke operatore):

1. množenje, zbrajanje, modul2. zbrajanje, oduzimanje

Ako matematički izraz sadrži više operatora istog prioriteta, C izračunavaizraz s lijeva na desno.

Pri korištenju zagrada, izraz u njoj ima prioritet pri izračunavanju, a preostalidio računa se kako je prikazano:

8*16/4*2-7+15%3-1

128/4*2-7+15%3-1

32*2-7+15%3-1

64-7+15%3-1

57 +15%3-1

57+0-156

12.1.1. Prioritet operatora

6

Operator pridruživanja je znak jednakosti (=).

12.2.1. Višestruko pridruživanje

- ako se u izrazu pojavljuje više znakova jednakosti, svaki do njih značipridruživanje vrijednosti

- u izrazu: i=j=k=0, sve tri varijable inicijaliziraju se na vrijednost nula.

- pridruživanje se vrši s desna na lijevo, a smjer u kojem se ono vrši jestasocijativnost (najprije k, j, pa onda i)

- izraz pridruživanja može biti unutar nekog drugog izraza:q=d+2*(p=14+r);

12.2.2. Skraćeni izrazi pridruživanja

- u primjeru i=i+5, staroj vrijednost varijable i dodaje se 5 i pridružuje senazad varijabli i

- taj izraz skraćeno se može pisati: i+=5

12.2. Operatori i izrazi pridruživanja

Page 150: PREDAVANJA (2h) - etfos.unios.hrjbalen/doks/SVA predavanja_25-01-2010.pdf · J. Šribar, B. Motik, “Demistificirani C/C++”, Element, Zagreb, 2001 L. Budin, “Informatika za 1

4

7

reg=reg>>(SHIFT_N/2)reg>>SHIFT_N/2;>>=

dan=dan%7;dan%=7;%=

x=x+2;x+=2;+=

izlaz=izlazI0xF000;izlazI=0xF000;I=status=status^0x3F;status^=0x3F;^=x=x&MASK;X&=MASK;&=

reg=reg<<4;reg<<4;<<=

x=x/0.2;x/=0.2;/=x=x*sqrt(q);x*=sqrt(q);*=x=x-y*10;x-=y*10;-=

Ekvivalentni izrazPrimjerOperator

Skraćeni izrazi pridruživanja:

8

/* Datoteka: suma.c *//* Suma parnih brojeva izmedju 0 i 100 *//* Primjer sa skracenim izrazom pridruzivanja */

#include <stdio.h>

main(){int i, suma=0;

for(i=0;i<=100;i+=2) suma+=i;

printf("\nSuma parnih brojeva izmedju 0 i 100 iznosi %d\n", suma);

return 0;}

- izračun i ispis sume parnihbrojeva od 0 do 100

- varijabla suma je početno na 0- u for petlji se s korakom od 2

dodaju vrijednosti i povećavavrijednost brojila

- skraćeni izraz suma+=i;

Page 151: PREDAVANJA (2h) - etfos.unios.hrjbalen/doks/SVA predavanja_25-01-2010.pdf · J. Šribar, B. Motik, “Demistificirani C/C++”, Element, Zagreb, 2001 L. Budin, “Informatika za 1

5

9

- dozvoljeno je miješanje tipova (npr. zbrajanje cjelobrojne i realnevrijednosti) pri čemu se obavlja pretvorba manjeg tipa u veći

Pravilo:

Pretvorba se vrši prema veličini, odnosno prioritetu tipova. Tip nižeg prioriteta pretvara se u tip višeg prioriteta i vrijednost izraza je tog tipa.Prioritet tipova je od manjeg prema većem:

int<unsigned<long<unsignet long<float<double

Primjeri miješanja:

int x=20, z2;float y=365.57, z1;int z2;float z1;z1=x+y;z2=x+y;Ako se vrijednost većeg tipa mora pretvoriti u vrijednost manjeg tipa podataka (npr. float u int u izrazu z2=x+y), točnost se gubi, jer se gubi decimalni dio.

12.3. Miješanje tipova u matematičkim izrazima

10

- uspoređuju podatke: da li su jednaki ili različiti, veći ili manji od drugih

Relacijski operatori

jednakovećemanjeveće ili jednakomanje ili jednakorazličito

==><>=<=!=

OpisOperator

12.4 Relacijski operatori

- svaki operator pojavljuje se između dviju konstanti, varijabli, izraza ili kaodio složenijeg izraza

- relacijski izraz daje istinitu (različito od 0) ili lažnu (0) vrijednost- za ispitivanje jednakosti dva elementa koristi se dvostruki znakjednakosti (==)

Page 152: PREDAVANJA (2h) - etfos.unios.hrjbalen/doks/SVA predavanja_25-01-2010.pdf · J. Šribar, B. Motik, “Demistificirani C/C++”, Element, Zagreb, 2001 L. Budin, “Informatika za 1

6

11

- na temelju rezultata relacijskih izraza donose se odluke: ako je izraz istinit, izvodi se blok naredbi koje pripadaju if-u; ako nije izvodi se naredba iza if bloka ili else blok naredbi (ako postoji).

Primjer: Objašnjenje: if (a==b) { ako je a=b,

c=b+d izvodi se skup naredbi ud=a; vitičastim zagradama, a ako

} nije, naredba iza else.else

c=d=a;

Uvjetni operator (?:) je ternarni operator (zahtijeva tri operanda), a koristi se umjesto if-else naredbe:

uvjetni_izraz ? izraz1 : izraz2

gdje je uvjetni_izraz bilo koji izraz koji kao rezultat ima istinitu (>0) vrijednost ili lažnu vrijednost (=0). Ako je uvjetni izraz_istinit, izvodi se izraz1, a u protivnom izraz2.

Primjer: može se izraziti kao:if (a < b) c=(a < b) ? b/a : a/b;

c=b/a;else

c=a/b

12.4.1. If-else i uvjetni operator

12

Ispitivanje više od jednog skupa varijabli vrši se kombiniranjem jednostavnih relacijskih izraza u složen relacijski test pomoću logičkih operatora. C uključuje 3 logička operatora opisana u slijedećoj tablici:

12.5. Logički operatori

!0=1!1=0

logički NE operator!

0 | | 0=00 | | 1 =11 | | 0 =11 | | 1 =1

logički ILI operator| |

0&&0=00&&1=01&&0=01&&1=1

logički I operator&&Opis (tablica istinitosti)ZnačenjeOperator

Page 153: PREDAVANJA (2h) - etfos.unios.hrjbalen/doks/SVA predavanja_25-01-2010.pdf · J. Šribar, B. Motik, “Demistificirani C/C++”, Element, Zagreb, 2001 L. Budin, “Informatika za 1

7

13

Primjer

if ((a<b) && (a>c)){

print f(“a je manji od b i veci od c”);}- uvjet u if izrazu je istinit ako su istiniti izrazi a<b i a>c, jer se radi o log.operatoru I.

Primjer

if (! (x>10))print f (“X je manji ili jednak 10”);

- uvjet if naredbe je istinit ako izraz x>10 nije istinit. Izraz !(x>10) se možepisati i kao x<=10.

14

x!=yx>yx<y

x==yx<=yx>=y

!(x==y)!(x<=y)!(x>=y)!(x!=y)!(x>y)!(x<y)

Ekvivalentan je sIzraz

Ekvivalentnost relacijskih izraza:

NAPOMENA: izbjegavati korištenje izraza pridruživanja u if naredbi, jer postoji mogućnost da se ne izvrše:

if ((x>y) && ((z=10)<y)) …- ako je x<y, nakon utvrđivanja prvog dijela izraza, C će prekinuti izvođenje.

Kod logičkih operatora najveći prioritet ima NE, zatim I, te ILI.

Page 154: PREDAVANJA (2h) - etfos.unios.hrjbalen/doks/SVA predavanja_25-01-2010.pdf · J. Šribar, B. Motik, “Demistificirani C/C++”, Element, Zagreb, 2001 L. Budin, “Informatika za 1

8

15

- primjenjuju se na interne reprezentacije podataka u memoriji, a ne samona vrijednosti varijable. Pomoću njih C dozvoljava programiranje na nižoj razini, za razliku od drugih viših programskih jezika.

- C sadrži 4 bit operatora. Svaki od operatora izvodi bit po bit operaciju sinternim podatcima. Mogu se primjenjivati jedino s char, int i long tipovimavarijabli i konstanti.

- 1. komplement vrši inverziju bitova (0 u 1, 1 u 0) i ne vrši negaciju broja. Negacija broja (2.komplement) ostvaruje se inverzijom idodavanjem broja 1.

12.6. Bit operatori

16

˜0=1˜1=0

bit jednostruki komplement˜

0^0=0 1^0=10^1=1 1^1=0

bit ekskluzivno ILI^

0|0=0 1|0=10|1=1 1|1=1

bit ILI|

0&0=0 1&0=00&1=0 1&1=1

bit I&

Tablica istinitostiZnačenjeOperator

Bit operatori

Page 155: PREDAVANJA (2h) - etfos.unios.hrjbalen/doks/SVA predavanja_25-01-2010.pdf · J. Šribar, B. Motik, “Demistificirani C/C++”, Element, Zagreb, 2001 L. Budin, “Informatika za 1

9

17

- riječ je o ++,--, sizeof, zarezu (,) [] i (), te operatorima koji se koriste s pokazivačima (& i *).

12.7.1. Operatori povećanja i smanjenja

- C posjeduje dva operatora za povećanje (++) i smanjenje (--) cjelobrojnih varijabli za jedan. Za svaki postoji dva oblika:

- prefiksni (operator se koristi ispred varijable), npr: ++i; --i;- postfiksni (operator se koristi iza varijable), npr: i++; i--;

Izrazi s operatorom povećanja i smanjenja:i++; (i--)

- ekvivalentni su s izrazima pridruživanja:i=i+1; ili i+=1; (i=i-1; ili i-=1;)

- najčešće koriste se u petljama i prebrojavanjima

Primjer:

Imamo oblik operatora ++: x=10, y=++x-2. Nakon izvođenja naredbi, x ima vrijednost10, a y 9. Kada koristimo postfiksni operator, x=8, a y=9.

12.7. Ostali operatori

18

- oblik sizeof operatora podsjeća na poziv f-je iz standardne biblioteke:

sizeof (tip_podatka) ili sizeof (podatak)

Operator vraća veličinu podatkovnog tipa ili varijable u bajtovima. Drugi oblik, bez zagrada je:

sizeof podatak

Pri prevođenju programa, sizeof se zamjenjuje s unsigned cjelobrojnom vrijednosti jednakoj veličini podatka ili tipa u bajtovima.

12.7.2. Sizeof operator

Page 156: PREDAVANJA (2h) - etfos.unios.hrjbalen/doks/SVA predavanja_25-01-2010.pdf · J. Šribar, B. Motik, “Demistificirani C/C++”, Element, Zagreb, 2001 L. Budin, “Informatika za 1

10

19

- razlikuje se od drugih operatora, jer se ne primjenjuje direktno na podatke,već na jednoj liniji ili unutar jednog izraza omogućuje smještaj više izrazaodvojenih zarezima.

- zarez koji se pojavljuje unutar zagrada nije operator zareza već služi zarazdvajanje argumenata

- često se koristi u izrazima for petlje

12.7.3. Operator zareza (,)

20

Tablica objedinjuje sva pravila prioriteta i asocijativnosti operatora. U prvom redu su operatori s najvišim prioritetom, a operatori navedeni u istom redu imaju isti prioritet.

Slijeva na desno< <= > >=

Slijeva na desno<< >>

Slijeva na desno+ -

Slijeva na desno* / %

Zdesna na lijevo! ~ - + ++ -- (tip) * & sizeof

Slijeva na desno( ) [ ] −> .

AsocijativnostOperatori

12.8. Prioritet operatora

Page 157: PREDAVANJA (2h) - etfos.unios.hrjbalen/doks/SVA predavanja_25-01-2010.pdf · J. Šribar, B. Motik, “Demistificirani C/C++”, Element, Zagreb, 2001 L. Budin, “Informatika za 1

11

21

Zdesna na lijevo,

Zdesna na lijevo= *= /= %= += &= ^= ⎜= <<= >>=

Zdesna na lijevo?:

Slijeva na desno⎜⎜

Slijeva na desno&&

Slijeva na desno⎜

Slijeva na desno^

Slijeva na desno&

Slijeva na desno== !=

Izbjegavati izraz poput ovoga, jer se ne može sa sigurnošću utvrditi redoslijed izvođenja (odnosno hoće li indeks polja sadržavati staru ili novu vrijednost):

c[i]=i++;

Page 158: PREDAVANJA (2h) - etfos.unios.hrjbalen/doks/SVA predavanja_25-01-2010.pdf · J. Šribar, B. Motik, “Demistificirani C/C++”, Element, Zagreb, 2001 L. Budin, “Informatika za 1

1

1

Sveučilište J.J. Strossmayera u OsijekuElektrotehnički fakultet

PROGRAMIRANJE I(predavanja u ak. god. 2006./2007.)

P2006-13PREDPROCESOR U C-u

doc.dr.sc. Goran Martinovićwww.etfos.hr/~martin

[email protected]: 031 224-766

Soba: 0-14

Osijek, listopad 2006.

13. C pretprocesor

13.1 Uključivanje datoteka13.2 Definiranje simbola i makroa

13.3 Uvjetno uključivanje13.4 Ostale direktive

Page 159: PREDAVANJA (2h) - etfos.unios.hrjbalen/doks/SVA predavanja_25-01-2010.pdf · J. Šribar, B. Motik, “Demistificirani C/C++”, Element, Zagreb, 2001 L. Budin, “Informatika za 1

2

Sve pretprocesorske naredbe počinju sa # znakom i ne završavaju s ;

Primjer:#include <math.h>#define MAXN 10#define PORUKA “Bok ljudi.”/*program*/…Pretprocesor ne prevodi sam program, niti pregledava C naredbe uprogramu. Promjene izvornog koda koje vrši pretprocesor su privremene itraju samo za vrijeme prevođenja.

13.1. Uključivanje datoteka

- osnovna namjena: povezivanje deklaracija i definicija s datotekamaprograma

- naredbom uključivanja (#include), datoteka s diska dodaje se u izvorni program (uglavnom iz include direktorija)

- sintaksa:

#include “ime datoteke” (iz direktorija gdje je izvorni kod)ili#include <ime datoteke> (iz include direktorija, uglavnom ime.h)

- datoteka izvornog programa koja sadrži #include naredbu proširuje se s datotekom navedenom u naredbi, te je zamjenjuje

Page 160: PREDAVANJA (2h) - etfos.unios.hrjbalen/doks/SVA predavanja_25-01-2010.pdf · J. Šribar, B. Motik, “Demistificirani C/C++”, Element, Zagreb, 2001 L. Budin, “Informatika za 1

3

PrimjerDatoteka def.h sadrži redove:

struct point {int x;int y;

};a datoteka izvornog koda:

#include “def.h”main ( ){

struct point a={1, 1);struct point b;b.x=-a.x;b.y=2*y;

}

Nakon prolaska kroz pretprocesorizvorna datoteka izgleda:

struct point {int x;int y;

};main ( ){

struct point a={1, 1);struct point b;b.x=-a.x;b.y=2*y;

}

- promjena je kratkotrajna (traje samo za vrijeme postupka prevođenja)

13.2. Definiranje simbola i makroa

- naredba #define služi za definiranje simbola i makroa,a nalazi se obično na početku programa zajedno sa #include naredbama

- oblik: #define ime tekst_zamjene

- ime - jedna riječ bez praznine,a piše se velikim slovima- tekst_zamjene - znak, riječ ili fraza

- tako se svaka pojava simbola ime zamjenjuje sadržajem tekst_zamjene

Primjer: #define ESC ‘ x1B’#define MAXN 50

pa se

int vektor [MAXN]; prevođenjem mijenja u

int vektor[50];

- osnovna svrha #define naredbe je parametrizacija programa, odnosnoizbjegavanje zamjena konstanti na svakom mjestu u programu gdje senalazi

Page 161: PREDAVANJA (2h) - etfos.unios.hrjbalen/doks/SVA predavanja_25-01-2010.pdf · J. Šribar, B. Motik, “Demistificirani C/C++”, Element, Zagreb, 2001 L. Budin, “Informatika za 1

4

- kao drugi argument #define naredbe iza simbola može se koristiti niz naredbi, pa se takvo definirano ime naziva MAKRO

- Primjer: - #define FOREVER for( ; ; )

(služi za predstavljanje beskonačne for petlje koja se prekida pomoću break naredbe nakon ispunjenja uvjeta)

- naziv parametra u makrou nema veze s varijablama ili programom- u makroima treba voditi računa o parametrima i posebno korištenju

zagrada uz njih

Primjer: makro SQR

#define SQR(x) x*xz=SQR (a+2)*10; nakon prevođenja je z=a+2*a+2*10; umjesto

z=((a+2)*(a+2))*10;Zato koristimo definiciju sa zagradama:

#define SQR(x) ((x) * (x));

13.3. Uvjetno uključivanje pretprocesora

- riječ je o sljedećim naredbama:

#if ako je izraz iza naredbe istinit, uključuju se svi redovi do #endif,#elif ili #else naredbe

#elif ako je izraz iza naredbe istinit, uključuju se svi redovi do #elifili #else naredbe

#else ako je izraz iza naredbe istinit, uključuju se svi redovi do #endifnaredbe

#endif označava završetak #if, #endif ili #ifndef bloka naredbe#ifdef ako je ime iza naredbe definirano, uključuje sve redove do #endif

naredbe#ifndef ako ime iza naredbe nije definirano, uključuje sve redove do #endifdefined(ime) vraća istinitu vrijednost akodefined ime je ime definirano

Page 162: PREDAVANJA (2h) - etfos.unios.hrjbalen/doks/SVA predavanja_25-01-2010.pdf · J. Šribar, B. Motik, “Demistificirani C/C++”, Element, Zagreb, 2001 L. Budin, “Informatika za 1

5

Primjeri pretprocesoekih naredbi s uvjetnim uključivanjem:1. Na temelju definicije simbola, pretprocesor uključuje odgovarajuće zaglavlje

#ifdef UNIXinclude <sys/stat.h>

#elif defined VMS#include <stat.h>

#elif defined DOS#include <dos.h>

#endif2. Jednostava izraz s logičkim operacijama uz if naredbu

if MSDOS II OS2 II UNIX#include <direct.h>#include <ctype.h>

#endif3. Dodavanje kontrolnog koda radi ispitivanja pojedinih vrijednosti naredbama pr: kontrola varijable z na

zaslonu

z=gauss (x,10);#ifdef TEST Z

printf (“%f”, z);#endifIf (y<=z) {…

Ako se na početku programa definira simbol TEST_Z#define TEST_ZNa zaslonu će se ispisati vrijednost z. Uklanjanje definicije s #undef TEST_Z.

Page 163: PREDAVANJA (2h) - etfos.unios.hrjbalen/doks/SVA predavanja_25-01-2010.pdf · J. Šribar, B. Motik, “Demistificirani C/C++”, Element, Zagreb, 2001 L. Budin, “Informatika za 1

1

1

Sveučilište J.J. Strossmayera u OsijekuElektrotehnički fakultet

PROGRAMIRANJE I(predavanja u ak. god. 2006./2007.)

P2006-14KONTROLA TOKA PROGRAMA U C-u

doc.dr.sc. Goran Martinovićwww.etfos.hr/~martin

[email protected]: 031 224-766

Soba: 0-14

Osijek, listopad 2006.

14. KONTROLA TOKA PROGRAMA

14.1. IF-ELSE NAREDBA14.2. SWITCH NAREDBA14.3. WHILE PETLJA14.4. DO-WHILE PETLJA14.5. FOR PETLJA14.6. BREAK,CONTINUE I GOTO NAREDBE

Page 164: PREDAVANJA (2h) - etfos.unios.hrjbalen/doks/SVA predavanja_25-01-2010.pdf · J. Šribar, B. Motik, “Demistificirani C/C++”, Element, Zagreb, 2001 L. Budin, “Informatika za 1

2

14.1. IF-ELSE NAREDBA

- koristi se za izražavanje odlukeif(izraz)

blok1else

blok2- dio naredbe else je neobavezan, dok blok1 i blok2

predstavljaju jednu naredbu koja se završava s ; ili blok naredbi unutar {}. Ako je izraz istinit izvršava se blok1,a ako je lažan i postoji else dio izvršava se blok2.

- kada if nema else dio, a koristi se unutar druge if-else naredbe, često se čine pogreške, kao u primjerima:

14.1.2. VIŠESTRUKI IF-ELSE IZRAZI

if (n%10==0)if (n<1000)

x=n;else

x=m;

if (n%10==0)if (n<1000)

x=n;else

x=m;

- ako smo željeli da se varijabli x pridruži m u slučaju da je n djeljivo s 10 i n>=1000- else naredba pripada najbližem if-u i s njim tvori if-elsekombinaciju

- sintaksno ispravan oblik, ali se ne smije rabiti, jer se njime sugerira povezanost else s vanjskim if-om, a to ovdje nije slučaj- ako želimo da se x-u pridruži m, u slučaju da n nije djeljivo s 10, koristit ćemo umjesto toga oblik s vitičastim zagradama- tako je elsepovezana s vanjskim if-om

if (n%10==0){ if (n<1000)

x=n;}else

x=m;

Page 165: PREDAVANJA (2h) - etfos.unios.hrjbalen/doks/SVA predavanja_25-01-2010.pdf · J. Šribar, B. Motik, “Demistificirani C/C++”, Element, Zagreb, 2001 L. Budin, “Informatika za 1

3

- za realiziranje višeznačne odluke može se rabiti else-if oblika:if (izraz)

blokelse if (izraz)

blokelse if (izraz)

blokelse

blok

- ili, ako je bilo koji izraz istinit, izvršava se pripadajući blok naredbi, iskače van iz lanca else-if naredbi i prekida interpretiranje preostalih izraza

- posljednja else naredba izvršava se ako nijedan od gornjih uvjeta nije ispunjen

Primjer: ispitivanje odnosa dva brojaif (a<b)

printf (“a je veci od b”);else if (a==b)

printf (“a je jednako b”);else

printf (“a je manje od b”);

Jednostavnije if naredbe mogu se zamijeniti aritmetičkim if izrazom:

max=(a<b) ? b : a;

Primjer

- ulaz se ostvaruje u while petlji funkcijom getchar( )- unos se prekida pritiskom na kombinaciju tipki koji odgovara EOF znaku(CTRL+z)- utvrđuje se da li se radi o slovu, znamenci ili praznini- radi li se o takvom znaku, brojilo se povećava za 1 (ns za slova, nz znamenke i np za praznine)

/* broji.c *//* Primjer broji slova, znamenke i praznine *//* u tekstu unesenom sa standardnog ulaza */

#include <stdio.h>

main(){

int c, nz=0, ns=0, np=0;

while((c=getchar())!=EOF) if(c>='A'&&c<='Z'||c>='a'&&c<='z')

++ns;else if(c>='0'&&c<='9')

++nz;else if(c==' ')

++np;

printf("\nSlova: %d Znamenki: %d Praznina: %d\n",ns,nz,np);

return 0;}

Page 166: PREDAVANJA (2h) - etfos.unios.hrjbalen/doks/SVA predavanja_25-01-2010.pdf · J. Šribar, B. Motik, “Demistificirani C/C++”, Element, Zagreb, 2001 L. Budin, “Informatika za 1

4

14.2. SWITCH NAREDBA

- najpogodnija naredba za ostvarenje višeznačne odluke na temelju konstantnih cjelobrojnih ili znakovnih vrijednosti. Ako višeznačnu odluku nije moguće temeljiti na cjelobrojnim konstantnim vrijednostima, primjenjuje se else-if skup naredbi

switch (izraz) {case konst.izraz: blokcase konst.izraz: blokcase konst.izraz: blok...

default: blok}

- ako vrijednost izraza odgovara jednom od konstantnih izraza, vrši se grananje na pripadajući blok naredbi koji obično završava naredbom break za trenutni izlaz iz switch

- default je posljednji element naredbe i predstavlja slučaj koji se izvodi ako nijedan od prethodnih slučajeva nije ispunjen i on se može izostaviti

- sljedeća switch naredba ovisno o vrijednosti znaka c poziva odgovarajuću funkciju

- nakon poziva funkcije, naredbom break završava switch naredba- ako je znak različit od D, E i F izvodi se break iza default

switch (c) {case ‘D’: delete();

break;case ‘F’: find ();

break; case ‘E’: edit();

break;default:

break;}

- u case naredbi dozvoljeno je grupirati više case vrijednosti…

Page 167: PREDAVANJA (2h) - etfos.unios.hrjbalen/doks/SVA predavanja_25-01-2010.pdf · J. Šribar, B. Motik, “Demistificirani C/C++”, Element, Zagreb, 2001 L. Budin, “Informatika za 1

5

/* Datoteka: kalendar.c *//* Primjer sadrzi funkciju gday koja racuna broj dana *//* proteklih od Kristova rodjenja po Gregorijanskom */ /* kalendaru. Funkcija se primjenjuje za izracunavanje *//* broja dana proteklih od vaseg rodjenja do danas. */

#include <stdio.h>#include <time.h>

long gday(int dan, int mjesec, int godina){

long n_dana;int prestupna, n_prestupnih_dana;

prestupna=godina%4==0&&godina%100!=0||godina%400==0;

n_prestupnih_dana=(godina+3)/4-godina/100+godina/400;n_dana=(long)godina*365;n_dana+=n_prestupnih_dana;switch (mjesec) {

case 12:n_dana+=30; /* Studeni */

case 11:n_dana+=31; /* Listopad */

case 10:n_dana+=30; /* Rujan */

case 9:n_dana+=31; /* Kolovoz */

case 8:n_dana+=31; /* Srpanj */

case 7:n_dana+=30; /* Lipanj */

case 6:n_dana+=31; /* Svibanj */

case 5:n_dana+=30; /* Travanj */

case 4:n_dana+=31; /* Ozujak */

case 3:n_dana+=(prestupna ? 29 : 28); /* Veljaca */

case 2:n_dana+=31; /* Sijecanj */

case 1:break;

default:printf("Nepostojeci mjesec\n");return(0);

}n_dana+=dan;

return (n_dana);}

main(){

int gr,dr,mr;time_t timer;struct tm *danas;

timer=time(NULL);danas=localtime(&timer);

printf("Unesite datum rodjenja (format DD MM GGGG): ");scanf("%d %d %d", &dr, &mr, &gr);

printf("\nDanas je %d. dan vaseg zivota.\n", gday(danas->tm_mday, danas->tm_mon+1, danas->tm_year+1900)-gday(dr, mr, gr));

return 0;}

Objašnjenje programa gday.c

- uvjet prestupnosti godine:prestupna=godina%4==0&&godina%100!=0 II godina%400==0;

- svaka četvrta godina je prestupna osim stoljetne godine koja nije djeljiva sa 400. Ovaj uvjet se uvjet ovako određuje:n_prestupnih_dana = (godina+3)/4-godina/100+godina/400

- vrši se zbrajanje dana za protekle mjesece koje je ostvareno pomoću switch naredbe

- zbrajanje dana od početka godine do početka mjeseca određeno je varijablom mjesec

- zbrajanje svih dana u tekućem mjesecu (n_dana+=dan)

Page 168: PREDAVANJA (2h) - etfos.unios.hrjbalen/doks/SVA predavanja_25-01-2010.pdf · J. Šribar, B. Motik, “Demistificirani C/C++”, Element, Zagreb, 2001 L. Budin, “Informatika za 1

6

14.3. WHILE PETLJA- jedna od ključnih riječi C-a- najčešća primjena je kod brojanja određenih entiteta ili izračunavanja

ukupnog zbroja niza vrijednosti- omogućava da se izvođenje skupa naredbi ponavlja sve dok je određeni

uvjet ispunjen- sintaksa:

while (izraz)blok

- blok predstavlja jednu naredbu ili skup naredbi unutar vitičastih zagrada- sve dok je izraz istinit izvodi se blok naredbi. On sadrži relacijski izraz ili

logičke operatore- ako je odmah na početku izraz u while petlji neistinit, blok naredbi se

uopće neće izvršiti- izraz određuje trenutak prestanka izvođenja petlje, pa blok treba mijenjati

varijable koje se koriste u izrazu. U protivnom- beskonačna petlja (obično sadrži i break):

while (1){…}

14.4. DO-WHILE PETLJA

- slična while petlji, ali se relacijski test pojavljuje na dnu petlje, čime se osigurava izvođenje petlje barem jednom

doblok

while (izraz)

- blok predstavlja jednu naredbu ili skup naredbi unutar vitičastih zagrada- sve dok je izraz istinit izvodi se blok naredbi

Objašnjenje primjera pogodi.c

- generator sl. brojeva (rand) se inicijalizira tekućim vremenom pomoću funkcija time i srand

- na zaslonu se prikazuje poruka o rednom broju pokušaja iza koje treba utipkati broj, ali ne prevelik ni premalen

- kada pogodite broj završiti će se izvođenje do-while petlje i ispisati poruka o pogođenom broju

Page 169: PREDAVANJA (2h) - etfos.unios.hrjbalen/doks/SVA predavanja_25-01-2010.pdf · J. Šribar, B. Motik, “Demistificirani C/C++”, Element, Zagreb, 2001 L. Budin, “Informatika za 1

7

/* Datoteka: pogodi.c *//* Primjer je realizacija igre pogadjanja brojeva. */

#include <stdio.h>#include <stdlib.h>#include <time.h>

main(){int br_pok=0, broj, n;time_t t;

printf(" *** Pogodite zamisljeni broj (0-100) ****\n");

srand((unsigned)time(&t)); broj=rand()%100+1; /* generiranje slucajnog broja */

/* izvodi petlju dok se ne pogodi */do {

printf("\nPokusaj #%d: ", ++br_pok); /* broji pokusaje */scanf("%d", &n);

if (n>broj)printf("\n Prevelik broj\n");

else if (n<broj) printf("\n Premali broj\n");

}while (n!=broj);

printf("\nBravo!!! Pogodili ste zamisljeni broj %d nakon #%d pokusaja\n", broj, br_pok);

return 0;}

14.5. FOR PETLJA- omogućava ponavljanje dijelova programa određeni broj puta- može se odrediti točno koliko će se puta izvoditi, pa se još naziva i određena

petlja- izvodi se dok se pored ispunjavanja uvjeta ne dosegne određena vrijednost

brojila- sintaksa:

for (startni_izraz; izraz_uvjeta; izraz_brojača)blok

- startni izraz: izvodi se samo jednom,a najčešće je to izraz pridruživanja- izraz brojila: izvodi se svaki put prilikom ponavljanja naredbi petlje,a radi

se o povećavanju ili smanjivanju varijabli- nastavak izvođenja for petlje ispituje se na njenom početku i ako je izraz uvjeta

neistinit, ona se neće nikada izvesti- beskonačna petlja s for

for (;;) {…}

- zbrajanje brojeva manjih od 100 i djeljivih s 5int i,suma=0for (i=0;i<100,i+=5)

suma+=i;

Page 170: PREDAVANJA (2h) - etfos.unios.hrjbalen/doks/SVA predavanja_25-01-2010.pdf · J. Šribar, B. Motik, “Demistificirani C/C++”, Element, Zagreb, 2001 L. Budin, “Informatika za 1

8

14.6. BREAK,CONTINUE I GOTO NAREDBE

- break osigurava prekid izvođenja i izlaz iz petlje (for, while, do-while i switch naredbe)

Primjer: izvođenje petlje se prekida pronalaskom određene vrijednosti polja

for (i=0; i<n; i++)if (a[i]==x) {

found=1;break;

}

- continue se koristi za prekid tekuće iteracije petlje i skok na početak sljedeće iteracije

Primjer: želimo promatrati samo pozitivne elemente polja

for (i=0; i<n; i++) {if (a[i]<0)

continue;….

}

- goto naredba se općenito izbjegava u programiranju, a koristi se kada seželi izaći iz ugniježđenih petlji (petlja unutar petlje)

Primjer s goto naredbom:

for (i=0; i<m; i++)for (j=0; j<n; j++)

if (a[i] [j] == x) goto found;…found:

printf (‘Vrijednost %d se nalazi u tablici a.\n”,x);….

Page 171: PREDAVANJA (2h) - etfos.unios.hrjbalen/doks/SVA predavanja_25-01-2010.pdf · J. Šribar, B. Motik, “Demistificirani C/C++”, Element, Zagreb, 2001 L. Budin, “Informatika za 1

1

Sveučilište J.J. Strossmayera u OsijekuElektrotehnički fakultet

PROGRAMIRANJE I(predavanja u ak. god. 2006./2007.)

P2006-15FUNKCIJE U C-u

doc.dr.sc. Goran Martinovićwww.etfos.hr/~martin

[email protected]: 031 224-766

Soba: 0-14

Osijek, listopad 2006.

15. FUNKCIJE

15.1. Funkcije15.2. Definiranje funkcija15.3. Globalne i lokalne varijable15.4. Prijenos vrijednosti između funkcija15.5. Rekurzija

Page 172: PREDAVANJA (2h) - etfos.unios.hrjbalen/doks/SVA predavanja_25-01-2010.pdf · J. Šribar, B. Motik, “Demistificirani C/C++”, Element, Zagreb, 2001 L. Budin, “Informatika za 1

2

3

- osnovno sredstvo u C-u kojima se programi raščlanjuju na manjeprogramske cjeline

- funkcije izvršavaju neki specifični zadatak, a mogu se koristiti i u drugimprogramima umjesto da se počinje ispočetka

- C programi se sastoje iz većeg broja manjih funkcija koje se mogu nalazitiu različitim izvornim datotekama

Definiranje funkcija (ANSI): Primjer:

povratni_ tip ime_funkcije (deklaracije argumenata){

deklaracije i naredbe}

Definicija funkcije prema izvornoj specifikaciji jezika:

povratni_tip ime_funkcije (imena_parametara)deklaracije parametara;{

deklaracije i naredbe;}

15.1. Funkcije i definiranje funkcija

double poisson (double x[ ], int n){…}

double poisson (x, n)

double x[ ];{…}

4

- ako se za funkciju ne navede povratni_tip, podrazumijevamo integer- najmanja funkcija koja se može definirati je:

najmanja () {}- za vraćanje vrijednosti se koristi naredba return:

return izraz;

- funkcija ne mora vraćati vrijednost, već se može koristiti samo return bez izraza- ako funkcija ne sadrži return, pri nailasku na desnu zagradu kraja funkcije, kontrola

se vraća pozivajućoj funkciji- main funkcija je glavna, izvršava se prva i poziva druge funkcije

Pravila pisanja funkcija:

- svaka funkcija mora imati ime- pravila za funkcijsko ime (kao varijabla): može imati do 31 znaka, početi sa slovom

ili znakom podcrtavanja (_) i sadržavati slova, brojeve i znak podcrtavanja- iza funkcijskog imena dolazi par zagrada (), a unutar njih se može nalaziti skup

parametara odvojenih zarezima (po zagradama se deklaracija funkcije razlikujeod deklaracije varijable

- tijelo funkcije koje počinje iza zatvorene desne zagrade mora se nalaziti unutarvitičastih zagrada {}

- za sve funkcije je preporučljivo koristiti naredbu return iako ona nije obavezna

Page 173: PREDAVANJA (2h) - etfos.unios.hrjbalen/doks/SVA predavanja_25-01-2010.pdf · J. Šribar, B. Motik, “Demistificirani C/C++”, Element, Zagreb, 2001 L. Budin, “Informatika za 1

3

5

- main funkcija poziva drugu funkciju, a nakon toga se privremeno napušta main i kontrola se prenosi na pozvanu funkciju- nakon izvođenja naredbi funkcije, pri nailasku na naredbu return ili }, kontrola

programa se vraća na funkciju main i nastavlja se izvođenje od prve slijedećenaredbe

- u C-u ne postoji ograničenje pozivanja funkcija, pa svaka funkcija može pozvati bilokoju drugu

- za prijenos podataka iz jedne funkcije u drugu, lokalna varijabla se mora staviti uzagrade u pozivajućoj i pozvanoj funkciji (prazne zagrade – ništa se ne prenosi)

- prilikom prijenosa argumenata u funkciju, pozvana funkcija ne zna tip podatkaprenesene varijable, pa ispred imena parametara treba navesti tip

6

Primjeri:U slijedećim redovima definicija funkcije message sadrži i tip parametra, odnosno prenesene varijable

int message(int n_msg){

int i;if(n_msg<MAX_MSG)

return 1;for(i=0;i<n_msg;i++)

printf(“%s\n”, msg[i]);return 0;

}

Pozivom y=sqrt (x); prenosi se vrijednost varijable x u f-ju sqrt, a rezultat f-je pridružuje varijabli y.

Naredbom za pozivanje funkcije sq_equation (a, b, c, &x1, &x2); prenosi se pet argumenata u f-ju sq_equation koja ne vraća nikakvu vrijednost.

Naredba za poziv funkcije sastoji se od imena funkcije, zagrada s argumentima i točke zareza za potvrdu da se radi o izvršnoj naredbi.

Svaka funkcija mora biti definirana kao zasebna cjelina odvojena od drugih.

Čitljivost programa je jedan od zahtjeva koji se postavlja pred svakog programera, a taj zahtjev ispunjava dobra raščlamba programa na funkcije.

Page 174: PREDAVANJA (2h) - etfos.unios.hrjbalen/doks/SVA predavanja_25-01-2010.pdf · J. Šribar, B. Motik, “Demistificirani C/C++”, Element, Zagreb, 2001 L. Budin, “Informatika za 1

4

7

- prototip funkcije predstavlja njezin model kojim se informira C prevoditelj otipovima funkcijskih parametara i povratne vrijednosti

- primjer prototipa funkcije:

float func (float x); ili float func (float);

- on je identičan funkcijskoj definiciji samo što ima ; na kraju.- funkcijski prototipovi sprječavaju mogućnost pogreške pri prijenosupodataka neodgovarajućeg tipa u funkciju

- ako f-ja ne vraća vrijednost i nema parametre, na njihovom mjestu rabi sevoid

- prototipovi se ne moraju pisati za bibliotečne funkcije, jer ih #includedefinira

15.1.1 Funkcijski prototipovi

8

Varijable se mogu definirati na dva mjesta:

- iza lijeve otvorene zagrade blok naredbi – LOKALNE(vidljive samo u bloku)

- izvan funkcije, prije funkcijskog imena - GLOBALNE(vidljive u svim funkcijama)

Globalne su pogodnije u slučaju da se veliki broj varijabli mora dijeliti između funkcija, jer se tako izbjegava korištenje velikog broja argumenata; one su postojane i zadržavaju vrijednosti od jednog do drugog poziva funkcije.

Lokalne su definirane u jednoj funkciji i traju dok se funkcija izvodi.

15.2. Globalne i lokalne varijable

Page 175: PREDAVANJA (2h) - etfos.unios.hrjbalen/doks/SVA predavanja_25-01-2010.pdf · J. Šribar, B. Motik, “Demistificirani C/C++”, Element, Zagreb, 2001 L. Budin, “Informatika za 1

5

9

Ime koje se deklarira unutar funkcije (lokalno) može se koristiti od mjesta deklaracije do kraja bloka unutar kojeg se nalazi njegova deklaracija.

Za ime koje se deklarira izvan funkcija (globalno), područje važenja se proteže od mjesta deklaracije do kraja datoteke u kojoj se deklaracija nalazi.

Ako se u unutarnjem bloku nalazi deklaracija istog imena kao i u vanjskom, vanjsko ime se skriva (isto ime definirano u unutarnjem bloku odnosi se na različit entitet). Po izlasku iz bloka, ime ponovno dobiva svoje značenje.

15.2.1. Opseg ili područje važenja

10

Npr.int n; /* globalna varijabla n */...funkcija(){

int n; /* lokalna varijabla n */n=5; /*pridruzivanje lokalnom n-u */...{

double n; /* sakriva prvi lokalni n */n=0.5; /*pridruživanje drugom lokalnom n-u koji je double */...}n=10; /* pridruživanje prvom lokalnom n-u*/...

} main (){

…n=50; /*pridruživanje globalnom n-u*/…}

Page 176: PREDAVANJA (2h) - etfos.unios.hrjbalen/doks/SVA predavanja_25-01-2010.pdf · J. Šribar, B. Motik, “Demistificirani C/C++”, Element, Zagreb, 2001 L. Budin, “Informatika za 1

6

11

Pri organizaciji velikih programa u više datoteka potrebno je voditi računa o:

- pravilnom deklariranju varijabli, njihovom pravilnom povezivanju kodučitavanja programa i osiguravanju pojavljivanja samo jedne kopije

- inicijaliziranju globalnih i vanjskih varijabli

Ako globalnu varijablu treba pridružiti prije nego je definirana ili je definirana u drugoj datoteci, obvezna je extern deklaracija.Deklaracija izražava osobinu varijable (deklarira tip i ime varijable), dok se definicijom vrši pridruživanje memorije varijabli.

Primjeri:

int xn; - izvan neke f-je definira globalnu varijablu xn…..extern int xn; - deklarira njen tip i ime za preostali dio izvorne datoteke, ali

ne definira varijablu U programu koji se nalazi u više izvornih datoteka mora postojati samo jedna definicija globalne varijable u svim datotekama, dok ostale datoteke mogu sadržavati extern deklaracije za pristup toj varijabli.

15.2.2 Organiziranje programa u više datoteka

12

Primjer

Varijable u datoteci dat1.c, a koriste se u datoteci dat2.c, moraju se u njoj deklarirati kao vanjske (extern) varijable:

dat1.c: dat2.c:int index; extern int index;char *msg[2]={“Executed”, extern char *msg[];

“Format error” };main() func1(...){ {

... ...index=INIT_VAL; index=c;... ...

} }func2(...){

...printf(msg[i]);

}

Page 177: PREDAVANJA (2h) - etfos.unios.hrjbalen/doks/SVA predavanja_25-01-2010.pdf · J. Šribar, B. Motik, “Demistificirani C/C++”, Element, Zagreb, 2001 L. Budin, “Informatika za 1

7

13

-sve lokalne varijable su automatske (po završetku funkcije u cijelosti se brišu)- za deklaraciju varijable kao automatske ključna riječ je auto, ali ona serijetko koristi (sve lokalne su i automatske)

Primjeri deklaracija automatskih varijabli:

auto int i;auto double x;

15.2.3. Automatske varijable

14

- sve globalne varijable su statičke, dok se lokalne statičke varijableposebno deklariraju pomoću ključne riječi static

- lokalne statičke varijable se ne brišu po završetku funkcije, negozadržavaju svoju vrijednost.

Primjer definira tri lokalne varijable od kojih je prva automatska, a druge dvije statičke:

misc() {int i;static int j=5,k;…

}

15.2.4 Statičke varijable

Page 178: PREDAVANJA (2h) - etfos.unios.hrjbalen/doks/SVA predavanja_25-01-2010.pdf · J. Šribar, B. Motik, “Demistificirani C/C++”, Element, Zagreb, 2001 L. Budin, “Informatika za 1

8

15

- statičke varijable se primjenjuju u funkcijama koje čuvaju vrijednost brojilaili računaju ukupnu vrijednost pri pozivu

- slijedeća funkcija parcijalno računa sumu elemenata. Suma se akumulirau statičkoj varijabli part_sum:

int sumx (int n){

static int part_sum;part_sum+=n;return (part_sum);

}

16

C poznaje dvije metode za prijenos podataka između funkcija:- prijenos po vrijednosti- prijenos po adresi

15.3. Prijenos vrijednosti između funkcija

15.3.1. Prijenos po vrijednosti ili kopiji

- kopija vrijednosti varijable se pridružuje parametru prijemne funkcije- ako se prenosi više od jedne varijable, kopija svake vrijednostivarijable se pridružuje parametrima prijemne funkcije

Primjer: izračunavanje faktorijela fact.c- faktorijel broja cijeli je broj, ali se prikazuje kao double, jer su faktorijelimanjih cijelih brojeva vrlo veliki brojevi

Page 179: PREDAVANJA (2h) - etfos.unios.hrjbalen/doks/SVA predavanja_25-01-2010.pdf · J. Šribar, B. Motik, “Demistificirani C/C++”, Element, Zagreb, 2001 L. Budin, “Informatika za 1

9

17

/* Datoteka: fact.c *//* Funkcija za izracun faktorijela */

#include <stdio.h>

/* #define RECURSIVE */

#ifndef RECURSIVE

/* iterativna verzija funkcije */double fact(int n){

int i;double f=1;

for(i=1;i<=n;i++)f*=i;

return(f);}

#else

/* rekurzivna verzija funkcije */double fact(int n){

if(!n)return 1;

elsereturn (fact(n-1)*n);

}

#endif

main(){

int i, n;double fct;

printf("n= "); scanf("%d", &n);fct=fact(n);printf("%d! = %lf\n", n, fct);

return 0;}

18

- adresa varijable se pridružuje parametru pozvane funkcije- sve varijable u memoriji spremaju se na određene memorijske adrese- kad program koristi varijablu, C zna njezinu adresu i koristi sadržaj

spremljen na toj adresi- pri prijenosu varijable po adresi prenosi se njena adresa- u C-u se sva polja uvijek prenose po adresi- svaki put kad se prenosi varijabla po adresi ako pozvana f-ja mijenja

varijablu, ona se mijenja i u pozivajućoj

15.3.2 Prijenos po adresi ili referenci

Za prijenos običnih varijabli po adresi:1. Ispred varijable u pozivajućoj funkciji treba staviti prefiks &. Npr.

sqr_equation(a, b, c, &x1, &x2);2. U definiciji funkcije ispred varijable treba staviti prefiks *. Npr.

sqr_equation(double a, double b, double c, double *x1, double *x2);

Page 180: PREDAVANJA (2h) - etfos.unios.hrjbalen/doks/SVA predavanja_25-01-2010.pdf · J. Šribar, B. Motik, “Demistificirani C/C++”, Element, Zagreb, 2001 L. Budin, “Informatika za 1

10

19

/* Datoteka: kvadrjed.c *//* Ilustrira prenosenje podataka po adresi *//* na primjeru funkcije za izracun kvadr. jedn. */

#include <stdio.h>#include <math.h>

double sqr_equation(double a, double b, double c, double *x1, double *x2){

double d,p1,p2;

d=b*b-4*a*c; /* racunanje dikriminante */*x1=p1=-b/(2*a); /* racunanje prvog dijela rjesenja

*/*x2=p2=sqrt(d<0? -d : d)/(2*a); /* racunanje drugog

dijela rjesenja */if(d>0) {

*x1=p1+p2; /* dva realna rjesenja */*x2=p1-p2;

}else

if (d==0)*x2=*x1; /* jedno realno dvostruko rjesenje */

return d;}

20

main(){double a, b, c, d, x1, x2;

printf("\nUnesite koeficijente kvadr. jedn. (ax^2+bx+c=0): \n");printf("a= ");scanf("%lf", &a);printf("b= ");scanf("%lf", &b);printf("c= ");scanf("%lf", &c);

d=sqr_equation(a, b, c, &x1, &x2);

printf("\nRjesenja kvadratne jednadzbe: \n");if(d>0) /* realna rjesenja */printf("x1= %lf x2= %lf\n", x1, x2);

else if (d<0) /* konj. kompleksno rjesenje */printf("x1= %lf+%lf*i x2= %lf-%lf*i\n", x1, x2<0? -x2 : x2, x1, x2<0? -x2 : x2);

else /* dvostruko realno rjesenje */printf("x1=x2= %lf\n", x1);

return 0;}

Page 181: PREDAVANJA (2h) - etfos.unios.hrjbalen/doks/SVA predavanja_25-01-2010.pdf · J. Šribar, B. Motik, “Demistificirani C/C++”, Element, Zagreb, 2001 L. Budin, “Informatika za 1

11

21

- C omogućava da funkcija može pozivati samu sebe, a taj način korištenja funkcija senaziva rekurzija

- funkcija koja može sama sebe pozvati naziva se rekurzivnom funkcijom- sam faktorijel f-je definiran je rekurzivno, a to je temelj izvedbe funkcije fact- ovisno o argumentu s kojim se poziva f-ja, ispunjen je određeni uvjet, odnosno izvodi se određeni dio programa

15.4. Rekurzija

Page 182: PREDAVANJA (2h) - etfos.unios.hrjbalen/doks/SVA predavanja_25-01-2010.pdf · J. Šribar, B. Motik, “Demistificirani C/C++”, Element, Zagreb, 2001 L. Budin, “Informatika za 1

1

1

Sveučilište J.J. Strossmayera u OsijekuElektrotehnički fakultet

PROGRAMIRANJE I(predavanja u ak. god. 2006./2007.)

P2006-16POLJA U C-u

doc.dr.sc. Goran Martinovićwww.etfos.hr/~martin

[email protected]: 031 224-766

Soba: 0-14

Osijek, listopad 2006.

2

16. POLJA

16.1 Osnovno o poljima16.2 Inicijaliziranje polja16.3 Operacije s poljem16.4 Višedimenzionalna polja

Page 183: PREDAVANJA (2h) - etfos.unios.hrjbalen/doks/SVA predavanja_25-01-2010.pdf · J. Šribar, B. Motik, “Demistificirani C/C++”, Element, Zagreb, 2001 L. Budin, “Informatika za 1

2

3

16.1. OSNOVNO O POLJIMA

– polje: skup od dvije ili više varijable s istim imenom koje se označavaju brojem u zagradi (indeksom)

– služi za pohranjivanje niza istovrsnih podataka, npr.polje cijelih ili realnih brojeva

– element u polju jednoznačno je određen navođenjem imena polja i indeksa elementa zatvorenog u uglate zagrade

– u sljedećim redovima deklarira se polje od 4 cijela broja čijim se elementima pridružuju početne vrijednosti:

int godina [4] ;godina [0] = 1242;godina [1] = 1583;godina [2] = 1666;godina [3] = 1895;

– početni indeks polja ima vrijednost 0 -> ako je duljina (dimenzija) polja n (npr. 4), polje može sadržavati n elemenata s indeksima 0,1,2,…n-1 (npr.0,1,2,3)

– polje može biti bilo kojeg tipa koji je podržan u C-u

4

- deklaracija polja razlikuje se od deklaracije obične varijable po korištenju uglatih zagrada iza imena polja

- primjer deklaracije polja:

int x[10], y[20];double faktor[30];char redak[80];

- svaki element u polja zauzima istu veličinu prostora u memoriji kao i obična varijabla istog tipa – npr. element znakovnog polja 1 bajt memorije, te 2 bajta za cjelobrojno polje

- kao indeks polja može se koristiti konstanta, varijabla ili izraz, kao u sljedećim primjerima:

rd [4]rd [i]rd [ind+5*step]rd [k[3]+i]

Page 184: PREDAVANJA (2h) - etfos.unios.hrjbalen/doks/SVA predavanja_25-01-2010.pdf · J. Šribar, B. Motik, “Demistificirani C/C++”, Element, Zagreb, 2001 L. Budin, “Informatika za 1

3

5

- svi elementi polja zapisani su u memoriji u uzastopnim lokacijama

Primjer:

int x[5], y[10]…x[8]=k*y[4] - izraz pridruživanja imat će nepredviđene i često štetne

posljedice (npr. neispravan rad programa), jer- C rezervira mjesto za 5 cijelih brojeva, pa ako je iza polja x rezervirano mjesto za polje y, tada je prebrisanapostojeća vrijednost elementa y[2] s vrijednošću k*y[4]

6

16.2. INICIJALIZIRANJE POLJA

- prije korištenja elemenata polja moraju im se dodijeliti vrijednosti- polje se može inicijalizirati na dva načina:

1. Inicijaliziranjem pri deklaraciji2. Inicijaliziranjem u programu

- globalna polja C automatski inicijalizira pri deklaraciji s nul vrijednostima

16.2.1. INICIJALIZIRANJE PRI DEKLARACIJI

- za inicijaliziranje znakovnog polja ili stringa pri deklaraciji koristi se pridruživanje kao u sljedećem primjeru (string specijalan slučaj polja – 8 znakova + nul znak ‘\0’ za kraj stringa, pa je rezervirano 9 elemenata):

char mjesec[9]=“Prosinac”;

- polje znakova može se inicijalizirati i na drugi način, ali tada se ne radi o stringu, pa sljedeće polje nije string, već polje pojedinačnih znakova i kao takvo se može tretirati i koristiti u string funkcijama:

char pocetna_slova[5]={`P`, `Z`, `T`, `D`, `R` };

Page 185: PREDAVANJA (2h) - etfos.unios.hrjbalen/doks/SVA predavanja_25-01-2010.pdf · J. Šribar, B. Motik, “Demistificirani C/C++”, Element, Zagreb, 2001 L. Budin, “Informatika za 1

4

7

- korištenjem vitičastih zagrada za navođenje skupa početnih vrijednosti elemenata polja vrši se inicijalizacija bilo kojeg tipa polja. Npr.

int m[4]={ 3, 7, 5, 4, };

- može se koristiti i oblik deklaracije bez eksplicitnog navođenja veličine polja, jer se prema broju inicijalizacijskih vrijednosti automatski određuje veličina polja. Npr.

int m[ ]={ 3, 7, 5, 4, };

ili za string

char mjesec []=“Prosinac”;- iako C automatski ne pridružuje nulu elementima polja pri deklaraciji, ako

se izvrši inicijalizacija samo nekoliko elemenata, C će preostalim elementima pridružiti nule

- tako se pri deklaraciji cijelo polje može inicijalizirati s nulom pridruživanjem nule samo prvom elementom polja, npr.

int m [10] = { 0 } ;

Sljedeća deklaracija nije pri deklariranju i nije dopuštena (nerezerviranprostor polja -> brisanje podataka): int x[ ];

8

/* Datoteka: gday.c *//* Sadrzi verziju funkcije gday (iz 5. poglavlja) *//* realiziranu pomocu polja. Koristi se s gdate.c *//* programom. */

int md[12]={31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};

long gday(int dan, int mjesec, int godina){

long n_dana;int i, prestupna, n_prestupnih_dana;

prestupna=godina%4==0&&godina%100!=0||godina%400==0;n_prestupnih_dana=(godina+3)/4-godina/100+godina/400;n_dana=(long)godina*365;n_dana+=n_prestupnih_dana;for(i=mjesec;i>1;i--)

if(i==3) n_dana+=(prestupna? md[i-2]+1 : md[i-2]);

elsen_dana+=md[i-2];

n_dana+=dan;

return (n_dana);}

- funkcija gdaypomoću polja inicijaliziranog brojevima dana za svaki mjesec u godini

Page 186: PREDAVANJA (2h) - etfos.unios.hrjbalen/doks/SVA predavanja_25-01-2010.pdf · J. Šribar, B. Motik, “Demistificirani C/C++”, Element, Zagreb, 2001 L. Budin, “Informatika za 1

5

9

16.2.2. INICIJALIZIRANJE U PROGRAMU‐ ako se želi inicijalizirati polje u programu iza deklaracije, to se ne

može učiniti navođenjem početnih vrijednosti elemenata polja u vitičastim zagradama, već pridruživanjem vrijednosti elementu poelementu pomoću izraza pridruživanja ili funkcija

‐ ime polja se ne može pojaviti na lijevoj strani izraza pridruživanja. Npr:

x=y; (pretpostavka: x i y polja istih dimenzija)

- polje se mora inicijalizirati element po element kao u sljedećem primjeru:

for(i=0;i<n;i++) x[i]=y[i];

ili u pojedinačnim izrazima pridruživanja, npr.

x[0]=12.34;x[1]=y[1];x[2]=234.567;x[3]=-78.33;

10

16.2.3 REFERENCIRANJE POLJA

- umjesto korištenja indeksa polja u uglatim zagradama- ime polja u C-u nije samo labela koja označava polje, već i adresa prvog

elementa polja u memoriji- Npr. ako ime polja godina sadrži adresu prvog elementa polja, samu

adresu varijabli i polja određuje računalo pri učitavanju i pokretanju programa.

- umjesto godina [3] može se koristiti notacija (godina+3) [0]. Izraz (godina+3) predstavlja adresu četvrtog elementa polja kao početnu adresu novog polja. Prvi element novog polja (s indeksom 3) zapravo je četvrti element polja godina.

- istom elementu može se pristupiti i sljedećim referencama:

(godina+2) [1](1+godina) [2] - ne smiju se ispustiti zagrade(godina-2) [5]

Page 187: PREDAVANJA (2h) - etfos.unios.hrjbalen/doks/SVA predavanja_25-01-2010.pdf · J. Šribar, B. Motik, “Demistificirani C/C++”, Element, Zagreb, 2001 L. Budin, “Informatika za 1

6

11

16.3 OPERACIJE S POLJEM

- najčešće operacije koje se primjenjuju na nizovima podataka predstavljenih poljem su pretraživanje i sortiranje polja, a realiziraju se pomoću if i for naredbi

- pretraživanje polja s cijenama proizvoda pretražuje se cijelo da bismo npr. našli najmanju ili najveću cijenu

- sortiranjem polja elementi se stavljaju u određeni poredak, npr. prema abecedi ili numeričkoj vrijednosti elemenata – traženje npr. 5 najviših cijena proizvoda

16.3.1 PRETRAŽIVANJE POLJA

- pretraživanje polja programski se realizira pomoću if naredbi i for petlje- pri tome valja voditi računa o granicama polja koje se ne smiju prijeći- ako se vrijednost ne pronađe prilikom pretraživanja, polje je ne sadrži

12

/* Datoteka: max.c *//* Pronalazi najveci element cjelobrojnog polja */

#include <stdio.h>

#define MAXN 100

main(){

int a[MAXN], n, i, max;

printf("\nUnesite velicinu polja: ");scanf("%d", &n);if (n>MAXN||n<1)

return 1;for (i=0;i<n;i++) /* unos elemenata polja */{

printf("a[%d]= ", i+1);scanf("%d", &a[i]);

}

max=a[0];for (i=0; i<n; i++) /* trazenje najveceg broja */

if (a[i]>max) max=a[i];

printf("\nNajveci broj u polju a je %d.\n", max);

return 0;}

Page 188: PREDAVANJA (2h) - etfos.unios.hrjbalen/doks/SVA predavanja_25-01-2010.pdf · J. Šribar, B. Motik, “Demistificirani C/C++”, Element, Zagreb, 2001 L. Budin, “Informatika za 1

7

13

Objašnjenje programa max.c

printf(“Unesite velicinu polja: “);scanf(“%d”, &n);

if (n>MAXN||n<1)return 1;

for (i=0;i<n;i++) {printf(“\na[%d]= “, i);scanf(“%d”, &a[i]);

{

- program od korisnika traži da unese dimenziju i elemente polja. Ako utipka nedozvoljenu dimenziju polja, program se prekida.

max=a[0];for (i=1; i<n; i++)

if (a[i]>max) max=a[i];

- kao trenutni najveći element uzima se prvi element polja- posljednja petlja u programu uspoređuje po redu elemente polja s

trenutnom maksimalnom vrijednošću i ako je element veći, on postaje trenutna maksimalna vrijednost

14

16.3.2 SORTIRANJE POLJA

- provodi se pomoću if i for naredbi- ima mnogo metoda sortiranja (dubble, quick, shell sort i dr.), od kojih

svaka ima prednosti, nedostatke i područje najučinkovitije primjene- svaka od metoda vrši zamjenu elemenata u skladu s traženim poretkom,

čime se mijenja položaj pojedinih elemenata u polju- zamjena vrijednosti dva elementa ne može se izvršiti sljedećim

pridruživanjima:elem1=elem2; polje[i]=polje[j];elem2=elem1; ili polje[j]=polje[i];

jer će se vrijednost elem1 (ili polje[i]) izgubiti i oba elementa će sadržavati istu vrijednost. Mora se koristiti pomoćna varijabla kao u sljedećem primjeru:

temp=elem1;elem1=elem2;elem2=elem1;

- slijedi bubble sort: sastoji se od (nekoliko) prolazaka kroz polje i uspoređivanja parova brojeva da bi se utvrdila potreba za njihovom zamjenom, spor postupak

Page 189: PREDAVANJA (2h) - etfos.unios.hrjbalen/doks/SVA predavanja_25-01-2010.pdf · J. Šribar, B. Motik, “Demistificirani C/C++”, Element, Zagreb, 2001 L. Budin, “Informatika za 1

8

15

/* Datoteka: sort.c *//* Sortira niz cjelobrojnih vrijednosti prema *//* bubble-sort metodi. */

#define MAX 20

#include <stdio.h>#include <stdlib.h>#include <time.h>

void fill_array(int a[]){

int i;srand((unsigned)time(NULL));for(i=0; i<MAX; i++)

a[i]=rand()%100;}

void print_ array(int a[]){

int i;for(i=0;i<MAX;i++)

printf("%d\n", a[i]);}

void sort_array(int a[]){int temp, i, j;

for(i=0; i<MAX-1; i++)for(j=i+1; j<MAX; j++)

if(a[i]>a[j]){

temp=a[i];a[i]=a[j];a[j]=temp;

}

return;}

main(){int a[MAX];

fill_array(a);printf("Nesortirani brojevi... ");print_array(a);sort_array(a);printf("\nSortirani brojevi... ");

return 0;}

16

Objašnjenje sort.c

- fill_array popunjava polje slučajnim brojevima između 0 do 100 (rand)- print_array ispisuje elemente polja na zaslon- u funkciji sort_array vrši se sortiranje elemenata polja u rastućemredoslijedu prema bubble-sort algoritmu

- prvi element se uspoređuje s ostalima i ako se pronađe manji od njega, međusobno zamijene mjesto- u prvom prolazu se nađe manji element među, svim elementima polja,zatim se traži najmanji među preostalima i tako redom

Page 190: PREDAVANJA (2h) - etfos.unios.hrjbalen/doks/SVA predavanja_25-01-2010.pdf · J. Šribar, B. Motik, “Demistificirani C/C++”, Element, Zagreb, 2001 L. Budin, “Informatika za 1

9

17

16.4 VIŠEDIMENZIONALNA POLJA- C podržava definiranje višedimenzionalnih polja- višedimenzionalna polja možemo definirati kao polje s više od jednim

indeksom. Svaka dimenzija polja ima vlastiti indeks.- dvodimenzionalno polje je polje polja, odnosno, jednodimenzionalno

polje čiji svaki element nije, npr. znak, cijeli ili realni broj, već neko drugo polje

- C sva polja, kao i višedimenzionalna, prenosi po abecedi

- definicija 2D polje cijelih brojeva od 10 redova i 5 stupaca:

int tablica [10] [5]

18

- kod prijenosa višedimenzionalnog polja nije potrebno eksplicitno definirati broj elemenata prve dimenzije, dok je za ostale dimenzije to obavezno- u 2D polju najprije se sprema 1. red s prvim elementima svih stupaca

( a [0] [0], a [0] [1], a [0] [2] itd.)

- višedimenzionalna se inicijaliziraju navođenjem vrijednosti elemenata unutar vitičastih zagrada pri deklaraciji polja. Npr.

int x [3] [4] = {{ 5, 6, 7, 8},{15,16,17,18},{25,26,27,28}}; ili ekvivalentno kao 1D polje

int x [3] [4] = {5, 6, 7, 8, 15, 16, 17, 18, 25, 26, 27, 28};

- ako pri deklaraciji ne inicijaliziramo sve elemente polja, C će preostale popuniti nulom

int x [2] [3] [10] = { 0};

- osnovno ograničenje polja je da svaki element mora biti istog tipa

Page 191: PREDAVANJA (2h) - etfos.unios.hrjbalen/doks/SVA predavanja_25-01-2010.pdf · J. Šribar, B. Motik, “Demistificirani C/C++”, Element, Zagreb, 2001 L. Budin, “Informatika za 1

10

19

/* Datoteka: matrica.c *//* Racuna umnozak matrice (2D polja) i vektora *//* (jednodimenzionalnog polja) */

#include <stdio.h>

#define MAXM 10#define MAXN 10

main(){

int a[MAXM][MAXN], v[MAXN];int b[MAXM] = {0};int i,j,m,n;

/* unos dimenzija matrice */printf("Unesite dimenzije matrice:M*N (maks. 10*10)\n");printf("M=");scanf("%d", &m);printf("N=");scanf("%d", &n);

/* unos elemenata matrice */printf("\nUnesite elemente matrice %d*%d:\n", m, n);for(i=0;i<m;i++)

for(j=0;j<n;j++) {printf("a[%d][%d]= ",i+1,j+1);scanf("%d", &a[i][j]);

}

20

/* unos elemenata vektora */printf("\nUnesite elemente vektora dimenzije %d:\n",n);for(i=0;i<n;i++) {

printf("v[%d]= ",i+1);scanf("%d", &v[i]);

}

/* racunanje produkta matrice a i vektora v*/for(i=0;i<m;i++)

for(j=0;j<n;j++)b[i]+=a[i][j]*v[j];

/* ispis novog vektora - rezultata mnozenja matrice i vektora */printf("\nRezultat mnozenja matrice a vektorom v (b=a*v):\n");for(i=0;i<m;i++)

printf("b[%d]=%d\n", i+1, b[i]);

return 0;}

Page 192: PREDAVANJA (2h) - etfos.unios.hrjbalen/doks/SVA predavanja_25-01-2010.pdf · J. Šribar, B. Motik, “Demistificirani C/C++”, Element, Zagreb, 2001 L. Budin, “Informatika za 1

11

21

Objašnjenje programa matrica.c

- program računa umnožak matrice i vektora- prva grupa printf i scanf naredbi služe za unos dimenzija matrice i

vektora, druga za unos elemenata matrica, a treća za unos elemenata vektora

- dvostrukom for petljom ostvareno je množenje matrice vektorom prema pravilima iz matematike:

A * V = B

bi=Σaijvj (i=0 do N), i=1,…m

/* racunanje umnoska matrice a i vektora v*/for (i=0;i<m;i++)

for (j=0;j<n;j++)b [i] +=a [i] [j] *v [j];

- na kraju se printf funkcijama ispisuju elementi novog vektora rezultata množenja matrice i vektora

Page 193: PREDAVANJA (2h) - etfos.unios.hrjbalen/doks/SVA predavanja_25-01-2010.pdf · J. Šribar, B. Motik, “Demistificirani C/C++”, Element, Zagreb, 2001 L. Budin, “Informatika za 1

1

1

Sveučilište J.J. Strossmayera u OsijekuElektrotehnički fakultet

PROGRAMIRANJE I(predavanja u ak. god. 2006./2007.)

P2006-17POKAZIVAČI U C-u

doc.dr.sc. Goran Martinovićwww.etfos.hr/~martin

[email protected]: 031 224-766

Soba: 0-14

Osijek, listopad 2006.

2

17. POKAZIVAČI

17.1 Deklaracija pokazivača17.2 Polja pokazivača17.4 Pokazivači i polja

Page 194: PREDAVANJA (2h) - etfos.unios.hrjbalen/doks/SVA predavanja_25-01-2010.pdf · J. Šribar, B. Motik, “Demistificirani C/C++”, Element, Zagreb, 2001 L. Budin, “Informatika za 1

2

3

Pokazivači (pokazivačke varijable) - varijable koje sadrže adrese drugihvarijabli ili vrijednosti.Druge vrste varijabli sadrže podatke određenog tipa.Pokazivač sadrži adrese obične podatkovne varijable, tj. pokazivač pokazujena podatke, a ne sadrži ih.

17.1. Deklaracija pokazivača- pokazivač omogućava učinkovit pristup podacima i njihovu obradu- sastavni dio deklaracije je tip podataka na koji pokazuje- pokazivači se mogu deklarirati kao lokalni i globalni- deklariranje cjelobrojne varijable k s vrijednošću 10:

int k=10; (rezerv. prostor u memoriji i smještena vrij. 10)

- deklariranje pokazivačke varijable koja pokazuje na cjelobrojnu varijablu k:

int *p_na_k; (rezerv. prostor za var. koja je pokazivač na cjelobrojni tip)

- operator * - dereferentni operator- pokazivač pokazuje samo na vrijednosti naznačenog tipa

4

- gornjom deklaracijom pokazivač nije inicijaliziran da pokazuje na cjelobrojnu varijablu k, nego tek sljedećom deklaracijom ili izrazima:

int *p_na_k=&k; - inicijalizacija pok. pri deklariranju

int *p_na_k; - najprije deklariranje, a zatim inicijaliziranjep_na_k=&k;

- & i * su tzv. preopterećeni operatori- promjena vrijednosti varijable k:

k=20; ili pokazivačem *p_na_k=20;- za ispis varijable tako se može koristiti:

printf (“%d”, k); ili printf (“%d”, *p_na_k);

- interni zapis varijabli u memoriji – slika ->- pokazivačem se može izravno pristupiti memorijskoj lokaciji,

pridruživanjem njene adrese pokazivaču (opasno, jer istu lokaciju može rabiti i OS, pa se rabe standardne funkcije)

Page 195: PREDAVANJA (2h) - etfos.unios.hrjbalen/doks/SVA predavanja_25-01-2010.pdf · J. Šribar, B. Motik, “Demistificirani C/C++”, Element, Zagreb, 2001 L. Budin, “Informatika za 1

3

5

17.2 Polje pokazivača

- C omogućava deklariranje polja pokazivača na isti način kao i polja znakova, cijelih i realnih brojeva

- npr. deklaracija koja rezervira polje od 5 pokazivača na int:

int *intptr [5];

- zvjezdica označava da intptr predstavlja polje pokazivača na cjelobrojne vrijednosti, a ne polje cjelobrojnih vrijednosti

- svaki element polja sadrži adresu koja ukazuje na drugu vrijednost u memoriji koja mora biti cijeli broj i to nakon inicijalizacije

- želimo li da 4. element polja pokazuje na cjelobrojnu varijablu k:

intptr [3]=&k;

6

17.3 Pokazivači i polja

- polja se mogu koristiti kao pokazivači i obratno- deklaracija rezervira 4 uzastopne lokacije za smještaj 4 cijela broja:

int xpar [4] = (2, 4, 6, 8)

- ime polja je ujedno pokazivač koji pokazuje na prvi el. (*xpar equ xpar [0])- sljedeći su izrazi također ekvivalentni:

*xpar <=> xpar[0]*(xpar+1) <=> xpar[1]*(xpar+2) <=> xpar[2]*(xpar+3) <=> xpar[3] - adresi spremljenoj u xpar dodaje se 3 ->

adresa 4. elementa polja- vrijednost 3 u *(xpar+3) dodaje 3 “cjelobrojne adrese” pokazivaču xpar- ime polja pokazuje na neku vrijednost, a radi se o posebnoj vrsti

pokazivača.

Page 196: PREDAVANJA (2h) - etfos.unios.hrjbalen/doks/SVA predavanja_25-01-2010.pdf · J. Šribar, B. Motik, “Demistificirani C/C++”, Element, Zagreb, 2001 L. Budin, “Informatika za 1

1

1

Sveučilište J.J. Strossmayera u OsijekuElektrotehnički fakultet

PROGRAMIRANJE I(predavanja u ak. god. 2006./2007.)

P2006-18STRUKTURE U C-u

doc.dr.sc. Goran Martinovićwww.etfos.hr/~martin

[email protected]: 031 224-766

Soba: 0-14

Osijek, listopad 2006.

2

18. STRUKTURE

18.1. Definiranje strukture18.2. Polje strukture18.3. Unije

Strukture omogućavaju grupiranje podataka u jednu cjelinu.Struktura je skup od jednog ili više tipova varijabli.U poljima svi elementi moraju biti istog tipa, a u strukturama svaki elementmože biti različitog tipa.Elementi strukture nazivaju se članovi.

Page 197: PREDAVANJA (2h) - etfos.unios.hrjbalen/doks/SVA predavanja_25-01-2010.pdf · J. Šribar, B. Motik, “Demistificirani C/C++”, Element, Zagreb, 2001 L. Budin, “Informatika za 1

2

3

18.1. Definiranje struktura

- strukture predstavljaju sredstvo za definiranje korisničkih tipova, a definiraju se pomoću struct ključne riječi:

struct [ime strukture]{

definicija člana.

.

.

} [jedna ili više strukturnih varijabli];

- za navedene strukturne varijable (na kraju), C rezervira prostor u memoriji za smještaj podataka članova strukture, a bez toga struktura predstavlja običnu definiciju kojom se ne rezervira prostor u memoriji

- pretpostavimo da želimo koristiti strukture podataka o kupcima. Za svakog kupca potrebno je evidentirati sljedeće podatke:

Ime znakovni niz, 30 znakovaAdresa znakovni niz, 30 znakovaIdentifikacijski broj cijeli broj (int)Dug realni broj (float)Vrijednost kupljene robe u tekućem periodu realni broj (float)

4

- u bazama podataka svaki navedeni entitet odgovara imenu polja, azajedno čine slog baze. Struktura je analogna pojmu sloga.

- nakon određivanja podataka, imenima članova treba pridružiti tip (intuitivno)

- definiranje strukture kupca (predstavljanje strukture kupca -> slikom):struct kupac {

char ime [20]; /*članovi/char adresa [30];int id;float dug;float narudzba;

} kup1, kup2; /*varijable*/

- nije nužno navesti ime strukture (kupac 8)- strukturne varijable mogu se deklarirati i odvojeno od strukture

struct kupac {char ime [20];char adresa [30];int id;float dug;float narudžba;

};struct kupac kup1, kup2;

Page 198: PREDAVANJA (2h) - etfos.unios.hrjbalen/doks/SVA predavanja_25-01-2010.pdf · J. Šribar, B. Motik, “Demistificirani C/C++”, Element, Zagreb, 2001 L. Budin, “Informatika za 1

3

5

18.1.1. Inicijalizacija struktura

- strukturne varijable mogu se inicijalizirati pri deklaraciji ili kasnije u programu, kao i svaka druga varijabla

Primjer inicijaliziranja pri deklariranju:struct kupac {

char ime [20];char adresa [30];int id;float dug;float narudzba;

} kup1 = {“NetCom”,“Trg J.F.Kennedy bb.”;“3125”,

“230.00”,“8936.75”

} ;

- podaci za inicijalizaciju češće se prikupljaju korisnikovim unošenjem ili učitavanjem podataka s diska

- za pridruživanje vrijednosti članovima strukture koristi se poseban operator točke(.)

- Sintaksa naredbe pridruživanja je:

ime_strukturne_varijable.ime_clana = izraz;

6

/* struct.c, primjer inicijaliziranja strukture u programu */

#include <stdio.h>#include <string.h>

main(){

struct kupac {char ime[20];char adresa[30];int id;float dug;float narudzba;

} netcom;

strcpy(netcom.ime,"NetCom ");strcpy(netcom.adresa,"Trg J.F.Kennedeya bb., Zagreb");netcom.id=3125;netcom.dug=230.00;netcom.narudzba=8936.75;printf("Ime: %s\n", netcom.ime);printf("Adresa: %s\n", netcom.adresa);printf("Identifikacijski broj: %d\n", netcom.id);printf("Dug: %f\n", netcom.dug);printf("Vrijednost narucene robe: %f\n", netcom.narudzba);

return 0; }

- sadržaj jedne strukturne varijable može se pridružitidrugoj, kao i kod varijabli osnovnih tipova:

struct kupac kup1,kup2;…kup2=kup1;

- sve operacije koje se izvode nad običnim varijablamaosnovnih tipova, mogu se vršiti i s varijablamačlanovima struktura, npr.:

kup1.dug+=117.34;

- strcpy kopira sadržaj niza znakova u druginiz znakova (string.h):

char *strcpy (char *odrediste, char *izvor)

Page 199: PREDAVANJA (2h) - etfos.unios.hrjbalen/doks/SVA predavanja_25-01-2010.pdf · J. Šribar, B. Motik, “Demistificirani C/C++”, Element, Zagreb, 2001 L. Budin, “Informatika za 1

4

7

18.1.2. Ugnježđene strukture

- C omogućava definiranje jedne strukture unutar druge, čime se štedi vrijeme pri pisanju programa koji koriste slične strukture

- zajedničke članove je potrebno definirati samo jednom u njihovoj vlastitoj strukturi, a zatim koristiti tu strukturu kao član u drugoj, npr:

struct student {char ime [20];int datum_rodjenja;struct adresna_forma; - struktura adresna_forma je u strukturi student{ ; - ako deklariramo var. tipa struct student:

struct student st;struct adresna_forma { za pristup članovima unutar adr. forme, koristi char ulica [25]; se dvostruki operator točke:char grad [15]; strcpy (st.adresa.grad, “Osijek”);char zemlja [15];} ;

8

18.2. Polje strukture- polje strukture u C-u odgovara nizu slogova u bazi podataka- polje strukture predstavlja sredstvo za čuvanje podataka koji se zapisuju

ili učitavaju s diska: Primjer:

struct kupac {char ime [20];char adresa [45];int id;float dugfloat narudžba;

} kup [500] /* polje od 500 struktura*/

- velika polja struktura koje se sastoje od velikog broja elemenata i zauzimaju dosta memorije, pa je potrebno o tome voditi računa

- pojedinom članu pristupa se pomoću operatora točke (a) ili pokazivačem (b):kup [34].id = 2341; (a)(*(kup+34)).id = 2341 (b)

Page 200: PREDAVANJA (2h) - etfos.unios.hrjbalen/doks/SVA predavanja_25-01-2010.pdf · J. Šribar, B. Motik, “Demistificirani C/C++”, Element, Zagreb, 2001 L. Budin, “Informatika za 1

1

1

Sveučilište J.J. Strossmayera u OsijekuElektrotehnički fakultet

PROGRAMIRANJE I(predavanja u ak. god. 2006./2007.)

P2006-19ULAZNO-IZLAZNE OPERACIJE U C-u

doc.dr.sc. Goran Martinovićwww.etfos.hr/~martin

[email protected]: 031 224-766

Soba: 0-14

Osijek, listopad 2006.

2

19. ULAZNO-IZLAZNE OPERACIJE

19.1. Jednostavan ulaz i izlaz19.2. Formatirani ulaz i izlaz19.3. Rad s datotekama

Page 201: PREDAVANJA (2h) - etfos.unios.hrjbalen/doks/SVA predavanja_25-01-2010.pdf · J. Šribar, B. Motik, “Demistificirani C/C++”, Element, Zagreb, 2001 L. Budin, “Informatika za 1

2

3

- C - vrlo prenosiv (portabilan) jezik: program u C-u koji se prevodi iizvodi na jednom tipu računala, moći će se izvoditi i na drugom tipu- zato C ne posjeduje niti jednu ulazno-izlaznu naredbu, već su ulazno-izlazne operacije realizirane skupom funkcija iz standardne bibliotekečiji se funkcijski prototipovi nalaze u zaglavlju <stdio.h>- ulazno-izlazne funkcije su napisane posebno za svaki tip računala kako bi se osiguralo njihovo izvođenje na svim računalima- C ne izvodi U/I operacije čitanjem ili zapisivanjem na stvarne sklopovske uređaje (zaslon, tipkovnica i dr.), već na C-ove standardne uređaje- o preusmjeravanju podataka na stvarne uređaje, brine se OS

Standardni uređaji u C-u:

zaslonustandardni izlaz za pogreškestderr

zaslonustandardni ulazstdout

tipkovnicistandardni ulazstdin

Odgovara stvarnom uređajuOpisC ime

4

- najjednostavnija ulazna operacija sastoji se od učitavanja jednog znaka sastandardnog ulaza (stdin), tj. tipkovnice pomoću funkcije getchar:

int getchar (void);

- getchar vraća sljedeći ulazni znak svaki put kad je pozvana ili vraća EOF kada dođe do kraja datoteke- ulaz ili izlaz za tekst modelira se pomoću niza znakova. Tok teksta(stream) je niz znakova podijeljen na nizove redova od kojih svaki sadrži 0ili više znakova, a završava znakom novog reda (\n)

- sljedećom naredbom sljedeći znak s ulaza se pridružuje cjelobrojnojvarijabli cc=getchar ();

- sljedeća naredba ispisuje znak čiji je ASCII kod c

char putchar (int c);Cjelobrojna vrijednost znaka (njegov ASCII kod) koristi se kako bi se mogla prikazati i vrijednost za kraj ulaza EOF – obično -1), jer se ne može predstaviti s char tipom.

19.1. Jednostavan ulaz i izlaz

Page 202: PREDAVANJA (2h) - etfos.unios.hrjbalen/doks/SVA predavanja_25-01-2010.pdf · J. Šribar, B. Motik, “Demistificirani C/C++”, Element, Zagreb, 2001 L. Budin, “Informatika za 1

3

5

Primjer korištenja getchar i putchar naredbe:

/* Datoteka: getputch.c *//* Primjer kopira standardni ulaz na standardni izlaz *//* pomocu getchar i putchar funkcija */

#include <stdio.h>

main(){

int c;while ((c=getchar())!=EOF)

putchar(c);}

- sljedeći znakovi se učitavaju s ulaza i ispisuju, dok se ne učita znak za kraj datoteke (Ctrl+Z, Ctrl+D)

- utipkavanjem Osijek Enter Ctrl+Z dobijemo Osijek

6

Primjer brojenja linija

/* Datoteka: brojlin.c *//* Primjer broji linije utipkane sa standardnog ulaza *//* (tipkovnice), odnosno znakove za novi red */

#include <stdio.h>

main(){

int c, broj_lin;broj_lin = 0;

while ((c=getchar())!=EOF)if (c=='\n')

broj_lin++;printf("%d\n", broj_lin);

return 0;}

Page 203: PREDAVANJA (2h) - etfos.unios.hrjbalen/doks/SVA predavanja_25-01-2010.pdf · J. Šribar, B. Motik, “Demistificirani C/C++”, Element, Zagreb, 2001 L. Budin, “Informatika za 1

4

7

- standardna biblioteka C-a sadrži dvije osnovne funkcije za formatirani ulazi izlaz: printf i scanf

19.2.1. Printf funkcija (formatirani izlaz)

- printf f-ja ispisuje na standardni izlaz (zaslon) vrijednosti u odgovarajućemznakovnom formatu, a ima oblik:

int printf (char *specifikatori_formata, arg1, arg2, …)

specifikatori_formata – niz znakova za formatiranje argumenataSvaki specifikator počinje s %, a završava s jednim od znakova iztablice znakova pretvorbe

arg1, arg2, … - vrij. koje se ispisuju u formatu određenom znakovima zaformatiranje

19.2. Formatirani ulaz i izlaz

8

Znakovi pretvorbe i njihovi dodaci

- za prikaz realnog broja s decimalnim dijelom koristimo format %n.mnpr. %6.2f prikazuje realni broj od minimalno 6 mjesta od toga 2 decimalna.Npr. 43.34

- decimalna točka zauzima jedno mjesto kao i predznak- širina ili točnost brojeva ne moraju biti određeni konstantnim broje, već semože rabiti znak čija će se vrijednost dobiti pretvorbom sljedećeg cjelobrojnogargumenta. Npr.:

int max,i;…printf (“%.d”, max, i); /*ispisuje najviše max znakova cjelobrojne vrijednosti i*/

Page 204: PREDAVANJA (2h) - etfos.unios.hrjbalen/doks/SVA predavanja_25-01-2010.pdf · J. Šribar, B. Motik, “Demistificirani C/C++”, Element, Zagreb, 2001 L. Budin, “Informatika za 1

5

9

Primjer – korištenje različitih formata

/* Datoteka: formi.c *//* Primjer ispisuje string i realni broj na standardni *//* izlaz (zaslon) u razlicitim formatima pomocu printf *//* funkcije */

#include <stdio.h>

main(){double x=173459.6794;char *msg="Mladi lavovi";

printf("%s\n", msg);printf("%.8s\n", msg);printf("%12.8s\n", msg);printf("%-12.8s\n", msg);printf("%f\n", x);printf("%.8f\n", x);printf("%12.2f\n", x);printf("%-12.2f\n", x);

return 0;}

- stdio.h sadrži i f-ju koja umjesto na zaslon, vrši formatirani ispis u string – sprintf:

int sprintf (char *string, char *format, arg1, arg2,…)

10

- scanf (slična printf) služi za učitavanje znakova sa standardnog ulaza(tipkovnice) prema navedenom formatu i njihovo dodjeljivanje odgovarajućim varijablama.Oblik funkcije je :

int scanf (char *specifikatori_formata, [,argumenti], …)

specifikatori_formata – počinje znakom %, a završavaju s nekim odznakova prema tabliciostali argumenti moraju biti pokazivači – podaci se prenose po adresi

- f-ja prekida izvođenje kad iscrpi sve specifikatore formata, a vraća brojuspješno ostvarenih ulaza

- element ulaza naziva se ulazno polje, a definira se kao niz znakova koji nesadrže praznine uključujući tab, novi red, vert. tab..

Primjer scanf

- učitati datum i vrijeme u formatu D.D.MM.GGGG. Dan ss:mm10.02.2004. Subota 18:30

19.2.2. Scanf funkcija (formatirani ulaz)

Page 205: PREDAVANJA (2h) - etfos.unios.hrjbalen/doks/SVA predavanja_25-01-2010.pdf · J. Šribar, B. Motik, “Demistificirani C/C++”, Element, Zagreb, 2001 L. Budin, “Informatika za 1

6

11

Program sa scanf

/* Datoteka: formu.c *//* Primjer ucitava datum sa standardnog ulaza (tipkovnice) *//* u razlicitim formatima pomocu scanf funkcije */

#include <stdio.h>

main(){

int n,dan, godina, mjesec, sat, minuta;char dan_u_tjednu[12];

printf("Unesite datum i vrijeme:\n");scanf("%d.%d.%d. %s %d:%d", &dan, &mjesec, &godina, dan_u_tjednu, &sat, &minuta);printf("\n%s, %d.%d. %d:%d\n", dan_u_tjednu, dan, mjesec, sat, minuta);

return 0;}

- česta pogreška je izostavljanje adresnog operatora ispred varijabli osnovnog tipa(koje nisu pokazivači) u scanf f-ji:scanf (“%lf”, x); umjesto scanf (“%lf”, &x)

12

- standardna f-ja za sscanf umjesto stipkovnice formatirani ulaz vrši iz stringa:

int sscanf (char *string, char *format, arg1, arg2, …)

pri čemu argumenti moraju biti pokazivači

Page 206: PREDAVANJA (2h) - etfos.unios.hrjbalen/doks/SVA predavanja_25-01-2010.pdf · J. Šribar, B. Motik, “Demistificirani C/C++”, Element, Zagreb, 2001 L. Budin, “Informatika za 1

7

13

- datotekama se može pristupiti na jedan od dva načina:1. sekvencijalno2. direktno ili slučajno (random access)

- sekvencijalnim datotekama se pristupa prema istom redoslijedu po kojem su podaci zapisani u datoteku (kazeta ili traka). Da bi došli do traženog podatka, potrebno je prijeći sve podatke koji se nalaze prije njega.- direktnim (izravnim) datotekama se pristupa na slobodan način (CD, HDD ili ploča). C sadrži funkcije kojima se podržava direktan pristup datoteci.

19.3. Rad s datotekama

14

- za otvaranje datoteke koristi se funkcija iz standardne biblioteke fopen:

FILE *fopen (char *ime, char *mod);

- ime predstavlja ime datoteke, a mod način rada- f-ja treba uspostaviti komunikaciju s OS-om i njegovim rutinama za rad s datotekama, te vratiti pokazivač datoteke koji će se rabiti za zapisivanje ili čitanje iz datoteke - fp- pokazivač datoteke pokazuje na strukturu (tipa FILE) koja sadrži inf. odatoteci (deklaracija FILE nalazi se u stdio.h)- datoteka se otvara pozivom:

fp = fopen (ime, mod);gdje je fp pokazivač datoteke (deklarira se kao FILE *fp;), a mod način radadefiniran znakovima

Npr. fp=fopen (“RESULTS.DAT”, “r”))== NULL) /*0 vraća u slučaju pogr.*/

19.3.1. Otvaranje i zatvaranje datoteka

Page 207: PREDAVANJA (2h) - etfos.unios.hrjbalen/doks/SVA predavanja_25-01-2010.pdf · J. Šribar, B. Motik, “Demistificirani C/C++”, Element, Zagreb, 2001 L. Budin, “Informatika za 1

8

15

- nova (prazna) datoteka može se kreirati ako se nepostojeća datoteka otvori za pisanje (“w”) ili dodavanje (“a”), ali otvaranje za pisanje briše njensadržaj

- osim toga: r – otvaranje samo za čitanje, r+, w+, a+ - ažuriranje- nakon završetka, datoteku treba zatvoriti, čime se prekida veza izmeđupokazivača datoteke i njenog imena. F-ja zatvaranja:

int fclose (FILE *fp);- kad nije potrebno pristupiti datoteci, treba je zatvoriti s fclose, jer OS čestoograničava broj istovremeno otvorenih datoteka:Npr. fclose (fp);

- za čitanje i zapisivanje pojedinačnih znakova u datoteku koriste se funkcijegetc i putc

Page 208: PREDAVANJA (2h) - etfos.unios.hrjbalen/doks/SVA predavanja_25-01-2010.pdf · J. Šribar, B. Motik, “Demistificirani C/C++”, Element, Zagreb, 2001 L. Budin, “Informatika za 1

1

1

Sveučilište J.J. Strossmayera u OsijekuElektrotehnički fakultet

PROGRAMIRANJE I(predavanja u ak. god. 2006./2007.)

P2006-20STANDARDNA BIBLIOTEKA FUNKCIJA U C-u

doc.dr.sc. Goran Martinovićwww.etfos.hr/~martin

[email protected]: 031 224-766

Soba: 0-14

Osijek, listopad 2006.

2

20.0. Uvod

- datoteke zaglavlja sadrže funkcijske prototipove bibliotečnih funkcija,deklaracije tipova podataka, simboličkih konstanti i globalnih varijabli kojese koriste s bibliotečnim funkcijama

- zaglavlja se uključuju u program pomoću naredbe:#include <zaglavlje>koja se nalazi izvan bilo koje deklaracije ili definicije i prije korištenja onogašto deklarira.

Page 209: PREDAVANJA (2h) - etfos.unios.hrjbalen/doks/SVA predavanja_25-01-2010.pdf · J. Šribar, B. Motik, “Demistificirani C/C++”, Element, Zagreb, 2001 L. Budin, “Informatika za 1

2

3

20.1. Popis zaglavlja standardne biblioteke (cont.)

-slijedi popis svih zaglavlja i pripadajućih funkcija standardne biblioteke definiranih u ANSI C-u

assert.h – definira assert makro za dijagnostiku programa

ctype.h – sadrži informaciju koja se koristi za klasifikaciju znakova i makroe za pretvorbu znakova (isalnum, .. iscntrl, .. ispunct, .. toupper….)

errno.h – sadrži funkcije za testiranje i podešavanje indikatora statusa ili pogrešaka i definicije simbola za kodove pogrešaka (clearerr, ferror, perror, feof)

float.h – sadrži konstante za funkcije s pomičnim zarezom. Svaka implementacija definira vrijednost tih konstanti.

limits.h – sadrži parametre okruženja i raspone veličina integralnih tipova.

locale.h – deklarira funkcije koje osiguravaju informacije zavisne o zemlji i jeziku.

math.h – deklarira matematičke funkcije i makroe (sin, cos, .. floor, .. ldexp….).

setjmp.h – definira tip jmp_buf i funkcije longjmp i setjmp koje koriste taj tip (setjmp, longjmp).

4

20.1. Popis zaglavlja standardne biblioteke

signal.h – definira konstante i deklaracije koje se koriste u signal i raise f-jama (signal, raise).

stdarg.h – definira makroe koji se koriste za čitanje liste argumenata u funkcijama deklariranim da prihvate promjenjivi broj argumenata (va_list, va_start, va_end)

stddef.h – definira nekoliko općih tipova podataka i makroa

stdio.h – definira tipove, makroe i std. U/I tokove stdin, stdout, stderr i deklarira funkcije U/I toka (fopen,... fprintf, .. ftell, .. fsetpos)

stdlib..h – deklarira nekoliko općih funkcija: za pretvorbu tipova, pretraživanje, sortiranje (atof, .. malloc, .. abort, .. labs, ldiv….)

string.h – deklarira nekoliko funkcija za manipuliranje stringovima i memorijom (strcpy, .. , strstr, .. , memchr, .., memset….)

time.h – definira strukturu koja se popunjava f-jama pretvorbe vremena i tip koji se koristi u funkcijama ctime, difftime, gmtime, localtime i stime, te sadrži njihove prototipove (clock, mktime, gmtime, time, asctime, localtime, difftime, ctime, strtime).

Page 210: PREDAVANJA (2h) - etfos.unios.hrjbalen/doks/SVA predavanja_25-01-2010.pdf · J. Šribar, B. Motik, “Demistificirani C/C++”, Element, Zagreb, 2001 L. Budin, “Informatika za 1

3

5

20.2. Abecedni popis funkcija

abort, abs, asinbsearchcabs, clock, cosdivexitfclose, fgetc, fopen, fscanfgetchar, getsisalnum, isascii, itoalabs, ldivmax, memcpy, minpow, printf, putc, putcharqsortraise, randscanf, signal, sin, strcpytan, tmpfileungetcva_arg, va_end, vsprintf

….