Osnove inženjerske informatike II. Uvod u programiranje Vaš prvi program K. F. & V. B.

Слични документи
Računarski praktikum I - Vježbe 01 - Uvod

Uvod u računarstvo 2+2

Razvoj programa, Code::Blocks, struktura programa, printf, scanf, konverzioni karakteri predavač: Nadežda Jakšić

Slide 1

PROGRAMIRANJE Program je niz naredbi razumljivih računalu koje rješavaju neki problem. Algoritam je postupak raščlanjivanja problema na jednostavnije

PRIRODNO MATEMATIČKI FAKULTET U NIŠU DEPARTMAN ZA RAČUNARSKE NAUKE Utorak, godine PRIJEMNI ISPIT IZ INFORMATIKE 1. Koja od navedenih ekste

Programiranje 2 popravni kolokvij, 15. lipnja Ime i prezime: JMBAG: Upute: Na kolokviju je dozvoljeno koristiti samo pribor za pisanje i brisanj

Test ispravio: (1) (2) Ukupan broj bodova: 21. veljače od 13:00 do 14:00 Županijsko natjecanje / Osnove informatike Osnovne škole Ime i prezime

Funkcije predavač: Nadežda Jakšić

Programiranje 1 5. predavanje dodatak Saša Singer web.math.pmf.unizg.hr/~singer PMF Matematički odsjek, Zagreb Prog1 2018, 5. predavanj

Microsoft PowerPoint - Programski_Jezik_C_Organizacija_Izvornog_Programa_I_Greske [Compatibility Mode]

Državna matura iz informatike

P1.2 Projektovanje asemblera

Fortran

Funkcije predavač: Nadežda Jakšić

Programiranje 1 drugi kolokvij, 2. veljače Ime i prezime: JMBAG: Upute: Na kolokviju je dozvoljeno koristiti samo pribor za pisanje i brisanje,

ALIP1_udzb_2019.indb

CIJELI BROJEVI 1.) Kako još nazivamo pozitivne cijele brojeve? 1.) Za što je oznaka? 2.) Ispiši skup prirodnih brojeva! 3.) Kako označavamo skup priro

070-ALIP2-udzbenik.indb

Državno natjecanje / Osnove informatike Srednje škole Zadaci U sljedećim pitanjima na odgovore odgovaraš upisivanjem slova koji se nalazi ispred

PROMENLJIVE, TIPOVI PROMENLJIVIH

Pojačavači

Recuva CERT.hr-PUBDOC

8 2 upiti_izvjesca.indd

Uvod u računarstvo 2+2

Microsoft Word - Zadaci za samostalno vjezbanje 4.doc

Osnovi programiranja Beleške sa vežbi Smer Računarstvo i informatika Matematički fakultet, Beograd Jelena Tomašević i Sana Stojanović November 7, 2005

Logičke izjave i logičke funkcije

Tutoring System for Distance Learning of Java Programming Language

Matrice. Algebarske operacije s matricama. - Predavanje I

PowerPoint Presentation

23. siječnja od 13:00 do 14:00 Školsko natjecanje / Osnove informatike Srednje škole RJEŠENJA ZADATAKA S OBJAŠNJENJIMA Sponzori Medijski pokrovi

Računarski praktikum I - Vježbe 09 - this, static

Algoritmi SŠ P1

Teorija skupova - blog.sake.ba

Programiranje 2 0. predavanje Saša Singer web.math.pmf.unizg.hr/~singer PMF Matematički odsjek, Zagreb Prog2 2019, 0. predavanje p. 1/4

knjiga.dvi

Računarski praktikum I - Vježbe 03 - Implementacija strukture string

PASCAL UVOD 2 II razred gimnazije

Uvod u PHP

Microsoft Word - 11 Pokazivaci

Microsoft Word - 02 Elementi programskog jezika Pascal

Infokup - Školsko Osnovne škole Algoritmi BaPaCpp

P1.3 Projektovanje makroasemblera

P11.3 Analiza zivotnog veka, Graf smetnji

1. Vremensko ograničenje Memorijsko ograničenje ulaz izlaz 0,1 s 64 MB standardni ulaz standardni izlaz Banka želi da upozori kupce na sumnjive aktivn

1.1. Programiranje i programski jezici Uvod -pojmovi programa i programiranja prisutni su danas na svakom koraku, pogotovo u masovnim medijima

Programiranje u C-u ili C++-u Pseudo-slučajni brojevi; Dinamička alokacija memorije 1 ZADACI SA ČASA Zadatak 1 Napraviti funkciju koja generišlučajan

Računarski praktikum I - Vježbe 07 - Podstrukture, const, reference

1 jmbag ime i prezime Programiranje 2 prvi kolokvij, Rezultati i uvidi u kolokvije: Rezultati u petak, 3.5., navečer na webu, a uvidi u p

1. OPĆE INFORMACIJE 1.1. Naziv kolegija Programiranje 1.6. Semestar Nositelj kolegija dr.sc. Bruno Trstenjak, v. pred Bodovna vrijednost

Microsoft Word - 15ms261

INF INFORMATIKA INF.27.HR.R.K1.20 INF D-S INF D-S027.indd :50:41

Uvod u računarstvo 2+2

Programiranje 1 3. predavanje Saša Singer web.math.pmf.unizg.hr/~singer PMF Matematički odsjek, Zagreb Prog1 2017, 3. predavanje p. 1/1

Sveučilište u Zagrebu Fakultet prometnih znanosti Zavod za inteligentne transportne sustave Katedra za primijenjeno računarstvo Vježba: #7 Kolegij: Ba

INF INFORMATIKA INF.35.HR.R.K1.24 INF D-S

Kriteriji ocjenjivanja 6razred

Grananje u programu predavač: Nadežda Jakšić

Microsoft Word - IP_Tables_programski_alat.doc

Objektno orjentirano programiranje

PowerPoint Presentation

OpenDNS Family Shield CERT.hr-PUBDOC

0255_Uvod.p65

Sveucilište u Zagrebu

Programiranje 1 3. predavanje prošireno Saša Singer web.math.pmf.unizg.hr/~singer PMF Matematički odsjek, Zagreb Prog1 2018, 3. predava

7. predavanje Vladimir Dananić 14. studenoga Vladimir Dananić () 7. predavanje 14. studenoga / 16

Uvod u takmičarsko programiranje

COMARC/A Format

MJEŠOVITA SREDNJA TEHNIČKA ŠKOLA TRAVNIK PROGRAMIRANJE I PROGRAMSKI JEZICI PROGRAMSKI JEZIK C -SKRIPTA ZA INTERNU UPOTREBU-

1, 2, 3, кодирај! Активности циклуса 4 Пројект «Аркадне игре» - Час 6: Програмирање падања новчића (наставак) Доминантна дисциплина Математикa Резиме

Uvod u računarstvo 2+2

Tutoring System for Distance Learning of Java Programming Language

Microsoft PowerPoint - 13-Funkcije_2.ppt [Compatibility Mode]

Microsoft Word - 6. RAZRED INFORMATIKA.doc

18. ožujka Državno natjecanje / Osnovna škola (6. razred) Primjena algoritama (Basic/Python/Pascal/C/C++) Sadržaj Zadaci... 1 Zadatak: Kineski..

AM_Ple_LegConsolidated

Microsoft PowerPoint - Datoteke [Compatibility Mode]

I grupa 1. Napisati program koji izračunava i ispisuje zbir 4 najveća od pet brojeva unetih sa standardnog ulaza. ulaz izlaz Analiza: 1.

My_P_Trigo_Zbir_Free

Programiranje za UNIX Okruženje unix procesa

PuTTY CERT.hr-PUBDOC

INDIKATOR SVJETLA FUNKCIJE TIPKI 1. Prikazuje se temperatura i parametri upravljanja 2. Crveno svjetlo svijetli kad grijalica grije 3. Indikator zelen

sve.dvi

Računarski praktikum I - Vježbe 11 - Funktori

Microsoft PowerPoint - podatkovni promet za objavu.pptx

Sadržaj 1 Diskretan slučajan vektor Definicija slučajnog vektora Diskretan slučajan vektor

Programiranje 1 IEEE prikaz brojeva sažetak Saša Singer web.math.pmf.unizg.hr/~singer PMF Matematički odsjek, Zagreb Prog1 2018, IEEE p

PowerPoint Presentation

Програмирај!

HxD CERT.hr-PUBDOC

Kako postupiti u slučaju prekida internet veze i nemogućnosti fiskaliziranja računa? U slučaju da dođe do prekida internet veze fiskalizacija računa n

Microsoft PowerPoint - MR - Vjezbe - 03.ppt [Compatibility Mode]

Microsoft Word - CCERT-PUBDOC doc

Drugi kolokvij iz predmeta Operacijski sustavi 2. srpnja Napomene: PISATI ČITKO! Zadatke 7-10 rješavati na ovom papiru ili uz njih napisati "na

УНИВЕРЗИТЕТ У ИСТОЧНОМ САРАЈЕВУ П Р А В И Л А НОРМАТИВНО-ПРАВНЕ ТЕХНИКЕ ЗА ИЗРАДУ OПШТИХ АКАТА УНИВЕРЗИТЕТА У ИСТОЧНОМ САРАЈЕВУ Источно Сарајево, деце

Microsoft Word - predavanje8

kriteriji ocjenjivanja - informatika 8

ЕКОНОМСКИ ФАКУЛТЕТ УНИВЕРЗИТЕТА У ПРИШТИНИ КОСОВСКА МИТРОВИЦА

RAČUNARSKI SISTEM Ne postoji jedinstvena definicija pojma računarski sistem. Računarski sistem predstavlja skup mašina i pridruženih metoda (realizova

Транскрипт:

Osnove inženjerske informatike II. Uvod u programiranje Vaš prvi program K. F. & V. B.

The only way to learn a new programming language is by writing programs in it. Kernighan & Ritchie... and it is well known that a vital ingredient of success is not knowing that what you re attempting can t be done. T. Pratchett Prvi program koji ćemo napisati bit će na zaslon ispisati tekst Goodbye! preći u novi redak Pojmom program označavaju se i izvorni kôd (engl. source code) koji piše programer i izvršni program (engl. executable program) koji računalo može izvesti. Izvorni program napisan u jeziku C++ pohranjuje se najčešće u datoteku sa sufiksima.cc,.cpp ili, ako operacijski sustav razlikuje velika i mala slova,.c (sufiks.c označava programski jezik C), primjerice goodbye.cc, goodbye.cpp ili goodbye.c. Da bi ga računalo moglo izvesti, program treba prevesti u strojni jezik. Izvorni je kôd u jeziku C++: #include<iostream> int main() { cout << "Goodbye!"; cout << endl; return 0; } Nalikuje možda pomalo na crnu magiju. Postupno će, nadamo se, pojedine magične riječi i rituali kojima ih povezujemo u smislene cjeline postajati razumljivijima. Objašnjavanje, medutim, neće teći od retka do retka, slijedom kojim su napisani. Počet ćemo iznutra, izmedu vitičastih zagrada. Uz to, ponešto će ostati nedorečeno pa ćete neke pojedinosti morati zasad jednostavno prihvatiti. Programi napisani u jezicima C i C++ (i ne samo u njima) nizovi su funkcija koje barataju podacima. Funkcije su pak sastavljene od naredbi koje podrobno propisuju postupak izvodenja odredene zadaće. Može se reći da su funkcije aktivni, a podaci pasivni dio programa. U našem smo programčiću napisali samo jednu funkciju: funkciju main(). Naredbe koje neka funkcija main() ili bilo koja druga sadrži ograduju se vitičastim zagradama { i }. (Za znalce Pascala: vitičaste zagrade imaju ulogu ključnih riječi begin i end.) Podatak kojim naša funkcija main() barata doslovno je navedeni niz znakova Goodbye!. Doslovno navedeni nizovi znakova se u kôdu u jezicima C i C++ navode izmedu para dvostrukih gornjih navodnika ". Funkcija main() obično poziva druge funkcije koje umjesto nje obavljaju veći dio posla. U našem primjeru, na prvi pogled, nema pozivâ funkcija. Medutim, izrazi u kojima se pojavljuju ope- 2

ratori prikriveni su pozivi funkcija. I u matematici je, primjerice, zbrajanje, označeno operatorom +, funkcija koja paru brojeva, recimo realnih, pridružuje treći broj: + : R R R, + : (a, b) c = a + b. Operatori samo pružaju nešto sažetiji i čitljiviji zapis. Poput operatora +, i operator << ima dva operanda, 1 ali oni nisu istoga tipa. Označava li operator << ispis, lijevi je operand izlazni tôk, a desni nešto što treba ispisati. Tako u izrazu cout << "Goodbye!" u izlazni tôk izlijevamo niz znakova Goodbye!. Zasad je malo teže objasniti što je točno endl u cout << endl Nećete pogriješiti smatrate li ga nalogom koji od izlaznoga tôk zahtijeva da sljedeći ispis započne u novom retku (endl je skraćeno od end of line, što znači kraj retka ; četvrti je znak u endl slovo l, a ne znamenka 1). Ulaznim i izlaznim tôkovima (engl. input/output stream, I/O stream) struje nizovi znakova kojima su podaci zapisani. Tôkovi povezuju program s tipkovnicom, zaslonom, datotekama podataka... Izlazni tôk cout povezan je najčešće sa zaslonom ili s prozorom koji operacijski sustav pridružuje našem programu. Tôk cout, nalog endl i operator << definirani su u upisno/ispisnom dijelu standardne biblioteke; ne pripadaju, drugim riječima, jezgri jezika C++. Stoga prevodilac ne zna što nazivi cout i endl i niz od dva uzastopna znaka < znače. 2 Da bi ih prevodilac mogao prepoznati, moramo u program, prije nego što ih upotrijebimo, uvesti njihovo značenje. To postižemo uključivanjem standardne datoteka zaglavljâ iostream koja sadrži potrebne informacije o ulaznim i izlaznim tôkovima i o pridruženim operatorima. Datoteku zaglavljâ uključujemo pretprocesorskim nalogom #include koji prevodiocu nalaže da privremeno prekine čitanje tekuće datoteke (naše datoteke goodbye.cc s izvornim kôdom) kako bi pročitao sadržaj datoteke 3 čiji je naziv naveden izmedu < i > (iostream u našem primjeru). Pošto završi čitanje datoteke zaglavljâ, prevodilac nastavlja čitanje početne datoteke u retku koji slijedi iza retka s nalogom #include (to znači da se jednim nalogom #include može uključiti samo jedna datoteka zaglavljâ, te da u jednom retku smije biti samo jedan nalog #include; uz to, # mora u retku biti prvi znak različit od praznine). Na ovom mjestu treba otvoriti poveću zagradu i dati opću, iako površnu i nepotpunu, sliku postupka prevodenja programa. Za različite se operacijske sustave i za različite prevodioce pojedinosti razlikuju, no, okvirno, osnovni su koraci uvijek: 1. Pretprocesor (engl. preprocessor) obraduje takozvane pretprocesorske naloge retke programa koji počinju sa #. 1 Operator s dva operanda dakle, sažetiji način zapisa funkcije dviju varijabli naziva se binarnim operatorom. Uobičajeno pisanje binarnoga operatora izmedu njegovih dvaju operanada je takozvani infiksni zapis. 2 Operator << ima u jeziku C++ nekoliko značenja. Operacija ispisa, rekosmo, nije definirana u jezgri jezika već u standardnoj biblioteci. Osnovno, u jezik ugradeno značenje nije primjenjivo na izlazne tôkove, nego na neke druge tipove operanada; to nas značenje, medutim, ne zanima. 3 Prema standardu jezika standardne datoteke zaglavljâ ne moraju biti posebne datoteke, ali posljedice izvršavanja naloga #include moraju biti takve kao da je datoteka pročitana. 3

2. C++ prevodilac (engl. compiler) prevodi izvorni u ciljni kôd (engl. object code). Ciljna datoteka (najčešće sa sufiksima.o ili.obj) sadrži mješavinu instrukcija u strojnom jeziku i simboličkih informacija kojima se u sljedećem koraku koristi povezivač. 3. Povezivač (engl. linker) ciljnoj datoteci dodaje modul koji omogućava pokretanje programa. Uz to, povezivač će, ako treba, pretražiti standardnu i, možda, neke druge biblioteke (datoteke sa sufiksima.a ili.lib te.so ili.dll; usput, na engleskom je biblioteka library), te u izvršni program ugraditi potrebne cjeline (u našem primjeru modul za ispis). Izvorni se kôd većih programa često dijeli u nekoliko datoteka. Štoviše, neki dijelovi mogu biti napisani u mnemoničkom jeziku (assembler-u) ili u nekom drugom višem programskom jeziku. Povezivač će tada sve ciljne datoteke, nastale prevodenjem tih izvornih datoteka, povezati u jedan izvršni program. O pojedinim koracima obično ne trebate sami voditi računa. Sve će ih umjesto vas izvesti kontrolni program (koji ćemo, kao i do sada, jednostavnosti radi nazivati prevodiocem, a cjelokupni navedeni niz koraka prevodenjem programa). Različiti se prevodioci upotrebljavaju na različite načine. U novije su vrijeme prevodioci uklopljeni u takozvane integrirane razvojne okoline (engl. integrated development environment, IDE). Pojedinosti ćete morati potražiti u priručniku vašega prevodioca. Prije nego što zatvorimo zagradu, još nekoliko riječi o odnosu datoteka zaglavljâ i biblioteka. Datoteke zaglavljâ su sučelja biblioteka, ona samo uvode nazive: tako će prevodilac nakon uključivanja sadržaja datoteke zaglavljâ iostream znati da je cout naziv nekog izlaznoga tôka (to jest, objekta tipa ostream) i da postoji binarni operator << kojemu je izlazni tôk lijevi, a niz znakova desni operand. Ali prevodilac neće znati, ali niti ne mora znati, što taj operator radi i kako to radi, pa čak ni što je zapravo izlazni tôk za njega je i ostream tek naziv izvedenoga tipa. Kôd koji oblikuje izvedene tipove i propisuje stvarni rad funkcija (i operatora) nalazi se, preveden, u bibliotekama. Kad već pričamo o bibliotekama, razjasnit ćemo odmah i redak Biblioteka može imati naziv. Taj naziv označava okružje (namespace) u kojemu se nalaze i u kojem su skriveni svi drugi nazivi koje ta biblioteka uvodi. Takvo skrivanje nazivâ omogućava autorima različitih biblioteka da različite stvari nazovu istim imenima; tako naziv vector, koji u standardnoj biblioteci označava niz, može u nekoj matematičkoj biblioteci označavati tip koji je bliži pojmu vektora poznatom iz linearne algebre. Okružje standardne biblioteke nazvano je std. Budući da su nazivi iz standardne biblioteke skriveni u njezinom okružju, akoli želimo upotrijebiti ono što imenuju, moramo navesti i naziv biblioteke: primjerice, std::cout ili std::endl. Potrebu za stalnim navodenjem prefiksa std:: možemo izbjeći tako da naredbom u program uvedemo sve nazive iz standardne biblioteke. Treba napomenuti da to baš i nije najbolji način dohvaćanja naziva iz standardne biblioteke, jer njime uvodimo sve nazive, one koje ćemo upotrijebiti, ali i one koji nam neće trebati, a time otvaramo vrata mogućnosti sudara istih nazivâ. No, u manjim programima, posebice ako upotrebljamo samo standardnu biblioteku, taj se način, kao najjednostavniji, može primjenjivati. Manje je opasno izrijekom navesti samo one nazive koje ćemo 4

zaista trebati: using std::cout; using std::endl; Napokon se možemo vratiti našem programu i izrazu cout << "Goodbye!". Kao što operator zbrajanja + paru brojeva pridružuje broj njihov zbroj, tako i operator << svojim operandima pridružuje rezultat operacije; u (pseudo)matematičkom zapisu: << : ostream niz znakova ostream, << : ( cout, "Goodbye!" ) cout. Operator <<, dakle, kao rezultat operacije vraća svoj lijevi operand, izlazni tôk. omogućava uzastopnu primjenu operatora <<: cout << "Goodbye!" << endl. Prevodilac prethodni izraz interpretira kao ( cout << "Goodbye!" ) << endl. Ta činjenica Prvo se izvodi operacija u zagradama. Njen je rezultat lijevi operand, tôk cout. Taj tôk postaje potom lijevim operandom u sljedećoj primjeni operatora <<, u kojoj je desni operand endl. Prema tome, naš programčić možemo napisati i u malo sažetijem obliku: #include<iostream> int main() { cout << "Goodbye!" << endl; return 0; } Postoji još jedna važna razlika izmedu operatora zbrajanja + i operatora za ispis <<. Dok operator +, kao i drugi aritmetički operatori, samo vraća neki rezultat, operator << ima i popratni učinak ispis na zaslon ili u prozor. Štoviše, operator << primjenjujemo upravo zbog njegova popratnog učinka (to da taj operator vraća izlazni tôk tek je pogodnost koja omogućava sažetiji zapis niza operacija). Popratnim učinkom (engl. side effect) nazivamo promjenu u stanju okoline u kojoj se program izvodi; tako operator za ispis mijenja prikaz na zaslonu ili u prozoru. U nastavku ćemo se često se susretati s još jednim operatorom koji se primjenjuje ponajprije zbog popratnoga učinka: s operatorom pridruživanja = koji varijabli pridružuje vrijednost; on, dakle, mijenja sadržaj memorijskoga prostora koji je pridružen varijabli. Aritmetički pak operatori ništa ne mijenjaju; rezultat operacije tek treba ispisati ili pridružiti nekoj varijabli. Vrijeme je da obratite pozornost i na točke sa zarezom (;) na krajevima redaka u funkciji main(). Dok je izraz, cout << "Goodbye!" << endl cout << "Goodbye!" << endl; 5

je naredba. Izraz je zapis operacije, a naredba je zahtjev za njenim izvodenjem. Izraz postaje postaje naredbom tek kad na njegovu kraju napišete točku sa zarezom. (U jeziku C++ se, kao i u jezicima C i Pascal, a za razliku od Fortrana, nekoliko naredbi može navesti u jednom retku ili se jedna naredba može protegnuti kroz nekoliko redaka, bez posebne oznake za nastavljanje. No, dok u Pascalu razdvaja naredbe, točka sa zarezom u C/C++-u završava naredbu; prema tome, iza svake naredbe, pa i ako je jedina, ili posljednja u nizu, mora biti točka sa zarezom.) Jedinu funkciju u našem programu, koju smo sami napisali, nismo slučajno nazvali main(). Ona zaista jest glavna funkcija: svaki C/C++ program mora imati jednu, i samo jednu, funkciju main(). Program se počinje izvoditi na njezinu početku. Početak definicije funkcije, prije otvorene vitičaste zagrade {, nazivamo njezinim zaglavljem. Sastavljeno je od tri dijela: naziva funkcije, deklaracija njezinih parametara, navedenih izmedu okruglih zagrada, i tipa njezine vrijednosti (ne u navedenom redoslijedu). U zaglavlju double power (double x, int n) power je naziv funkcije, double x i int n (unutar zagrada) deklaracije su parametara, a double lijevo od naziva funkcije tip je njezine vrijednosti. Vrijednost funkcije je vrijednost koju funkcija vraća kao rezultat izvodenja. Tako naša funkcija power() izračunava i vraća broj y = xn (u zapisu s pokretnim zarezom, uz dvostruku točnost). Tip vrijednosti funkcije u programu odgovara kodomeni matematičke funkcije, a tipovi parametara odgovaraju njezinoj domeni: power : R Z R (ipak, to je površna analogija: tipovi int i double nisu skupovi cijelih i realnih brojeva, nego tek njihovi konačni, vrlo ograničeni podskupovi). Kako u zaglavlju funkcije main(), int main(), izmedu zagrada nema ničega, podrobniju priču o deklaracijama parametara možemo odložiti za kasnije. Prazne zagrade znače da funkcija nema parametara; u matematičkoj analogiji main : Z. Ipak, zagrade moraju postojati tek s njima main postaje nazivom funkcije. Vrijednost je naše funkcije main tipa int; ta vrijednost mora biti tipa int, standard jezika ne dopušta niti jedan drugi tip vrijednosti. Tu vrijednost prevedeni program nakon izvodenja vraća operacijskom sustavu (ili nekom drugom programu koji ga je pokrenuo) kao izvještaj o uspješnosti izvodenja. Dogovorno, vrijednost 0 znači da je sve u redu; bilo koja druga vrijednost znači da je nešto pošlo krivo. Vrijednost se iz funkcije vraća naredbom return. Pritom se prekida izvodenje funkcije te upravljanje preuzima okolina koja je pozvala funkciju, u našem slučaju operacijski sustav. 6