51
OSNOVE INFORMATIKE NOSITELJ NOSITELJ I I KOLEGIJA KOLEGIJA prof prof . dr. . dr. sc. sc. Niko Niko MAJDAND MAJDAND Ž Ž I I Ć Ć doc doc . d . d r. r. sc. Roberto LUJI sc. Roberto LUJI Ć Ć VJE VJE Ž Ž BE BE mr mr . . sc. sc. Mirjana Mirjana Č Č I I Č Č AK AK Vjekoslav Vjekoslav GALZINA, GALZINA, dipl dipl . . in in ž ž . . STROJARSKI FAKULTET – SLAVONSKI BROD TRG I. B. MAŽURANIĆ 2 GUNDULIĆEVA 22 035 44 67 18, 035 44 74 35

NOSITELJI KOLEGIJA prof. dr. sc. Niko MAJDANDŽIĆ doc. …mcicak/Pred13.pdf · OSNOVE PROGRAMIRANJA RAZVOJ PROGRAMSKE PODRŠKE ... Algoritam koji bi izabirao potez igrača šaha

Embed Size (px)

Citation preview

OSNOVE INFORMATIKE

NOSITELJNOSITELJII KOLEGIJAKOLEGIJAprofprof. dr.. dr. sc. sc. NikoNiko MAJDANDMAJDANDŽŽIIĆĆ

docdoc. d. dr.r. sc. Roberto LUJIsc. Roberto LUJIĆĆ

VJEVJEŽŽBEBEmrmr.. sc. sc. Mirjana Mirjana ČČIIČČAKAKVjekoslavVjekoslav GALZINA, GALZINA, dipldipl..ininžž..

STROJARSKI FAKULTET – SLAVONSKI BRODTRG I. B. MAŽURANIĆ 2GUNDULIĆEVA 22035 44 67 18, 035 44 74 35

Algoritmi i struktura

OSNOVE PROGRAMIRANJARAZVOJ PROGRAMSKE PODRŠKE

Faze razvoja programa• Analiza problema• Postavljenje modela• Izrada algoritma• Izrada dijagrama toka• Kodiranje programa• Prevođenje programa• Testiranje programa• Dokumentiranje programa• Eksploatacija programa

Algoritam

Što je algoritam?• u početku algoritmom se nazivaju samo pravila

računanja s brojevima, kasnije i pravila obavljanja ostalih zadataka u matematici,

• u XX stoljeću, pojavom računala, pojam se proširuje na računalstvo, a zatim i na druga područja,

• pravila za postizanje željenog rezultata.

Algoritam je …• precizno opisan način rješenja nekog problema

koji jednoznačno određuje što treba napraviti.

Značajke algoritma

pet važnih svojstava algoritma• konačnost - mora uvijek završiti nakon

konačnog broja koraka• definiranost - svaki korak algoritma mora biti

precizno definiran - akcije koje treba poduzeti moraju biti u svakom slučaju rigorozno i nedvosmisleno specificirane

• ulaz - algoritam može ali i ne mora imati ulazne veličine koje su dane inicijalno prije početka algoritma

• izlaz - algoritam ima jednu ili više izlaznih veličina koje su u specificiranom odnosu sa ulaznim veličinama

• efikasnost - se očekuje od svakog algoritma

Algoritam

• Učinkovitost.U konačnom broju koraka može se dobiti rezultat

• Primjeri.Zbrajanje cijelih brojeva je učinkovitoZbrajanje realnih brojeva nije jer se može pojaviti broj s beskonačno mnogo znamenki. Algoritam koji bi izabirao potez igrača šaha tako da ispita sve moguće posljedice poteza, zahtijevao bi milijarde godina na najbržem zamislivom računalu

Procedura

Postupak koji ima sva svojstva kao i algoritam, ali ne mora završiti u konačnom broju koraka je računalna procedura.

Primjeri za proceduru:° Operacijski sustav računala° Uređivač teksta

Vrijeme izvođenja treba biti "prihvatljivo"

Algoritam

Procedura

Program, programiranje

• Program je …opis algoritma koji u nekom programskom jeziku jednoznačno određuje što računalo treba napraviti.

• Programiranje uključujeučenje sintakse nekog proceduralnog jezika i stjecanje osnovnih intuitivnih znanja glede algoritmizacije problema opisanog riječima.

• Algoritmi + strukture podataka = PROGRAMI• Temeljni problemi programiranja:

• kako osmisliti algoritme• kako strukturirati podatke• kako formulirati algoritme• kako verificirati korektnost algoritama• kako analizirati algoritme• kako provjeriti (testirati) program

Algoritmi i programi

• Postupci izrade algoritama nisu jednoznačni te zahtijevaju i kreativnost.

• (Za sada) Ne postoje generatori algoritama.

Program se može sagledati i kao

• informacijska funkcija f koja ulazne podatke Upreslikava/transformira u izlazne podatke I.

I = f (U)

U II=fi(U)

Program kao informacijska funkcija transformacije ulaza u izlaze

Svrha programa je rješavanje problema …

• najčešći način prikaza rješenja je pomoću tri modela:

• model podataka,

• model procesa i

• model resursa.

Program kao model rješenja

• model podataka sadrži definicije podataka (nazive, vrste, dimenzije, ograničenja, vrijednosti…) te strukture podataka (nizovi, skupovi, datoteke, tablice …),

• model procesa može biti prikazan različitim tehnikama (dijagram toka, dijagram strukture, procesa, dijagrami akcija…), ali svi oni, na svoj način, prikazuju slijed odvijanja procesa,

• model resursa sadrži definiciju računalnih resursa i njihovih svojstava (operacijski sustav, vrsta programskog prevodioca, svojstva jedinica računala…) koje su potrebne da bi program uredno radio..

Model rješenja

• podaci se koriste u određenim procesima, • procesi se izvode pomoću određenih resursa

računala,• resursi računala primaju, obrađuju, pohranjuju i

prikazuju podatke.

• statička slika:• model podataka i model resursa,

• dinamika: • model procesa. Model

procesa

Modelpodataka

Modelresursa

Prikaz algoritma

Razvoj i prikaz algoritma preduvjet je izrade

programa.

Algoritmi se mogu prikazati na različite načine:

• opisno, rečenicama,

• grafički, dijagramom toka,

• u nekom jeziku koji je blizak čovjeku (pseudokod), ili

• nekim strogo formaliziranim programskim jezikom

Početak

Pripremne radnje

Učitavanje podataka

Obrada podataka

Izlaz podataka

Završne radnje

Da

Ne

KRAJ

Kontrola izlaza iz petlje

Spojištetokova

Kraj obrade

Dijagram toka

• grafička reprezentacija algoritma.

• jedna od metoda za prikazivanja protoka informacija kroz pojedine procedure ili procese.

• (FLOWCHART, blok dijagram) ima više vrsta i standarda.

Operacija (općenito). Prikazuje se jedna operacija ili više njih. Ako je rezultat operacija promjene vrijednosti, oblika ili mjesta nekih informacija.

Aritmetička odluka (grananje). Instrukcija aritmetičke odluke izračunava aritmetički izraz na osnovu kojega se donosi odluka. Moguće su tri akcije ovisno o tome da li je vrijednost izraza manja,veća ili jednaka nuli

Logička odluka (grananje). Prikazuje se operacija koja ispituje istinitost nekog izraza, nakon čega program odabire jedan put.

Ulaz podataka

Izlaz podataka

Ulaz/Izlaz podataka

Crta toka odvijanja operacija programa prikazuje veze među postaviti strelice usmjerene na simbol koje se kasnije izvodi. Prioritetni su smjerovi: a) odozgo prema dolje, b) slijeva udesno

Granično mjesto: početak (start), zaustavljanje (stop), prekid i slično.

Povezivanje raznih dijelova u dijagramu toka. Izlaz iz nekog dijela dijagrama toka i ulaz u drugi dio, koji su međusobno povezani uz pomoć tog simbola, moraju imati istu oznaku. Više se izlaza može povezati s jednim jedinim ulazom

Simboli dijagrama toka

Nekoliko je razloga za korištenje ove metode :

• Analitičar – siguran - preglednost dijagrama.

• Dobra osnova za pisanje jasnih i logičnih izvješća.

Nemoguće napisati nejasno izvješće, ako ga temeljimo na blok dijagramu.

• Metoda - sredstvo za uspostavljanje komunikacije s korisnikom.

FAZE RAZVOJA PROGRAMSKE POTPORE

Faza Izrada kolača Opis Zadaci u razvoju programske potpore

1. Kakav želimo? Uočavanje i opća definicija problema.

2. Što nam treba? Precizna formulacija problema.

3. Koji su omjeri? Izrada matematičkog modela ponašanja.

4. Kako se miješa? Redosljed akcija - dijagram toka.

5. Gdje se peče? Izbor jezičkog procesora.

6. Kako je ispalo? Testiranje i ispravke uočenih grešaka.

7. Konačni recept. Izrada programske dokumentacije i uputa.

Algoritam i programer

• Programer polazi od postavljenog problema i kreira proceduru – algoritam* koja dani problem rješava.

• Programer je dakle “prevodilac” sa jezika procedure na jezik sa kojeg se može dalje prevoditi na jezik blizak računalu.

• Pored “prevođenja” programer obično kreira i proceduru na osnovi postavljenog problema.

* Pojam algoritam potječe od uzbečkog znanstvenika Al-Horezmijakoji je u IX vijeku definirao načine za izračunavanja nad dekadskim brojevima koji se i danas koriste i uče u osnovnoj školi.

Podjela programskih jezikaPo načinu rada:• imperativni jezici (postižu funkcionalnost

postavljanjem vrijednosti varijablama naredbama pridruživanja i ispitivanjem vrijednosti varijabli - FORTRAN, COBOL, ALGOL, C, Pascal, Ada, Modula-2)

• funkcionalni jezici (bez klasičnog pridruživanja, građeni od definicija i poziva funkcija - LISP, ML, LOGO)

• logički ili ciljno orijentirani jezici (postavlja se glavni cilj i daje lista podciljeva čije dostizanje znači i dostizanje glavnog cilja - PROLOG)

• objektno orijentirani jezici (objekti: strukture podataka s definiranim funkcijama nad njima -Smalltalk, Eiffel) i

• hibridni jezici (C++).

Podjela programskih jezika

• Generacijska podjela• Jezici prve, druge, treće i četvrte generacije

• Po strukturiranosti• nestrukturirani programski jezici • strukturirani programski jezici

• Po proceduralnosti• proceduralni programski jezici (slijed

naredbi koji određuje KAKO obaviti neki posao)

• neproceduralni programski jezici (slijed naredbi koji određuje ŠTO treba učiniti)

Početak “programiranja”

• Na prvim računalima “programiranje” se provodilo fizičkim lemljenjem pojedinih elektronskih dijelova (projekt Eniac).

• Još je interesantnije da je prvi programski jezik razvio Konrad Zuse (Njemačka) 1946. godine (programski jezik se zvao Plankalkul po poznatom naučniku Planku) i ovaj jezik nikada nije primijenjen na elektronskom računalu.

• Prvi jezik koji je primijenjen na elektronskim računalima bio je Short-code 1949-te godine.

Faze razvoja programskih jezika

• I Faza: oko 1950-te (razvoj prvih programskih jezika) Stvoreni su jezici: Plankalkul, Shortcode, MATH-MATIC, Autocode itd. Uglavnom nisu zaživjeli.

• II Faza: Oko 1960-te (razvoj teorije i prvih kvalitetnih programskih jezika). Stvoreni su jezici: Fortran(FORmula TRANslation system), ALGOL (ALGOrithmLanguage), LISP (LISt Programming – za podršku umjetnoj inteligenciji), COBOL (COmmon BusinessOriented Language). Utječu na razvoj programiranja do današnjih dana, neki od njih su bili komplicirani. Ovo je i period početka programerske edukacije.

Faze razvoja programskih jezika

• III Faza: oko 1970-te godine (na osnovi prethodnih iskustava kreiranje jednostavnih i moćnih programskih jezika) Standardizacija i usvajanje tehnologije strukturnog programiranja. Stvoreni su jezici APL(ostavio trag na kasnije jezike), BASIC (Beginners All-purpose Instruction Code omogućio silazak programiranja iz znanstvenih laboratorija među “narod”– stvorena prva video igrica Star Wars), Pascal(smišljen kao edukacijski programski jezik ali je postao jedan od najpopularnijih), C (omogućio lako pisanje sistemskog softvera i pristup hardveru). COBOL i C su u ovoj fazi standardizirani!!!!

Faze razvoja programskih jezika

• IV Faza: oko 1980-te godine (nakon softverske krize dolazi do razvoja programskih jezika za objektno programiranje koji omogućavaju “lakše”pisanje velikih paketa). Stvoreni ili usavršeni jezici C++, Java, Smalltalk, Ada itd.

• V Faza – danas (teško je izdvojiti prevladavajući pravac) Razvoj jezika za paralelno programiranje, razvoj strategija za OO projektiranje, mrežne aplikacije, programiranje na prijenosnim uređajima (mobilni telefoni, Palm piloti itd), povezivanje aplikacija (Visual Basic)...

Poznati programski jezici

PascalPROLOGSmalltalkPERLC#itd

Dobar programski jezik traje

više od 20 godina!!!!!!!

• Ada• APT• C• C++• COBOL• Visual BASIC• LISP• FORTRAN• JAVA

Kompajliranje i interpretiranje

• Postoje dvije strategije pri izvršavanju programa:– Interpreteri idu od naredbe do naredbe koda

programa, tumače tu naredbu i izvršavaju je. Kako tumačenje naredbe može uzimati neko vrijeme interpreteri su spori, program koji se interpretira zahtjeva da na platformi postoji i program za interpretaciju, neke greške u programu se otkrivaju kasno itd. Ne kreira se izvršna datoteka nego se pri svakom pokretanju program mora koristiti program interpreterOsnovna prednost interpretera je JEDNOSTAVNOST!Poznati interpreteri su Basic i MATLAB.

Kompajleri• Kompajleri su znatno složeniji ali sa mnogo stanovišta

bolji od interpretera.• Prevodi se odmah cijeli izvorni program (samo jednom)

Rezultat kompajliranja (ako nema grešaka) je EXE verzija (izvršni program).

• Povezivanje (linkovanje) više programskih modula (glavnog programa i potprograma) u jednu cjelinu.

• Kompajliranje ima više faza koje se dijele na:– analizu (prepoznavanje naziva varijabli, operatora matematičkih

i drugih operacija, određivanje naredbi i izraza, otkrivanje grešaka...)

– sintezu (vrši kreiranje koda praćenu optimizacijom, npr. programske petlje se često optimiziraju).

• Poznati kompajleri C, Pascal, FORTRAN itd.

Tipovi i strukture podataka

• Prema svojstvima pojedinih atributa koji opisuju entitete, podaci mogu biti tipa: cjelobrojni, realni broj, logička varijabla, znakovno polje ....

• Sa stajališta struktura, podatke možemo povezati u: nizove (koji predstavljaju matematičke vektore i matrice), skupove, slogove, datoteke ....

• Tip podataka (objekata) određuje i dozvoljene vrijednosti koje pojedini objekt može poprimiti, kao i skup dozvoljenih operacija. To ujedno ima i utjecaja na način pohrane podataka

Osnovni (primitivni) tipovi podataka

• numeričkiNajčešći tipovi numeričkih podataka: • cjelobrojni (integer) • realni (Float, Floating Point) • kompleksni

• logički (Boolean)• znakovni (character)

ALGORITAMSKI KORACI• Podrazumjevaju sljedeće algoritamske korake:

– Alokacija varijabli (zauzimanje memorijskog prostora za varijable);

– Ulaz podataka;– Kontrolne strukture (na razini naredbi)

• Slijed ili sekvenca;• Selekcija ili uvjetno grananje;• Petlja ili iteracija;• (Skokovi)

– Izlaz podataka;– Smatramo da se dealokacija (brisanje varijabli obavlja

automatski od strane kompajlera);– Program može da ima izostavljen neki od predmetnih

koraka ili više pojedinih koraka;– Program može pozivati potprograme;– Program ima početak i kraj.

ALOKACIJA VARIJABLI

Pojam varijable u programskom jeziku

• varijable u programskim jezicima zapravo su apstrakcije memorijskih ćelija - imena memorijskih ćelija

• atributi varijable•ime •adresa •vrijednost •tip•trajanje (lifetime) •doseg (scope)

ULAZ I IZLAZ U PROGRAM

• Korisnik ili na neki drugi način moraju biti zadate vrijednosti varijabli nad kojima se vrše operacije. Ovaj dio se naziva ulaz ili unos podataka . Rezultat programa se prikazuje ili na neki pogodan način koristi. Taj dio se naziva izlazom podataka.

Oznake

N,A Ulaz

X1,C Izlaz

Pseudokod

Input N,A

Output X1,C

KONTROLNE STRUKTURE (NA RAZINI NAREDBI)

SLIJED (SEKVENCA)Oznaka Pseudo kod

X=2X=2 Pojedinačna naredba

X=A+B

Y=X*X

Z=Y-2

Niz naredbi.

Strelice ukazuju na redosljed izvršavanja. Ako se izostave podrazumjeva se odozgo na dolje u programu.

X=A+B

Y=X*X

Z=Y-2

UVJETNO GRANANJE (SELEKCIJA)

Pseudo kod

IF(X>0)

Y=X

ENDIF

Oznaka

X>0

Y=X

Da

Ne Tumačenje

Ako je X veće od nule postavi vrijednost Y na vrijednost X. Ako nije ne čini ništa.

SELEKCIJA - PRIMJER

START

X:FLOATY:FLOAT

X≥0

Y=X

X

Y=-X

Y

END

DA

NE

Pseudo kod

X:FLOATY:FLOATINPUT XIF X≥0Y=XELSEY= - XENDIFOUTPUT YEND

SLOŽENA SELEKCIJA - PRIMJER

Dan je samo dio gdje je prikazana selekcija.

X>4

2<X≤4

X ≡0∨X≡1

Bolje je zapisati kao X>2∧X≤4 a čakje dovoljno i X>2 (zašto?)

Šesterokutna oznaka se može koristiti za složenije uvjeteumjesto romba.

NE

DA

NEDA

DANE

Y=X2

Y=X

Y=4

Y=-X

PETLJA

• Petlja je dio algoritma koji se ponavlja više puta. Postoje:– ciklusi koji se ponavljaju točno određen broj

puta;– ciklusi koji se ponavljaju dok je zadovoljen

logički uvjet.• Provjera uvjeta petlje može biti na početku (vrhu),

kraju(dnu) ali i u sredini petlje.

Prikaz petlje

Vrh petlje Povratni skok s kraja na početak petlje

Dno petlje

Opseg petlje

Instrukcije u petlji

Petlja kontrolirana brojačem (broj ponavljanja je unaprijed poznat)

• Brojač ima početnu vrijednost, krajnju vrijednost i korak (to su cjelobrojne vrijednosti) (korak može biti i negativan)

• Postupak izvođenja petlje:1. Postavi brojač na početnu vrijednost2. Provjeri da li je vrijednost brojača veća od

krajnje vrijednosti: • Ako je - prekini izvođenje - "izađi iz

petlje"3. Ako nije - izvedi sve naredbe u "tijelu"

petlje4. Povećaj brojač za korak5. Ponavljaj korake 2., 3., 4.

PETLJA - PRIMJER START

S

END

DA

NE

N

S=0

S=S+N

N=N-1

N>0

N=0

NE

DA

• Zbrojiti brojeve od 1 do N.

Inicijalizacija nezna se koji su podaci stajali na memorijskoj lokacijikoja je dodjeljena varijabli S i mora se postaviti S na 0kako bi zbrajanje u ovom slučaju teklo od 0

Petlja sa ispitivanjem logičkog uvjeta

(broj ponavljanja je nepoznat)

• Prethodni primjer je bio primjer petlje koji se izvršava točno određen broj puta. Sljedeći primjer je petlja koji se izvršava dok je zadovoljen uvjet.

• Izvršiti zbrajanje prirodnih brojeva koje korisnik zadaje do trenutka kada se unese negativan broj ili nula. Negativan broj ili nulu ne treba zbrajati i čim se pojavi neka takva vrijednost treba prekinuti dalje izvršavanje.

START

S

END

DA

I

S=0

S=S+I

NE

PETLJA - PRIMJER

I>0

I

PETLJE NAPOMENE

• Unutar jedne petlje može se nalaziti druga petlja

• Unutrašnja petlja se mora zatvoriti istovremeno ili prije vanjske. Ne smije se nikada zatvarati kasnije (petlje se ne mogu sjeći odnosno preklapati).

• Nije dozvoljen skok iz vanjske petlje u unutarnju

• "između početaka i krajeva" petlji može biti više naredbi ili niti jedna naredba

Algoritam 1• Odrediti veći od dva unesena cijela broja.

START

END

A,B

A>B

B A

DANE

Algoritam 2

• Napisati program kojiračuna stupanj broja: Y=XN. N je prirodan broj.Uočiti da važi: X0=1.

START

END

N

Y=1

Y=Y*X

N=N-1

NE

Y

N≥0

N=0DA

Y=1

N=0

X

Algoritam 3• Odrediti ostatak pri dijeljenju dva prirodna broja.

Primjer: Pri dijeljenju 9 sa 4 ostatak je 1 jer je 2x4+1=9. Olakšavajuća okolnost je to što računalo kada dijeli cijele brojeve daje cijeli broj ako korisnik ne zatraži konverziju podataka.

START

M,N

P=M/N

O=M-P*N

O

END

Složenost algoritama

• Nisu svi algoritmi koji rješavaju neki problem jednako kvalitetni.

• Jedna od mjera kvaliteta algoritama je složenost.• Tipovi složenosti su:

– Vremenska složenost • Koje vrijeme je potrebno za izvršavanje algoritma.• Proporcionalno je broju operacija (aritmetičkih,

logičkih ili nekih drugih) koje algoritam izvršava.• Dakle, procjena vremenske složenosti se svodi na

brojanje operacija u algoritmu.

Složenost algoritama

– Prostorna složenost• Podrazumijeva koliko prostora u memoriji

zauzimaju podaci u algoritmu.• Određuje se zbrajanjem memorije koju zauzimaju

varijable upotrijebljene u algoritmu.– Komunikacijska složenost

• Određuje koliko je potrebno komunikacije procesora sa periferijama, diskovima i memorijom prilikom izvršavanja programa.

• Posebno je značajna kod paralelnih računala kada razni procesori međusobno komuniciraju.

Gdje je danas programiranje?

• Programiranje se sporo mijenja dok se tehnologija koja ga prati brzo mijenja.

• Osnovni element u današnjem programiranju je korištenje tuđeg rada bilo kroz snažne vizualne programske alate bilo kroz pojedine elemente specifičnih kontrola ili kupovanjem dijelova programskog koda sa interneta sa odgovarajućih web stranica.

• Taj tehnološki dio programiranja je ono što se ogromnom brzinom mijenja.

Trendovi

• Obično se o trendovima u programiranju govori aposteriori, tj. nakon što se već nešto dogodi.

• Stoga je teško i procijeniti koji je danas trend u programiranju.

• Može se reći da bi osnovni trend mogao biti kreiranje programa za prenosiva sredstva:– Palm računala,– Mobilne telefone– Kamere i fotoaparate– a u budućnosti automobile, hladnjake, perilice itd.

praćeno integracijom u jednu cjelinu.