ALGORITMI Pojam algoritma Blok dijagram
UVOD U ALGORITME Sadržaj Pojam algoritma Primjeri algoritama Osnovna svojstva algoritama
Pojam algoritma Što je algoritam? Grubo rečeno: Algoritam = metoda, postupak, pravilo za rješenje nekog problema ili dostizanje nekog cilja. Ovo nije precizna definicija u matematičkom smislu, već samo opis preko drugih, sličnih pojmova, pri čemu je postupak najbliži.
Pojam algoritma (2) Postupak asocira na konačan niz koraka koje treba napraviti za rješenje nekog problema Metoda se kao izraz često koristi u matematici, ali obično uključuje i tzv. beskonačne postupke koji tek na limesu daju rješenje (mat. analiza, numer.mat.)
Pojam algoritma (3) Osnovna zadaća razvoj efikasnih i točnih Algoritama Intuitivno je jasno da efikasno znači brzo, a točno da je rješenje blizu pravom rješenju.
Primjeri algoritama Npr. upute za uporabu (korištenje, rukovanje, instalaciju, ) tehničkih pomagala. Upute za korištenje kartice na bankomatu umetnite karticu u čitač tako da magnetska traka bude s donje desne strane; u slučaju da to od Vas uređaj zatraži odaberite jezik; odaberite iznos ili uslugu; odgovorite želite li potvrdu; uzmite karticu; uzmite novac; uzmite potvrdu ako ste potvrdili da ju želite.
Primjeri algoritama (2) Rješavanje linearne jednadžbe ax=b ako su i a i b jednaki nuli jednadžba ima beskonačno rješenja; ako je a jednak nuli i b različit od nule jednadžba nema rješenje; ako su i a i b različiti od nule jednadžba ima jedinstveno rješenje x=b/a.
Pojam algoritma Algoritam - postupak ili niz postupaka koje treba obaviti pri rješavanju određenog problema. Načelo ekvifinaliteta - za rješavanje nekog problema ne mora postojati jedinstven algoritam.
Pojam algoritma Algoritam mora udovoljiti nekolicini kriterija: Općenitost. Konkretnost. Svrhovitost. Konačnost. Efikasnost. Ponovljivost. Razumljivost. Formaliziranost. Instruktivnost.
Pojam algoritma Općenitost. Algoritam mora biti pogodan za rješavanje određenog tipa problema, a ne samo jednog konkretnog problema. Konkretnost. Algoritam mora prihvatiti konačan broj ulaznih veličina koje potpuno određuju konkretni problem koji treba riješiti. Svrhovitost. Algoritam mora dati barem jednu izlaznu veličinu, odnosno rezultat rješenja problema. Konačnost. Algoritam mora dati rješenje postavljenog problema u konačnom broju koraka odnosno postupaka.
Pojam algoritma Efikasnost. Postupak mora završiti u prihvatljivom vremenu i prihvatljivom utrošku drugih resursa. Ponovljivost. Ponovljeni postupak uz iste ulazne veličine mora dati isti rezultat, odnosno izlazne veličine. Razumljivost. Postupci određeni algoritmom moraju biti poznati izvršitelju. Formaliziranost. Svaki postupak mora biti jednoznačno i nedvosmisleno definiran. Instruktivnost. Postupci trebaju biti iskazani u formi naredbi izvršitelju.
Pojam algoritma Algoritam je uređeni skup jednoznačnih (nedvosmislenih), izvedivih koraka
Pojam algoritma Pojam algoritma danas se gotovo isključivo veže uz softver. Algoritam koji opisuje postupak stvaranja algoritma - metaalgoritam. Mataalgoritam rač unalnog programa Mentalni model Apstraktnost Pomoć ni model Formaliziranost Detaljnost Rač unalni model
Primjer algoritma Dva algoritma za izračunavanje faktorijele Koji je bolji? int factorial (int n) { if (n <= 1) return 1; else return n * factorial(n-1); } int factorial (int n) { if (n<=1) return 1; else { fact = 1; for (k=2; k<=n; k++) fact *= k; return fact; } }
Načini predstavljanja algoritama Tekstualni Grafički (pomoću dijagrama toka) Pseudo kodom Strukturogramom
Tekstualni način Koriste se precizne rečenice govornog jezika Koristi se za osobe koje se prvi put sreću sa pojmom algoritma Dobra osobina: razumljivost za širi krug ljudi Loše: nepreciznost koja proističe iz nepreciznosti samog jezika
Grafičko predstavljanje algoritma Koriste se određeni grafički simboli za predstavljanje pojedinih aktivnosti u algoritmu Ideja je posuđena iz teorije grafova Algoritam se predstavlja usmjerenim grafom čvorovi grafa predstavljaju aktivnosti koje se obavljaju u algoritmu potezi ukazuju na slijedeću aktivnost koja se treba obaviti
Blok dijagram Blok dijagram -grafički način predstavljanja algoritma skupom simbola koji označuju pojedine operacije, a njihov raspored i povezanost određuju slijed postupaka.
Grafičko predstavljanje algoritma Polazni čvor u usmjerenom grafu koji predstavlja algoritam nema dolaznih grana, a ima samo jednu izlaznu granu početak Krajnji čvor u grafu koji predstavlja algoritam koji nema izlaznih grana, a ima samo jednu dolaznu granu kraj
Grafičko predstavljanje algoritma Blok oblika romboida koristi se za označavanje ulaznih i izlaznih aktivnosti U ulaz: izlaz: Blok obrade je pravokutnog oblika obrada Blok odkuke da uvjet ne
Grafičko predstavljanje algoritma Blok spajanja grana
Blok dijagram Skup grafičkih simbola koji se koriste pri izradi blok dijagrama malen: Početak i kraj Ulaz Odluka Obrada Izlaz Vanjski modul Priključna točka Poveznica
Osnovne algoritamske strukture Kombiniranjem blokova dobivaju se osnovne algoritamske strukture Linijska (sekvenca,slijed) Razgranata (selekcija, grananje) Ciklička (iteracija, ponavljanje, petlja) Pomoću osnovnih algoritamskih struktura može se predstaviti svaki algoritam
Sekvenca,slijed linijska struktura koja se dobiva kaskadnim povezivanjem blokova obrade A 1 A 2 A 3 A n Algoritamski koraci se izvršavaju redom, jedan za drugim Algoritamski korak A i, i=2,...,n ne može započeti sa izvršenjem dok se korak A i-1 ne završi sekvenca predstavlja niz naredbi dodjeljivanja (:=) oblik naredbe: varijabla:=vrijednost a:=b n:=n+1
Grananje (selekcija) Omogućuje uvjetno izvršenje niza algoritamskih koraka da ne da uvjet uvjet S1 S2 S1 Blokovi označeni sa S1 i S2 mogu sadržavati bilo koju kombinaciju osnovnih algoritamskih struktura.
Primjer1 Nacrtati dijagram toka algoritama kojim se određuje veći od dva zadata broja korištenjem formule da max:=a poc a,b a>b max{ a, b} ne max:=b = a, b, a > b a b ideja za nalaženje max u nizu da max:=b poc a,b max:=a max<b max kraj max kraj
Naći maksimum od tri zadana broja a, b i c max{ a, b, c} = poc a,b,c max{max{ a, b}, c} a>c da ne a>b dada ne b>c ne max:=a max:=c max:=b max:=c max kraj
Blok dijagram A=8 B=2 D=4 C=0 B=A+B C=C+1 D > C DA Primjer algoritma programske petlje
Petlja (ciklus) Omogćuje da se algoritamski koraci ponavljaju više puta. definiranje uvjeta uvjet da tijelo petlje ne ne tijelo petlje uvjet da Za svaki i:=k 1 do k 2 korak k 3 tijelo petlje Sve dok-činiti Ponavljaj-sve dok brojač petlja k k 1 broj prolaza n = 2 + 1 k3
Pravila Ako petlja počinjene unutar tada bloka ili inače bloka, u tom bloku se mora i završiti! Dozvoljene su paralelne (ugnježdene) petlje. Nisu dozvoljene petlje koje se sijeku!
Pravila Paralelne petlje petlje koje se sijeku
Predstavljanje algoritma pomoću pseudo koda Koristi se tekstualni način dopunjen formalizmom svaka od osnovnih algoritamskih struktura se predstavlja na točno definiran način: Slijed ili sekvenca se predstavlja kao niz naredbi dodjeljivanja odvojenih simbolom ; a:=5; b:=a*b; c:=b-a;
Predstavljanje algoritma pomoću u pseudo koda (nast( nast.) Grananje Ako je (uvjet) tada ili Ako je (uvjet) niz_naredbi niz_naredbi inače Kraj Ako je; niz_naredbi Kraj Ako je; Ako je (a>b) tada ili max:=a; max:=a Ako je (max<b) tada inače max:=b max:=b Kraj Ako je; Kraj Ako je;
Grananje,, primjer2 max(a,b,c) ako je (a>b) tada ako je (a>c) tada max:=a inače max:=c kraj ako je; inače ako je (b>c) tada max:=b inače max:=c kraj ako je ; kraj ako je; max(a,b,c) if (a>b) then if (a>c) then max:=a else max:=c endif; else if (b>c) then max:=b else max:=c endif; endif;
Petlje pseudo kod Sve dok (uvjet) činiti niz_ naredbi Kraj sve dok; repeat niz_naredbi until (uvjet); Primjer: r:= ostatak od m/n Sve dok (r 0) činiti m:=n; n:=r; r:= ostatak od m/n ; Kraj Sve dok; nzd:=n; Primjer: Ponavljaj r:= ostatak od m/n ; m=n; n:=r; Sve dok (r=0); nzd:=m;
Strukturogrami Kombinacija grafičkog i pseudo koda; Koriste se kao prikladna dokumentacija za već završene programe. Program se piše e uz popunjavanje određene geometrijske slike slijed Ako je uvjet tada inače S1 S2 Sve dok uvjet tijelo petlje tijelo petlje Sve dok uvjet Za svaki i:=n1,n2,n3 tijelo petlje
Strukturogrami - primer if a>b then else then if a>b else max:=a; max:=b; if a>c then else then if b>c else max:=a; max:=c; max:=b; max:=c;
Primjer: Sastaviti algoritam za množenje dvaju proizvoljno zadanih prirodnih brojeva koristeći operaciju zbrajanja. Rješenje: Neka su ulazne veličine prirodni brojevi x i y s vrijednostima kako slijedi : x = 14 i y = 3. X,Y Z
Što je dobar algoritam? U svim okolnostima daje točan rezultat Rješava problem u najkraćem mogućem vremenu Razumljiv je ostalima
KORACI ALGORITMA Prvi korak - razumijevanje problema. Drugi korak - detaljna razrada svakog pojedinačnog koraka. Treći korak provjera algoritma na granične uvjete
Primjer primjera algoritma napisanog hrvatskim jezikom (ne u programskom kodu). Određuje da li je zadani broj n paran ili neparan: 1. POČETAK 2. Pročitaj / Učitaj vrijednost n. 3. Podijeli n sa 2 i zapamti ostatak u pom 4. Ako je pom 0 idi na stavku 7. 5. Ispiši n je neparan broj. 6. Idi na stavku 8. 7. Ispiši n je paran broj. 8. KRAJ
Zbroji dva broja x i y
Podijeli X sa Y
PETLJA
Unesi i zbroji četiri broja x
Obračun telefonskih troškova ZADATAK Sastavite algoritam za obračunavanje telefonskih troškova na kraju mjeseca ako su poznati, broj potrošenih telefonskih impulsa, cijena jednog impulsa i iznos telefonske pretplate. U iznos telefonske pretplate uračunato je prvih 100 impulsa.
da
Grananje(Selekcija) razgranata linijska struktura? ne da inače tada
Ponavljanje (Iteracija) višestruko izvršavanje naredbi - petlja Za svaki i =. naredbe slijedeći i
1. primjer Kreirati blok dijagram koji izračunava zbroj dva broja A i B!
start A, B Z = A + B Z kraj
2. primjer Sastaviti blok dijagram koji izračunava umnožak dva pozitivna broja!
start A, B A>0 B>0 ne da U = A * B U Gdje je greška? kraj
ili start A, B A>0 ne da B>0 ne da U = A * B U kraj
3. primjer Sastaviti blok dijagram koji izračunava razliku dva broja X i Y s tim da se uvijek oduzima manji od većeg.
start X, Y X>=Y da R = X - Y ne R = Y - X R kraj
4. primjer Kreirati blok dijagram koji izračunava zbroj prvih 20 brojeva n brojeva
start Z = 0 i = 1, 20 Z = Z + i start n Z = 0 i = 1, n Z = Z + i Z kraj Z kraj
5. primjer Napraviti algoritam za izračunavanje aritmetičke sredine prvih m brojeva!
start PROSJEK m S = 0 i = 1, m S = S + i P = S / m P kraj
6. primjer Sastaviti dijagram toka koji izračunava funkciju y = x n!
start X, n Y = 1 n=0 da Y kraj ne Y = Y * X n = n - 1
7. Primjer Kreirati algoritam za sljedeći problem: ako je x > 3 => y = x 2 + 5 x = 3 => y = 1 x < 3 => y = 1 / (x 2 + 5)
start x x>3 da Y = x*x+5 ne ne da x=3 Y = 1 Y = 1/(x^2+5) Y kraj
8. Primjer Napraviti dijagram toka za izračunavanje vrijednosti funkcije: x * y za x = y f = x - y za x > y x + y za x < y
start X, Y ne X>Y ne X=Y da da f = X + Y f = X - Y f = X * Y f kraj
Polja/Područja (array) Podatkovna struktura gdje isto ime dijeli više podataka. - uređeni skup podataka čiji su elementi istog tipa. - najčešća struktura podataka - indeks je osnovni elemenat pristupa polju koji definira uređenost polja.
Nizovi jednodimenzionalna polja 1 pozicije u nizu 2 3 4 5 6 7 8 9 10 5 4 9 7 1 9 7 5 9 2 3 6 vrijednosti (elementi) Težina(26) ={ 70,65, 80, 90, 78, 145 } i Težina(i) Za svaki i=1,26 Kraj za svaki S=S+Težina(i)
Za svaki I=1 do n (petlja) Ciklička struktura koja podrazumijeva da je broj iteracija unaprijed poznat: - određena se vrijednost broji od neke početne vrijednosti pa sve do neke krajnje vrijednosti, - rad s područjima (jednodimenzijalna - liste, dvo i višedimenzijalna područja).
Polja/Područja (array) Martica Dužina vijka 1 2 3 4 Promjer vijka 1 2 3 4 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 15P(4,4) 14P(4,3) 13P(4,2) 12P(4,1) 11P(3,4) 10P(3,3) 9P(3,2) 8P(3,1) 7P(2,4) 6P(2,3) 5P(2,2) 4P(2,1) 3P(1,4) 2P(1,3) 1P(1,2) 0P(1,1) Preslikavanje elemenata po redovima MAT(i,j)
Nizovi Unos niza na dva načina: start X(i), n start n i = 1, n X(i)
1. Primjer Napraviti dijagram toka koji izračunava zbroj svih elemenata niza!
start n i = 1, n X(i) Zbroj := 0 i = 1, n Zbroj := Zbroj + X(i) Zbroj kraj
2. Primjer Sastaviti algoritam za sljedeći problem: Dana su dva niza: X(i) i Y(i), i=1, n. Formirati niz Z(i) prema formuli: Z(i) = X(i)*Y(i) za X(i)=Y(i) X(i)+Y(i) za X(i) Y(i) i izračunati sumu elemenata svih nizova!
start X(i), Y(i), n zbroj = 0 i = 1, n X(i)=Y(i) ne da Z(i)=X(i)*Y(i) Z(i)=X(i)+Y(i) zbroj=zbroj+x(i)+y(i)+z(i) 1
1 i = 1, n Z(i) Zbroj kraj
3. Primjer Napraviti blok dijagram koji određuje najveći element niza!
start n i = 1, n Prvi član niza proglasi maksimumom X(i) max = X(1) i = 2, n X(i)>max ne da max = X(i) max kraj
4. Primjer Kreirati blok dijagram koji računa frekvenciju (broj ponavljanja) svakog broja u nizu!
1 2 start i = 1, n j= 1, n n i = 1, n f = 0 p = 0 X(i)=X(j) ne X(i) k = 1, i-1 da f = f+1 1 X(k)=X(i) da p = 1 ne... f kraj p = 0 ne da 2
5. Primjer Napraviti blok dijagram koji za neku provedenu anketu broji koliko je odgovora da, koliko ne, a koliko mozda! Odgovori: ( da, da, ne, mozda, mozda, da, da, mozda, mozda, mozda, ne, da, ne, mozda, da )
start i = 1, 15 1 i = 1, 15 da 2 odg.da ima, a Odg (i) Odg(i)= da a = a+1 odg.nea ima, b da odg.mozda ima, c... a = 0 b = 0 c = 0 Odg(i)= ne b = b+1 kraj 1 Odg(i)= mozda da c = c+1 2
Algoritam - kvadratna jednadžba Napravi dijagram toka za izračunavanje rješenja kvadratne jednadžbe gdje su ulazni objekti koeficijenti kvadratne jednadžbe a,b,c Unesi A,B,C a 1 b -4 c 5 D -4 Izlaz 2+1*i 2-1*i IMA GREŠKA PRONAĐI ISPIŠI X 1 X 2
Kreirati blok dijagram koji određuje najmanji element niza i njegovu poziciju (indeks)!
start n i = 1, n petlja X(i) min = X(1) i = 2, n Petlja, varijabli i pridružuj vrijednosti od 2 do n X(i)<min ne da min = X(i) poz=i min,poz kraj
Algoritam - brojenje znamenki Napravi dijagram toka za brojenje znamenki unesenog broja (npr. za uneseno 324 daje 3) početak br br n cijeli n=0 cijeli = br 324 0 324 1 32.4 cijeli = cijeli / 10 NE 2 3.24 n=n+1 3 0.324 cijeli < 1 n kraj
Što radi ovaj algoritam?
Aritmetička sredina redaka matrice
Algoritam Zadaci 1. Napravi algoritam za igru pogađanja gdje će računalo odrediti neki broj između 0 i 100, recimo 83, a zatim korisnik pokušava pogodit zamišljeni broj i računalo mu odgovara npr. kao što je prikazano u donjoj tablici: Korisnik 50 90 80 83 Računalo Broj je veći Broj je manji Broj je veći Pogodak, broj pokušaja: 4
početak slucajni = RND(100) pokusaj = 0 br pokusaj = pokusaj + 1 'broj je manji' <slucajni br >slucajni 'broj je veči' =slucajni 'Pogodak, broj pokusaja' Što nije u redu (ispravi)? pokusaj kraj
Nacrtati dijagram toka koji će učitati n elemenata niza i ispisati njihovu sumu.
Nacrtati dijagram toka koji će izbrojati koliko ima elemenata jednodimenzionalnog polja koji su manji od učitanog broja X.
Nacrtati dijagram toka koji će učitati niz i ispisati ga obrnutim redoslijedom.
Nacrtati dijagram toka koji će učitati pravokutnu matricu brojeva te izračunati i ispisati sume pojedinih stupaca.
Nacrtati dijagram toka koji će učitati pravokutnu matricu od N redaka i M stupaca brojeva te izračunati i ispisati sume pojedinih redaka.
Nacrtati dijagram toka koji će učitati pravokutnu matricu od N redaka i M stupaca te izračunati i ispisati aritmetičku sredinu svakog retka.
Algoritam Zadaci Napisati program koji će učitavati pozitivne cijele brojeve sve dok se ne unese broj 0, i zatim ispisati koji je najmanji uneseni broj. Zanemariti negativne brojeve zadane pomoću tipkovnice. Napomena: kod traženja najmanjeg (najvećeg) člana niza ili polja koristimo sljedeći algoritam: prvi član niza ili polja proglasimo najmanjim i njegovu vrijednost pohranimo u pomoćnu varijablu koja predstavlja trenutni minimum pretražujemo preostale članove niza (ili polja) i ukoliko je neki od njih manji od trenutnog minimuma, ažuriramo trenutni minimum na tu vrijednost Nakon što smo pretražili cijeli niz ili polje, u pomoćnoj varijabli se nalazi minimalni element niza ili polja Primjer: niz: 5, 6, 3, 9, 4, 7, 2, -1, 5.