You are on page 1of 77

Programiranje i algoritmi podloge za vjebe

S v e u i l i t e

Fakultet

strojarstva

Z a g r e b u

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

VELIINA

RASPON VRIJEDNOSTI

Boolean

4 Byte-ova

True ili False

Byte

1 Byte

0255 unsigned

Char

2 Byte-a

065,535 unsigned

Date

8 Byte-ova

1/1/1 CE to 12/31/9999

Decimal

12 Byte-ova

+/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

4 Byte-a

2147483648 to 2147483647

Long

8 Byte-ova

9223372036854775808 do 9223372036854775807

Object

4 Byte-a

Sve vrste objekata

Short

2 Byte-a

32768 to 32767

Single

4 Byte-a

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

od 0 do otprilike 2 milijarde Unicode znakova

(+ znakova u stringu * 2)

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

PRETVORBA U TIP

CDbl

Double

CInt

Integer

CLng

Long

CSng

Single

CStr

String (tekst)

CVar

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

A>B
AND
A>C

DA

DA
Razlika = A - (B + C)

NE

B>A
AND
B>C

Razlika = B - (A + C)

NE

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:

12

INCIJALNI NAZIV

NOVI NAZIV

OBJEKTA (NAME)

(NAME)

NOVI TEKST

Button1

cmdIzracunaj

Izraunaj

Button2

cmdNovi

Novi unos

TextBox1

txtA

TextBox2

txtB

TextBox3

txtC

TextBox4

txtRazlika

Label1

lblBroj_A

Broj A:

Label2

lblBroj_B

Broj B:

Label3

lblBroj_C

Broj C:

Label4

lblRazlika

Razlika:

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

Jednakost

<

Manje od

<=
>

14

VRSTA USPOREDBE

Manje ili jednako


Vee od

>=

Vee ili jednako

<>

Nejednakost

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

A AND B

A OR B

istina
istina
la
la

istina
la
istina
la

istina
la
la
la

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.

CADLab, Katedra za konstruiranje i razvoj proizvoda, FSB Zagreb

17

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

Ponavljanje ucitavanja i
zbrajanja koje korisnik
realizira ponovnim pozivom
procedure

START

Korisnik odlucuje o
tijeku izvravanja
preko sucelja

Zbroj = Zbroj + x

n=n+1

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

NOVI NAZIV

OBJEKTA (NAME)

(NAME)

NOVI TEKST

Button1

cmdUnesi

Unesi

Button2

cmdIzracunaj

Izraunaj

Button3

cmdNovi_niz

Novi niz

TextBox1

txtUnos

TextBox2

txtVelicina

TextBox3

txtSredina

Label1

lblUpisite

Upiite broj:

Label2

lblVelicina

Veliina niza:

Label3

lblSredina

Arit. sredina:

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)

12

238

17

89

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.

Ucitavanje clanova polja


uzastopnim pozivanjem procedure

START

i=i+1

A(i)

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

j = 1, i

Da

Max = A(j)

A(j) > Max

Ne

A(j) < Min

Da

Ne
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)

B(1)

B(2)

B(3)

B(4)

A(4)

A(3)

A(2)

A(1)

A(0)

Element B(0) mora poprimiti vrijednost


B(j)=A(i j - 1) za i = 5, B(0) = A(5 0 - 1).

elementa

A(4)

preko

formule:

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)

A(j)

A(j+1)

A(j) = A(j+1)
Temp

Temp

A(j)

A(j+1)

Temp = A(j)

A(j)

A(j+1)

A(j+1)= Temp
Temp

Temp

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, 7, 6, 1
2, 6, 7, 1
2, 6, 1, 7

j=1
3 usporedbe
i = 1, n 1

2<6
6>1

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

j=2
2 usporedbe
i = 1, n 2

2>1

1, 2, 6, 7

ukupno 3 prolaza kroz podatke =


= broj clanova niza - 1
vanjska petlja: j = 1, n - 1

j=3
1 usporedba
i = 1, n 3

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

1.2

1.3

1.4

...

1.n-1

1.n

2.1

2.2

2.3

...

...

2.n-1

2.n

3.1

3.2

3.3

...

...

...

...

4.1

...

...

...

...

...

...

...

...

...

...

n-2.n-2

...

n-2.n

n-1.1

n-1.2

...

...

...

n-1.n-1

n-1.n

n.1

n.2

...

...

n.n-2

n.n-1

n.n

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

Broj_poz =
Broj_poz + 1

DA

NE

A(i, j) < 0

Broj_neg =
Broj_neg + 1

NE
Broj_nula =
Broj_nula+ 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

1.2

1.3

...

1.n-1

1.n

2.1

2.2

2.3

...

2.n-1

2.n

3.1

3.2

3.3

...

...

...

...

...

...

...

...

...

...

...

...

...

...

m-2.n

m-1.1

m-1.2

...

...

m-1.n-1

m-1.n

m.1

m.2

...

m.n-2

m.n-1

m.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).

Slika 38. Pravokutna matrica

START
i = 1, n
m, n

Zbroj = 0
j = 1, m

i = 1, n

Zbroj = Zbroj + A(i, j)


j = 1, m

Sredina = Zbroj / m

A(i, j)

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

1.2

1.3

1.4

...

1.n-1

1.n

2.1

2.2

2.3

...

...

2.n-1

2.n

3.1

3.2

3.3

...

...

...

...

...

...

...

...

...

...

...

...

...

...

...

n-2.n-2

...

n-2.n

n-1.1

n-1.2

...

...

...

n-1.n-1

n-1.n

n.1

n.2

...

...

n.n-2

n.n-1

n.n

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
Max = B(1)

n
i = 1, n

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

A(i, j)

DA

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

A(i, i) Mod 2 = 0

DA

Max

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

NE

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+)

x, y1=Y2

y1 = f (X)

(Y-,

Y+)
y2 = f (X)

Xo

X2
X1 X1

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:

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:

Izraunati meutoku: x0 =

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
b

f ( x) dx

po Simpsonovoj formuli:

f ( x) dx 3 ( y

+ 4 y1 + 2 y2 + 4 y3 + K + 2 yn 2 + 4 yn 1 + yn )

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

h=

ba
n

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 = f(x)
y2

y3

yn-2

y1

yn-1

y0

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

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.

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:

i.
ii.
iii.

5.

Uzmi dva elementa sa vrha stoga (A


je na vrhu, a B ispod njega)
Izraunaj B o A
Stavi rezultat na stog

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)

' uzmi rezultat izraza sa vrha stoga

TextBox2.Text = CStr(rezultat)
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

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 :
n

b=

x y
i =1
n

72

x
i =1

x=

2
i

1 n
xi
n i =1

y = a + b x, gdje je:

nx y

a = y b x
nx

y=

1 n
yi
n i =1

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

dopi

promjer provrta

h2.
Program treba ispisati slijedee dimenizije za
odabranu varijantu nosaa:
b, b1, h1, h, A (povrina presjeka)
Pri tome trebaju biti zadovoljeni slijedei uvjeti:

<

dop

h1 > h2 + 5
Naprezanje se rauna pomou izraza:

M
W

W=

b(h 3 h13 ) + b1 (h13 h23 )


6h

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