PIA Podloge Za Vjezbe 2011 v1

77
Programiranje i algoritmi – podloge za vježbe CADLab, Katedra za konstruiranje i razvoj proizvoda, FSB Zagreb 1 Sveu č ilište u Zagrebu Fakultet strojarstva i brodogradnje Katedra za konstruiranje i razvoj proizvoda N. Bojčetić, N. Pavković, R. Todić, D. Deković, D. Marjanović, D. Rohde PROGRAMIRANJE I ALGORITMI Podloge za vježbe – programiranje Visual Basic Zagreb, 2006.

description

pia vježbe

Transcript of PIA Podloge Za Vjezbe 2011 v1

Page 1: PIA Podloge Za Vjezbe 2011 v1

Programiranje i algoritmi – podloge za vježbe

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

S v e u č i l i š t e u Z a g r e b u

F a k u l t e t s t r o j a r s t v a i b r o d o g r a d n j e

Katedra za konstruiranje i razvoj proizvoda

N. Bojčetić, N. Pavković, R. Todić, D. Deković, D. Marjanović, D. Rohde

PROGRAMIRANJE I ALGORITMI Podloge za vježbe – programiranje

Visual Basic

Zagreb, 2006.

Page 2: PIA Podloge Za Vjezbe 2011 v1

Programiranje i algoritmi – podloge za vježbe

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

PREDGOVOR

Ove podloge namijenjene su studentima Fakulteta strojarstva i brodogradnje kao pomoćna literatura za praćenje vježbi iz kolegija PROGRAMIRANJE I ALGORITMI i kolegija PRIMJENA RAČUNALA B. Gradivo je izloženo redoslijedom kojim se obrađuje na vježbama. Temeljni koncepti programiranja obrađuju se na predavanjima u satnicom dopuštenom okviru. Pretpostavka uspješnog savladavanja kolegija je redovito praćenje nastave i samostalan rad na računalu. Vježbe se održavaju na računalima u PC učionicama CADLab -a.

Podloge nikako ne mogu biti zamjena za proučavanje originalnih priručnika i druge literature. Pisanje podloga za kolegij koji obrađuje materiju koja je tako podložna brzim promjenama kao računalstvo, nezahvalan je posao. Sjena zastarijevanja nadvila se nad rukopis onog trenutka kada je započela priprema teksta. Ipak vjerujemo da će podloge omogućiti studentima lakše savladavanje prvih koraka računalstva na Fakultetu strojarstva i brodogradnje Sveučilišta u Zagrebu. U CADLab -u instalirana računalna i programska oprema, razvojni alati, CAD/CAE aplikacije, pristup Internetu, te podrška asistenata i demonstratora omogućuju studentima FSB-a usvajanje znanja potrebnih svakom inženjeru. Stoga očekujemo da će studenti koristiti računala u svakodnevnom radu i izvan kolegija Katedre za osnove konstruiranja.

Autori

U Zagrebu, Listopad 2006.

Page 3: PIA Podloge Za Vjezbe 2011 v1

Programiranje i algoritmi – podloge za vježbe

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

Sadržaj

Visual Basic je program kontroliran (pokretan) događajima – "event driven". Događaji se mogu pojaviti zahvaljujući akciji korisnika kao što je klik mišem ili odabir stavke iz izbornika ili kao rezultat akcije nekog drugog prozora.

Slika 1. Program pokretan događajima (event driven)

U "proceduralnim" programima sam program kontrolira redoslijed izvođenja pojedinih dijelova programskog kôda. Izvođenje počinje prvom "izvršnom" naredbom i slijedi unaprijed određene putanje.

U programu upravljanom događajima programski kôd ne slijedi unaprijed određene putanje, već se izvode različiti dijelovi programskog koda kao odgovori na događaje. Događaji mogu biti pokrenuti akcijom korisnika, porukama sustava ili drugih programa te samog programa. Redoslijed tih događaja određuje putanju kojom će programski kôd biti izveden.

Budući da se ne može predvidjeti redoslijed događaja (pa niti koji će se događaji "dogoditi", a koji ne), programski kôd mora uzeti u obzir neke pretpostavke o "općem stanju" (sučelja i podataka) kada se počne izvoditi – npr. sadrži li polje za upis podatka neku vrijednost ili ne i sl.

Riješeni primjeri zadataka sadrže i dijagram toka – grafički prikaz algoritma. Standardni elementi dijagrama toka razvijeni su prvenstveno za proceduralne programske jezike, stoga ne sadrže sve elemente potrebne za prikaz situacija koje mogu nastupiti u programima upravljanim događajima. Stoga u pojedinim primjerima dijagram toka ne odgovara u potpunosti algoritmu primjenjenom u programskom kodu. Za svaki primjer razlike će biti posebno objašnjene na vježbama.

Page 4: PIA Podloge Za Vjezbe 2011 v1

Programiranje i algoritmi – podloge za vježbe

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

1. Opis radnog okružja Microsoft Visual Studio 2005

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

Slika 2: Početak rada sa Visual Basic-om

Između dvije ponuđene opcije u prozoru "Recent projects" za kreiranje novog projekta potrebno je odabrati Create, a za otvaranje već postojećeg Open.

Prilikom odabira novog projekta prikazuje se dijaloški okvir prikazan na slici 3 u kojem je potrebno odabrati tip Visual Basic projekta iz liste vrsta projekata, te iz liste predložaka aplikaciju za Windows operativni sustav (Windows Application).

Program nudi predefinirano ime WindowsApplication1 koje se može promijeniti po želji pod uvjetom da nema praznih mjesta u imenu. Također se nudi i predefinirana lokacija za njegovu pohranu koju pomoću padajuće liste ili naredbenog gumba Browse odabire korisnik.

Kreiranje novih projekata

Otvaranje postojećih projekata

Page 5: PIA Podloge Za Vjezbe 2011 v1

Programiranje i algoritmi – podloge za vježbe

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

Slika 3. Dijaloški okvir za otvaranje novog projekta

Prozor sa programskim rješenjima (Solution Explorer) prikazuje naziv rješenja (Solution; grupa projekata), naziv trenutnog projekta (Project) i sve forme i module unutar projekta. Na početku 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 početku dostupne unutar projekta.

Slika 4 Pretraživač programskih rješenja

Odabir vrste projekta

Odabir predloška

Upis imena novog projekta

Page 6: PIA Podloge Za Vjezbe 2011 v1

Programiranje i algoritmi – podloge za vježbe

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

2. Izrada korisničkog sučelja aplikacije u Visual Basic-u

Prvi korak u kreiranju aplikacije Visual Basicom je stvaranje sučelja aplikacije. Forme i kontrole su osnovni elementi sučelja - objekti koji imaju svojstva i događaje koji određuju njihovo ponašanje i interakciju s korisnikom. Postavljanjem svojstava formi i kontrola te pisanjem Visual Basic programskog koda koji će odgovarati na događaje, objekti se prilagođavaju zahtjevima aplikacije. Kontrole su objekti koji su sadržani u objektima forme. Svaki tip kontrole ima svoj skup svojstava, metoda i događaja koje ga čine prikladnim određenoj namjeni.

Kreiranje forme za interakciju korisnika i programa izvodi se u prozoru pod opcijom Form1.vb[Design]. Kontrole smještamo na formu dvoklikom (double click) lijeve tipke miša na odabrano ime kontrole na traci s alatima (Toolbox) ili pritiskom na lijevu tipku i odvlačenjem na formu (drag and drop).

Kontrolu koja je inicijano smještena na formu moguće je pomicati po formi klikom i držanjem lijeve tipke miša iznad nje. Veličina kontrole mijenja se pomicanjem hvatača u obliku bijelih kvadratića (slika 5).

Slika 5 Naredbeni gumb Button1 na formi Form1

Page 7: PIA Podloge Za Vjezbe 2011 v1

Programiranje i algoritmi – podloge za vježbe

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

Slika 6. Prozor s osobinama za naredbeni gumb Button1

Osobine smještaja kontrole na formi i njena veličina osim mišem 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 slijedeća pravila: naziv ne smije imati prazna mjesta, moraju se koristiti slova engleske abecede, ne smiju se koristiti rezervirane riječi programskog jezika, te neslužbeno korištenje prefiksa od tri slova za oznaku vrste objekta. Za naredbeni gumb to je cmd te se na njega doda proizvoljni naziv s velikim početnim slovom.

Prilikom kreiranja forme i smještanja objekata na formu, automatski se generira programski kôd (Windows Form Designer generated code) u kojem je zapisan kôd za vrijednosti osobina objekata.

Page 8: PIA Podloge Za Vjezbe 2011 v1

Programiranje i algoritmi – podloge za vježbe

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

3. Imenovanje i tipovi varijabli u Visual Basic-u

Prilikom deklariranja varijabli moraju se poštivati slijedeća pravila za naziv:

• mora počinjati slovom abecede

• može sadržavati samo slova, brojeve i znak _

• ne može sadržavati točku

• ne smije biti duži od 255 znakova

• mora biti jedinstven u dijelu programa u kojem se nalazi varijabla.

Tablica 1. Vrste (tipovi) podataka u Visual Basic-u

VRSTA VELIČINA RASPON VRIJEDNOSTI

Boolean 4 Byte-ova True ili False

Byte 1 Byte 0–255 unsigned

Char 2 Byte-a 0–65,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 različit od

nule je

+/–0.0000000000000000000000000001

Double 8 Byte-ova –1.79769313486231 E308 do –4.94065645841247 E-

324 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

(+ znakova u stringu * 2)

od 0 do otprilike 2 milijarde Unicode znakova

Page 9: PIA Podloge Za Vjezbe 2011 v1

Programiranje i algoritmi – podloge za vježbe

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

Često se javlja potreba da se u tijeku izvođenja programa izvrši konverzija iz jednog tipa varijable u drugi – npr. tekst u brojčanu 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

Page 10: PIA Podloge Za Vjezbe 2011 v1

Programiranje i algoritmi – podloge za vježbe

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

4. Primjer uporabe uvjetnog grananja

Napisati program za unos tri broja, određivanje najvećeg te izračunavanje razlike između najvećeg 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

Razlika

END

NE

NEDA

B > AANDB > C

A > BANDA > C

Razlika = A - (B + C)

DA

Razlika = B - (A + C) Razlika = C - (A + B)

Slika 7. Dijagram toka

Ulazni podaci: vrijednosti tri broja

Izlazni podatak: razlika najvećeg broja i zbroja preostala dva

Page 11: PIA Podloge Za Vjezbe 2011 v1

Programiranje i algoritmi – podloge za vježbe

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

Dijagram toka započinje simbolom "START" koji predstavlja aktiviranje programskog koda. Slijedeći simbol ( ) prikazuje učitavanje vrijednosti tri broja, odnosno unos od strane korisnika programa. Operacija učitavanja zapravo dodjeljuje upisane vrijednosti varijablama A, B i C. Varijable su područja memorije koje rezervira program i u koje se pohranjuju podaci tijekom korištenja programa. Tip varijable (cjelobrojna, realna, tekstualna, itd.) ne prikazuje se u dijagramu toka.

Nakon toga potrebno je ustanoviti koji od učitana tri broja ima najveću vrijednost. U ovom primjeru koristimo ispitivanje dva logička uvjeta, na temelju čega izvodimo zaključak. Ovakav pristup bio bi vrlo neefikasan za traženje maksimalne vrijednosti u većem nizu brojeva, no za tri vrijednosti je zadovoljavajući. Ispitivanje logičkog uvjeta prikazuje se u dijagramu toka simbolom ili .

Prvo ispitujemo da li je vrijednost varijable A istovremeno veća i od B i od C. Kada treba ispitati dva ili više povezanih logičkih uvjeta, oni se povezuju operatorima logičke konjukcije ili disjunkcije (AND ili OR). Ako je odgovor na pitanje prvog uvjeta istinit, znači da je varijabla A najveća, pa varijabla Razlika poprima vrijednost prema izrazu (formuli) A – (B + C). Ako prvi uvjet nije ispunjen – prelazi se na ispitivanje slijedećeg uvjeta - da li je vrijednost varijable B istovremeno veća i od A i od C. Ako je drugi uvjet ispunjen, vrijednost varijable Razlika računa se prema formuli B – (A + C). Ako ni drugi uvjet nije ispunjen, preostaje još samo mogućnost da varijabla C ima najveću vrijednost, pa se varijabla Razlika računa prema izrazu C – (A + B). Nakon ispitivanja uvjeta i izračuna vrijednosti razlike sve tri grane dijagrama toka spajaju se u čvorištu u jednu, nakon čega slijedi ispis vrijednosti varijable Razlika (u dijagramu toka simbol predstavlja ispis) i program završava (simbol "END").

Kako je već prije navedeno, standardni elementi dijagrama toka razvijeni su prvenstveno za proceduralne programske jezike, stoga ne sadrže sve elemente potrebne za prikaz situacija koje mogu nastupiti u programima upravljanim događajima. U programu upravljanom događajima programski kôd ne slijedi unaprijed određene putanje, već se izvode različiti dijelovi programskog koda kao odgovori na događaje. Događaji mogu biti pokrenuti akcijom korisnika, porukama sustava ili drugih programa te samog programa. Redoslijed tih događaja određuje putanju kojom će programski kôd biti izveden. Zbog navedenih razloga prethodno obrazloženi dijagram toka u ovom primjeru, kao i u svim preostalim primjerima u ovim skriptama ne odgovara u potpunosti programskom rješenju postavljenog zadatka u Visual Basic-u. Dijagrami tokova dani su uz svaki zadatak prvenstveno radi grafičkih prikaza algoritama koji su primjenjeni pri rješavanju zadataka. Najveće razlike između dijagrama toka i programskog rješenja većinom su u načinu manipulacije sa ulaznim i izlaznim podacima. Koncepcija kreiranja sučelja i manipulacije s podacima u Visual Basic-u omogućuju kreiranje ogromnog broja različitih varijanti programskog rješenja koje se temelje na istom osnovnom algoritmu.

Programsko rješenje prikazanog algoritma u Visual Basic-u zamišljeno je na slijedeći način: korisnik unosi brojeve u tri okvira s tekstom, te nakon unosa aktivira gumb koji pokreće proceduru za izračunavanje traženog izlaznog podatka (razlike). U četvrtom okviru procedura ispisuje izračunatu razliku. Pritiskom na gumb za novi niz obrisali bi se svi okviri s tekstom i program bi se pripremio za novi unos.

Page 12: PIA Podloge Za Vjezbe 2011 v1

Programiranje i algoritmi – podloge za vježbe

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

Forma se sastoji od slijedećih 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 pokreće proceduru za izračun i naredbenog gumba koji pokreće proceduru za novi unos podataka.

Konačni izgled forme je prikazan na slici 8.

Slika 8. Konačni izgled forme

Tablica 3. Vrijednosti osobina za kontrole na formi:

INCIJALNI NAZIV OBJEKTA (NAME)

NOVI NAZIV (NAME)

NOVI TEKST

Button1 cmdIzracunaj Izračunaj

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:

Page 13: PIA Podloge Za Vjezbe 2011 v1

Programiranje i algoritmi – podloge za vježbe

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

Za svaki događaj, u našem slučaju za pritisak na gumb, potrebno je dodati pripadajući programski kôd. Prozor s programskim kôdom otvara se dvoklikom na objekt s forme ili odabirom opcije View code u prozoru s rješenjima (Solution Explorer).

Varijable se prije uporabe deklariraju. Globalne varijable su postojane, traju koliko i program i zadržavaju vrijednosti od jednog poziva funkcije do drugog. Lokalne varijable su deklarirane unutar funkcije (ili bloka) i traju samo dok se funkcija (blok) izvodi.

Programski kôd započinje 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 brojčanih varijabli nakon deklariranja jednake 0, no moguće ih je i definirati tako da na početku imaju neku konkretnu vrijednost npr: Dim X as Integer = 12

Dvoklikom na objekt cmdIzracunaj, Visual Basic automatski kreira početni kôd za potprogram događaja 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

Između Private Sub cmd_Izracunaj i End Sub upisuje se programski kôd koji se izvršava nakon aktiviranja gumba od strane korisnika.

Kada je korisnik unio brojeve u okvire s tekstom, u potprogramu za događaj 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 točke, Visual Basic nudi popis osobina koju možemo automatski upisati odabirom i pritiskom tipke Tab (slika 9).

Page 14: PIA Podloge Za Vjezbe 2011 v1

Programiranje i algoritmi – podloge za vježbe

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

Slika 9.Automatski upis osobine

Funkcija CDbl označava pretvorbu (eng. converting) tekstualne vrijednosti u numeričku vrijednost tipa Double. Prema dijagramu toka potrebno je ispitati da li je vrijednost varijable A istovremeno veća i od varijable B i od varijable C. Za tu svrhu koristi se naredba uvjetnog grananja (odn. logičke usporedbe) koja određuje koji će se dio programskog koda izvršiti ovisno o istinitosti ispitanog uvjeta. Općeniti 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 slučaju takve uvjete treba povezati tzv. logičkim operatorom konjukcije (And). Svaki od dva povezana uvjeta koristi operator usporedbe označen simbolom >.

If A > B And A > C Then

End If

Tablica 4. Popis operatora usporedbe

OPERATOR VRSTA USPOREDBE

= Jednakost

< Manje od

<= Manje ili jednako

> Veće od

>= Veće ili jednako

<> Nejednakost

Page 15: PIA Podloge Za Vjezbe 2011 v1

Programiranje i algoritmi – podloge za vježbe

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

Ovisnost rezultata logičkih operacija o vrijednostima operanada obično se prikazuje tzv. tablicom "istinitosti" za logičke operatore (A i B su operandi – logičke varijable):

A B A AND B A OR B istina istina istina istina istina laž laž istina laž istina laž istina laž laž laž laž

Ako su oba uvjeta zadovoljena izračunava se i dodjeljuje vrijednost varijabli Razlika prema izrazu A – (B + C) gdje naredba Razlika = A – (B + C) ne predstavlja matematičku jednadžbu već dodjeljivanje (pridruživanje), što znači da lijeva strana od znaka jednakosti poprima vrijednost desne strane. Zatim se izlazi iz strukture, odn. nastavlja se sa slijedećom naredbom iza rezervirane riječi EndIf. Ako jedan ili oba uvjeta nisu zadovoljeni, unutar strukture naredbe uvjetnog grananja prelazi se na ispitivanje slijedećeg uvjeta iza rezervirane riječi ElseIf (da li je varijabla B istovremeno veća 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, izračunava se i dodjeljuje vrijednost varijabli Razlika prema izrazu B – (A + C). Ako niti taj uvjet nije ispunjen onda preostaje samo mogućnost da je vrijednost varijable C najveća – vrijednost varijable razlika tada se izračunava prema naredbi koja slijedi iza rezervirane riječi Else.

Cjelokupni programski kôd naredbe uvjetnog grananja If…Then…Else 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 važno uočiti i razumjeti da će se, ovisno o vrijednostima varijabli A, B i C uvijek izvršiti jedna i samo jedna od triju naredbi za dodjeljivanje vrijednosti varijabli Razlika, a nakon toga izvođenje programa se nastavlja sa prvom slijedećom naredbom iza rezerviranje riječi End If koja označava kraj strukture uvjetnog grananja.

Page 16: PIA Podloge Za Vjezbe 2011 v1

Programiranje i algoritmi – podloge za vježbe

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

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

Potprogram cmdNovi_Click za novi unos vraća osobine objekata na početne vrijednosti. Cjelokupni programski kôd rješenja zadatka je slijedeći: 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

Page 17: PIA Podloge Za Vjezbe 2011 v1

Programiranje i algoritmi – podloge za vježbe

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

Slika 10. Izbornik Debug

Da bi se program pokrenuo, prvo je potrebno izvršiti prevođenje u strojni jezik. Proces prevođenja pokrećemo 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 grešaka, odmah nakon prevođenja programa program će se i pokrenuti, tj. prikazati će se forma na ekranu u obliku novog aktivnog prozora. Primjer ispisa na formi nakon korištenja programa prikazan je na slici 11.

Slika 11. Ispis na formi nakon izvođenja programa

Prilikom osmišljavanja i pisanja programskog koda dolazi do pogrešaka koje se odražavaju na rad programa, tj. čine da program ne radi kako je zamišljeno. Općenito, greške mogu biti:

• sintaksne – pogreške kod pisanja, npr. krivo napisana varijabla ili rezervirana programska riječ,

• greške prilikom rada (runtime error) – nema sintaksne greške već se greška događa prilikom izvršavanja programskog koda npr. kada se želi izvršiti objekt bez prethodnog instanciranja. Prilikom takve greške program može zaustaviti rad.

• logičke greške najteže se otkrivaju, a javljaju se kao rezultat logičkih grešaka u algoritmima aplikacije.

Page 18: PIA Podloge Za Vjezbe 2011 v1

Programiranje i algoritmi – podloge za vježbe

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

5. Zbroj niza vrijednosti

Napisati program za unos niza brojeva i izračunavanje aritmetičke sredine. Ovaj primjer prikazuje jedan od najjednostavnijih algoritama – zbrajanje niza vrijednosti.

Aritmetička sredina računa se prema jednadžbi: ⎟⎠

⎞⎜⎝

⎛= ∑

=

n

iix

nx

1

1

START

Sredina

END

Sredina = Zbroj / n

Zbroj = Zbroj + x

x

n = n + 1Pon

avlja

nje

ucita

vanj

a i

zbra

janj

a ko

je k

oris

nik

real

izira

pon

ovni

m p

oziv

om

proc

edur

e

Korisnik odlucuje o tijeku izvršavanja

preko sucelja

Slika 12. Dijagram toka

Na početku nema niti jednog unesenog broja tako da je varijabla n jednaka nuli. Korisnik unosi broj x, a varijabla Zbroj se uvećava za vrijednost varijable x. Nakon toga se i varijabla n uvećava za jedan (zato što smo unijeli 1 broj) izrazom n = n + 1, tj. iz 0 se mijenja u 1. Ponavljajući ovaj postupak unošenjem različitih brojeva preko varijable x, mijenjaju se varijable Zbroj i n. Aritmetička sredina cijelog niza definirana je varijablom Sredina koja će imati vrijednost Sredina = Zbroj / n. Na kraju programa ispisuje se vrijednost aritmetičke sredine.

Page 19: PIA Podloge Za Vjezbe 2011 v1

Programiranje i algoritmi – podloge za vježbe

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

Jedna od mogućih izvedbi ovog dijagrama toka u Visual Basic-u i korištenja 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 izračunavanje srednje vrijednosti u trećem bi se okviru ispisivala aritmetička sredina. Pritiskom na gumb za novi niz praznili bi se okviri s tekstom i program bi se pripremio za novi unos. Konačni izgled forme prikazan je na slici 13:

Slika 13. Konačni 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)

NOVI NAZIV (NAME)

NOVI TEKST

Button1 cmdUnesi Unesi

Button2 cmdIzracunaj Izračunaj

Button3 cmdNovi_niz Novi niz

TextBox1 txtUnos

TextBox2 txtVelicina

TextBox3 txtSredina

Label1 lblUpisite Upišite broj:

Label2 lblVelicina Veličina niza:

Label3 lblSredina Arit. sredina:

Page 20: PIA Podloge Za Vjezbe 2011 v1

Programiranje i algoritmi – podloge za vježbe

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

Početnu vrijednost za okvir s veličinom niza treba postaviti na 0.

Varijabli x pridodaje se brojčana 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 kôd za ispis veličine niza, tj. za ispis vrijednosti varijable n u okvir s tekstom txtVelicina txtVelicina.Text() = n

U ovom slučaju varijable Zbroj i n su globalne jer se koriste i u potprogramu za izračunavanje aritmetičke 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 (veličina niza) inicijalno ima vrijednost 0, što odgovara programu jer pri pokretanju programa nije unesen niti jedan broj. Nakon unosa i aktiviranja događaja cmdUnesi_Click varijabla n mora se uvećati 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 kôd za ovaj događaj kao i za cijeli program nalazi se na kraju odjeljka.

Page 21: PIA Podloge Za Vjezbe 2011 v1

Programiranje i algoritmi – podloge za vježbe

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

U programskom kodu potprograma događaja cmdIzracunaj_Click, za izračun i ispis aritmetičke sredine varijabla Sredina poprima vrijednost kvocijenta ukupnog zbroja niza i veličine niza tj. Zbroj / n. Prethodno je potrebno lokalno deklarirati varijablu Sredina. Dim Sredina As Double

Sredina = Zbroj / n

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

U programskom kodu potprograma događaja cmdNovi_niz_Click, radi pripreme programa za novi unos i izračun sredine, vrijednosti globalnih varijabli n i Zbroj potrebno je vratiti na 0. n = 0

Zbroj = 0

Okvire s tekstom potrebno je postaviti na početne vrijednosti osobina prema: txtVelicina.Text = "0"

txtUnos.Text = ""

txtSredina.Text = ""

Cjelokupni kôd 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

Page 22: PIA Podloge Za Vjezbe 2011 v1

Programiranje i algoritmi – podloge za vježbe

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

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

Page 23: PIA Podloge Za Vjezbe 2011 v1

Programiranje i algoritmi – podloge za vježbe

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

6. Izračun faktorijela (primjena petlje s brojačem)

Napisati program za učitavanje niza pozitivnih cijelih brojeva te izračun zbroja faktorijela elemenata tog niza koji su manji od 10. Formula za izračun faktorijela broja x:

( ) ( ) xxxx ∗−∗−∗∗∗∗∗= 124321! K

Slika 15. Dijagram toka

Page 24: PIA Podloge Za Vjezbe 2011 v1

Programiranje i algoritmi – podloge za vježbe

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

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 izračunati njegov faktorijel (umnožak broja i svih njegovih prethodnika počevši od 1, npr faktorijel od 3 je umnožak 1 * 2 * 3 = 6) pomoću petlje koja povećava vrijednost varijable brojača i za 1 dok ne poprimi vrijednost broja x. Nova vrijednost varijable Faktorijel formira se tako da je pomnožimo s vrijednošću varijable i (Faktorijel = Faktorijel * i). Kada varijabla i poprimi vrijednost x izlazi se iz petlje i izračunata 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 izračun sume i dodavanje unesenog broja na popis. Forma još sadrži okvir s popisom lstLista te pripadne natpise.

Slika 16. Konačni izgled forme

Varijable Faktorijel i Zbroj su globalne varijable, a x i i lokalne unutar potprograma za događaj 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 vraća na početnu vrijednost.

Page 25: PIA Podloge Za Vjezbe 2011 v1

Programiranje i algoritmi – podloge za vježbe

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

x = CInt(txtUnos.Text)

txtUnos.Text = ""

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

End If

Ako je uvjet zadovoljen izvršava se programski kôd (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

Izračunavanje faktorijela za broj x izvodi se preko For...Next petlje. For petlja izvršava programski kôd određeni broj puta prema općenitom zapisu:

For brojač = početak To kraj [Step korak] [naredbe] Next

Brojač je brojčana varijabla koja se koristi za praćenje iteracija unutar petlje. Brojač počinje od vrijednost početak, vrijednost kraj je maksimalna vrijednost brojača na kojoj se petlja zaustavlja. Step predstavlja korak za povećavanje brojača (predefinirana vrijednost je 1, a može biti i negativna)

U ovom primjeru brojač će biti varijabla i kojoj je početna vrijednost 1, a kraj vrijednost varijable x (korak povećanja će ostati predefiniran, tj. 1). Unutar petlje varijabla Faktorijel poprimat će vrijednost umnoška vlastite vrijednosti i varijable brojača i. Npr u prvoj iteraciji petlje vrijednost umnoška će biti 1*1=1, u drugoj, 1*2=2, u trećoj 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 kôd je: Public Class Form1

Inherits System.Windows.Forms.Form

Dim Faktorijel, Zbroj As Double

Page 26: PIA Podloge Za Vjezbe 2011 v1

Programiranje i algoritmi – podloge za vježbe

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

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

Page 27: PIA Podloge Za Vjezbe 2011 v1

Programiranje i algoritmi – podloge za vježbe

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

7. Zbroj članova reda - uporaba petlje sa logičkim uvjetom

Program služi za izračunavanje i ispisivanje zbroja članova reda, te potrebnog broja članova reda n za zadanu točnost.

START

Tocnost

Zbroj, Velicina

END

i = i + 1

i = 1x = 1

Zbroj = Zbroj + x

Tocnost > 0AND

Tocnost <= 1

NE DA

x > Tocnost

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

Velicina = i - 1

DANE

Slika 18. Dijagram toka

Page 28: PIA Podloge Za Vjezbe 2011 v1

Programiranje i algoritmi – podloge za vježbe

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

Potrebno je odrediti broj članova reda tako da apsolutna vrijednost posljednjeg člana reda bude manja od učitane 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 točnost ε koju će predstavljati varijabla Tocnost. Ako usporedba unesene vrijednosti pokazuje da točnost nije veća od 0 i manja ili jednaka 1 program traži novi unos. Ako je uvjet zadovoljen postavlja se početni član reda x = 1 i brojač varijabla i = 1. Nakon usporedbe s varijablom Tocnost vrijednost varijable Zbroj se uvećava za vrijednost varijable člana x. Brojač varijabla i se uvećava za 1 te se kreira novi član reda prema formuli: x = (-1) ^ (i + 1) / (2 * i – 1). Tako izračunat član x uspoređuje se s vrijednošću varijable i postupak se ponavlja dok vrijednost varijable x ne postane manja od vrijednosti varijable Tocnost. Tada se ispisuje ukupni zbroj (Zbroj) i veličina reda članova (Velicina) te program završava.

Izgled forme je prema slici 19 s okvirima s tekstom txtTocnost, txtVelicina i txtZbroj te naredbenim gumbom cmdIzracunaj.

Slika 19. Izgled forme

Cijeli kôd za ovaj program smjestit će se unutar potprograma cmdIzracunaj_Click. Varijable Tocnost, x i Zbroj su tipa Double, a Velicina i i su Integer. Brojčane varijable se ne moraju nužno deklarirati s početnom vrijednosti 0. Prema formuli reda varijabla i počinje s 1 stoga će se deklarirati s početnom 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 veća ili jednaka 1 prilikom rada programa prikazat će se okvir s porukom (Message Box) koji će upozoriti korisnika na pogrešan unos te izaći 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")

Page 29: PIA Podloge Za Vjezbe 2011 v1

Programiranje i algoritmi – podloge za vježbe

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

Exit Sub

End If

Opći zapis izraza za okvir s porukom je:

MsgBox(poruka, [vrsta], [naslov])

pri čemu je poruka izraz tipa String, zapisuje se između 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 izračun broja x i ukupnog zbroja preko While petlje. While petlja se koristi za izvršavanje programskog koda više puta bez prethodnog znanja broja potrebnih iteracija. Petlja traje dok je uvjet istinit (True). Postoji više izvedbi ove petlje, a opći zapis je:

Do [{While | Until} uvjet] [naredbe] Loop

Kod Do While petlje provjerava se da li je uvjet istinit te se izvršavaju izrazi programskog koda uključujući prvu iteraciju. Petlja završava kada uvjet poprimi vrijednost False. Do Until petlja završava kada uvjet poprimi vrijednost True.

U ovom primjeru izračunavat će se x i Zbroj sve dok je apsolutna vrijednost varijable x veća od zadane točnosti prema izrazu: Math.Abs(x) > Tocnost

Funkcija Math koristi se za matematičke funkcije (sin, cos, tan, log…), a u ovom primjeru za izračun apsolutne vrijednosti koristit će se funkcija Abs. Unutar petlje izračunavat će se pojedini članovi i njihov ukupni zbroj, te će se uvećavati varijabla i za novu iteraciju i brojač članova reda. Do While Math.Abs(x) > Tocnost

Page 30: PIA Podloge Za Vjezbe 2011 v1

Programiranje i algoritmi – podloge za vježbe

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

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

Zbroj = Zbroj + x

i = i + 1

Velicina = Velicina + 1

Loop

Kada uvjet više nije ispunjen izlazi se iz petlje i ispisuje zbroj i veličina reda u predviđene 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

Page 31: PIA Podloge Za Vjezbe 2011 v1

Programiranje i algoritmi – podloge za vježbe

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

8. Uporaba strukture jednodimenzionalnog polja

Program služi za unos niza brojeva i izračun aritmetičke sredine: ⎟⎠

⎞⎜⎝

⎛= ∑

=

n

iix

nx

1

1

START

A (i)

Sredina

END

i = 1, n

Zbroj = Zbroj + A(i)

Sredina = Zbroj / n

i = 1, n

n

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 omogućuju višestruku pohranu istog tipa podataka bez kreiranja posebnih varijabli za svaki od podataka. Svi podaci su na taj način pohranjeni pod istim imenom, a manipulacija s pojedinim podatkom izvodi se preko indeksa polja. Jednodimenzionalno polje možemo zamisliti kao redak s podacima gdje je svaki podatak smješten u svoj stupac. Primjer polja A s 5 elemenata koji su cijeli brojevi:

Page 32: PIA Podloge Za Vjezbe 2011 v1

Programiranje i algoritmi – podloge za vježbe

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

indeks 0 1 2 3 4 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 izračunavao zbroj, u ovom primjeru najprije će se unijeti svi brojevi u polje. Zatim će se varijabli Zbroj dodavati vrijednosti elemenata polja A pomoću petlje s brojačem i. Petlja će najprije varijabli Zbroj dodati A(0), pa na izračunatu 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 izačunavanje i ispis vrijednosti aritmetičke sredine.

Slika 23. Konačni izgled forme

Polje se deklarira na isti način 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 različitih varijabli istog tipa možemo skratiti odvajajući varijable zarezom: Dim A(100), Zbroj As Single

Brojevi se unose u polje preko događaja 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.

Page 33: PIA Podloge Za Vjezbe 2011 v1

Programiranje i algoritmi – podloge za vježbe

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

Zbroj se izračunava u potprogramu cmdIzracunaj_Click dodavajući pojedini član A(k) For…Next petljom s brojačem 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

Page 34: PIA Podloge Za Vjezbe 2011 v1

Programiranje i algoritmi – podloge za vježbe

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

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

Page 35: PIA Podloge Za Vjezbe 2011 v1

Programiranje i algoritmi – podloge za vježbe

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

9. Određivanje minimuma i maksimuma unutar niza vrijednosti

Program služi za unos niza brojeva u polje i ispis brojeva koji imaju najveću i najmanju vrijednost.

START

A(i)

END

Da

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

j = 1, i

A(j) > Max

MinMax

Max = A(j)A(j) < Min

Ne

NeDa

Min = A(j)

i = i + 1

Uci

tava

nje

clan

ova

polja

uz

asto

pnim

poz

ivan

jem

pro

cedu

re

Slika 25. Dijagram toka

Page 36: PIA Podloge Za Vjezbe 2011 v1

Programiranje i algoritmi – podloge za vježbe

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

Prema dijagramu na slici 25 brojevi se unose u polje A. Nakon unosa, varijable koje predstavljaju najveći 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. Konačni izgled forme

Programski kôd za događaj 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 uvećava se varijabla i za jedan tj. i = i + 1. Visual Basic omogućava pisanje ovog izraza u obliku i += 1. Uneseni brojevi unose se u popis lstLista. Nakon početnog definiranja, varijable Min i Max poprimaju vrijednosti prvog člana polja A(1). For…Next petlja svaki element polja uspoređuje s vrijednostima varijabli Min i Max preko If…Then 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

Page 37: PIA Podloge Za Vjezbe 2011 v1

Programiranje i algoritmi – podloge za vježbe

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

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 način, ako je vrijednost elementa A(j) veća od vrijednosti varijable Max, tada Max poprima vrijednost A(j). Programski kôd 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

Page 38: PIA Podloge Za Vjezbe 2011 v1

Programiranje i algoritmi – podloge za vježbe

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

Slika 27. Rad programa

Page 39: PIA Podloge Za Vjezbe 2011 v1

Programiranje i algoritmi – podloge za vježbe

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

10. Manipulacija sa indeksom polja

Program služi 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 elementa A(4) preko formule: B(j)=A(i – j - 1) za i = 5, B(0) = A(5 – 0 - 1).

Slika 28. Konačni izgled forme

Potprogramom događaja 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 mijenjajući redni broj člana: lblUnos.Text = "Unesite " + CStr(i + 1) + ". član:"

Page 40: PIA Podloge Za Vjezbe 2011 v1

Programiranje i algoritmi – podloge za vježbe

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

Dijelovi natpisa stavljaju se u navodnike i vežu znakom +, a promjenjivi dio rednog broja pretvara se u String i poprima vrijednost i + 1. Unutar potprograma za događaj cmdIzracunaj_Click brišu se sve stavke popisa lstListaB za novi ispis pomoću osobine Items.Clear. Unutar For…Next petlje formira se novo polje i ispisuje u popis. Ukupni programski kôd 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

Page 41: PIA Podloge Za Vjezbe 2011 v1

Programiranje i algoritmi – podloge za vježbe

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

11. Ugnježđenje petlji na primjeru "bubble" sort algoritma

Napisati program koji će učitati polje cjelobrojnih brojeva i sortirati ih po rastućem redoslijedu "bubble sort" metodom.

START

N

i = 1, N

A(i)

i = 1, n - 1

j = 1, n - i

A(j) > A(j+1)

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

A(j+1) = temp

A(i)

END

DA

NE

i = 1, n

Slika 29. Dijagram toka

Page 42: PIA Podloge Za Vjezbe 2011 v1

Programiranje i algoritmi – podloge za vježbe

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

Nakon što su uneseni brojevi u polje A, preko unutrašnje petlje s brojačem j uspoređuju se susjedni članovi polja i zamjenjuju mjesta ako je zadovoljen uvjet da je predhodnik veći od slijedbenika (A(j) > A(j+1)). Zamjena se vrši 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).

A(j)

6

A(j+1)

3

Temp

6

Temp = A(j)

A(j)

6

A(j+1)

3

Temp

INICIJALNO STANJE

A(j)

3

A(j+1)

3

Temp

6

A(j) = A(j+1)

A(j)

3

A(j+1)

6

Temp

6

A(j+1)= Temp

1

2

3

4

Slika 30. Zamjena vrijednosti susjednih članova polja

PRIMJER "bubble sort" algoritma:

broj članova niza: n = 4, članovi niza: 7, 2, 6, 1

7 > 2 2, 7, 6, 1 j = 17 > 6 2, 6, 7, 1 3 usporedbe 7 > 1 2, 6, 1, 7 i = 1, n – 1

ukupno 3 prolaza kroz podatke = 2 < 6 2, 6, 1, 7 j = 2 = broj clanova niza - 16 > 1 2, 1, 6, 7 2 usporedbe

i = 1, n – 2 vanjska petlja: j = 1, n - 1

j = 3 2 > 1 1, 2, 6, 7 1 usporedba

i = 1, n – 3 Nakon prvog prolaza kroz vanjsku petlju najveći broj sigurno dolazi na zadnje mjesto (npr. kao broj 7 na slici 31). Unutrašnja 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č unutrašnje petlje stoga poprima vrijednosti od 1 do n – brojač vanjske petlje (u ovom primjeru n-i). Broj prolaza kroz vanjsku petlju jednak je broju članova niza umanjenom za 1.

Page 43: PIA Podloge Za Vjezbe 2011 v1

Programiranje i algoritmi – podloge za vježbe

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

Forma prema slici 31 sadrži gumbe za unos broja u polje, sortiranje i izlaz, okvir s tekstom za unos, dva popisa za nesortirani i sortirani niz te pripadajuće natpise.

Slika 31. Konačni 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

Page 44: PIA Podloge Za Vjezbe 2011 v1

Programiranje i algoritmi – podloge za vježbe

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

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

Page 45: PIA Podloge Za Vjezbe 2011 v1

Programiranje i algoritmi – podloge za vježbe

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

12. Uporaba dvodimenzionalnog polja za spremanje matrice i rad sa matricom

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 smještenih 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 označava 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 povećava za 1), zatim drugog itd. Nakon svakog unosa, element matrice A(i,j) se uspoređuje s nulom, te ovisno da li je veći, manji ili jednak nuli povećavaju se vrijednosti varijabli Broj_poz, Broj_neg ili Broj_nula za jedan.

Page 46: PIA Podloge Za Vjezbe 2011 v1

Programiranje i algoritmi – podloge za vježbe

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

START

n

i = 1, n

j = 1, n

A(i, j)

A(i, j) > 0

Broj_poz = Broj_poz + 1

A(i, j) < 0

Broj_neg = Broj_neg + 1

Broj_nula = Broj_nula+ 1

Broj_poz, Broj_neg, Broj_nula

END

DA NE

DA NE

Slika 34. Dijagram toka

Slika 35 Konačni izgled forme

Page 47: PIA Podloge Za Vjezbe 2011 v1

Programiranje i algoritmi – podloge za vježbe

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

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). Općeniti 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 može ga obrisati i ponoviti unos.

U ovom primjeru vrijednost varijable n se unosi uporabom okvira za unos (slika 36) na slijedeći način: n = InputBox("Unesite broj redaka i stupaca matrice", "Velicina matrice")

Slika 36

Uporabom vanjske (indeks i) petlje za retke i unutrašnje (indeks j) za stupce omogućuje se popunjavanje polja. For i = 1 To n

For j = 1 To n

Next j

Next i

Unutar te petlje unosi se programski kôd 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

Page 48: PIA Podloge Za Vjezbe 2011 v1

Programiranje i algoritmi – podloge za vježbe

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

Uneseni element polja uspoređuje se s 0 i prema ispunjenju zadanog uvjeta povećava se vrijednost varijablama poz, neg, i nula te se nakon završetka obje petlje ispisuju njihove vrijednosti u okvire s tekstom. Cijeli programski kôd 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

Page 49: PIA Podloge Za Vjezbe 2011 v1

Programiranje i algoritmi – podloge za vježbe

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

13. Artitmetička sredina redaka matrice

Napisati program za unos brojeva u pravokutnu matricu te za izračun i ispis aritmetičke sredine za svaki pojedini redak.

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 brojačem j ,koja se nalazi u petlji za retke, formira se ukupni zbroj elemenata pojedinog retka. Izlaskom iz petlje za stupce izračunati zbroj dijeli se s brojem stupaca n, ispisuje izračunata sredina te se prijelazi na slijedeći redak (novi korak petlje za retke).

Slika 38. Pravokutna matrica

START

m, n

i = 1, n

j = 1, m

A(i, j)

i = 1, n

Zbroj = 0

j = 1, m

Zbroj = Zbroj + A(i, j)

Sredina = Zbroj / m

Sredina

END

Slika 39. Dijagram toka

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

Page 50: PIA Podloge Za Vjezbe 2011 v1

Programiranje i algoritmi – podloge za vježbe

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

Članovi polja A(i,j) ispisuju se u popis lstMatrica, a izračunate sredine u popis lstRedci (slika 40).

Slika 40. Konačni 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 brojačem varijablom i i unutrašnja za stupce s brojačem 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 unutrašnje petlje izračunava se vrijednost varijable Zbroj. Za svaki novi izračun aritmetičke sredine retka vrijednost varijable Zbroj se postavlja na 0.

Page 51: PIA Podloge Za Vjezbe 2011 v1

Programiranje i algoritmi – podloge za vježbe

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

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 izračunava se vrijednost varijable Sredina i dodaje u popis lstRedci prema: Sredina = Zbroj / m

lstRedci.Items.Add(CStr(i) + ". redak = " + CStr(Sredina))

Ukupni programski kôd 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

Page 52: PIA Podloge Za Vjezbe 2011 v1

Programiranje i algoritmi – podloge za vježbe

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

Slika 41. Rad programa

Page 53: PIA Podloge Za Vjezbe 2011 v1

Programiranje i algoritmi – podloge za vježbe

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

14. Najveći parni broj na gl. dijagonali matrice

Program služi za unos brojeva u kvadratnu matricu te izračun i ispis najvećeg 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.

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

Glavnadijagonala

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 povećati vrijednost varijable koja će biti indeks tog polja za 1. Najvećim brojem (Max) se proglašava prvi element tako formiranog polja i uspoređuje se s ostatkom elemenata. Ako je za pojedini element istinit uvjet da je veći od Max, varijabla Max poprima vrijednost tog elementa.

Djeljivost nekog broja s drugim brojem provjeravamao tako da izračunavamo ostatak kod dijeljenja. Dakle ako želimo provjeriti da li je broj x djeljiv sa y korisiti ćemo funkciju koja kao vrijednost vraća ostatak od dijeljenja x sa y. U Visual Basic-u takva funkcija se zove Mod, a sintaksa je slijedeća:

Izraz x Mod y daje vrijednost ostatka od dijeljenja x sa y. Dakle ako želimo provjeriti da li npr. varijabla A sadrži paran broj, ispitati ćemo sliedeći uvjet:

If A Mod 2 = 0

Ako je uvjet istinit, vrijednost je parna, a ako nije onda je vrijednost neparna. Na isti način provjeravamo i djeljivost sa drugim brojevima.

Page 54: PIA Podloge Za Vjezbe 2011 v1

Programiranje i algoritmi – podloge za vježbe

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

START

n

i = 1, n

j = 1, n

A(i, j)

Max

END

i = 1, n

Max = B(1)

DA

NE

A(i, i) Mod 2 = 0

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

i = 1, k

B(i) > Max

Max = B(i)

DA

NE

Slika 43. Dijagram toka

Slika 44. Konačni 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

Page 55: PIA Podloge Za Vjezbe 2011 v1

Programiranje i algoritmi – podloge za vježbe

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

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

Page 56: PIA Podloge Za Vjezbe 2011 v1

Programiranje i algoritmi – podloge za vježbe

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

15. Zbroj elemenata matrice manjih od prvo unesenog

Program služi 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)

Zbroj

END

Zbroj = Zbroj+ A(i, j)

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

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

Page 57: PIA Podloge Za Vjezbe 2011 v1

Programiranje i algoritmi – podloge za vježbe

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

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

Page 58: PIA Podloge Za Vjezbe 2011 v1

Programiranje i algoritmi – podloge za vježbe

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

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 veći indeks stupca od indeksa retka dok za elemente ispod glavne dijagonale vrijedi suprotno: indeks retka je veći od indeksa stupca.

Slika 47. Glavna dijagonala kvadratne matrice

START

N

i = 1, N

j = 1, N

A(i, j)

i < j

Zbroj_iznad = Zbroj_iznad + A(i,j)i > j

Zbroj_ispod = Zbroj_ispod + A(i,j)

Zbroj_iznad, Zbroj_ispod

END

DANE

DA

Slika 48. Dijagram toka

Page 59: PIA Podloge Za Vjezbe 2011 v1

Programiranje i algoritmi – podloge za vježbe

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

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

Page 60: PIA Podloge Za Vjezbe 2011 v1

Programiranje i algoritmi – podloge za vježbe

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

17. Iteracija

Potrebno je napraviti program za određivanje visine h do koje je spremnik u obliku kugle radijusa R ispunjen tekućinom za zadani volumen V uz zadanu točnost ε ( izracunatizadani VV −=ε ). Volumen kuglina odsječka računa se po formuli:

)3(31 2 hRhV −= π . Potrebno je pretpostaviti početno rješenje (h = R), provjeriti točnost

te korigirati po potrebi (iteracija).

Δ X1

y1 = f (X)

Δ X1Δ X1

Δ X2 Δ X2

Δ X1 Δ X1

Δ X2

y2 = f (X)

x, y1=Y2

(X-ε, X+ε)

Xo

(Y- ε , Y+ ε )

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

Page 61: PIA Podloge Za Vjezbe 2011 v1

Programiranje i algoritmi – podloge za vježbe

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

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

Page 62: PIA Podloge Za Vjezbe 2011 v1

Programiranje i algoritmi – podloge za vježbe

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

18. Bisekcija

Napisati program koji će odrediti nultočku funkcije f(x) = 0 u intervalu [x1, x2] uz određenu točnost ε, metodom bisekcije. Za izračunavanje vrijednosti funkcije f(x) načiniti funkcijski potprogram.

Algoritam • Učitati granice intervala x1 i x2 te traženu točnost ε. • Provjeriti da li funkcija u zadanom intervalu mijenja predznak:

0)()( 21 <⋅ xfxf . Ako ne, ispisati poruku i zaustaviti program.

• Petlja koja se prekida kada se zadovolji jedan od uvjeta: ε

ε

≤−

12

0 )(

xx

xf

• Izračunati međutočku: 2

210

xxx

+=

• Provjeriti uvjete. Ako su zadovoljeni ispisati vrijednost nultočke. • Provjeriti u kojoj polovici inetervala funkcija mijenja predznak:

0201 0)()( xxxfxf =→<⋅

0120 0)()( xxxfxf =→<⋅

• Ponovo izračunati međutočku s novim vrijednostima x1 i x2

Page 63: PIA Podloge Za Vjezbe 2011 v1

Programiranje i algoritmi – podloge za vježbe

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

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

Page 64: PIA Podloge Za Vjezbe 2011 v1

Programiranje i algoritmi – podloge za vježbe

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

19. Učitavanje 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 određenog segmenta, odvojeni zarezom. Potrebno je napraviti program koji će učitati promjere i duljine segmenata vratila i izračunati i ispisati težinu 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

Page 65: PIA Podloge Za Vjezbe 2011 v1

Programiranje i algoritmi – podloge za vježbe

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

Page 66: PIA Podloge Za Vjezbe 2011 v1

Programiranje i algoritmi – podloge za vježbe

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

20. Izračunavanje vrijednosti integrala

Napisati program koji će izračunavati vrijednost određenog integrala

∫b

a

dxxf )( po Simpsonovoj formuli:

( )nnn

b

a

yyyyyyyhdxxf +++++++≈ −−∫ 123210 424243

)( K

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

n

abh −=

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

y0

y1

y2

y3yn-2

yn-1

yn

y = f(x)y

xa x1 x2xn-2 xn-1 bx3 h0

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)

Page 67: PIA Podloge Za Vjezbe 2011 v1

Programiranje i algoritmi – podloge za vježbe

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

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

Page 68: PIA Podloge Za Vjezbe 2011 v1

Programiranje i algoritmi – podloge za vježbe

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

Page 69: PIA Podloge Za Vjezbe 2011 v1

Programiranje i algoritmi – podloge za vježbe

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

21. Uporaba strukture stoga za izračunavanje vrijednosti izraza

Napisati program koji će izračunavati vrijednost aritmetičkog izraza učitanog kao niz znakova (string). Ograničenja: izraz sadrži samo jednoznamenkaste cijele brojeve i operatore zbrajanja, oduzimanja, množenja i dijeljenja. Izraz se upisuje transformiran u "reverznu poljsku notaciju" (operatori su iza operanada).

Upotrijebiti algoritam evaluacije izraza korištenjem strukture stoga (stack).

Algoritam evaluacije izraza uz primjer:

Izraz: 5 6 2 + * 8 4 / - ) 5 * ( 6 + 2 ) – 8 / 4

)1038-940,2/840,8,44740,812640*55,8+45,6,2235,662551stogsimbol 1. Dodaj “)” na kraj izraza

2. “skeniraj” (“parsiraj”) izraz s lijeva na desno i ponavljaj korake 3 i 4 dok se ne dostigne “)” (oznaka kraja izraza)

3. Ako je pronađen operand, stavi ga na stog

4. Ako je pronađen operator “o”:i. Uzmi dva elementa sa vrha stoga (A

je na vrhu, a B ispod njega)ii. Izračunaj B “o” Aiii. Stavi rezultat na stog

5. Vrijednost izraza jednaka je elementu na vrhu stoga

Page 70: PIA Podloge Za Vjezbe 2011 v1

Programiranje i algoritmi – podloge za vježbe

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

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 slijedeći element sa vrha stoga

Select Case simbol 'primjeni operator i rez. vrati na stog

Case "+" mr = op2 + op1 Case "-" mr = op2 - op1 Case "*" mr = op2 * op1 Case "/" mr = op2 / op1 End Select

stog.Push(mr)

' da li je simbol različit od "praznine"?

ElseIf simbol <> " " Then

MsgBox("izraz sadrži 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

Page 71: PIA Podloge Za Vjezbe 2011 v1

Programiranje i algoritmi – podloge za vježbe

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

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

Page 72: PIA Podloge Za Vjezbe 2011 v1

Programiranje i algoritmi – podloge za vježbe

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

22. Određivanje jednadžbe pravca regresije

U ASCII datoteci zapisane su x i y koordinate za n točaka dobivenih mjerenjima u nekom pokusu. Potrebno je napisati program koji će učitati koordinate točaka iz datoteke, te odrediti i ispisati jednadžbu pravca regresije za zadane točke.

pravac regresije : y = a + b x, gdje je:

=

=

−= n

ii

n

iii

xnx

yxnyxb

1

22

1 xbya −=

∑=

=n

iix

nx

1

1 ∑=

=n

iiy

ny

1

1

Page 73: PIA Podloge Za Vjezbe 2011 v1

Programiranje i algoritmi – podloge za vježbe

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

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

Page 74: PIA Podloge Za Vjezbe 2011 v1

Programiranje i algoritmi – podloge za vježbe

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

23. "Optimiranje" nosača

Na raspolaganju su čelične trake d x b. Od tih čeličnih traka treba napraviti "I" nosač. Iz konstrukcijskih razloga u srednjeoj traci je na jednom mjestu provrt promjera h2. Od svih nosača koji zadovoljavaju uvjete treba odabrati onaj najmanje površine.

Nosač se sastavlja od dva tipa trake, jedan se koristi za pojase, a druga za rebro. Debljina trake "d" kreće se od 4 do 16 mm, a širina trake "b" izvodi se iz slijedećih dimenzija:

10, 12, 14, 15, 16, 18, 20, 22, 24, 25, 26, 28, 30, 32, 34, 35, 36, 38.

Zadan je moment savijanja nosača M,

dopušteno naprezanje σdopi promjer provrta h2.

Program treba ispisati slijedeće dimenizije za odabranu varijantu nosača:

b, b1, h1, h, A (površina presjeka)

Pri tome trebaju biti zadovoljeni slijedeći uvjeti:

σ < σdop

h1 > h2 + 5

Naprezanje se računa pomoću izraza:

hhhbhhbW

WM

6)()( 3

2311

31

3 −+−==σ

Napomena: polje vrijednosti širina trake treba učitati iz datoteke!

Page 75: PIA Podloge Za Vjezbe 2011 v1

Programiranje i algoritmi – podloge za vježbe

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

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

Page 76: PIA Podloge Za Vjezbe 2011 v1

Programiranje i algoritmi – podloge za vježbe

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

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

Page 77: PIA Podloge Za Vjezbe 2011 v1

Programiranje Uvod u računala – podloge za vježbe

CADLab, Katedra za osnove konstruiranja, FSB Zagreb 77

24. Primjeri zadataka

24.1 Zadatak 1 Potrebno je napraviti program koji će učitati 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 većih 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: 432 23 +++= xxxy .

24.4 Zadatak 4 Potrebno je napraviti program za ustanovljavanje da li je trokut jednakostraničan, jednakokračan ili raznostraničan. U koordinatnom sustavu trokut je definiran s tri koordinate njegovih vrhova: ),( 111 yxP , ),( 222 yxP i ),( 333 yxP . Formula za izračunavanje

udaljenosti između vrhova trokuta glasi: 22 )()( jijiij yyxxP −+−= .