PRIMJERI RJEŠAVANJA ZADATAKA Brojanje slova u riječi Zadatak Potrebno je napisati program za utvrđivanje broja ponavljanja svakog pojedinog slova u zadanoj riječi. Primjer : RAČUNALO R 1 A 2 Č -1 U 1 N 1 L 1 O 1 Razvitak programa u koracima preciziranja Konceptualna (idejna) razina Formulacija problema : {Učitati riječ RIJEC}; {Ispitati za svako slovo u riječi RIJEC koliko se puta pojavljuje} {Ispisati sva slova koja se pojavljuju u riječi RIJEC, zajedno s brojem pojavljivanja} Osnovna ideja za algoritamsko rješenje: {Učitati riječ RIJEC; ako RIJEC sadrži manje od 2 slova ponoviti učitavanje} {Ispitati za svako slovo u riječi (S): Ako je neko od prethodnih slova jednako S, tada nađeno = true, inače nađeno = false} {Ako je nađeno = true, BROJAC = broj pojavljivanja slova S desno od S + 1, ispisati S, BROJAC} 1
Algoritam Početak 1. Ponavljaj tako dugo dok nije duljina >= 2 1.1.učitaj RIJEC 1.2.duljina = duzina rijeci RIJEC 2. Za b1 = 1... duljina ponavljaj 2.1. brojac = 1 2.2. nađeno = false 2.3. Ako b1 > 0 tada 2.3.1. Za b2=1... b1 1 ponavljaj 2.3.1.1. p1=rijec b1 2.3.1.2. p2=rijec b2 2.3.1.3.Ako p1=p2 tada 2.3.1.3.1. nadjeno = true 2.3.1.3.2. prekini ponavljanje 2.4. Ako nađeno # true tada 2.4.1. Ako b1 < duljina tada 2.4.1.1. Za b2=b1+1... duljina ponavljaj 2.4.1.1.1. p1=rijec b1 2.4.1.1.2. p2=rijec b2 2.4.1.1.3. Ako p1=p2 tada 2.4.1.1.3.1. brojac = brojac + 1; 2.4.1.2. Ispiši rijec b1, brojac Kraj Logička razina Pseudokod 2
Implementacijska razina Rješenje u C++ LOGIKA PROGRAMIRANJA Svaki informacijski sustav se sastoji od: baze podataka i skupa programa. Najjednostavniji način (metoda) definiranja logike programa je tekstualni opis. Najčešći način je crtanje dijagrama toka programa ili poznatije kao crtanje FLOWCHART-a. 3
Načini prikaza algoritma: dijagram toka programa, stablo odlučivanja, Nassi-Schneidermanov dijagram, pseudokod, tablice odlučivanja, Warnier-Orr-ov dijagram, dijagram programskog proizvoda, strukturna karta, dijagram toka podataka i dr. Prikaz algoritma TEKSTUALNI - prirodni jezik narativni opis algoritma GRAFIČKI - Dijagram toka (Blok dijagram (engl. flowchart)) - slikovno, grafičko predstavljanje algoritma PSEUDOKOD koristi se tekstualni oblik prikaza algoritamskih koraka s formaliziranim programskim strukturama, odgovara redoslijedu pojavljivanja programskih izraza pri konkretnoj implementaciji u programskom jeziku Nassi-Scheidermann diagram - strukturirani dijagrami toka ili iteracijski dijagrami, svaki dijagram odgovara jednoj kontrolnoj programskoj strukturi: sekvenciji, selekciji ili iteraciji Programski jezik algoritam se u računalu implementira pomoću konkretnog programskog jezika 4
Prikaz algoritma, grafički -slijed- Prikaz algoritma, grafički -selekcija- 5
Prikaz algoritma, grafički -iteracija- niz naredbi unutar petlje se izvršava ovisno o nekom uvjetu Provjeri uvjet Izvrši niz naredbi Provjeri uvjet Izvrši niz naredbi... sve dok jednom uvjet ne bude ispunjen Kontrola petlje sastoji se od tri aktivnosti: 1. postavljanje početnog stanja koje će se u petlji modificirati i konačno završiti u stanju za prekid petlje 2. testiranje, tj. usporedba trenutnog stanja sa uvjetom za prekid petlje, ako su jednaki onda se petlja prekida 3. modificiranje, tj. promjena stanja u smjeru prema stanju za prekid petlje 6
Iskustvo pokazuje da je najteži dio rješavanja programerskog problema na računalu upravo razvijanje algoritma za rješenje. Kad je jednom određen ispravan algoritam, razvoj programa za sam algoritam prilično je jednostavan. 7
ALGORITAM i PROGRAM Algoritam: Opis poslova i redslijed izvođenja koji će nakon konačnog broja ponavljanja dovesti do suvislog rezultata Primjer (izračunaj N! ) Zadati (učitati) podatak N Postaviti Nf=1 Za svaki i=1 do N pomnožiti Nf s i Ispisati rezultat Nf Program: Niz poslova koji se izvode određenim redoslijedom. U računalu je: program u memoriji, procesor automatski izvodi program na datoj adresi memorije. scanf ( %d,&n); Nf=1; for (i=1;i<=n;i++) Nf *= i; printf ( \nrezultat je %d,nf); Prikaz algoritma, pseudo-kod Rečenice pisane u govornom jeziku ali u obliku naredbi Tako da su slične naredbama u programskom jeziku Postaviti Nf=1 Zadati (učitati) podatak N Ako je N>=0 onda Za svaki i=1 do N pomnožiti Nf s i Ispisati rezultat Nf U suprotnom Sekvencija Selekcija Iteracija Ispisati poruku o pogreški Kraj selekcije 8
Primjer: Najveći broj Zadano je: Skup podataka u datoteci: PODACI.DAT 23.04 2.005 12.45-8.224 30.01 18.94 Treba pronaći najveći brojiz datog skupa podataka! - nije poznato koliko podataka ima - podacima se pristupa sekvencijalno Primjer: Najvećibroj - plan rješavanja (algoritam) otvoriti datoteku PODACI.DAT pročitati prvi podatak iz datoteke i postaviti ga za max - fopen - fscanf max Ponavljati(do kraja podataka) - fscanf čitati iz datoteke u varijablu x ako je x veći odmax onda - if (x>max) postaviti max = x ispisati riješenje max na ekran -printf max 9
Primjer 2: Najveći broji kolikoihima (algoritam Nmax) Rješenje: Učitati max Postaviti nmax=1 Sve dok ima podataka činiti Učitati x Ako je x=max povećati nmax za 1 Ako je x>max Postavit max=x Postaviti nmax=1 Kraj Ako je.. Kraj Sve dok... RJEŠENJE NIJE POTPUNO ISPRAVNO!! Primjer 2: Najveći broji kolikoihima (algoritam Nmax) Poboljšano rješenje: Učitati x Postaviti max=x Postaviti nmax=0 Sve dok ima podataka činiti Ako je x=max povećati nmax za 1 Ako je x>max Postavit max=x Postaviti nmax=1 Kraj Ako je.. Učitati x Kraj Sve dok... 10
Algoritmi s vektorima i matricama (1) Skalarni produkt dva vektora Fizikalna definicija: y v2 α v1 α2 α1 x v1*v2=v1*v2*cos(α) α= α2 α1 v1*v2*cos(α)= v1*v2*cos(α2 α1)= v1 cos(α1)*v2*cos(α2)+ v1*sin(α1) v2*sin(α2)= v1 x *v2 x +v1 y *v2 y Matematička definicija: Sp=Σ v1 i *v2 i Algoritam: 0 1 2 3 4 n-2 n-1 0 1 2 3 4 n-2 n-1 Postaviti Sp=0 Za svaki i=1 do n povećati Sp za v1[i]*v2[i] Algoritmi s vektorima i matricama (2) Primjer: Naći srednju vrijednost uz uvjet V[i]>x Postaviti S=0 Postviti m=0 Za svaki i=1 do n činiti Ako je V[i]>x činiti Povećati S za V[i] Povećati m za 1 Kraj Ako je... Kraj Za svaki i Podijeliti S s m Ispisati S 11
Algoritmi s vektorima i matricama (3) Množenje matrica * = A B n C Definicija: c ij =Σ a il *b lj l=1 Za svaki i=1 do m Za svaki j=1 do k činiti Postaviti C[i][j]=0 Za svaki l=1 do n povećati C[i][j] za A[i][l]*B[l][j] Kraj za svaki j 12