of 153/153

C++ programiranje za srednje škole

  • View
    797

  • Download
    46

Embed Size (px)

Text of C++ programiranje za srednje škole

SADRAJ

1. Openito o programima i programskim jezicima1.1. Ljudi i raunari...................................................................................................................6 1.2. Podjela programskih jezika..................................................................................................7

2. Programski Pristup2.1. O proceduralnom i neprceduralno programiranju ...............................................................10 2.2. Osn ov e f az e raz voja p rog ramiran ja . .. ... ..... .... ... ... .. . .... . .. ... ... .... ... ... ... .... ... 1 2

3 .Algoritmi3.1.Uvod u algoritme ..........................................................................................................13 3.2.Dijagram toka ..................................................................................................................14 3.3.Pravolinijske algoritamske strukture.....................................................................................18 3.4.Grananje..........................................................................................................................19 3.5.Petlje...............................................................................................................................23

4. Pseudo Jezik4.1.Varijable..........................................................................................................................28 4.2. Operatori........................................................................................................................29 4.3.Funkcije...........................................................................................................................33

5 .Kako zapoeti?5 . 1.M S Vis ual C++.. .... ... ... ... .... ... ... ... .... ... ... ... . ... ... ... ... .... ... ... ... .... .. . ... ... . ... .3 4 5.2.Programski paket DEV C++..............................................................................................37 Pitanja za utvrivanje ......................................................................................................41

6.Uvod u C++6.1 Proces kompajliranja. .......................................................................................................42 6.2. Rijei u C++ programskom jeziku ......................................................................................44 6.3.Struktura programa...........................................................................................................45 6.4. Varijable .........................................................................................................................47 6.5. Memorija ........................................................................................................................48 6.6. Ulazno/izlazni usmjerivai toka ..........................................................................................49 6.7. Komentari .....................................................................................................................50

C++ programiranje za srednje kole prof.Smajo Meki

2

6.8. Imena (identifikatori) .......................................................................................................51 6.9. Tipovi podataka ...............................................................................................................52 Pitanja za utvrivanje .............................................................................................................55

7.Operatori7.1 Aritmetiki operatori .......................................................................................................56 7.2 Relacijski operatori .....................................................................................................58 7.3 Logiki operatori .............................................................................................................59 7.4 Bitovni operatori .............................................................................................................59 7.5 Inkrementalni i dekrementalni operatori .............................................................................59 7.6 Operatori pridruivanja .....................................................................................................60 7.7 Operator razdvajanja (zarez-operator) ...............................................................................61 7.8 typedef imena ................................................................................................................61 7.9 sizeof operator ...............................................................................................................62 7.10 Hijerarhija operatora ......................................................................................................62 Pitanja za utvrivanje ............................................................................................................63

8.Naredbe8.1 Jednostavne i sloene naredbe ...........................................................................................64 8.2 Naredba if........................................................................................................................66 8.3 Naredba switch-case .........................................................................................................72 8.4 Naredba for .....................................................................................................................75 8.5 Naredba while . ................................................................................................................78 8.6 Naredba do ......................................................................................................................79 Pitanja za utvrivanje .............................................................................................................81

9. FunkcijeC++ programiranje za srednje kole prof.Smajo Meki 9.1. Definicija ........................................................................................................................81 9.2. Parametri i argumenti ......................................................................................................84 9.3. Globalne i lokalne varijable ...............................................................................................85 9.4 Rekurzivne funkcije ..........................................................................................................86 Pitanja za utvrivanje ..........................................................................................................87

10. Polja (Arrays ),nizovi10.1. Jednodimenzionalni niz ...................................................................................................87 10.2. Deklaracija niza..............................................................................................................88 10.3.Inicijalizacija niza............................................................................................................89 10.4.Pristup elementima niza...................................................................................................91 10.5.Multidimenzionalna polja(nizovi)........................................................................................94 Pitanja za utvrivanje ........................................................................................................96

3

11. Pointeri11.1. Osnovno o pointerima ....................................................................................................97 11.2. Dinamika memorija ......................................................................................................97 11.3. Pointeri i polja ...............................................................................................................99 11.4. Aritmetika sa pointerima .................................................................................................99 11.5. Funkcijski pointeri ........................................................................................................101 Pitanja za utvrivanje ........................................................................................................102

12. Datoteke12.1. Standardna biblioteka fstream .......................................................................................103 12.2. Otvaranje datoteka ......................................................................................................103 12.3. Zatvaranje datoteka .....................................................................................................107 12.4. Pisanje na datoteke ......................................................................................................108 12.5. itanje sa datoteka ......................................................................................................110 Pitanja za utvrivanje ........................................................................................................113

13.Zbirka zadataka

113

14.Rjeenja

123C++ programiranje za srednje kole prof.Smajo Meki

Literatura

157

4

Kratka biografija autora Dipl.prof.Informatike Smajo(Irfana)Meki- zv.Smayson- roen 01.01.1972.u G.Bukovici Travnik; Srednju tehniku kolu zavrio u Zenici,Nastavniki fakultet zavrio na Univerzitetu emal Bijedi u Mostaru,nastavio studij na Panevropskom Univerzitetu Apeiron na FIT-u(Fakultet Informacionih Tehnologija) u Banjaluci smjer nastavnika informatiku gdje dobiva zvanje Diplomirani profesor Informatike,Specijalistiki studio zavrio na istom fakultetu,a Diplomski/Specijalistiki rad na temu Poreenje Pascala i C++ u nastavnom procesu odbranio pred akademikom dr.Zoran..Avramovi dipl.ing.elektrotehnike. Oenjen, otac etiri sina,trenutno nastanjen na Kalibunaru-Travnik, uposlen u Mjeovitim srednjim kolama Busovaa i Vitez.

Rje autora Autor ove knjige je pokuao na osnovu jako puno literature, dostupne u raznim formatima i na mnogim jezicima, na temu C++ programiranje , da u skladu sa nastavnim planom i programom za srednje kole izdvoji i obradi osnovne teme iz ove oblasti.Teme su uraene uz potovanje pedagokih nastavni principa.Cilj ove knjige je lake shvatanje predvienog gradiva ,postupno rjeavanja zadataka ,stjecanje rutina,navika,upornosti,preciznosti,analize i sinteze....Ovu knjigu prati projekat u html-u C++ programiranje za srednje kole na www.mssbusovaca.com.ba. ,takoer je u pripremi muldimedijalni DVD koji prati ovu knjigu. Uraeni materijal moe biti od koristi za sve one koji ele da naine prve korake u programiranju u programskom jeziku C++.Knjiga predstavlja radnu verziju i podlona je izmjenama,dopunama te se kao takva koristi interno i nije planirana komercijalizacija i umnoavanje.Zbirka rijeenih zadataka ima za cilj da motivie uenike za rad analizu,sintezu,da pokuaju da urade rjeenja na drugi nain. Autor je naveo koritene izvore za ovaj projekat,izvore nekih od tema je naveo kroz footnote, tako da je u potpunosti zatitio autorska prava navedene literature. Autor zahvaljuje menadmentima Mjeovite srednje kole Busovaa, direktoru Admiru Hodiu i menadmentu Mjeovite srednje kole Vitez direktor Hrusti Seadu na razumjevanju i podrci za ovaj projekat. Neke ideje,sugestije i primjedbe koje su ugraene u ovu knjigu predloili su moji dragi prijatelji; Dipl.prof. informatike Almin Halilovi, Prof.informatike i matematike Junuz Junuzovi, Dipl.ing.mainstva prof.abanovi Latif, Prof.Haski Selvedin.

C++ programiranje za srednje kole prof.Smajo Meki

5

1.Openito o programima i programskim jezicimaS programiranjem se danas susreete posvuda - bilo da programirate snimanje na videorekarderu, koristite mainu za pranje vea, vozite neki noviji automobil, koristite mobitel ili jednostavno programirate na raunaru. Zahvaljujui programiranju svijet je danas podesiv i prilagodljiv.I zato je dobro znati programirati. U ovom kratkom pregledu neemo odmah uskoiti u programiranje sistema za nadzor svemirske letjelice, ali ete razumjeti na emu se programiranje zasniva i kako funkcionira. 1 .1 . Ljud i i ra unar i Prosjeni raunar ba i nije pametna naprava . Ono nema mogunost samostalnog odluivanja, zakljuivanja , nema ono po emu se ljudi razlikuju od svih ostalih - pamet i iskustvo.Da bismo natjerali raunar da radi ono to mi elimo, moramo ga tome nauiti. Budui da raunari ne znaju samostalno misliti , programeri moraju u njih ugraditi upustva koji im govore to trebaju raditi.U situaciji slinoj programerovoj nalazi se roditelj kada svoje dijete eli nauiti jesti kaikom.Dijete je u ovom sluaju, slino kao i raunar , "prazna ploa" - treba ga nuiti i najsitnijim detaljima. Dijete prvo mora podii kaiku (ali da ne prospe njen sadraj), prinijeti je ustima, paziti da u kaici juha nije prevrua , otvoriti usta, staviti kaiku u usta (a ne pored usta), progutati sadraj kaike (ali ne i kaiku). Zapravo, ovo uope nije jednostavan postupak.Tako je i s raunarima. Njih takoer treba nauiti da rade ono to bismo mi eljeli. No ovdje je problem malo vei nego s djetetom jer raunari komuniciraju na razne naine - koriste, tj. razumiju razliite raunarske jezike. R aun ari ok o n as Danas se raunar nalazi u svakom novijem automobilu,u svakom mobitelu, ak i u najobinijem televizoru ili videorekorderu. Svi ti ureaji u sebi sadre raunar koji ima je potrebno naloiti to da rade. Tako e se televizor sam iskljuiti nakon nekog vremena,ako mu vi tako zadate, videorekorder e u 20:15 snimiti utakmicu na drugom programu u trajanju od 120 minuta, maina za pranje rublja e ukljuiti program za pranje osjetljivog rublja,a automobil e upotrijebiti neki od ugraenih sistema za sprjeavanje zanoenja na cesti. Spomenimo i obine line raunare. Oni su sposobnI obavljati mnogo kompliciraniji skup radnji nego raunari ugraenI u npr. kuanske ureaje. Unato tome, svi raunari imaju jednu zajedniku injenicu - ne mogu samostalno zakljuivati i donositi odluke. Zato im programer treba rei ta da rade. Programer to ini koristei poseban programski jezik i posebne naredbe pomou kojih komunicira s raunarom i opisuje mu to i kako treba raditi .Raunarski program je skup naredbi koji govori raunaru na koji nain da obavi odreeni zadatak. Tekst programa koji je itljiv programeru i korisniku zove se izvorni kod programa, dok je izvrna verzija programa binarna, i moe je itati i izvoditi samo raunar. Programski jezik je skup leksikih, sintaksnih i semantikih pravila koja uobliuju strogu strukturu pisanja izvornog koda. Svaki program sastoji se od naredbi. Naredbe se sastoje, u ovisnosti o programskom jeziku, od izraza, konstanti, identifikatora i poziva.Openito postoji vie nivoa programskih jezika, i podijeljeni su u generacije jezika. Do danas postoje jezici od prve do pete generacije, no to nije jedina podjela programskih jezika, oni se takoer razlikuju po namjeni, nainu izvravanja, strukturiranosti i proceduralnosti.1 1 .2 .Pod je l a pro gram sk ih jez i ka

1

Preuzeto i obraeno iz knjige Informatika i raunarstvo

C++ programiranje za srednje kole prof.Smajo Meki

6

Pod je la pr ogram sk i h jez ika po namje ni : Programski jezici za numerike probleme Programski jezici za poslovne probleme Programski jezici temeljeni na listama i nizovima Vienamjenski jezici (u ovu skupinu spadaju .NET jezici) Pod je la po na i nu i zvoe n ja : Imperativni postiu funkcionalnost pridruivanjem vrijednosti i njihovim ispitivanjem, te skokovima (Ada, C, FORTRAN, Pascal) Funkcionalni jezici ne postoji pridruivanje, temelje se na funkcijama i listama (Lisp, ML, LOGO) Ciljno orijentirani jezici temelje se na izvravanju upita, dok nain na koji se on izvrava ostaje sakriven (Sql, Prolog) Objektno orijentirani jezici temelje se na manipulaciji objektima (VB 6.0) Hibridni jezici u ovu grupu spadaju .NET jezici i C++

P o st ruk tu ri ran os ti jez ic i mog u b it i s truk tu riran i i n es t ruktu riran i . P o p roc edu raln osti mogu b it i p roc edu raln i i n ep roc edu ralni . Podjela programskih jezika po generacijama generacijsku podjelu danas smatraju najbitnijom. Jezici p rve ge nera ci je temelje se na mainskom jeziku, tj. kodovima naredbi koje izvodi direktno sam procesor. Programi su napisani u binarnim kodovima, i vrlo su neitljivi. Kasnije su dodani simbolini nazivi naredbama, no skokovi su bili izvedeni prema hardverskim adresama koje su zadane brojem.

Primjer programa u mainskom kodu:

C++ programiranje za srednje kole prof.Smajo Meki

7

Zanimljivo je to se i danas svaki program na kraju svodi na ovaj nivo, jer to je jedini oblik programa koji raunar razumije. Za prevoenje jezika vieg nivoa jezike nieg nivoa koriste se programi zvani p revod ioci ili comp il er i . D rug u ge ne rac i ju programskih jezika predstavljaju simboliki programski jezici ili Assembli. Od jezika prve generacije razlikuje se u tome to su uvedena simbolika imena adresa (labeli) i jednostavniji pristup adresiranjima putem mnemonikih kodova pojedinih naredbi. Mnenonik ili mnemoniki kod je simboliki prikaz binarne naredbe, npr. Naredba 001011 predstavlja se mnemonikom MOV. Primjer programa pisanog u jeziku druge generacije:

C++ programiranje za srednje kole prof.Smajo Meki

Programski jezici t r e e ge ne ra ci je temelje se na proceduralnoj paradigmi, tj. program se izvodi putem pozivanja procedura, osim samo jednostavnog dodjeljivanja vrijednosti i njihovog ispitivanja. Ovakvi jezici prevode se u jezike niih nivoa da bi se mogli izvoditi, i esto jedna naredba jezika ovog nivoa predstavlja mnogo naredbi jezika nieg nivoa. Uneseno je razrjeivanje izraza i prevodioc vri niz analiza koje olakavaju pisanje programa i ispravljanja greaka. U ovu grupu pripadaju jezici C, Pascal i drugi. Primjer jezika pisanog u jeziku tree generaci:

8

Jezici e tvr te g enera c i je temelje se uglavnom na objektno orijentiranoj paradigmi, te raznim generatorima koda i korisnikim interfejsom. Ovi jezici su obino kombinacija raznih alata, tako da je veina napornih i dugotrajnih postupaka automatizirana i pojednostavljena. U ovu grupu pripadaju .NET jezici, Java, Delphi itd. Program napisan u jeziku etvrte generacije predstavlja alat za brzu i jednostavnu izradu svih vrsta aplikacija. Primjer aplikacije u jeziku 4. generacije:

Jezici p e te ge ne raci je su uglavnom usko specijalizirani jezici koji esto kreiraju cijele aplikacije potpuno automatski putem raznih Wizarda i slino. Razvoj ovakvih jezika je u poetnoj fazi.

2. Programski pristup

C++ programiranje za srednje kole prof.Smajo Meki

9

2 .1 . O proced ura ln om p r og rami ran ju Za bilo koji problem vjerovatno postoji jednako puno naina da se isti analizira i rijei . Tako se sa programerskog aspekta, na primjer, problem moe podijeliti (dekompozirati) algoritamski ili proceduralno, tj. u odnosu na sekvencu ili proceduru dogaaja koji se moraju desiti. Alternativno, problem se moe rijeiti pomou "objektno-orijentisanog"pristupa, posmatrajui razne cjeline koje utjeu jedne na druge i uzimajui u obzir njihovo meusobno djelovanje. Ova dva pristupa u dekompoziranju problema algoritamski i objektno-orijentisani su dva pristupa koji programeri najee koriste. Pristupi su figurativno prikazani na Sl.2.1. Algoritamski pristup poinje optim zadatkom koji treba izvriti (kao to je "omoguiti korisniku da izvri opte bankarske funkcije"), zatim dijeli opti zadatak na naredne nivoe specificiranijih podzadataka (kao to je "proces podizanja novca", te "proces stavljanja depozita"), te na dalje nivoe jo specifinijih zadataka (kao to su "upitaj korisnika na vrijednost depozita" ili "verifikuj unesenu vrijednost kao vaeu").

Slika 2.1: Dva pristupa u dekompoziranju problema

10

C++ programiranje za srednje kole prof.Smajo Meki

Slika 2.2: Algoritamska dekompozicija problema Kada se zadatak prikae u obliku dijagrama, najoptiji zadatak je obino na vrhu, a najspecifiniji zadaci se granaju prema dnu. Razni pravougaonici u takvom "stablu" odgovaraju raznim procedurama i podprocedurama koje treba programirati, kao to je prikazano na Sl.2.2. Algoritamske ili proceduralne metode u dizajniranju softvera su razvijene u kasnim 60tim kako bi se ukazalo na probleme u kojem se u to vrijeme nalazilo opte stanje u razvijanju softvera. Poto su novi pristupi omoguili strukturni pristup programiranju (u odnosu na haotini "hack and run" pristup, koji su koristili neki programeri), moe se naii i na podatak da se algoritamski ili proceduralni pristup programiranju zove "strukturno programiranje". S obzirom da ovaj pristup poinje na vrhu (opti zadatak koji treba izvriti) i dijeli najvii zadatak na naredne nivoe specifinijih podzadataka prema dnu,ovaj pristup se ponekad naziva i "top-down" pristup. Neki autori ga zovu i proceduralni pristup, imajui u vidu da se algoritamski pristup fokusira na procedure koje izvravaju zadatak. Dakle, ovaj pristup dizajniranju softvera ima razliite nazive, i to: Funkcionalna dekompozicija Algoritamska dekompozicija Strukturno programiranje "top-down" programiranje proceduralno programiranje Bez obzira na naziv, ovaj pristup se fokusira na funkcionalnost programa,poinjui sa vrha (najoptija funkcija), i idui prema dnu ka najspecifinijim funkcijama. Mnogi programeri i danas koriste ovaj pristup, a jo uvijek je koristan za izradu kvalitetnih softvera , naroito za manje programe ili softverske module. Bez obzira na injenicu da je C++ u osnovi OOP jezik, ovaj tekst se bavi osnovama C++ sintakse u oblasti proceduralnog programiranja, kao uvod u OOP paradigmu. Nep ro ced ura lno p rogram ira n je Ovaj pristup programiranju temelji se na slijednom izvoenju nekog programa. Uglavnom se sastoji od jednostavnog niza naredbi gdje je izvedeno grananje putem goto ili sline naredbe. Ne postoje pozivi metoda i funkcija. Ovi jezici su zastarjeli i nedovoljno razvijeni za dananje potrebe.

Modularno programiranje

11

C++ programiranje za srednje kole prof.Smajo Meki

Modularno programiranje omoguava fragmentaciju koda na module koji mogu biti pisani u razliitim datotekama, i tako pojednostavljuje programe i poveava njihovu itljivost. Unesen je pojam dijeljenja koda izmeu aplikacija. 2 .2 .O snove faze razvo ja prog rami ran ja Analiza problema Postavljanje modela Izrada algoritma Izrada dijagrama toka Kodiranje programa Prevoenje programa Testiranje programa Dokumentiranje programa Eksploatacija programa Svrha programa je rjeavanje problema, najei nain rjeavanja je pomou tri modela model podataka model procesa i model resursa. Model podataka sadri definiciju podataka (nazive, vrste, dimenzije, ogranienja vrijednosti...) te strukture podataka (nizovi, skupovi, datoteke, tablice...). Model procesa moe biti prikazan razliitim tehnikama (dijagram toka, dijagram strukture procesa, dijagrami akcija....), ali svi oni, na svoj nain, prikazuju slijed odvijanja procesa. Model resursa sadri definiciju raunarskih resursa i njihovih svojstva (operativni sistem, vrsta programskog prevodioca, svojstva jedinica raunara...) koje su potrebne da bi program uredno radio.

MODEL RESURSA

MODEL PODATAKA

MODEL PROCESA

ema rijeavanja problema

12

C++ programiranje za srednje kole prof.Smajo Meki

3.Algoritmi3.1.Uvod u algoritam Priu o algoritmima zapoeti emo onako kako poinju sve klasine prie.Nekada davno ivio je u Bagdadu pisac, matematiar, astronom i geograf po imenu Muhammed ibn Musa al Khowarizmi .Vjerojatno nije niti sanjao tamo daleke 852. godine kada je pisao knjigu Kitab al jabr w'al-muqubala da e od toga nastati ak dva uzroka glavobolje uenicima deset-jedanaest vijekova nakon toga. Njegov al jabr je postala algebra. Isto tako pravila rjeavanja iz poetka prvenstveno matematiki problema su iskrivljavanjem imena al Khowarizmi nazivana algoritmi. No, tu grekama nije kraj. Prema korijenu rijei bilo bi pravilno umjesto algoritmi koristiti algorizmi. Ali kako jezik nije nauka nego skup dogovora, izgleda da je dogovoreno da najee greke postaju jezika pravila.Tako mi danas imamo algoritme, a oni su niz preciznih uputa koje nas korak po korak vode do rjeenja nekog problema.To su zapravo toliko precizne upute da za njihovo izvravanje nije potrebna inteligencija.Zato bi se mi bavili stvarima za koje ne treba nimalo pameti?Zato to izrada algoritma u programiranju prethodi samom pisanju programa. Pri pisanju programa prvo nam mora biti jasno to se zapravo od programa oekuje.Kao i kod rjeavanja zadataka u bilo kom podruju prvo moramo znati postaviti problem.Drugi korak je gruba skica rjeenja.Trei korak je izrada algoritma. Ako smo dobro napravili algoritam, tada pisanje programa nije nita drugo negoli prepisivanje algoritma u neki programski jezik.Kada smo to uinili dobili smo program, a program "tjera" raunar da radi ono to mi zapravo elimo.Neko je rekao da je raunar idiot velike brzine. To je ustvari bit prie o algoritmima. Mi put do rjeenja moramo toliko rascjepkati i detaljno napisati da bi ga mogao razumjeti i taj "idiot velike brzine".Drugim rijeima, upute moraju biti jednostavne i precizne tako da ih moe izvravati i maina. Pokuajte se sjetiti gdje ste zadnji put proitali neko detaljno uputstvo. Moda vam je i bilo u rukama,ali niste itali jer to ve znate napamet, kao npr.Dopuniti raun mobitela putem bona.Ili moda da probamo obrnuto. Da li ste se nedavno nali u situaciji da niste neto znali napraviti jer su upute bile toliko loe i nerazumljive ili uope niste imali upute? U svakodnevnom ivotu smo zapravo stalno u doticaju s algoritmima, a esto i postupamo po algoritmima da toga nismo niti svjesni. Znati "algoritamski" razmiljati dobro je bez obzira bavili se vi poslije programiranjem ili ne. Pojam algoritama (dijagram toka) je jedan od najstarijih i najvanijih pojomova u matematici. Teko je da se precizno definie algoritma, jer pripada grupi osnovnih pojmova kao to su skup ili taka. U poetku algoritmom se nazivaju samo pravila raunanja s brojevima, kasnije i pravila obavljanja ostalih zadataka u matematici, u XX vjeku, pojavom raunara, pojam se proiruje na informatiku, a zatim i na druga podruja. Precizan opis svih pravila i postupaka potrebnih za postizanje eljenog rezultata. Evo nekih definicija koje blie opisuju algoritam. Definicija 1. Algoritam je taan opte razumljiv propis koji definie proces transformacije poetnih podataka u traeni rezultat. Definicija 2. Algoritam je taan propis o tome koje operacije nad kojim brojevima i u kom redosljedu treba izvriti da bi se rjeili svi zadaci nekog zadatog tipa. C++ programiranje za srednje kole prof.Smajo Meki

Definicija 3.

13

Algoritam je precizan,ureeni i nedvosmisleni niz koraka koji u konanom vremenu vodi do rjeavanja problema ako problem ima rjeenje,odnosno u konanom vremenu kae da nema rjeenja ako problem nema rjeenja. Definicija 4. Algoritam je konani skup pravila koja daju redosljed operacija za rjeavanje specifinog problema. Najbitnije osobine algoritma su: Odreenost- je osobina algoritma da za iste poetne podatke daje uvjek iste rezultate. Razumljivost. -algoritam treba da bude razumljiv ovo je relativni pojam i zavisi od nivoa obrazovanja korisnika. Masovnost- je osobina algoritma da se mogu rjeavati svi zadaci istog tipa. Rezultativnost- je osobina algoritma da on mora da vodi ka rjeenju zadatka ako su poetni podaci iz skupa moguih podataka. Konanost- je osobina algoritma da se algoritam realizuje sa konano mnogo koraka. Pri tome ta konanost treba da je ostvarljiva, tj. da moe da se realizuje za neko razumno vrijeme.

Primjer algoritma Bilo koji problem se moe rijeiti izvravanjem serije akcija u odreenom redosljedu. Akcije koje e se izvriti i redosljed u kojem e se to odvijati nazivamo algoritam. Iskustvo pokazuje da je najtei dio rijeavanja programerskog problema na raunaru upravo razvijanje algoritma za rijeenje. Jednom kad je odreen ispravan algoritam, razvoj programa za sam alorgitam je poprilino jednostavan. Sljedei primjer pokazuje korektan i nekorektan sljed dogaaja za algoritam kojim elimo opisati pokretanje automobila:

KOREKTAN SLIJED: otkljuavanje automobila sjedanje u automobil paljenje motora otputanje rune konice pokretanje automobila zaustavljanje

NEKOREKTAN SLIJED:

3 .2 .D ijagra m toka (f lowc har t) Dijagram toka je sredstvo za vizualnu prezentaciju toka podataka, operacija koje se izvode, te slijeda (sekvenca) kojim se navedene operacije izvode u informacijskom sistemu. Crtanje dijagrama toka je jedna od faza rjeavanja problema i uvelike olakava pisanje programskog koda. Pri crtanju dijagrama toka potrebno je slijediti odreena upustva, te koristiti standardne simbole koje je propisao American National Standard Institute. Znaaj dijagrama toka

14

C++ programiranje za srednje kole prof.Smajo Meki

otkljuavanje automobila sjedanje u automobil paljenje motora pokretanje automobila zaustavljanje otputanje rune konice

Dijagram toka je reprezentacija kojom ilustrirate sekvencu operacija koje je potrebno izvriti kako bi se dolo do rjeenja problema. Dijagram toka se crta u ranoj fazi formuliranja kompjuterskog rjeenja. Dijagram toka olakava komunikaciju izmeu programera i poslovnih ljudi. Takoe,dijagram toka igra znaajnu ulogu u procesu programiranja jer olakava razumijevanje logike kompliciranih i opsenih problema. Jednom kad ste nacrtali dijagram toka postaje jednostavno napisati program u bilo kojem programskom jeziku. Vrlo esto je nemogue objasniti logiku programa bez dijagrama toka. Osim toga,dijagram toka je neizostavan dio dokumentacije bilo kojeg programa. Smjernice za crtanje dijagrama toka Za crtanje dijagrama toka koriste se standardni simboli. Neke od esto koritenih simbola moete pogledati u sljedeoj tabeli:

15

C++ programiranje za srednje kole prof.Smajo Meki

Za unos i ispis podataka vrlo esto se koristi paralelogram Pravila za crtanje dijagrama toka: Da bi ste nacrtali korektan dijagram toka, potrebno je napraviti popis svih zahtijeva.Dijagram toka treba biti pregledan i jednostavna za pratiti.Dijagram toka treba biti jednoznaan (ne smije kod osobe koja ga gleda izazivati vieznane konotacije). Uobiajen smjer toka je s lijeva na desno ili odozgo prema dolje.U dijagramu toka kad je u pitanju simbol za procesiranje moe postojati samo jedan izlaz Podataka C++ programiranje za srednje kole prof.Smajo Meki

Kad je u pitanju simbol odluke moe postojati samo jedan ulaz podataka, ali mogu postojati dva ili tri izlaza podataka (jedan za svaki mogui odgovor).

16

Terminalni simbol (start, kraj) takoder moe imati samo jedan ulazno, odnosno jedan izlazni tok podataka.

Ukoliko elite jasnije opisati podatke ili korake koristite simbol za napomene/komentare (annotation symbol).

Ogranienja Kompleksnost Ponekad je problem kompleksan, pa je i dijagram toka kojim ga pokuavate predstaviti kompleksan i nezgrapan. Alternative i odravanje( U sluaju potrebe za alternativnim rjeenjima vrlo esto je neophodno dijagram toka nacrtati ponovno (iz poetka).

3 .3 . Pravo linijska a lgor i tam ska s tru kt ura

17

C++ programiranje za srednje kole prof.Smajo Meki

Ukoliko je dijagram toka kompleksan bolje je koristiti simbole konektora kako bi ste reducirati broj linija toka. Izbjegavajte presijecanje (krianje) linija. Vodite rauna da vam dijagram toka ima logian poetak i kraj. Prednosti Prednosti dijagrama toka su: Komunikacija(Dijagram toka olakava komunikaciju svih koji su zainteresirani za rjeavanje problema). Efektivna analiza(Uz pomo dijagrama toka problem se moe efektivnije analizirati). Odgovarajua dokumentacija( Dijagram toka je dio obavezne programske dokumentacije, koja moe sluiti u razliite svrhe). Efikasno kodiranje( Korektan dijagram toka olakava pisanje programa (bez obzira u kojem programskom jeziku). Otklanjanje greaka( Dijagram toka olakava pronalaenje greaka). Efikasno odravanje programa( Olakava odravanje programa).

Iz osnovne kole sjeamo se da je brzina nekog tijela zapravo prijeeni put u jedinici vremena. Matematiki bismo to zapisali kao V = s / t, gdje je V brzina, s prijeeni put i t vrijeme. To je tako jednostavno da nam nije potrebna nikakva priprema i gruba skica rjeenja. Moemo odmah raditi algoritam.

Za vjebu: Pokuajmo prema ovom primjeru nacrtati dijagram toka za izraunavanje povrine pravougaonika, a zatim dijagram za izraunavanje obima pravougaonika. Evo jo jednog primjera za izraunavanje obima i povrinu kruga. Kako na tastaturi nemamo na raspolaganju grka slova, nau formulu za izraunavanje obima pisati emo kao O = 2 * r * Pi. Isto tako za sada jo ne znamo funkciju za kvadriranje pa emo formulu za povrinu kruga pisati ovako: P = r * r * Pi gdje je r * r zapravo r2. C++ programiranje za srednje kole prof.Smajo Meki

18

Za vjebu: Po uzoru na obim i povrinu kruga, pokuajte algoritme za izraunavanje obima i povrine pravougaonika spojiti tako da u jednom algoritmu bude i obim i povrina pravougaonika. 3 .4 . Gra nan je Na alost, u stvarnom ivotu zbivanja ne teku tako jednostavno kao to su to pravolinijski algoritmi. Ponekad treba stati, razmisliti, usporediti neke stvari i donijeti odluku kako dalje. Takovo mjesto u algoritmu zove se grananje. Simbol za grananje je romb. Obino se u gornji vrh upie upitnik i u sredini se postavi logiki uvjet. Grananje uvijek ima jedan ulaz i najmanje dva izlaza. Ako su samo dva izlaza tada je rije o jednostrukom grananju, a odgovori na postavljeni logiki uvjet mogu biti DA i NE, odnosno T i F (true i false). Ako je mogue vie odgovora tada je to viestruko grananje. C++ programiranje za srednje kole prof.Smajo Meki

Pr imjer 1 Sjetimo se zadataka iz prethodne lekcije za izraunvanje brzine ako su poznati put i vrijeme: V = s / t. Ako se na raunaru dogodi situacija da dijelimo s nulom program e nam izbaciti greku. Da bismo sprijeili "ispadanje" programa, prije izraunavanja brzine provjeriti emo da li je upisano vrijeme vee od 0.

19

Prepravite dijagram toka iz gornjeg primjera tako da ako upisano vrijeme t nije vee od nula da se na grani NE ispisuje poruka 'Vrijeme mora biti vee od nula' i tek tada odlazi na kraj. Pojedine znakove ili nizove znakova kao to je ova poruka u dijagramu toka piemo unutar navodnika koji ovisno o programskom jeziku koji emo poslije koristiti mogu biti jednostruki ili dvostruki. Pr im je r 2 Idemo rijeiti jo jedan zadatak. Prisjetimo se zadatka obima i povrine pravougaonika iz prethodnih vjebi koji emo jo malo proiriti. Preko tastature upisuju se stranice pravouganika a i b. Treba izraunati obim i povrinu pravougaonika te ispisati poruku o tome da li je upisani lik pravouganik ili kvadrat. C++ programiranje za srednje kole prof.Smajo Meki

20

Da objasnimo: Nakon to smo upisali stranice a i b, izraunali smo obim O i povrinu P pravougaonika. Dobivene rezultate moemo odmah ispisati.Kako emo utvrditi da li moda upisane stranice pripadaju kvadratu? Ako su stranice a i b jednake tada je to kvadrat. Ispisujemo poruke i odlazimo na kraj. Kraj.

Pr im je r 3 T reba up is at i c ijeli b roj a i isp is at i poruk u d a li je u p isan i b roj p aran ili n ep aran.

Obratite panju na konstrukciju ispisa. Pogledati emo lijevu granu koja se izvrava ako je odgovor na logiki uvjet NE. Imamo dio poruke u navodnicima 'Broj ' pa zatim odvojeno zarezom varijablu a i

21

C++ programiranje za srednje kole prof.Smajo Meki

nakon toga opet iza zareza drugi dio poruke u navodnicima 'je neparan.' Ako je upisan npr. broj 9 tada e naredba za ispis 'Broj ',a,' je neparan' rezultirati porukom koja izgleda kao reenica u komadu: Broj 9 je neparan. Pr im je r 4 Treba upisati dva broja a i b i ispisati poruku o tome koji je vei.

Stvar je zapravo vrlo jednostavna. Ali pokuajte sada zamisliti da neko upie dva ista broja, npr. 7 i 7. U uvjetu emo imati pitanje da li je 7 vee od 7. Odgovor je NE. Izvriti e se lijeva grana i kao rezultat dobiti emo poruku: Broj 7 je vei od broja 7. Ova poruka ba i nema logike i dokaz je da na raunar od milja zvani idiot velike brzine i ne razmilja ba puno. Zato ljudi koji rade na razvoju informacijskih sistema moraju predvidjeti puno vie situacija, pa i onih najekstremnijih koje bi se pri radu programa mogle dogoditi. Kau da dobra kontrola podataka pri unosu sprjeava ak 90% greaka koje bi se naknadno u radu programa mogle dogoditi. Zato emo mi rjeenje naeg zadatka malo promijeniti:

3 .5 . Pe tlje

22

C++ programiranje za srednje kole prof.Smajo Meki

Naslov ove lekcije govori da sve ovo to smo do sada radili nije dovoljno zapetljano, pa emo stvari jo malo dodatno zapetljati. Nekada su nastavnici imali obiaj nestane uenike kanjavati tako da su im zadali 100 puta napisati u biljenicu: "Neu nikada vie brbljati na asu informatike!". Zamislite da je nama neko dao takvu kaznu. Mi emo se probati izvui tako da to raunar odradi umjesto nas. Treba mu samo zadati da 100 puta ispie jednu te istu poruku. Nita jednostavnije. Evo rjeenja: Hm, ve nakon tree upute raunaru da ispie poruku sam odustao jer mi je dosadilo. Morate priznati da ovo rjeenje ba i nije neto s ime bi se mogli pohvaliti.

Pokuajmotoodraditina drugaiji nain:

Nakon to se i 100-ti puta izvre naredba grananja i naredbe ispod grananja i e postati 101. Tada je odgovor na pitanje u grananju da li je i vei od 100 konano DA i tada bi program trebao zavriti s radom. Dio programa, niz istih naredbi koje se ponavljaju dok je neki uvjet zadovoljen ili dok ne

23

C++ programiranje za srednje kole prof.Smajo Meki

postane zadovoljen, naziva se petlja. U naem se primjeru ispis poruke i poveanje varijable i za jedan ponavljaju dok i nije postao vei od 100. Varijabla i je u naem primjeru broja jer svakim prolaskom kroz petlju i postaje i vie 1. Neki ljudi tvrde da napredak moemo zahvaliti samo ljudskoj lijenosti. Naime, ljudi e svata izmisliti samo da ne moraju raditi. Tako je neko izmislio jo jednostavnije rjeenje za na primjer s ispisom 100 poruka.

Pravougaonik ispod simbola za poetak je naredba for koja je sama po sebi petlja. Broja i kao i uvjet ve su sadrani u naredbi pa ne moramo mi voditi brigu oko odbrojavanja. Taj red u algoritmu itali bismo kao: "Za i koji ide od 1 do 100 uini slijedee:". Broj ponavljanja u petlji za rjeenje odreenih problema se zna unaprijed, prije poetka ponavljanja, a za neke se ne zna unaprijed, ve ovisi o izvravanju niza naredbi koje se ponavljaju. Za sada emo se samo baviti petljama u kojima unaprijed znamo broj ponavljanja, dakle petljom for. Koliko vremena vam treba da saberete sve brojeve od 1 do 100? Prava sitnica. Za na zbir svih brojeva do 100 koristiti emo varijablu zbir koju na poetku algoritma moramo postaviti na vrijednost 0. Za i koji ide od 1 do 100 treba uiniti slijedee: Varijabli zbir dodati vrijednost varijable i koja je u naem primjeru broja. C++ programiranje za srednje kole prof.Smajo Meki

Svakim prolaskom kroz petlju i se poveava za 1 i njegova vrijednost pridodaje sadraju varijable zbir. U prvom prolazu kroz petlju zbir je 0, a i je 1, pa prema tome zbir postaje 1. U drugom prolazu zbir je 1, a i je 2. Zbir postaje 1+2, dakle sada je 3. I tako 100 puta. Idemo jo malo zapetljati neto to znamo raunati jo od petog osnovne, a to je prosjek ocjena. Prosjek je zbir svih ocjena podijeljen s brojem predmeta.

24

Varijablu zbir koristiti emo za zbir svih ocjena i moramo ju na poetku postaviti na vrijednost 0. Neka u prvom razredu imamo 15 predmeta. Varijablu i postavili smo na poetnu vrijednost 1. U prvom prolazu kroz petlju upisujemo prvu ocjenu iz imenika, a to je bosanski jezik. Ocjena se upisuje u varijablu ocjena. Sadraj varijable ocjena se dodaje u varijablu zbir.

U drugom prolazu upisujemo ocjenu iz drugog predmeta, u treem iz treeg i tako 15 puta. Po izlazu iz petlje izraunavamo prosjek i ispisujemo ga. Ovo je bilo prejednostavno da bi bilo stvarno. U stvarnom ivotu desiti e se da je neko npr. osloboen nastave tjelesnog i zdravstvenog odgoja pa ima 14 predmeta. Neko moda ima 16 predmeta jer je izabrao i fakultativnu nastavu. Isto tako u drugom, treem ili etvrtom razredu sigurno neete imati 15 predmeta. Ve smo napomenuli da se programi piu im openitije tako da bi se mogli primjenjivati za rjeavanje im vie slinih problema. Zato emo na algoritam prepraviti tako to emo umjesto 15 uvesti varijablu brpred koja e predstavljati na broj predmeta.

25

C++ programiranje za srednje kole prof.Smajo Meki

Nakon to smo varijablu zbir postavili na poetnu vrijednost 0 treba preko tastature unijeti broj predmeta koji se smjeta u varijablu brpred. Broja i u petlji sada broji od 1 do brpred pa je primjenjivo za sve uenike i razrede s razliitim brojem predmeta. Da bismo dobili prosjek treba po izlasku iz petlje zbir ocjena podijeliti s brojem predmeta brpred.

Za vjebu: Pokuajte po uzoru na prosjek ocjena za jednog uenika napraviti dijagram toka za izraunavanje prosjene ocjene razreda. Jo nekoliko primjera petlji Nakon postavljanja varijable zbir na poetnu vrijednost 0 treba u upisati poetni broj n i zavrni broj m od kojeg do kojeg elimo ispisati i sabrati neparne brojeve. C++ programiranje za srednje kole prof.Smajo Meki Broja u petlji for sada broji od n do m Da li je i neparan broj znati emo ako ga podijelimo s 2 koristei operator mod i dobijemo rezultat 1. Ako ostatak je 1 tada ispisujemo i i dodajemo njegovu vrijednost varijabli zbir.

to e se dogoditi ako neko upie za n vei broj nego za m? Prepravite gornji algoritam tako da izraunava i zbir neparnih i zbir parnih brojeva od n do m.

26

Uenici su na satu fizike nauili Ohmov zakon po kojem otpor u istosmjernom strujnom kola moete izraunati tako da podijelite napon sa jakou struje: R=U/I gdje je otpor R, napon U i jakost struje I. Naueno su odmah provjerili mjerei veliine u strujnom kolu, ako su mjerili napon i jakost mogli su po gornjoj formuli izraunati otpor, ako su mjerili otpor i napon mogli su izraunati jakost struje I = U / R, a ako su mjerili otpor i jakost struje mogli su izraunati napon U = I * R. Treba napraviti algoritam po kome je mogue za odreeni broj mjerenja na temelju dvije izmjerene veliine izraunati treu. Za broj mjerenja emo koristiti varijablu brmjer. Uvest emo jo jednu varijablu koju emo zvati izbor i dogovoriti emo se da u nju upiemo 1 ako elimo raunati otpor, 2 ako elimo raunati napon i 3 ako elimo raunati jakost struje. Ako upisani broj ne bude 1, 2 ili 3 ne treba poduzimati nita. Poto slovo I koristimo kao varijablu za jakost struje, u petlji for emo ovaj puta kao broja upotrijebiti slovo k.

Ovaj primjer moe se daleko elegantnije rijeiti viestrukim grananjem. Izrada algoritama zahtjeva puno vjebe. Algoritmi se ne mogu natrebati. Potrebno je rijeiti puno primjera, od jednostavnijih do sve sloenijih. Dijagram toka crtamo obinom olovkom s gumicom pri ruci. Stvari se rjeavaju u hodu, mijenjaju, popravljaju i prepravljaju. Uoavaju se stvari koje se mogu pojednostavniti. Prednost dijagrama toka je to je pregledan, lako se test primjerima moe "pjeice" provjeriti. Zanimljivo je i to da vie ljudi moe napraviti na isti zadatak vie razliitih algoritama i da su svi dobri. Sloeni algoritmi mogu se rastaviti na manje, tako rastavljeni rijeiti do detalja i onda prikazati kao rjeenje u

27

C++ programiranje za srednje kole prof.Smajo Meki

blokovima. Problemi se mogu lako analizirati, lako se uoavaju slinosti i razlike izmeu vie rjeenja i odabire najbolje. Moda nakon ovih vjebi vidite dijagrame toka i tamo gdje ih do sada niste uoavali - razliiti shematski prikazi nekih postupaka, hodogrami nekih aktivnosti... I na kraju to je bio cilj nae izrade algoritama - pisanje programa. Kada je jednom algoritam gotov pisanje programa u nekom programskom jeziku je prepisivanje simbola iz dijagrama toka u naredbe programskog jezika. Obino svaki simbol u dijagramu toka predstavlja jednu naredbu u programu. Dijagram toka bi trebao biti dio svake dobre programske dokumentacije. Uenicima je crtanje dijagrama toka ponekad nerazumljivo, a sve to je nerazumljivo je i dosadno. Oni bi najradije sjeli za raunar i odmah pisali program. Kod jednostavnih problema to i moemo napraviti. Ali kod sloenijih... Jednom sam sreo svog biveg uenika koji se u svom poslu intenzivno bavi programiranjem. alio mi se da nekad nekoliko sati provede za raunarom pokuavajui rijeiti neki problem, ali ne ide i gotovo. Pitao sam ga to tada uini. Odgovorio je: "Pa uzmem olovku i papir i nacrtam algoritam..."

4.Pseudo jezikPseudokod je neoficijelan jezik koji pomae programerima u razvijanju algoritama. Pseudokod nije programerski jezik. Njegova svrha je rijeiti program prije pisanja u programerskom jeziku kao to je C++. Pseudokod se sastoji jedino od izvrnih naredbi onih koje se izvravaju kada program pseudokoda pretvorimo u C++ i pokrenemo.

iz

Ne postoji ope prihvaena norma naina pisanja pseudo jezika ve svaki autor moe u naelu koristiti svoj nain pisanja. 4.1.Varijable Mjesto u memoriji rezervisano za pohranu podatka naziva se varijabla. Svaka varijabla ima ime koje ju jednoznano odreuje kako bi se razlikovala od ostalih varijabli. Ime varijable se u pseudo jeziku moe zadati proizvoljno, npr. x, a, TX, B_Pod, AmPe. Vrijednost varijable Varijabli se vrijednost pridruuje uz pomo operatora pridruivanja. Operator pridruivanja koji se koristi u ovoj verziji pseudo jezika je znak (:=). Tim se operatorom varijabli pridruuje ili u varijablu upisuje vrijednost.Npr. izraz x:=3 se moe itati "varijabli x se pridruuje broj 3". Kraj naredbe Algoritam zapisan pseudo jezikom sastoji se od niza naredbi. Svaka naredba ove verzija pseudo jezika zavrava znakom taka-zarez (;).

4.2.Operatori

28

C++ programiranje za srednje kole prof.Smajo Meki

Operatori su simboli koji predstavljaju (zamjenjuju) odreene funkcije. Operatori se mogu svrstati u grupe prema vrsti funkcije koju prestavljaju, npr.: aritmetiki operatori, logiki operatori, operatori usporeivanja (relacijski operatori).

Za ispravno zapisivanje algoritma pseudo jezikom izmeu ostalog treba poznavati i znaenje pojedinih operatora. Pri tom moe zbunjivati slinost izgleda operatora pseudo jezika i operatora kojima se koristimo u matematici (ponekad izgledaju isto a imaju razliita znaenja). Aritmetiki operatori Opis Sabiranje Oduzimanje Mnoenje Dijeljenje Cjelobrojno dijeljenje Ostatak cjelobrojnog dijeljenja Pseudo jezik + * / DIV MOD Pascal + * / DIV MOD C/C++ + * / / %

Operatori sabiranja, oduzimanja i mnoenja se u pseudo jeziku koriste na uobiajen nain. Kod poetnika zabunu mogu stvoriti tri razliita operatora dijeljenja. Osim operatora dijeljenja (/) koji kao rezultat vraa vrijednost kolinika u obliku realnog broja tu su i operatori DIV i MOD. Operator DIV vraa cjelobrojni dio dijeljenja dva cijela broja. Operator MOD vraa cjelobrojni ostatak dijeljenja dva cijela broja. Primjer upotrebe operatora dijeljenja: x:= 5; y:=2; a:=x/y; b:=x DIV y; c:=x MOD y; Rezultat e biti: a=2,5 ;b=2;c=1 (5:2=2 cijela i 1 ostatak). Logiki operatori Logiki podaci su podaci koji mogu poprimiti samo jednu od dvije mogue vrijednosti. To su na primjer true/false, da/ne, istina/la, 1/0. Varijabla u koju se pohranjuju podaci ove vrste moe poprimiti vrijednosti true (1) ili false (0). Za rad s logikim podacima, postoje logike funkcije. Logike se funkcije zapisuju logikim operatorima. Rezultat rada logikih operatora je podatak logikog tipa. C++ programiranje za srednje kole prof.Smajo Meki

29

Opis Logiki I Logiki ILI Logiki NE

Pseudo jezik I ILI NE

Pascal AND OR NOT

C/C++ && || !

Tablica stanja operatora I

Tablica stanja operatora ILI

Tablica stanja operatora NE

Primjer upotrebe logikih operatora:

Operatori poreenja (relacijski operatori) Dva se podatka mogu usporeivati. Ako je napisani izraz istinit, rezultat poreenja e biti 1 (true), a ako nije, rezultat e biti 0 (false). Usporeuje se upotrebom operatora poreenja.

30

C++ programiranje za srednje kole prof.Smajo Meki

Rezultati logikih operacija e biti: e=0 f=1 g=1.

Opis Manje Manje ili jednako Vee Vee ili jednako Jednako Razliito

Pseudo jezik < >= =

Pascal < >= =

C/C++ < >= = !=

Primjer upotrebe operatora poreenja:

Rezultati usporedbe e biti: a=1 b=1 c=0 d=0. Kod poetnika zabunu moe stvoriti operator jednakosti (=). Operator jednakosti NE pridruuje vrijednost varijabli ve samo provjerava da li je vrijednost njegove lijeve i desne strane jednaka. Npr. Izraz x=3 se moe itati: "da li je vrijednost varijable x jednaka 3?". Tim izrazom se vrijednost varijable ne mijenja i ostaje kakva je bila i prije izraza. Operator jednakosti ne mijenja vrijednost varijable. Operator pridruivanja (:=) mijenja vrijednost varijable. Npr.: C++ programiranje za srednje kole prof.Smajo Meki

Rezultat na kraju e biti: x=3;a=0. Redoslijed izvravanja operatora Pri zapisivanju sloenih izraza pseudo jezikom vano je imati na umu redoslijed izvravanja operatora (prioritet).

Redosljed izraavanja

Operatori

31

1 2 3 4 5

() NE */ DIV MOD I + - ILI >b; cout0."