You are on page 1of 77

Programiranje i algoritmi podloge za vjebe

S v e u i l i t e

Z a g r e b u

Fakultet

strojarstva

brodogradnje

Katedra za konstruiranje i razvoj proizvoda

N. Bojeti, N. Pavkovi, R. Todi, D. Dekovi, D. Marjanovi, D. Rohde

PROGRAMIRANJE I ALGORITMI
Podloge za vjebe programiranje
Visual Basic

Zagreb, 2006.

CADLab, Katedra za konstruiranje i razvoj proizvoda, FSB Zagreb

Programiranje i algoritmi podloge za vjebe

PREDGOVOR

Ove podloge namijenjene su studentima Fakulteta strojarstva i brodogradnje kao pomona literatura za praenje vjebi iz kolegija PROGRAMIRANJE I ALGORITMI i kolegija PRIMJENA RAUNALA B. Gradivo je izloeno redoslijedom kojim se obrauje na vjebama. Temeljni koncepti programiranja obrauju se na predavanjima u satnicom doputenom okviru. Pretpostavka uspjenog savladavanja kolegija je redovito praenje nastave i samostalan rad na raunalu. Vjebe se odravaju na raunalima u PC uionicama CADLab -a. Podloge nikako ne mogu biti zamjena za prouavanje originalnih prirunika i druge literature. Pisanje podloga za kolegij koji obrauje materiju koja je tako podlona brzim promjenama kao raunalstvo, nezahvalan je posao. Sjena zastarijevanja nadvila se nad rukopis onog trenutka kada je zapoela priprema teksta. Ipak vjerujemo da e podloge omoguiti studentima lake savladavanje prvih koraka raunalstva na Fakultetu strojarstva i brodogradnje Sveuilita u Zagrebu. U CADLab -u instalirana raunalna i programska oprema, razvojni alati, CAD/CAE aplikacije, pristup Internetu, te podrka asistenata i demonstratora omoguuju studentima FSB-a usvajanje znanja potrebnih svakom inenjeru. Stoga oekujemo da e studenti koristiti raunala u svakodnevnom radu i izvan kolegija Katedre za osnove konstruiranja.

Autori U Zagrebu, Listopad 2006.

CADLab, Katedra za konstruiranje i razvoj proizvoda, FSB Zagreb

Programiranje i algoritmi podloge za vjebe

Sadraj
Visual Basic je program kontroliran (pokretan) dogaajima "event driven". Dogaaji se mogu pojaviti zahvaljujui akciji korisnika kao to je klik miem ili odabir stavke iz izbornika ili kao rezultat akcije nekog drugog prozora.

Slika 1. Program pokretan dogaajima (event driven)

U "proceduralnim" programima sam program kontrolira redoslijed izvoenja pojedinih dijelova programskog kda. Izvoenje poinje prvom "izvrnom" naredbom i slijedi unaprijed odreene putanje. U programu upravljanom dogaajima programski kd ne slijedi unaprijed odreene putanje, ve se izvode razliiti dijelovi programskog koda kao odgovori na dogaaje. Dogaaji mogu biti pokrenuti akcijom korisnika, porukama sustava ili drugih programa te samog programa. Redoslijed tih dogaaja odreuje putanju kojom e programski kd biti izveden. Budui da se ne moe predvidjeti redoslijed dogaaja (pa niti koji e se dogaaji "dogoditi", a koji ne), programski kd mora uzeti u obzir neke pretpostavke o "opem stanju" (suelja i podataka) kada se pone izvoditi npr. sadri li polje za upis podatka neku vrijednost ili ne i sl. Rijeeni primjeri zadataka sadre i dijagram toka grafiki prikaz algoritma. Standardni elementi dijagrama toka razvijeni su prvenstveno za proceduralne programske jezike, stoga ne sadre sve elemente potrebne za prikaz situacija koje mogu nastupiti u programima upravljanim dogaajima. Stoga u pojedinim primjerima dijagram toka ne odgovara u potpunosti algoritmu primjenjenom u programskom kodu. Za svaki primjer razlike e biti posebno objanjene na vjebama.

CADLab, Katedra za konstruiranje i razvoj proizvoda, FSB Zagreb

Programiranje i algoritmi podloge za vjebe

1.

Opis radnog okruja Microsoft Visual Studio 2005

Nakon pokretanja programskog paketa Microsoft Visual Studio i odabira rada sa Visual Basic-om, pojavljuje se slijedei prozor (slika2):

Otvaranje postojeih projekata

Kreiranje novih projekata

Slika 2: Poetak rada sa Visual Basic-om

Izmeu dvije ponuene opcije u prozoru "Recent projects" za kreiranje novog projekta potrebno je odabrati Create, a za otvaranje ve postojeeg Open. Prilikom odabira novog projekta prikazuje se dijaloki okvir prikazan na slici 3 u kojem je potrebno odabrati tip Visual Basic projekta iz liste vrsta projekata, te iz liste predloaka aplikaciju za Windows operativni sustav (Windows Application). Program nudi predefinirano ime WindowsApplication1 koje se moe promijeniti po elji pod uvjetom da nema praznih mjesta u imenu. Takoer se nudi i predefinirana lokacija za njegovu pohranu koju pomou padajue liste ili naredbenog gumba Browse odabire korisnik.

CADLab, Katedra za konstruiranje i razvoj proizvoda, FSB Zagreb

Programiranje i algoritmi podloge za vjebe

Odabir predloka

Odabir vrste projekta

Upis imena novog projekta

Slika 3. Dijaloki okvir za otvaranje novog projekta

Prozor sa programskim rjeenjima (Solution Explorer) prikazuje naziv rjeenja (Solution; grupa projekata), naziv trenutnog projekta (Project) i sve forme i module unutar projekta. Na poetku prema slici 4 postoji samo jedna forma naziva Form1, zatim datoteka nazvana AssemblyInfo.vb koja je dio metapodataka koji e se prevesti u aktivni sklop (Assembly), te vor referenci (References). U voru se nalaze sve reference koje su na poetku dostupne unutar projekta.

Slika 4 Pretraiva programskih rjeenja

CADLab, Katedra za konstruiranje i razvoj proizvoda, FSB Zagreb

Programiranje i algoritmi podloge za vjebe

2.

Izrada korisnikog suelja aplikacije u Visual Basic-u

Prvi korak u kreiranju aplikacije Visual Basicom je stvaranje suelja aplikacije. Forme i kontrole su osnovni elementi suelja - objekti koji imaju svojstva i dogaaje koji odreuju njihovo ponaanje i interakciju s korisnikom. Postavljanjem svojstava formi i kontrola te pisanjem Visual Basic programskog koda koji e odgovarati na dogaaje, objekti se prilagoavaju zahtjevima aplikacije. Kontrole su objekti koji su sadrani u objektima forme. Svaki tip kontrole ima svoj skup svojstava, metoda i dogaaja koje ga ine prikladnim odreenoj namjeni.

Kreiranje forme za interakciju korisnika i programa izvodi se u prozoru pod opcijom Form1.vb[Design]. Kontrole smjetamo na formu dvoklikom (double click) lijeve tipke mia na odabrano ime kontrole na traci s alatima (Toolbox) ili pritiskom na lijevu tipku i odvlaenjem na formu (drag and drop). Kontrolu koja je inicijano smjetena na formu mogue je pomicati po formi klikom i dranjem lijeve tipke mia iznad nje. Veliina kontrole mijenja se pomicanjem hvataa u obliku bijelih kvadratia (slika 5).

Slika 5 Naredbeni gumb Button1 na formi Form1

CADLab, Katedra za konstruiranje i razvoj proizvoda, FSB Zagreb

Programiranje i algoritmi podloge za vjebe

Slika 6. Prozor s osobinama za naredbeni gumb Button1

Osobine smjetaja kontrole na formi i njena veliina osim miem mogu se mijenjati i u prozoru s osobinama (Properties) u kojem se nalaze i ostale osobine kao to su naziv (Name) odabranog objekta ili kontrole koja e se koristiti u programskom kodu, tekst na gumbu (Text), poravnavanje teksta (TextAlign) itd. Prilikom zadavanja osobina naziva (Name) mogu se postaviti slijedea pravila: naziv ne smije imati prazna mjesta, moraju se koristiti slova engleske abecede, ne smiju se koristiti rezervirane rijei programskog jezika, te neslubeno koritenje prefiksa od tri slova za oznaku vrste objekta. Za naredbeni gumb to je cmd te se na njega doda proizvoljni naziv s velikim poetnim slovom.

Prilikom kreiranja forme i smjetanja objekata na formu, automatski se generira programski kd (Windows Form Designer generated code) u kojem je zapisan kd za vrijednosti osobina objekata.

CADLab, Katedra za konstruiranje i razvoj proizvoda, FSB Zagreb

Programiranje i algoritmi podloge za vjebe

3.

Imenovanje i tipovi varijabli u Visual Basic-u

Prilikom deklariranja varijabli moraju se potivati slijedea pravila za naziv: mora poinjati slovom abecede moe sadravati samo slova, brojeve i znak _ ne moe sadravati toku ne smije biti dui od 255 znakova mora biti jedinstven u dijelu programa u kojem se nalazi varijabla.
Tablica 1. Vrste (tipovi) podataka u Visual Basic-u VRSTA Boolean Byte Char Date Decimal VELIINA 4 Byte-ova 1 Byte 2 Byte-a 8 Byte-ova 12 Byte-ova RASPON VRIJEDNOSTI True ili False 0255 unsigned 065,535 unsigned 1/1/1 CE to 12/31/9999 +/79228162514264337593543950335 bez decimalnog zareza; +/7.9228162514264337593543950335 s 28 decimalnih mjesta iza zareza; najmanji broj razliit od nule je +/0.0000000000000000000000000001 Double 8 Byte-ova 1.79769313486231 E308 do 4.94065645841247 E324 za negativne vrijednosti 4.94065645841247 E-324 do 1.79769313486232 E308 za pozitivne vrijednosti Integer Long Object Short Single 4 Byte-a 8 Byte-ova 4 Byte-a 2 Byte-a 4 Byte-a 2147483648 to 2147483647 9223372036854775808 do 9223372036854775807 Sve vrste objekata 32768 to 32767 3.402823 E38 do 1.401298 E-45 za negativne vrijednosti; 1.401298 E-45 do 3.402823 E38 za pozitivne vrijednostI String 10 Byte-ova (+ znakova u stringu * 2) od 0 do otprilike 2 milijarde Unicode znakova

CADLab, Katedra za konstruiranje i razvoj proizvoda, FSB Zagreb

Programiranje i algoritmi podloge za vjebe

esto se javlja potreba da se u tijeku izvoenja programa izvri konverzija iz jednog tipa varijable u drugi npr. tekst u brojanu vrijednost i obrnuto. Neke od funkcija konverzije navedene su tablici 2:
Tablica 2. Funkcije pretvorbe FUNKCIJA CDbl CInt CLng CSng CStr CVar PRETVORBA U TIP Double Integer Long Single String (tekst) Variable

CADLab, Katedra za konstruiranje i razvoj proizvoda, FSB Zagreb

Programiranje i algoritmi podloge za vjebe

4.

Primjer uporabe uvjetnog grananja

Napisati program za unos tri broja, odreivanje najveeg te izraunavanje razlike izmeu najveeg i zbroja ostala dva broja. Ovaj primjer uvod je u uporabu naredbe (kontrolne strukture) uvjetnog grananja. Dijagram toka prikazan je na slici 7.

START

A, B, C

DA

A>B AND A>C

NE

DA Razlika = A - (B + C)

B>A AND B>C

NE

Razlika = B - (A + C)

Razlika = C - (A + B)

Razlika

END

Slika 7. Dijagram toka

Ulazni podaci: vrijednosti tri broja Izlazni podatak: razlika najveeg broja i zbroja preostala dva

10

CADLab, Katedra za konstruiranje i razvoj proizvoda, FSB Zagreb

Programiranje i algoritmi podloge za vjebe

Dijagram toka zapoinje simbolom "START" koji predstavlja aktiviranje programskog koda. Slijedei simbol ( ) prikazuje uitavanje vrijednosti tri broja, odnosno unos od strane korisnika programa. Operacija uitavanja zapravo dodjeljuje upisane vrijednosti varijablama A, B i C. Varijable su podruja memorije koje rezervira program i u koje se pohranjuju podaci tijekom koritenja programa. Tip varijable (cjelobrojna, realna, tekstualna, itd.) ne prikazuje se u dijagramu toka. Nakon toga potrebno je ustanoviti koji od uitana tri broja ima najveu vrijednost. U ovom primjeru koristimo ispitivanje dva logika uvjeta, na temelju ega izvodimo zakljuak. Ovakav pristup bio bi vrlo neefikasan za traenje maksimalne vrijednosti u veem nizu brojeva, no za tri vrijednosti je zadovoljavajui. Ispitivanje logikog uvjeta prikazuje se u dijagramu toka simbolom ili . Prvo ispitujemo da li je vrijednost varijable A istovremeno vea i od B i od C. Kada treba ispitati dva ili vie povezanih logikih uvjeta, oni se povezuju operatorima logike konjukcije ili disjunkcije (AND ili OR). Ako je odgovor na pitanje prvog uvjeta istinit, znai da je varijabla A najvea, pa varijabla Razlika poprima vrijednost prema izrazu (formuli) A (B + C). Ako prvi uvjet nije ispunjen prelazi se na ispitivanje slijedeeg uvjeta - da li je vrijednost varijable B istovremeno vea i od A i od C. Ako je drugi uvjet ispunjen, vrijednost varijable Razlika rauna se prema formuli B (A + C). Ako ni drugi uvjet nije ispunjen, preostaje jo samo mogunost da varijabla C ima najveu vrijednost, pa se varijabla Razlika rauna prema izrazu C (A + B). Nakon ispitivanja uvjeta i izrauna vrijednosti razlike sve tri grane dijagrama toka spajaju se u voritu u jednu, nakon ega slijedi ispis vrijednosti varijable Razlika (u dijagramu toka simbol predstavlja ispis) i program zavrava (simbol "END").
Kako je ve prije navedeno, standardni elementi dijagrama toka razvijeni su prvenstveno za proceduralne programske jezike, stoga ne sadre sve elemente potrebne za prikaz situacija koje mogu nastupiti u programima upravljanim dogaajima. U programu upravljanom dogaajima programski kd ne slijedi unaprijed odreene putanje, ve se izvode razliiti dijelovi programskog koda kao odgovori na dogaaje. Dogaaji mogu biti pokrenuti akcijom korisnika, porukama sustava ili drugih programa te samog programa. Redoslijed tih dogaaja odreuje putanju kojom e programski kd biti izveden. Zbog navedenih razloga prethodno obrazloeni dijagram toka u ovom primjeru, kao i u svim preostalim primjerima u ovim skriptama ne odgovara u potpunosti programskom rjeenju postavljenog zadatka u Visual Basic-u. Dijagrami tokova dani su uz svaki zadatak prvenstveno radi grafikih prikaza algoritama koji su primjenjeni pri rjeavanju zadataka. Najvee razlike izmeu dijagrama toka i programskog rjeenja veinom su u nainu manipulacije sa ulaznim i izlaznim podacima. Koncepcija kreiranja suelja i manipulacije s podacima u Visual Basic-u omoguuju kreiranje ogromnog broja razliitih varijanti programskog rjeenja koje se temelje na istom osnovnom algoritmu.

Programsko rjeenje prikazanog algoritma u Visual Basic-u zamiljeno je na slijedei nain: korisnik unosi brojeve u tri okvira s tekstom, te nakon unosa aktivira gumb koji pokree proceduru za izraunavanje traenog izlaznog podatka (razlike). U etvrtom okviru procedura ispisuje izraunatu razliku. Pritiskom na gumb za novi niz obrisali bi se svi okviri s tekstom i program bi se pripremio za novi unos.
CADLab, Katedra za konstruiranje i razvoj proizvoda, FSB Zagreb 11

Programiranje i algoritmi podloge za vjebe

Forma se sastoji od slijedeih objekata: 3 okvira s tekstom za unos tri ulazna podatka, jednog okvira s tekstom za ispis razlike (izlaznog podatka), 4 pripadna natpisa, te naredbenog gumba koji pokree proceduru za izraun i naredbenog gumba koji pokree proceduru za novi unos podataka. Konani izgled forme je prikazan na slici 8.

Slika 8. Konani izgled forme

Tablica 3. Vrijednosti osobina za kontrole na formi: INCIJALNI NAZIV OBJEKTA (NAME) Button1 Button2 TextBox1 TextBox2 TextBox3 TextBox4 Label1 Label2 Label3 Label4 NOVI NAZIV (NAME) cmdIzracunaj cmdNovi txtA txtB txtC txtRazlika lblBroj_A lblBroj_B lblBroj_C lblRazlika Broj A: Broj B: Broj C: Razlika: Izraunaj Novi unos NOVI TEKST

12

CADLab, Katedra za konstruiranje i razvoj proizvoda, FSB Zagreb

Programiranje i algoritmi podloge za vjebe

Za svaki dogaaj, u naem sluaju za pritisak na gumb, potrebno je dodati pripadajui programski kd. Prozor s programskim kdom otvara se dvoklikom na objekt s forme ili odabirom opcije View code u prozoru s rjeenjima (Solution Explorer). Varijable se prije uporabe deklariraju. Globalne varijable su postojane, traju koliko i program i zadravaju vrijednosti od jednog poziva funkcije do drugog. Lokalne varijable su deklarirane unutar funkcije (ili bloka) i traju samo dok se funkcija (blok) izvodi. Programski kd zapoinje deklariranjem globalnih varijabli A, B, C i Razlika kao tipa Double tj. realni brojevi dvostruke preciznosti. Globalne varijable deklariramo u klasi Form1:
Public Class Form1 Inherits System.Windows.Forms.Form Dim A, B, C, Razlika As Double Inicijalno su vrijednosti brojanih varijabli nakon deklariranja jednake 0, no mogue ih je i definirati tako da na poetku imaju neku konkretnu vrijednost npr: Dim X as Integer = 12

Dvoklikom na objekt cmdIzracunaj, Visual Basic automatski kreira poetni kd za potprogram dogaaja cmdIzracunaj_Click() tj. aktiviranje naredbenog gumba cmdIzracunaj:
Private Sub cmdIzracunaj_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmdIzracunaj.Click End Sub

Izmeu Private Sub cmd_Izracunaj i End Sub upisuje se programski kd koji se izvrava nakon aktiviranja gumba od strane korisnika. Kada je korisnik unio brojeve u okvire s tekstom, u potprogramu za dogaaj cmdIzracunaj_Click postavljaju se vrijednosti varijabli A, B i C na vrijednosti unesene u okvre s tekstom txtA, txtB i txtC prema:
Private Sub cmdIzracunaj_Click(ByVal sender As System.Object,_ ByVal e As System.EventArgs) Handles cmdIzracunaj.Click A = CDbl(txtA.Text) B = CDbl(txtB.Text) C = CDbl(txtC.Text)

Tekst unesen u okvir s tekstom txtA prikazan je izrazom txtA.Text. Vrijednosti osobina zapisuju se u obliku objekt.osobina. Nakon upisanog imena objekta i toke, Visual Basic nudi popis osobina koju moemo automatski upisati odabirom i pritiskom tipke Tab (slika 9).
CADLab, Katedra za konstruiranje i razvoj proizvoda, FSB Zagreb 13

Programiranje i algoritmi podloge za vjebe

Slika 9.Automatski upis osobine

Funkcija CDbl oznaava pretvorbu (eng. converting) tekstualne vrijednosti u numeriku vrijednost tipa Double. Prema dijagramu toka potrebno je ispitati da li je vrijednost varijable A istovremeno vea i od varijable B i od varijable C. Za tu svrhu koristi se naredba uvjetnog grananja (odn. logike usporedbe) koja odreuje koji e se dio programskog koda izvriti ovisno o istinitosti ispitanog uvjeta. Openiti zapis sintakse: If uvjet_1 Then blok_naredbi_1 Elseif uvjet_2 blok_naredbi_2 Else blok_naredbi_3 Endif Potrebno je ispitati da li su zadovoljena dva uvjeta istovremeno, pa u takvom sluaju takve uvjete treba povezati tzv. logikim operatorom konjukcije (And). Svaki od dva povezana uvjeta koristi operator usporedbe oznaen simbolom >.
If A > B And A > C Then End If

Tablica 4. Popis operatora usporedbe OPERATOR VRSTA USPOREDBE Jednakost Manje od Manje ili jednako Vee od Vee ili jednako Nejednakost

= < <= > >= <>

14

CADLab, Katedra za konstruiranje i razvoj proizvoda, FSB Zagreb

Programiranje i algoritmi podloge za vjebe

Ovisnost rezultata logikih operacija o vrijednostima operanada obino se prikazuje tzv. tablicom "istinitosti" za logike operatore (A i B su operandi logike varijable): A istina istina la la B istina la istina la A AND B istina la la la A OR B istina istina istina la

Ako su oba uvjeta zadovoljena izraunava se i dodjeljuje vrijednost varijabli Razlika prema izrazu A (B + C) gdje naredba Razlika = A (B + C) ne predstavlja matematiku jednadbu ve dodjeljivanje (pridruivanje), to znai da lijeva strana od znaka jednakosti poprima vrijednost desne strane. Zatim se izlazi iz strukture, odn. nastavlja se sa slijedeom naredbom iza rezervirane rijei EndIf. Ako jedan ili oba uvjeta nisu zadovoljeni, unutar strukture naredbe uvjetnog grananja prelazi se na ispitivanje slijedeeg uvjeta iza rezervirane rijei ElseIf (da li je varijabla B istovremeno vea od varijabli A i C).
If A > B And A > C Then Razlika = A - (B + C) ElseIf B > A And B > C Then Razlika = B - (A + C) End If

Ako je taj uvjet ispunjen, izraunava se i dodjeljuje vrijednost varijabli Razlika prema izrazu B (A + C). Ako niti taj uvjet nije ispunjen onda preostaje samo mogunost da je vrijednost varijable C najvea vrijednost varijable razlika tada se izraunava prema naredbi koja slijedi iza rezervirane rijei Else. Cjelokupni programski kd naredbe uvjetnog grananja IfThenElse za ovaj primjer je:
If A > B And A > C Then Razlika = A - (B + C) ElseIf B > A And B > C Then Razlika = B - (A + C) Else Razlika = C - (A + B) End If

Ovdje je vano uoiti i razumjeti da e se, ovisno o vrijednostima varijabli A, B i C uvijek izvriti jedna i samo jedna od triju naredbi za dodjeljivanje vrijednosti varijabli Razlika, a nakon toga izvoenje programa se nastavlja sa prvom slijedeom naredbom iza rezerviranje rijei End If koja oznaava kraj strukture uvjetnog grananja.

CADLab, Katedra za konstruiranje i razvoj proizvoda, FSB Zagreb

15

Programiranje i algoritmi podloge za vjebe

Na kraju potprograma ispisuje se vrijednost varijable Razlika u okvir s tekstom txtRazlika.


txtRazlika.Text = Razlika

Potprogram cmdNovi_Click za novi unos vraa osobine objekata na poetne vrijednosti. Cjelokupni programski kd rjeenja zadatka je slijedei:
Public Class Form1 Inherits System.Windows.Forms.Form Dim A, B, C, Razlika As Double Private Sub cmdIzracunaj_Click(ByVal sender As System.Object,_ ByVal e As System.EventArgs) Handles cmdIzracunaj.Click A = CDbl(txtA.Text) B = CDbl(txtB.Text) C = CDbl(txtC.Text) If A > B And A > C Then Razlika = A - (B + C) ElseIf B > A And B > C Then Razlika = B - (A + C) Else Razlika = C - (A + B) End If txtRazlika.Text = Razlika End Sub Private Sub cmdNovi_Click(ByVal sender As System.Object,_ ByVal e As System.EventArgs) Handles cmdNovi.Click txtA.Text = "" txtB.Text = "" txtC.Text = "" txtRazlika.Text = "" End Sub End Class

16

CADLab, Katedra za konstruiranje i razvoj proizvoda, FSB Zagreb

Programiranje i algoritmi podloge za vjebe

Slika 10. Izbornik Debug

Da bi se program pokrenuo, prvo je potrebno izvriti prevoenje u strojni jezik. Proces prevoenja pokreemo klikom na gumb Start u traci s alatima, pritiskom F5 na tipkovnici ili pod opcijom Debug Start u standardnoj traci (slika 10). Ako nema sintaksnih greaka, odmah nakon prevoenja programa program e se i pokrenuti, tj. prikazati e se forma na ekranu u obliku novog aktivnog prozora. Primjer ispisa na formi nakon koritenja programa prikazan je na slici 11.

Slika 11. Ispis na formi nakon izvoenja programa

Prilikom osmiljavanja i pisanja programskog koda dolazi do pogreaka koje se odraavaju na rad programa, tj. ine da program ne radi kako je zamiljeno. Openito, greke mogu biti: sintaksne pogreke kod pisanja, npr. krivo napisana varijabla ili rezervirana programska rije, greke prilikom rada (runtime error) nema sintaksne greke ve se greka dogaa prilikom izvravanja programskog koda npr. kada se eli izvriti objekt bez prethodnog instanciranja. Prilikom takve greke program moe zaustaviti rad. logike greke najtee se otkrivaju, a javljaju se kao rezultat logikih greaka u algoritmima aplikacije.
17

CADLab, Katedra za konstruiranje i razvoj proizvoda, FSB Zagreb

Programiranje i algoritmi podloge za vjebe

5.

Zbroj niza vrijednosti

Napisati program za unos niza brojeva i izraunavanje aritmetike sredine. Ovaj primjer prikazuje jedan od najjednostavnijih algoritama zbrajanje niza vrijednosti. Aritmetika sredina rauna se prema jednadbi: x = 1 n xi n i =1
START

Ponavljanje ucitavanja i zbrajanja koje korisnik realizira ponovnim pozivom procedure

Zbroj = Zbroj + x

n=n+1

Korisnik odlucuje o tijeku izvravanja preko sucelja

Sredina = Zbroj / n

Sredina

END
Slika 12. Dijagram toka

Na poetku nema niti jednog unesenog broja tako da je varijabla n jednaka nuli. Korisnik unosi broj x, a varijabla Zbroj se uveava za vrijednost varijable x. Nakon toga se i varijabla n uveava za jedan (zato to smo unijeli 1 broj) izrazom n = n + 1, tj. iz 0 se mijenja u 1. Ponavljajui ovaj postupak unoenjem razliitih brojeva preko varijable x, mijenjaju se varijable Zbroj i n. Aritmetika sredina cijelog niza definirana je varijablom Sredina koja e imati vrijednost Sredina = Zbroj / n. Na kraju programa ispisuje se vrijednost aritmetike sredine.

18

CADLab, Katedra za konstruiranje i razvoj proizvoda, FSB Zagreb

Programiranje i algoritmi podloge za vjebe

Jedna od moguih izvedbi ovog dijagrama toka u Visual Basic-u i koritenja od strane korisnika bila bi da korisnik unosi pojedini broj u jedan okvir s tekstom, te nakon unosa aktivira gumb za potvrdu. U drugom okviru bi se ispisivalo koliko je brojeva dosad uneseno, a aktiviranjem gumba za izraunavanje srednje vrijednosti u treem bi se okviru ispisivala aritmetika sredina. Pritiskom na gumb za novi niz praznili bi se okviri s tekstom i program bi se pripremio za novi unos. Konani izgled forme prikazan je na slici 13:

Slika 13. Konani izgled forme

Vrijednosti osobina objekata koje treba promijeniti u okviru s osobinama (Properties) prikazane su u tablici 6:
Tablica 5. Izmijenjene vrijednosti osobina za objekte INCIJALNI NAZIV OBJEKTA (NAME) Button1 Button2 Button3 TextBox1 TextBox2 TextBox3 Label1 Label2 Label3 NOVI NAZIV (NAME) cmdUnesi cmdIzracunaj cmdNovi_niz txtUnos txtVelicina txtSredina lblUpisite lblVelicina lblSredina Upiite broj: Veliina niza: Arit. sredina: Unesi Izraunaj Novi niz NOVI TEKST

CADLab, Katedra za konstruiranje i razvoj proizvoda, FSB Zagreb

19

Programiranje i algoritmi podloge za vjebe

Poetnu vrijednost za okvir s veliinom niza treba postaviti na 0. Varijabli x pridodaje se brojana vrijednost unesena u okvir s tekstom txtUnos, a varijabli Zbroj vrijednost varijable x:
x = Val(txtUnos.Text) Zbroj = Zbroj + x

Funkcija Val() pretvara unesene znakove u broj iji je tip deklariran varijablom (Integer, Double). Zatim se dodaje programski kd za ispis veliine niza, tj. za ispis vrijednosti varijable n u okvir s tekstom txtVelicina
txtVelicina.Text() = n

U ovom sluaju varijable Zbroj i n su globalne jer se koriste i u potprogramu za izraunavanje aritmetike sredine (Sredina = Zbroj / n), dok je varijabla x lokalna. Lokalna varijabla x deklarira se u potprogramu cmdUnesi_Click kao realni broj prema shemi:
Dim x As Double

Globalne varijable deklariramo u klasi Form1:


Public Class Form1 Inherits System.Windows.Forms.Form Dim n As Integer Dim Zbroj As Double

Vrijednost varijable n biti e cjelobrojni, a varijable Zbroj realni broj. Varijabla n (veliina niza) inicijalno ima vrijednost 0, to odgovara programu jer pri pokretanju programa nije unesen niti jedan broj. Nakon unosa i aktiviranja dogaaja cmdUnesi_Click varijabla n mora se uveati za 1
n = n + 1

i prikazati u okviru s tekstom txtVelicina prema kodu:


txtVelicina.Text() = n

Nakon unosa vrijednosti u varijablu x znakove upisane od strane korisnika u okvir s tekstom txtUnos je potrebno obrisati tj. dodijeliti osobini Text vrijednost praznog stringa prema:
txtUnos.Text = ""

Cjelokupni programski kd za ovaj dogaaj kao i za cijeli program nalazi se na kraju odjeljka.

20

CADLab, Katedra za konstruiranje i razvoj proizvoda, FSB Zagreb

Programiranje i algoritmi podloge za vjebe

U programskom kodu potprograma dogaaja cmdIzracunaj_Click, za izraun i ispis aritmetike sredine varijabla Sredina poprima vrijednost kvocijenta ukupnog zbroja niza i veliine niza tj. Zbroj / n. Prethodno je potrebno lokalno deklarirati varijablu Sredina.
Dim Sredina As Double Sredina = Zbroj / n

Tako izraunatu vrijednost varijable Sredina potrebno je ispisati u okvir s tekstom txtSredina.
txtSredina.Text = Str(Sredina)

U programskom kodu potprograma dogaaja cmdNovi_niz_Click, radi pripreme programa za novi unos i izraun sredine, vrijednosti globalnih varijabli n i Zbroj potrebno je vratiti na 0.
n = 0 Zbroj = 0

Okvire s tekstom potrebno je postaviti na poetne vrijednosti osobina prema:


txtVelicina.Text = "0" txtUnos.Text = "" txtSredina.Text = ""

Cjelokupni kd programa je kako slijedi:


Public Class Form1 Inherits System.Windows.Forms.Form Dim n As Integer Dim Zbroj As Double Private Sub cmdUnesi_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmdUnesi.Click Dim x As Double x = Val(txtUnos.Text) Zbroj = Zbroj + x n = n + 1 txtVelicina.Text() = n txtUnos.Text = "" End Sub

CADLab, Katedra za konstruiranje i razvoj proizvoda, FSB Zagreb

21

Programiranje i algoritmi podloge za vjebe Private Sub cmdIzracunaj_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmdIzracunaj.Click Dim Sredina As Double Sredina = Zbroj / n txtSredina.Text = Str(Sredina) End Sub Private Sub cmdNovi_niz_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmdNovi_niz.Click n = 0 Zbroj = 0 End Sub End Class

Slika 14. Rad programa

22

CADLab, Katedra za konstruiranje i razvoj proizvoda, FSB Zagreb

Programiranje i algoritmi podloge za vjebe

6.

Izraun faktorijela brojaem)

(primjena

petlje

Napisati program za uitavanje niza pozitivnih cijelih brojeva te izraun zbroja faktorijela elemenata tog niza koji su manji od 10. Formula za izraun faktorijela broja x:
x! = 1 2 3 4 K ( x 2 ) ( x 1) x

Slika 15. Dijagram toka

CADLab, Katedra za konstruiranje i razvoj proizvoda, FSB Zagreb

23

Programiranje i algoritmi podloge za vjebe

Prema dijagramu toka prikazanom na slici 15 potrebno je unijeti broj x i provjeriti da li je on manji od 10. Ako nije, program ga ne uzima u obzir te se dalje nastavlja s unosom drugih brojeva. Ako je x manji od 10 potrebno je izraunati njegov faktorijel (umnoak broja i svih njegovih prethodnika poevi od 1, npr faktorijel od 3 je umnoak 1 * 2 * 3 = 6) pomou petlje koja poveava vrijednost varijable brojaa i za 1 dok ne poprimi vrijednost broja x. Nova vrijednost varijable Faktorijel formira se tako da je pomnoimo s vrijednou varijable i (Faktorijel = Faktorijel * i). Kada varijabla i poprimi vrijednost x izlazi se iz petlje i izraunata vrijednost faktorijela se pribraja vrijednosti varijable Zbroj prema izrazu Zbroj = Zbroj + Faktorijel. Vrijednost varijable Zbroj ispisuje se na formi. Na formi se nalaze okvir s tekstom txtUnos za unos brojeva, okvir s tekstom txtZbroj za ispis zbroja faktorijela, naredbeni gumb cmdIzracunaj za potvrdu unosa izraun sume i dodavanje unesenog broja na popis. Forma jo sadri okvir s popisom lstLista te pripadne natpise.

Slika 16. Konani izgled forme

Varijable Faktorijel i Zbroj su globalne varijable, a x i i lokalne unutar potprograma za dogaaj cmdIzracunaj_Click.
Public Class Form1 Inherits System.Windows.Forms.Form Dim Faktorijel, Zbroj As Double Private Sub cmdIzracunaj_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmdIzracunaj.Click Dim x, i As Integer

Nakon unosa broja i pritiska na naredbeni gumb vrijednost varijable x poprima vrijednost teksta unesenog u okvir s tekstom txtUnos tipa Integer. Vrijednost osobine Text za okvir txtUnos se nakon toga vraa na poetnu vrijednost.
24 CADLab, Katedra za konstruiranje i razvoj proizvoda, FSB Zagreb

Programiranje i algoritmi podloge za vjebe x = CInt(txtUnos.Text) txtUnos.Text = ""

Vrijednost varijable x mora biti manja od 10. Ako korisnik nije unio takav broj, program ne smije izraunavati faktorijel i zbroj. Stoga se postavlja uvjet preko strukture odluke IfThen:
If x < 10 Then End If

Ako je uvjet zadovoljen izvrava se programski kd (unutar strukture odluke) za ispis varijable x na popis lstLista preko osobine Items.Add, te se vrijednost varijable Faktorijel postavlja na vrijednost 1.
lstLista.Items.Add(x) Faktorijel = 1

Izraunavanje faktorijela za broj x izvodi se preko For...Next petlje. For petlja izvrava programski kd odreeni broj puta prema openitom zapisu: For broja = poetak To kraj [Step korak] [naredbe] Next Broja je brojana varijabla koja se koristi za praenje iteracija unutar petlje. Broja poinje od vrijednost poetak, vrijednost kraj je maksimalna vrijednost brojaa na kojoj se petlja zaustavlja. Step predstavlja korak za poveavanje brojaa (predefinirana vrijednost je 1, a moe biti i negativna) U ovom primjeru broja e biti varijabla i kojoj je poetna vrijednost 1, a kraj vrijednost varijable x (korak poveanja e ostati predefiniran, tj. 1). Unutar petlje varijabla Faktorijel poprimat e vrijednost umnoka vlastite vrijednosti i varijable brojaa i. Npr u prvoj iteraciji petlje vrijednost umnoka e biti 1*1=1, u drugoj, 1*2=2, u treoj 2*3=6 itd. dok i ne poprimi vrijednost varijable x.
For i = 1 To x Faktorijel = Faktorijel * i Next i

Nakon izlaska iz petlje dobivena vrijednost varijable Faktorijel pribraja se ukupnom zbroju faktorijela svih brojeva (varijabla Zbroj) koji treba ispisati. Cjelokupni programski kd je:
Public Class Form1 Inherits System.Windows.Forms.Form Dim Faktorijel, Zbroj As Double

CADLab, Katedra za konstruiranje i razvoj proizvoda, FSB Zagreb

25

Programiranje i algoritmi podloge za vjebe Private Sub cmdIzracunaj_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmdIzracunaj.Click Dim x, i As Integer x = CInt(txtUnos.Text) txtUnos.Text = "" If x < 10 Then lstLista.Items.Add(x) Faktorijel = 1 For i = 1 To x Faktorijel = Faktorijel * i Next i Zbroj = Zbroj + Faktorijel End If txtZbroj.Text = Zbroj End Sub End Class

Slika 17. Rad programa

26

CADLab, Katedra za konstruiranje i razvoj proizvoda, FSB Zagreb

Programiranje i algoritmi podloge za vjebe

7.

Zbroj lanova reda logikim uvjetom

uporaba

petlje

sa

Program slui za izraunavanje i ispisivanje zbroja lanova reda, te potrebnog broja lanova reda n za zadanu tonost.
START

Tocnost

NE

Tocnost > 0 AND Tocnost <= 1

DA

i=1 x=1

NE

x > Tocnost

DA

Zbroj = Zbroj + x

i=i+1

x = (-1) ^ (i + 1) / (2 * i 1)

Velicina = i - 1

Zbroj, Velicina

END

Slika 18. Dijagram toka CADLab, Katedra za konstruiranje i razvoj proizvoda, FSB Zagreb 27

Programiranje i algoritmi podloge za vjebe

Potrebno je odrediti broj lanova reda tako da apsolutna vrijednost posljednjeg lana reda bude manja od uitane vrijednosti , gdje je 0 < 1. Formula reda glasi:

f(n) = 1 - 1/3 + 1/5 - 1/7 + 1/9 - ....... 1/ ( 2n - 1 )

gdje je n=1,2,3...

Prema dijagramu toka na slici 18 korisnik unosi tonost koju e predstavljati varijabla Tocnost. Ako usporedba unesene vrijednosti pokazuje da tonost nije vea od 0 i manja ili jednaka 1 program trai novi unos. Ako je uvjet zadovoljen postavlja se poetni lan reda x = 1 i broja varijabla i = 1. Nakon usporedbe s varijablom Tocnost vrijednost varijable Zbroj se uveava za vrijednost varijable lana x. Broja varijabla i se uveava za 1 te se kreira novi lan reda prema formuli: x = (-1) ^ (i + 1) / (2 * i 1). Tako izraunat lan x usporeuje se s vrijednou varijable i postupak se ponavlja dok vrijednost varijable x ne postane manja od vrijednosti varijable Tocnost. Tada se ispisuje ukupni zbroj (Zbroj) i veliina reda lanova (Velicina) te program zavrava. Izgled forme je prema slici 19 s okvirima s tekstom txtTocnost, txtVelicina i txtZbroj te naredbenim gumbom cmdIzracunaj.

Slika 19. Izgled forme

Cijeli kd za ovaj program smjestit e se unutar potprograma cmdIzracunaj_Click. Varijable Tocnost, x i Zbroj su tipa Double, a Velicina i i su Integer. Brojane varijable se ne moraju nuno deklarirati s poetnom vrijednosti 0. Prema formuli reda varijabla i poinje s 1 stoga e se deklarirati s poetnom vrijednosti 1 prema izrazu:
Dim i As Integer = 1

Vrijednost varijable Tocnost dobije se iz unosa u okvir s tekstom txtTocnost, a ako je ta vrijednost manja od 0 ili vea ili jednaka 1 prilikom rada programa prikazat e se okvir s porukom (Message Box) koji e upozoriti korisnika na pogrean unos te izai iz potprograma funkcijom Exit Sub prema:
Tocnost = CDbl(txtTocnost.Text) If Tocnost < 0 Or Tocnost >= 1 Then MsgBox("Broj mora biti pozitivan i manji od 1") 28 CADLab, Katedra za konstruiranje i razvoj proizvoda, FSB Zagreb

Programiranje i algoritmi podloge za vjebe Exit Sub End If

Opi zapis izraza za okvir s porukom je: MsgBox(poruka, [vrsta], [naslov]) pri emu je poruka izraz tipa String, zapisuje se izmeu navodnika, a prikazuje se korisniku u okviru s tekstom. Izrazi u uglatim zagradama nisu obavezni. Vrsta se odnosi na stil okvira s porukom, a naslov je tekst ispisan na traci s naslovom (Title bar) okvira. U ovom primjeru poruka je "Broj mora biti pozitivan i manji od 1", vrsta je predefinirana tj. MsgboxStyle.DefaultButton1 i ima jedan OK gumb za potvrdu (slika 20).

Slika 20. Okvir s porukom

Ako je zadovoljen uvjet za vrijednost varijable Tocnost, prelazimo na izraun broja x i ukupnog zbroja preko While petlje. While petlja se koristi za izvravanje programskog koda vie puta bez prethodnog znanja broja potrebnih iteracija. Petlja traje dok je uvjet istinit (True). Postoji vie izvedbi ove petlje, a opi zapis je: Do [{While | Until} uvjet] [naredbe] Loop Kod Do While petlje provjerava se da li je uvjet istinit te se izvravaju izrazi programskog koda ukljuujui prvu iteraciju. Petlja zavrava kada uvjet poprimi vrijednost False. Do Until petlja zavrava kada uvjet poprimi vrijednost True. U ovom primjeru izraunavat e se x i Zbroj sve dok je apsolutna vrijednost varijable x vea od zadane tonosti prema izrazu: Math.Abs(x) > Tocnost Funkcija Math koristi se za matematike funkcije (sin, cos, tan, log), a u ovom primjeru za izraun apsolutne vrijednosti koristit e se funkcija Abs. Unutar petlje izraunavat e se pojedini lanovi i njihov ukupni zbroj, te e se uveavati varijabla i za novu iteraciju i broja lanova reda.
Do While Math.Abs(x) > Tocnost CADLab, Katedra za konstruiranje i razvoj proizvoda, FSB Zagreb 29

Programiranje i algoritmi podloge za vjebe x = (-1) ^ (i + 1) / (2 * i - 1) Zbroj = Zbroj + x i = i + 1 Velicina = Velicina + 1 Loop

Kada uvjet vie nije ispunjen izlazi se iz petlje i ispisuje zbroj i veliina reda u predviene okvire.
Private Sub cmdIzracunaj_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmdIzracunaj.Click Dim Velicina As Integer Dim i As Integer = 1 Dim x, Tocnost, Zbroj As Double Tocnost = CDbl(txtTocnost.Text) If Tocnost < 0 Or Tocnost >= 1 Then MsgBox("Broj mora biti pozitivan i manji od 1") Exit Sub End If x = 1 Do While Math.Abs(x) > Tocnost x = (-1) ^ (i + 1) / (2 * i - 1) Zbroj = Zbroj + x i = i + 1 Velicina = Velicina + 1 Loop txtVelicina.Text = Velicina txtZbroj.Text = Zbroj End Sub

Slika 21. Rad programa

30

CADLab, Katedra za konstruiranje i razvoj proizvoda, FSB Zagreb

Programiranje i algoritmi podloge za vjebe

8.

Uporaba polja

strukture

jednodimenzionalnog

Program slui za unos niza brojeva i izraun aritmetike sredine:

x=

1 n xi n i =1

START

i = 1, n

A (i)

i = 1, n

Zbroj = Zbroj + A(i)

Sredina = Zbroj / n

Sredina

END
Slika 22. Dijagram toka

Program ima istu funkciju kao i program opisan u zadatku 2 osim to e se brojevi unositi u polje (array). Prema dijagramu prikazanom na slici 22 brojevi se unose u jednodimenzionalno polje A. Polja omoguuju viestruku pohranu istog tipa podataka bez kreiranja posebnih varijabli za svaki od podataka. Svi podaci su na taj nain pohranjeni pod istim imenom, a manipulacija s pojedinim podatkom izvodi se preko indeksa polja. Jednodimenzionalno polje moemo zamisliti kao redak s podacima gdje je svaki podatak smjeten u svoj stupac. Primjer polja A s 5 elemenata koji su cijeli brojevi:
CADLab, Katedra za konstruiranje i razvoj proizvoda, FSB Zagreb 31

Programiranje i algoritmi podloge za vjebe

indeks A(indeks)

0 12

1 238

2 17

3 89

4 975

Indeks za polje A predstavlja u ovom primjeru varijabla i. Za razliku od zadatka 2 gdje se nakon svakog unosa izraunavao zbroj, u ovom primjeru najprije e se unijeti svi brojevi u polje. Zatim e se varijabli Zbroj dodavati vrijednosti elemenata polja A pomou petlje s brojaem i. Petlja e najprije varijabli Zbroj dodati A(0), pa na izraunatu vrijednost dalje dodavati A(1), A(2) itd. sve do A(n). Na izalsku iz petlje varijabla Zbroj imati e vrijednost sume svih elemenata polja A. Nakon petlje slijedi izaunavanje i ispis vrijednosti aritmetike sredine.

Slika 23. Konani izgled forme

Polje se deklarira na isti nain kao i varijabla uz razliku to se u zagradama definira maksimalni broj elemenata. Polje A() imati e maksimalno 100 elementa pa se deklarira (globalno) prema:
Dim A(100) As Single

Polje A(100) deklarirali smo kao Single, stoga e i zbroj njegovih elementa (varijabla Zbroj) biti Single. Deklariranje razliitih varijabli istog tipa moemo skratiti odvajajui varijable zarezom:
Dim A(100), Zbroj As Single

Brojevi se unose u polje preko dogaaja cmdUnesi_Click prema:


txtUnos.Focus() i = i + 1 A(i) = CInt(txtUnos.Text) txtVelicina.Text() = i txtUnos.Text = ""

gdje preko osobine Focus okvir txtUnos postaje aktivan za upis.


32 CADLab, Katedra za konstruiranje i razvoj proizvoda, FSB Zagreb

Programiranje i algoritmi podloge za vjebe

Zbroj se izraunava u potprogramu cmdIzracunaj_Click dodavajui pojedini lan A(k) ForNext petljom s brojaem varijablom k prema:
Dim Sredina As Single Dim k As Integer For k = 1 To i Zbroj = Zbroj + A(k) Next k Sredina = Zbroj / i txtSredina.Text = Str(Sredina)

gdje broja k poprima vrijednosti od 1 do i. Cjelokupni programski kod:


Public Class Form1 Inherits System.Windows.Forms.Form Dim i As Integer Dim A(100), Zbroj As Single Private Sub cmdUnesi_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmdUnesi.Click txtUnos.Focus() i = i + 1 A(i) = CInt(txtUnos.Text) txtVelicina.Text() = i txtUnos.Text = "" End Sub Private Sub cmdIzracunaj_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmdIzracunaj.Click Dim Sredina As Single Dim k As Integer For k = 1 To i Zbroj = Zbroj + A(k) Next k Sredina = Zbroj / i txtSredina.Text = Str(Sredina) End Sub

CADLab, Katedra za konstruiranje i razvoj proizvoda, FSB Zagreb

33

Programiranje i algoritmi podloge za vjebe Private Sub cmdNovi_niz_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmdNovi_niz.Click txtUnos.Focus() i = 0 Zbroj = 0 txtVelicina.Text = "0" txtUnos.Text = "" txtSredina.Text = "" End Sub End Class

Slika 24. Rad programa

34

CADLab, Katedra za konstruiranje i razvoj proizvoda, FSB Zagreb

Programiranje i algoritmi podloge za vjebe

9.

Odreivanje minimuma i maksimuma unutar niza vrijednosti

Program slui za unos niza brojeva u polje i ispis brojeva koji imaju najveu i najmanju vrijednost.
START
Ucitavanje clanova polja uzastopnim pozivanjem procedure

i=i+1

A(i)

Max = A (1) Min = A (1)

j = 1, i

Da

A(j) > Max

Ne

Max = A(j)

A(j) < Min Ne

Da Min = A(j)

Min Max END


Slika 25. Dijagram toka

CADLab, Katedra za konstruiranje i razvoj proizvoda, FSB Zagreb

35

Programiranje i algoritmi podloge za vjebe

Prema dijagramu na slici 25 brojevi se unose u polje A. Nakon unosa, varijable koje predstavljaju najvei i najmanji broj poprimaju vrijednost prvog lana polja A(1). Usporedbom svakog lana polja s trenutnim uspostavljaju se novi minimalni i maksimalni broj.

Slika 26. Konani izgled forme

Programski kd za dogaaj cmdUnos_Click je:


i += 1 A(i) = CDbl(txtUnos.Text) lstLista.Items.Add(txtUnos.Text) txtUnos.Text = "" txtUnos.Focus()

Svakim unosom broja u polje A(i) iz okvira s tekstom txtUnos, potvrdom na gumb cmdUnesi uveava se varijabla i za jedan tj. i = i + 1. Visual Basic omoguava pisanje ovog izraza u obliku i += 1. Uneseni brojevi unose se u popis lstLista. Nakon poetnog definiranja, varijable Min i Max poprimaju vrijednosti prvog lana polja A(1). ForNext petlja svaki element polja usporeuje s vrijednostima varijabli Min i Max preko IfThen struktura odluke.
For j = 1 To i If A(j) < Min Then Min = A(j) End If If A(j) > Max Then Max = A(j) End If Next j

36

CADLab, Katedra za konstruiranje i razvoj proizvoda, FSB Zagreb

Programiranje i algoritmi podloge za vjebe

Ako je zadovoljen uvjet da je vrijednost elementa A(j) manja od vrijednosti varijable Min tada je A(j) najmanji element i Min poprima vrijednost tog elementa. Na isti nain, ako je vrijednost elementa A(j) vea od vrijednosti varijable Max, tada Max poprima vrijednost A(j). Programski kd je kako slijedi:
Public Class Form1 Inherits System.Windows.Forms.Form Dim A(100), Min, Max As Double Dim i As Integer Private Sub cmdUnos_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmdUnos.Click i += 1 A(i) = CDbl(txtUnos.Text) lstLista.Items.Add(txtUnos.Text) txtUnos.Text = "" txtUnos.Focus() End Sub Private Sub cmdIzracunaj_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmdIzracunaj.Click Dim j As Integer Min = A(1) Max = A(1) For j = 1 To i If A(j) < Min Then Min = A(j) End If If A(j) > Max Then Max = A(j) End If Next j txtMin.Text = Min txtMax.Text = Max End Sub End Class

CADLab, Katedra za konstruiranje i razvoj proizvoda, FSB Zagreb

37

Programiranje i algoritmi podloge za vjebe

Slika 27. Rad programa

38

CADLab, Katedra za konstruiranje i razvoj proizvoda, FSB Zagreb

Programiranje i algoritmi podloge za vjebe

10. Manipulacija sa indeksom polja


Program slui za unos brojeva u polje A i kreiranje i ispis novog polja B s elementima koji e biti ispisani obrnutim redoslijedom od unosa u polje A. Program formira polje B tako da indeks j poprima vrijednosti i j - 1, gdje je i ukupni broj lanova polja A. Tako da imamo npr. za polja od 5 elemenata: B(0) A(4) B(1) A(3) B(2) A(2) B(3) A(1) elementa A(4) B(4) A(0) preko formule:

Element B(0) mora poprimiti vrijednost B(j)=A(i j - 1) za i = 5, B(0) = A(5 0 - 1).

Slika 28. Konani izgled forme

Potprogramom dogaaja cmdUnesi_Click unose se brojevi preko okvira teksta uz koji se nalazi natpis lblUnos i ispisujemo ih u popis lstListaA prema:
Private Sub cmdUnos_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmdUnos.Click A(i) = CInt(txtUnos.Text) lstListaA.Items.Add(A(i)) txtUnos.Text = "" txtUnos.Focus() i += 1 lblUnos.Text = "Unesite " + CStr(i + 1) + ". lan:" End Sub

Osobinom Text postavlja se tekst natpisa lblUnos mijenjajui redni broj lana:
lblUnos.Text = "Unesite " + CStr(i + 1) + ". lan:"

CADLab, Katedra za konstruiranje i razvoj proizvoda, FSB Zagreb

39

Programiranje i algoritmi podloge za vjebe

Dijelovi natpisa stavljaju se u navodnike i veu znakom +, a promjenjivi dio rednog broja pretvara se u String i poprima vrijednost i + 1. Unutar potprograma za dogaaj cmdIzracunaj_Click briu se sve stavke popisa lstListaB za novi ispis pomou osobine Items.Clear. Unutar ForNext petlje formira se novo polje i ispisuje u popis. Ukupni programski kd je:
Public Class Form1 Inherits System.Windows.Forms.Form Dim A(100), B(100), i As Integer Private Sub cmdUnos_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmdUnos.Click A(i) = CInt(txtUnos.Text) lstListaA.Items.Add(A(i)) txtUnos.Text = "" txtUnos.Focus() i += 1 lblUnos.Text = "Unesite " + CStr(i + 1) + ". lan:" End Sub Private Sub cmdIzracunaj_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmdIzracunaj.Click Dim j As Integer lstListaB.Items.Clear() For j = 0 To i - 1 B(j) = A(i - j - 1) lstListaB.Items.Add(B(j)) Next j End Sub End Class

40

CADLab, Katedra za konstruiranje i razvoj proizvoda, FSB Zagreb

Programiranje i algoritmi podloge za vjebe

11. Ugnjeenje petlji na primjeru "bubble" sort algoritma


Napisati program koji e uitati polje cjelobrojnih brojeva i sortirati ih po rastuem redoslijedu "bubble sort" metodom.
START

i = 1, N

A(i)

i = 1, n - 1

j = 1, n - i

A(j) > A(j+1)

DA temp = A(j) A(j) = A(j+1) A(j+1) = temp

NE

i = 1, n

A(i)

END

Slika 29. Dijagram toka

CADLab, Katedra za konstruiranje i razvoj proizvoda, FSB Zagreb

41

Programiranje i algoritmi podloge za vjebe

Nakon to su uneseni brojevi u polje A, preko unutranje petlje s brojaem j usporeuju se susjedni lanovi polja i zamjenjuju mjesta ako je zadovoljen uvjet da je predhodnik vei od slijedbenika (A(j) > A(j+1)). Zamjena se vri tako da varijabla spremnik Temp poprima vrijednost predhodnika A(j), a predhodnik A(j) poprima vrijednost slijedbenika A(j+1). Nakon toga slijedbenik A(j+1) poprima vrijednost varijable Temp tj. A(j) (slika 30).

1
INICIJALNO STANJE

A(j)

A(j+1)

6
Temp

3
A(j) = A(j+1)

A(j)

A(j+1)

3
Temp

2
Temp = A(j)

A(j)

A(j+1)

6
Temp

4
A(j+1)= Temp

A(j)

A(j+1)

3
Temp

6
Slika 30. Zamjena vrijednosti susjednih lanova polja

PRIMJER "bubble sort" algoritma: broj lanova niza: n = 4, lanovi niza: 7, 2, 6, 1

7>2 7>6 7>1 2<6 6>1

2, 7, 6, 1 2, 6, 7, 1 2, 6, 1, 7 2, 6, 1, 7 2, 1, 6, 7

j=1 3 usporedbe i = 1, n 1 j=2 2 usporedbe i = 1, n 2 j=3 1 usporedba i = 1, n 3 ukupno 3 prolaza kroz podatke = = broj clanova niza - 1 vanjska petlja: j = 1, n - 1

2>1

1, 2, 6, 7

Nakon prvog prolaza kroz vanjsku petlju najvei broj sigurno dolazi na zadnje mjesto (npr. kao broj 7 na slici 31). Unutranja petlja (broja j) mora imati broj prolaza za jedan manje za svaki novi prolaz kroz vanjsku petlju (broja i), zato to u svakom prolazu kroz vanjsku petlju jedan broj zauzima svoje pravo mjesto. Broja unutranje petlje stoga poprima vrijednosti od 1 do n broja vanjske petlje (u ovom primjeru ni). Broj prolaza kroz vanjsku petlju jednak je broju lanova niza umanjenom za 1.
42 CADLab, Katedra za konstruiranje i razvoj proizvoda, FSB Zagreb

Programiranje i algoritmi podloge za vjebe

Forma prema slici 31 sadri gumbe za unos broja u polje, sortiranje i izlaz, okvir s tekstom za unos, dva popisa za nesortirani i sortirani niz te pripadajue natpise.

Slika 31. Konani izgled forme Dim A(100), n As Integer Private Sub cmdUnesi_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmdUnesi.Click LstNesortirano.Items.Add(txtUnos.Text) n = n + 1 a(n) = CInt(TxtUnos.Text) lblPolje.Text = "A(" + CStr(n) + "):" txtUnos.Text() = "" txtUnos.Focus() End Sub Private Sub cmdSortiraj_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmdSortiraj.Click Dim i, j, Temp As Integer For i = 1 To n - 1 For j = 1 To n - i If a(j) > a(j + 1) Then Temp = a(j) a(j) = a(j + 1) a(j + 1) = Temp End If Next j Next i CADLab, Katedra za konstruiranje i razvoj proizvoda, FSB Zagreb 43

Programiranje i algoritmi podloge za vjebe lstSortirano.Items.Clear() For i = 1 To n lstSortirano.Items.Add(a(i)) Next i End Sub Private Sub cmdIzlaz_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmdIzlaz.Click End End Sub End Class

Slika 32. Rad programa

44

CADLab, Katedra za konstruiranje i razvoj proizvoda, FSB Zagreb

Programiranje i algoritmi podloge za vjebe

12. Uporaba dvodimenzionalnog polja spremanje matrice i rad sa matricom

za

Napisati program za unos realnih brojeva u kvadratnu matricu te ispis koliko se u njoj nalazi nula, pozitivnih i negativnih brojeva.
1.1 2.1 3.1 4.1 ... n-1.1 n.1 1.2 2.2 3.2 ... ... n-1.2 n.2 1.3 2.3 3.3 ... ... ... ... 1.4 ... ... ... ... ... ... ... ... ... ... 1.n-1 2.n-1 ... ... ... 1.n 2.n ... ... n-2.n n-1.n n.n

n-2.n-2

... n.n-2

n-1.n-1

n.n-1

Slika 33. Kvadratna martica

Za razliku od niza, matrica se prikazuje kao polje s dvije dimenzije, a sastoji se od elemenata smjetenih u obliku tablice. Svaki element matrice ima redni broj retka i redni broj stupca u kojem se nalazi. (slika 33). Kvadratna matrica ima isti broj redaka i stupaca. Dijagram toka prikazan na slici 34. sastoji se od unosa broja redaka i stupaca u varijablu n, unosa elemenata u dvodimenzionalno polje A(i,j) gdje i oznaava broj retka, a j broj stupca u kojem se nalazi element. Varijable i i j u dijagramu su cjelobrojni brojevi (0,1,2,3...n) Prvo se unose elementi jednog retka (varijabla i je konstantna dok se vrijednost varijable j poveava za 1), zatim drugog itd. Nakon svakog unosa, element matrice A(i,j) se usporeuje s nulom, te ovisno da li je vei, manji ili jednak nuli poveavaju se vrijednosti varijabli Broj_poz, Broj_neg ili Broj_nula za jedan.

CADLab, Katedra za konstruiranje i razvoj proizvoda, FSB Zagreb

45

Programiranje i algoritmi podloge za vjebe


START

n i = 1, n j = 1, n

A(i, j)

DA

A(i, j) > 0

NE

Broj_poz = Broj_poz + 1

DA

A(i, j) < 0

NE Broj_nula = Broj_nula+ 1

Broj_neg = Broj_neg + 1

Broj_poz, Broj_neg, Broj_nula END

Slika 34. Dijagram toka

Slika 35 Konani izgled forme 46 CADLab, Katedra za konstruiranje i razvoj proizvoda, FSB Zagreb

Programiranje i algoritmi podloge za vjebe

Za razliku od prethodnih primjera, aktiviranjem gumba cmdNova prvo e se definirati koliko matrica ima stupaca i redaka (n) te e se stoga unositi samo n x n brojeva. Unos se izvodi preko okvira za unos (Input Box). Openiti izraz je: InputBox(poruka, [naslov], [predefinirani_unos]) Izrazi u zagradama nisu obavezni. Poruka je tekst namijenjen korisniku za opis unosa, naslov je tekst prikazan u naslovnoj traci dok je predefinirani_unos skup znakova automatski unesen u okvir za unos, a ako korisnik nije zadovoljan s njim moe ga obrisati i ponoviti unos. U ovom primjeru vrijednost varijable n se unosi uporabom okvira za unos (slika 36) na slijedei nain:
n = InputBox("Unesite broj redaka i stupaca matrice", "Velicina matrice")

Slika 36

Uporabom vanjske (indeks i) petlje za retke i unutranje (indeks j) za stupce omoguuje se popunjavanje polja.
For i = 1 To n For j = 1 To n Next j Next i

Unutar te petlje unosi se programski kd za unos vrijednosti u polje A(i,j) preko okvira za unos (slika 37) i ispis na popis lstMatrica.

Slika 37 For i = 1 To n For j = 1 To n A(i, j) = InputBox("Unesite broj za element u " + CStr(i) + ". retku i " + CStr(j) + ". stupcu") lstMatrica.Items.Add(CStr(i) + "." + CStr(j) + " = " + CStr(a(i, j))) Next j Next i CADLab, Katedra za konstruiranje i razvoj proizvoda, FSB Zagreb 47

Programiranje i algoritmi podloge za vjebe

Uneseni element polja usporeuje se s 0 i prema ispunjenju zadanog uvjeta poveava se vrijednost varijablama poz, neg, i nula te se nakon zavretka obje petlje ispisuju njihove vrijednosti u okvire s tekstom. Cijeli programski kd slijedi:
Private Sub cmdNova_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmdNova.Click Dim n, i, j, m, k, poz, neg, nula As Integer Dim A(100, 100) As Double n = InputBox("Unesite broj redaka i stupaca kvadratne matrice",_ + "Velicina matrice") For i = 1 To n For j = 1 To n A(i, j) = InputBox("Unesite broj za element u " + CStr(i) _ + ". retku i " + CStr(j) + ". stupcu") lstMatrica.Items.Add(CStr(i) + "." + CStr(j) + " = " _ + CStr(a(i, j))) If A(i, j) > 0 Then poz += 1 ElseIf A(i, j) < 0 Then neg += 1 Else nula += 1 End If Next j Next i txtPoz.Text = poz txtNeg.Text = neg txtNula.Text = nula End Sub

48

CADLab, Katedra za konstruiranje i razvoj proizvoda, FSB Zagreb

Programiranje i algoritmi podloge za vjebe

13. Artitmetika sredina redaka matrice


Napisati program za unos brojeva u pravokutnu matricu te za izraun i ispis aritmetike sredine za svaki pojedini redak.
1.1 2.1 3.1 ... ...
m-1.1

1.2 2.2 3.2 ... ...


m-1.2

1.3 2.3 3.3 ... ... ... ...

... ... ... ... ... ...


m.n-2

1.n-1 2.n-1 ... ... ...

1.n 2.n ... ...

Pravokutna matrica ima m redaka i n stupaca (slika 38), a zapisuje se u dvodimenzionalno polje A(i,j). Prema dijagramu prikazanom na slici 39. nakon unosa u polje, unutar petlje za stupce s brojaem j ,koja se nalazi u petlji za retke, formira se ukupni zbroj elemenata pojedinog retka. Izlaskom iz petlje za stupce izraunati zbroj dijeli se s brojem stupaca n, ispisuje izraunata sredina te se prijelazi na slijedei redak (novi korak petlje za retke).

m-2.n

m-1.n-1

m-1.n

m.1

m.2

m.n-1

m.n

Slika 38. Pravokutna matrica

START i = 1, n m, n Zbroj = 0 j = 1, m Zbroj = Zbroj + A(i, j) j = 1, m

i = 1, n

A(i, j)

Sredina = Zbroj / m Sredina

END
Slika 39. Dijagram toka CADLab, Katedra za konstruiranje i razvoj proizvoda, FSB Zagreb 49

Programiranje i algoritmi podloge za vjebe

lanovi polja A(i,j) ispisuju se u popis lstMatrica, a izraunate sredine u popis lstRedci (slika 40).

Slika 40. Konani izgled forme

Prvo se unose brojevi redaka i stupaca pravokutne matrice u varijable m i n iz okvira za unos prema:
n = InputBox("Unesite broj redaka matrice", "Broj redaka") m = InputBox("Unesite broj stupaca matrice", "Broj stupaca")

Vanjska For petlja za retke s brojaem varijablom i i unutranja za stupce s brojaem varijablom j koriste se za unos elementa u polje A(i, j) i ispis u popis lstMatrica prema:
For i = 1 To n For j = 1 To m A(i, j) = InputBox("Unesite broj za element u " + CStr(i) + ". retku i " + CStr(j) + ". stupcu") lstMatrica.Items.Add(CStr(i) + "." + CStr(j) + " = " + CStr(a(i, j))) Next j Next i

Nakon unosa elemenata matrice preko vanjske i unutranje petlje izraunava se vrijednost varijable Zbroj. Za svaki novi izraun aritmetike sredine retka vrijednost varijable Zbroj se postavlja na 0.
50 CADLab, Katedra za konstruiranje i razvoj proizvoda, FSB Zagreb

Programiranje i algoritmi podloge za vjebe For i = 1 To n Zbroj = 0 For j = 1 To m Zbroj = Zbroj + A(i, j) Next j Next i

Nakon petlje za stupce izraunava se vrijednost varijable Sredina i dodaje u popis lstRedci prema:
Sredina = Zbroj / m lstRedci.Items.Add(CStr(i) + ". redak = " + CStr(Sredina))

Ukupni programski kd je:


Private Sub cmdNova_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmdNova.Click Dim i, j, m, n, k, l As Integer Dim a(100, 100), Zbroj, Sredina As Double lstMatrica.Items.Clear() lstRedci.Items.Clear() n = InputBox("Unesite broj redaka matrice", "Broj redaka") m = InputBox("Unesite broj stupaca matrice", "Broj stupaca") For i = 1 To n For j = 1 To m a(i, j) = InputBox("Unesite broj za element u " + CStr(i) + ". retku i " + CStr(j) + ". stupcu") lstMatrica.Items.Add(CStr(i) + "." + CStr(j) + " = " + CStr(a(i, j))) Next j Next i For i = 1 To n Zbroj = 0 For j = 1 To m Zbroj = Zbroj + A(i, j) Next j Sredina = Zbroj / m lstRedci.Items.Add(CStr(i) + ". redak = " + CStr(Sredina)) Next i End Sub

CADLab, Katedra za konstruiranje i razvoj proizvoda, FSB Zagreb

51

Programiranje i algoritmi podloge za vjebe

Slika 41. Rad programa

52

CADLab, Katedra za konstruiranje i razvoj proizvoda, FSB Zagreb

Programiranje i algoritmi podloge za vjebe

14. Najvei parni broj na gl. dijagonali matrice


Program slui za unos brojeva u kvadratnu matricu te izraun i ispis najveeg parnog broja na glavnoj dijagonali. Glavna dijagonala je skup elemenata prikazan na slici 43. Karakterizira je jednakost indeksa za redak i stupac tj i = j.
Glavna dijagonala
1.1 2.1 3.1 ... ... n-1.1 n.1 1.2 2.2 3.2 ... ... n-1.2 n.2 1.3 2.3 3.3 ... ... ... ... 1.4 ... ... ... ... ... ... ... ... ... ... 1.n-1 2.n-1 ... ... ... 1.n 2.n ... ... n-2.n n-1.n n.n

n-2.n-2

... n.n-2

n-1.n-1

n.n-1

Slika 42. Glavna dijagonala kvadratne matrice

Prema dijagramu prikazanom na slici 44 program unosi brojeve kao elemente polja A(i,j). Zatim se provjerava istinitost uvjeta da je element na glavnoj dijagonali parni broj, te ako jest element se unosi u novo polje B(k). Da bi formirali novo polje, prije dodjeljivanja vrijednosti svakog novog lana polja potrebno je poveati vrijednost varijable koja e biti indeks tog polja za 1. Najveim brojem (Max) se proglaava prvi element tako formiranog polja i usporeuje se s ostatkom elemenata. Ako je za pojedini element istinit uvjet da je vei od Max, varijabla Max poprima vrijednost tog elementa. Djeljivost nekog broja s drugim brojem provjeravamao tako da izraunavamo ostatak kod dijeljenja. Dakle ako elimo provjeriti da li je broj x djeljiv sa y korisiti emo funkciju koja kao vrijednost vraa ostatak od dijeljenja x sa y. U Visual Basic-u takva funkcija se zove Mod, a sintaksa je slijedea: Izraz x Mod y daje vrijednost ostatka od dijeljenja x sa y. Dakle ako elimo provjeriti da li npr. varijabla A sadri paran broj, ispitati emo sliedei uvjet: If A Mod 2 = 0 Ako je uvjet istinit, vrijednost je parna, a ako nije onda je vrijednost neparna. Na isti nain provjeravamo i djeljivost sa drugim brojevima.

CADLab, Katedra za konstruiranje i razvoj proizvoda, FSB Zagreb

53

Programiranje i algoritmi podloge za vjebe


START n i = 1, n i = 1, k j = 1, n B(i) > Max DA Max = B(1)

A(i, j)

Max = B(i) NE i = 1, n

A(i, i) Mod 2 = 0 NE

DA k=k+1 B(k) = A(i, i)

Max

END

Slika 43. Dijagram toka

Slika 44. Konani izgled forme Private Sub cmdNova_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmdNova.Click Dim n As Integer Dim i, j, k, A(100, 100), B(100), Max As Integer n = InputBox("Unesite broj redaka i stupaca kvadratne matrice", "Velicina matrice") For i = 1 To n For j = 1 To n

54

CADLab, Katedra za konstruiranje i razvoj proizvoda, FSB Zagreb

Programiranje i algoritmi podloge za vjebe A(i, j) = InputBox("Unesite broj za element u " + CStr(i) + ". retku i " + CStr(j) + ". stupcu") lstMatrica.Items.Add(CStr(i) + "." + CStr(j) + " = " + CStr(A(i, j))) Next j Next i For i = 1 To n If A(i, i) Mod 2 = 0 Then k = k + 1 B(k) = A(i, i) End If Next i Max = B (1) For i = 1 To k If B(i) > Max Then Max = B(i) End If Next i txtMax.Text = Max End Sub

CADLab, Katedra za konstruiranje i razvoj proizvoda, FSB Zagreb

55

Programiranje i algoritmi podloge za vjebe

15. Zbroj elemenata matrice manjih od prvo unesenog


Program slui za unos brojeva u pravokutnu matricu, te ispis zbroja svih elemenata matrice koji su manji od prvo unesenog.
START M, N

i = 1, N

j = 1, M

A(i, j)

NE

A(i, j) < A(1,1)

DA Zbroj = Zbroj+ A(i, j)

Zbroj END

Slika 45. Dijagram toka Private Sub cmdNova_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmdNova.Click Dim i, j, m, n, k, l As Integer Dim a(100, 100), Zbroj As Double lstMatrica.Items.Clear() n = InputBox("Unesite broj redaka matrice", "Velicina matrice") m = InputBox("Unesite broj stupaca matrice", "Velicina matrice") For i = 1 To n For j = 1 To m 56 CADLab, Katedra za konstruiranje i razvoj proizvoda, FSB Zagreb

Programiranje i algoritmi podloge za vjebe a(i, j) = InputBox("Unesite broj za element u " + CStr(i) + ". retku i " + CStr(j) + ". stupcu") lstMatrica.Items.Add(CStr(i) + "." + CStr(j) + " = " + CStr(a(i, j))) If a(i, j) < a(1, 1) Then Zbroj = Zbroj + a(i, j) End If Next j Next i txtZbroj.Text = Zbroj End Sub

Slika 46 Rad programa

CADLab, Katedra za konstruiranje i razvoj proizvoda, FSB Zagreb

57

Programiranje i algoritmi podloge za vjebe

16. Zbroj elemenata matrice iznad i ispod gl. dijagonale


Napisati program za ispis zbroja svih elemenata koji se nalaze iznad i zbroja svih elementa koji se nalaze ispod glavne dijagonale kvadratne matrice. Kao to je prikazano na slici 49 elementi iznad glavne dijagonale imaju vei indeks stupca od indeksa retka dok za elemente ispod glavne dijagonale vrijedi suprotno: indeks retka je vei od indeksa stupca.

Slika 47. Glavna dijagonala kvadratne matrice


START N i = 1, N j = 1, N A(i, j)

NE i>j

i<j DA

DA Zbroj_iznad = Zbroj_iznad + A(i,j)

Zbroj_ispod = Zbroj_ispod + A(i,j)

Zbroj_iznad, Zbroj_ispod END

Slika 48. Dijagram toka 58 CADLab, Katedra za konstruiranje i razvoj proizvoda, FSB Zagreb

Programiranje i algoritmi podloge za vjebe Private Sub cmdNova_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmdNova.Click Dim n As Integer Dim i, j, m, k, x, y As Integer Dim a(100, 100), Zbroj_iznad, Zbroj_ispod As Double n = InputBox("Unesite broj redaka i stupaca kvadratne matrice", "Velicina matrice") For i = 1 To n For j = 1 To n a(i, j) = InputBox("Unesite broj za element u " + CStr(i) + ". retku i " + CStr(j) + ". stupcu") lstMatrica.Items.Add(CStr(i) + "." + CStr(j) + " = " + CStr(a(i, j))) If i < j Then Zbroj_iznad = Zbroj_iznad + a(i, j) End If If i > j Then Zbroj_ispod = Zbroj_ispod + a(i, j) End If Next j Next i txtIznad.Text = Zbroj_iznad txtIspod.Text = Zbroj_ispod End Sub

CADLab, Katedra za konstruiranje i razvoj proizvoda, FSB Zagreb

59

Programiranje i algoritmi podloge za vjebe

17. Iteracija
Potrebno je napraviti program za odreivanje visine h do koje je spremnik u obliku kugle radijusa R ispunjen tekuinom za zadani volumen V uz zadanu tonost ( = Vzadani Vizracunati ). Volumen kuglina odsjeka rauna se po formuli:

1 V = h 2 (3R h) . Potrebno je pretpostaviti poetno rjeenje (h = R), provjeriti tonost 3 te korigirati po potrebi (iteracija).
(X-, X+)

y1 = f (X)

x, y1=Y2

(Y-,

Y+)
y2 = f (X)

Xo X1 X1

X2 X1 X1 X2 X2 X1

Slika 49. Prikaz metode iteracije

Private Sub cmdizracunaj_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmdizracunaj.Click Dim R, V_zadani, V_izracunati, Eps, dH1, dH2, H As Double Dim a As Boolean Const Pi As Double = 3.1416 R = CDbl(txtRadijus.Text) V_zadani = CDbl(txtVolumen.Text) Eps = CDbl(txtTocnost.Text) H = R 60 CADLab, Katedra za konstruiranje i razvoj proizvoda, FSB Zagreb

Programiranje i algoritmi podloge za vjebe dH1 = R / 10 dH2 = R / 10 a = True Do While a V_izracunati = 1 / 3 * H ^ 2 * Pi * (3 * R - H) If Math.Abs(V_zadani - V_izracunati) < Eps Then txtVisina.Text = H Exit Sub End If If (V_izracunati > V_zadani) Then H = H - dH2 dH1 = dH2 / 2 Else H = H + dH1 dH2 = dH1 / 2 End If Loop End Sub Private Sub cmdIzlaz_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmdIzlaz.Click End End Sub End Class

CADLab, Katedra za konstruiranje i razvoj proizvoda, FSB Zagreb

61

Programiranje i algoritmi podloge za vjebe

18. Bisekcija
Napisati program koji e odrediti nultoku funkcije f(x) = 0 u intervalu [x1, x2] uz odreenu tonost , metodom bisekcije. Za izraunavanje vrijednosti funkcije f(x) nainiti funkcijski potprogram.

Algoritam
Uitati granice intervala x1 i x2 te traenu tonost . Provjeriti da li funkcija u zadanom intervalu mijenja f ( x1 ) f ( x 2 ) < 0 . Ako ne, ispisati poruku i zaustaviti program. Petlja koja se prekida kada se zadovolji jedan od uvjeta: Izraunati meutoku: x0 =
predznak:

f ( x0 ) x 2 x1

x1 + x 2 2 Provjeriti uvjete. Ako su zadovoljeni ispisati vrijednost nultoke. Provjeriti u kojoj polovici inetervala funkcija mijenja predznak:

f ( x1 ) f ( x0 ) < 0 x 2 = x0 f ( x0 ) f ( x 2 ) < 0 x1 = x0 Ponovo izraunati meutoku s novim vrijednostima x1 i x2

62

CADLab, Katedra za konstruiranje i razvoj proizvoda, FSB Zagreb

Programiranje i algoritmi podloge za vjebe

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click Dim x1, x2, x, x0, eps As Double Dim a As Boolean x1 = CDbl(TextBox1.Text) x2 = CDbl(TextBox2.Text) eps = CDbl(TextBox3.Text) If fun(x1) * fun(x2) > 0 Then MsgBox("funkcija ne mijenja predznak na zadanom intervalu") Exit Sub End If a = True Do While a x0 = (x1 + x2) / 2 ListBox1.Items.Add(x1) ListBox2.Items.Add(x2) If Math.Abs(x2 - x1) <= eps Or Math.Abs(fun(x0)) <= eps Then TextBox4.Text = CStr(x0) Exit Sub End If If fun(x1) * fun(x0) < 0 Then x2 = x0 Else x1 = x0 End If Loop End Sub Private Function fun(ByVal x) fun = x ^ 3 - 2 End Function End Class

CADLab, Katedra za konstruiranje i razvoj proizvoda, FSB Zagreb

63

Programiranje i algoritmi podloge za vjebe

19. Uitavanje podataka iz datoteke


Promjeri i duljine segmenata vratila zapisani su u ASCII datoteci, tako da je u jednom retku zapisan prvo promjer pa onda duljina odreenog segmenta, odvojeni zarezom. Potrebno je napraviti program koji e uitati promjere i duljine segmenata vratila i izraunati i ispisati teinu vratila.
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click Dim n As Integer 'broj segmenata vratila Dim i, j As Integer, filein As Single Dim v_seg, suma, r, tezina As Single Dim d(100), l(100) As Single FileOpen(1, "C:\nastava\programiranje i algoritmi\vratilo.txt", _ OpenMode.Input) Do Until EOF(1) i = i + 1 Input(1, filein) d(i) = filein ListBox1.Items.Add(d(i)) Input(1, filein) l(i) = filein ListBox2.Items.Add(l(i)) Loop FileClose(1) n = i For j = 1 To n r = d(j) / 2000 v_seg = r ^ 2 * 3.1415926 * l(j) / 1000 suma = suma + v_seg Next j tezina = suma * 7850 txtbrseg.Text = CInt(n) txttezina.Text = CSng(tezina) End Sub End Class

64

CADLab, Katedra za konstruiranje i razvoj proizvoda, FSB Zagreb

Programiranje i algoritmi podloge za vjebe

CADLab, Katedra za konstruiranje i razvoj proizvoda, FSB Zagreb

65

Programiranje i algoritmi podloge za vjebe

20. Izraunavanje vrijednosti integrala


Napisati program koji e izraunavati vrijednost odreenog integrala

f ( x) dx
a b a

po Simpsonovoj formuli:
h + 4 y1 + 2 y2 + 4 y3 + K + 2 yn 2 + 4 yn 1 + yn )

f ( x) dx 3 ( y
h= ba n

Napomena: n (broj podjela intervala) mora biti paran broj

Ulazni podaci su a, b i n, a program treba ispisati izraunatu vrijednost integrala. Za raunanje vrijednosti funkcije f(x) pozivati funkcijski potprogram. Program testirati za funkciju f(x) = sin(x).

y
y3

y = f(x) y2 y1 y0 yn-2 yn-1 yn

x1

x2

x3

xn-2

xn-1 b

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click Dim a, b, suma, integral, h, x, y, y0, yn As Double Dim n, i, m As Integer a = CDbl(TextBox1.Text) b = CDbl(TextBox2.Text) n = CInt(TextBox3.Text) 66 CADLab, Katedra za konstruiranje i razvoj proizvoda, FSB Zagreb

Programiranje i algoritmi podloge za vjebe If n Mod 2 <> 0 Then MsgBox("broj podjela nije paran !") Exit Sub End If h = (b - a) / n y0 = fun(a) yn = fun(b) x = a For i = 1 To n - 1 If i Mod 2 = 0 Then m = 2 Else m = 4 End If x = x + h y = fun(x) ListBox1.Items.Add(x) ListBox2.Items.Add(y) suma = suma + y * m ListBox3.Items.Add(suma) Next i integral = (h / 3) * (suma + y0 + yn) TextBox4.Text = CStr(integral) End Sub Private Function fun(ByVal x) fun = Math.Sin(x) End Function Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click ListBox1.Items.Clear() ListBox2.Items.Clear() ListBox3.Items.Clear() TextBox1.Clear() TextBox2.Clear() TextBox3.Clear() TextBox4.Clear() End Sub End Class

CADLab, Katedra za konstruiranje i razvoj proizvoda, FSB Zagreb

67

Programiranje i algoritmi podloge za vjebe

68

CADLab, Katedra za konstruiranje i razvoj proizvoda, FSB Zagreb

Programiranje i algoritmi podloge za vjebe

21. Uporaba strukture stoga za izraunavanje vrijednosti izraza


Napisati program koji e izraunavati vrijednost aritmetikog izraza uitanog kao niz znakova (string). Ogranienja: izraz sadri samo jednoznamenkaste cijele brojeve i operatore zbrajanja, oduzimanja, mnoenja i dijeljenja. Izraz se upisuje transformiran u "reverznu poljsku notaciju" (operatori su iza operanada). Upotrijebiti algoritam evaluacije izraza koritenjem strukture stoga (stack).

Algoritam evaluacije izraza uz primjer:

Izraz: 5 6 2 + * 8 4 / - )
1 2 3 4 5 6 7 8 9 10

5*(6+2)8/4
Dodaj ) na kraj izraza skeniraj (parsiraj) izraz s lijeva na desno i ponavljaj korake 3 i 4 dok se ne dostigne ) (oznaka kraja izraza) Ako je pronaen operand, stavi ga na stog Ako je pronaen operator o:

simbol 5 6 2 + * 12 4 / )

stog 5 5,6 5,6,2 5,8 40 40,8 40,8,4 40,2 38

1. 2.

3. 4.

i. ii. iii.

Uzmi dva elementa sa vrha stoga (A je na vrhu, a B ispod njega) Izraunaj B o A Stavi rezultat na stog

5.

Vrijednost izraza jednaka je elementu na vrhu stoga

CADLab, Katedra za konstruiranje i razvoj proizvoda, FSB Zagreb

69

Programiranje i algoritmi podloge za vjebe

Public Class Form1 Inherits System.Windows.Forms.Form Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click Dim izraz, simbol, stanje_stoga As String Dim indeks, kod, op1, op2, i, k, ls As Integer Dim mr, rezultat As Single ' deklaracija objekta "stog" kao nove instance klase "stack" Dim stog As New System.Collections.Stack izraz = TextBox1.Text izraz = izraz + ")" indeks = 0 ' uzmi prvi znak iz izraza simbol = izraz.Substring(indeks, 1) Do Until simbol = ")" kod = Asc(simbol) 'odredi ASCII kod znaka ' da li je simbol operand, tj. znamenka? If kod >= 48 And kod <= 57 Then stog.Push(simbol) ' ako jest, stavi ga na stog ' da li je simbol operator? ElseIf simbol="+" Or simbol="-" Or simbol="*" Or simbol="/" Then op1 = CSng(stog.Pop) ' uzmi element sa vrha stoga op2 = CSng(stog.Pop) ' uzmi slijedei element sa vrha stoga Select Case simbol Case "+" mr = Case "-" mr = Case "*" mr = Case "/" mr = End Select 'primjeni operator i rez. vrati na stog

op2 + op1 op2 - op1 op2 * op1 op2 / op1

stog.Push(mr) ' da li je simbol razliit od "praznine"? ElseIf simbol <> " " Then MsgBox("izraz sadri nedozvoljeni simbol!") Exit Sub End If ListBox1.Items.Add(simbol) ' prikazi stanje stoga u listbox-u Dim polje As Object() = stog.ToArray k = stog.Count stanje_stoga = "" For i = k - 1 To 0 Step -1 70 CADLab, Katedra za konstruiranje i razvoj proizvoda, FSB Zagreb

Programiranje i algoritmi podloge za vjebe stanje_stoga = stanje_stoga + CStr(polje(i)) + " ," Next i ls = Len(stanje_stoga) stanje_stoga = stanje_stoga.Substring(0, ls - 1) ListBox2.Items.Add(stanje_stoga) ' uzmi slijedeci znak iz izraza indeks = indeks + 1 simbol = izraz.Substring(indeks, 1) Loop rezultat = CSng(stog.Pop) End Sub Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click TextBox1.Text = "" TextBox2.Text = "" ListBox1.Items.Clear() ListBox2.Items.Clear() End Sub End Class ' uzmi rezultat izraza sa vrha stoga TextBox2.Text = CStr(rezultat)

CADLab, Katedra za konstruiranje i razvoj proizvoda, FSB Zagreb

71

Programiranje i algoritmi podloge za vjebe

22. Odreivanje jednadbe pravca regresije


U ASCII datoteci zapisane su x i y koordinate za n toaka dobivenih mjerenjima u nekom pokusu. Potrebno je napisati program koji e uitati koordinate toaka iz datoteke, te odrediti i ispisati jednadbu pravca regresije za zadane toke. pravac regresije : y = a + b x, gdje je:

b=

x y
i =1 n i

nx y

x
i =1

a = y b x
nx
2

2 i

x=

1 n xi n i =1

y=

1 n yi n i =1

72

CADLab, Katedra za konstruiranje i razvoj proizvoda, FSB Zagreb

Programiranje i algoritmi podloge za vjebe Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click Dim a, b, x(100), y(100), sumax, sumay, suma_xy, sumax2, xp, yp As Single Dim i, n, j As Integer FileOpen(1, "d:\nastava\programiranje i algoritmi\regresija.txt", OpenMode.Input) Do Until EOF(1) i = i + 1 Input(1, x(i)) ListBox1.Items.Add(x(i)) Input(1, y(i)) ListBox2.Items.Add(y(i)) Loop n = i FileClose(1) For j = 1 To n sumax = sumax + x(j) sumay = sumay + y(j) suma_xy = suma_xy + x(i) * y(i) sumax2 = sumax2 + x(i) ^ 2 Next j xp = sumax / n yp = sumay / n b = (suma_xy - n * xp * yp) / (sumax2 - n * xp ^ 2) a = yp - b * xp TextBox1.Text = "y = " + CStr(a) + " + " + CStr(b) + " x" End Sub

CADLab, Katedra za konstruiranje i razvoj proizvoda, FSB Zagreb

73

Programiranje i algoritmi podloge za vjebe

23. "Optimiranje" nosaa


Na raspolaganju su eline trake d x b. Od tih elinih traka treba napraviti "I" nosa. Iz konstrukcijskih razloga u srednjeoj traci je na jednom mjestu provrt promjera h2. Od svih nosaa koji zadovoljavaju uvjete treba odabrati onaj najmanje povrine. Nosa se sastavlja od dva tipa trake, jedan se koristi za pojase, a druga za rebro. Debljina trake "d" kree se od 4 do 16 mm, a irina trake "b" izvodi se iz slijedeih dimenzija: 10, 12, 14, 15, 16, 18, 20, 22, 24, 25, 26, 28, 30, 32, 34, 35, 36, 38. Zadan je moment savijanja nosaa M, doputeno naprezanje h2. Program treba ispisati slijedee dimenizije za odabranu varijantu nosaa: b, b1, h1, h, A (povrina presjeka) Pri tome trebaju biti zadovoljeni slijedei uvjeti:

dopi

promjer provrta

<

dop

h1 > h2 + 5 Naprezanje se rauna pomou izraza:


3 ) b(h 3 h13 ) + b1 (h13 h2 6h

M W

W=

Napomena: polje vrijednosti irina trake treba uitati iz datoteke!

74

CADLab, Katedra za konstruiranje i razvoj proizvoda, FSB Zagreb

Programiranje i algoritmi podloge za vjebe Private Sub cmd_izracunaj_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmd_izracunaj.Click Dim ms, sig, sigdo As Double Dim h2, b, b1, h, h1, A, Am, bm, bm1, hm, hm1, W As Double Dim bb(100) As Integer Dim filein, n, i, j, k, m As Integer Dim flag As Boolean 'ucitavanje iz datoteke: FileOpen(1, "d:\nastava\programiranje i algoritmi\test.txt", OpenMode.Input) Do Until EOF(1) n = n + 1 Input(1, filein) bb(n) = filein Loop FileClose(1) ms = CDbl(moment.Text) sigdo = CDbl(sigdop.Text) h2 = CDbl(provrt.Text) flag = True 'generiranje kombinacija : For i = 4 To 15 For j = 1 To 18 For k = 4 To 15 For m = 1 To 18 b = bb(j) b1 = k h1 = bb(m) h = h1 + 2 * i If (h1 > h2) Then W=(b*(h^3-h1^3) + b1*(h1^3-h2^3)) / (6*h) sig = ms / W If (sig < sigdo) Then A = b * (h - h1) + b1 * (h1 - h2) If flag Then 'pronadjena prva varijanta koja odgovara, 'inicijalizacija minimuma: Am = A bm = b bm1 = b1 hm = h hm1 = h1 CADLab, Katedra za konstruiranje i razvoj proizvoda, FSB Zagreb 75

Programiranje i algoritmi podloge za vjebe flag = False End If If A < Am Then Am = A bm = b bm1 = b1 hm = h hm1 = h1 End If End If End If Next m Next k Next j Next i sirina_b.Text = CDbl(bm) sirina_b1.Text = CDbl(bm1) visina_h.Text = CDbl(hm) visina_h1.Text = CDbl(hm1) povrsina_A.Text = CDbl(Am) End Sub

76

CADLab, Katedra za konstruiranje i razvoj proizvoda, FSB Zagreb

Programiranje

Uvod u raunala podloge za vjebe

24. Primjeri zadataka


24.1 Zadatak 1
Potrebno je napraviti program koji e uitati niz cijelih brojeva, te ispisati koji su brojevi djeljivi s 3 i 7.

24.2 Zadatak 2
Potrebno je napraviti program za ispis svih brojeva veih od 10 koji se nalaze iznad sporedne dijagonale kvadratne matrice.

24.3 Zadatak 3
Potrebno je napraviti program koji e za niz realnih vrijednosti x ispisati vrijednosti funkcije prema formuli: y = x 3 + 2 x 2 + 3x + 4 .

24.4 Zadatak 4
Potrebno je napraviti program za ustanovljavanje da li je trokut jednakostranian, jednakokraan ili raznostranian. U koordinatnom sustavu trokut je definiran s tri koordinate njegovih vrhova: P1 ( x1 , y1 ) , P2 ( x 2 , y 2 ) i P3 ( x3 , y 3 ) . Formula za izraunavanje udaljenosti izmeu vrhova trokuta glasi: Pij = ( xi x j ) 2 + ( y i y j ) 2 .

CADLab, Katedra za osnove konstruiranja, FSB Zagreb

77

You might also like