47
   1  MAŠINSKI FAKULTET BANJA LUKA Riješeni zadaci sa vježbi iz Programiranja Pripremio asistent Slaviša Todorović dipl. inž. maš. Termin 1: Upoznavanje sa Visual Basic korisničkim interfejsom View Code - prikaz prozora za unos koda View Object - prikaz selektovane forme iz Project prozora View/Project Explorer; Properties Window; Form Layout; Toolbox Zadatak 1: Sastavite program za izračunavanje površine kružnice koristeći ugrađene InputBox () i MsgBox () Visual Basic funkcije. Rješenje: Private Sub Form_Load() R = InputBox("") P = R * R * 3.14159 MsgBox (P) End Sub Cilj zadatka: Objašnjavanje elemenata jezika (varijable, podaci, operatori, izrazi, naredbe) Obim = 2*r*3.14159 варијабле подаци симболи за операције (оператори) израз наредба 

Programiranje - Vjezbe - Rijeseni Zadaci

  • Upload
    rakabl

  • View
    173

  • Download
    13

Embed Size (px)

DESCRIPTION

raka

Citation preview

Page 1: Programiranje - Vjezbe - Rijeseni Zadaci

   1 

 

MAŠINSKI FAKULTET BANJA LUKA

Riješeni zadaci sa vježbi iz Programiranja

Pripremio asistent Slaviša Todorović dipl. inž. maš.

Termin 1:

Upoznavanje sa Visual Basic korisničkim interfejsom

View Code - prikaz prozora za unos koda

View Object - prikaz selektovane forme iz Project prozora

View/Project Explorer; Properties Window; Form Layout; Toolbox

Zadatak 1: Sastavite program za izračunavanje površine kružnice koristeći ugrađene InputBox () i MsgBox () Visual Basic funkcije.

Rješenje:

Private Sub Form_Load() R = InputBox("") P = R * R * 3.14159 MsgBox (P) End Sub

Cilj zadatka: Objašnjavanje elemenata jezika (varijable, podaci, operatori, izrazi, naredbe)

Obim = 2*r*3.14159

варијабле 

подаци 

симболи за операције (оператори) 

израз 

наредба 

Page 2: Programiranje - Vjezbe - Rijeseni Zadaci

   2 

 

Zadatak 2: Sastavite program za izračunavanje nominalnog napona epruvete kružnog poprečnog presjeka opterećene na zatezanje koristeći ugrađene InputBox () i MsgBox () Visual Basic funkcije.

Rješenje:

Private Sub Form_Load() Sila = InputBox("Unesite silu [N]") R = InputBox("Unesite radijus epruvete [mm]") P = R * R * 3.14159 Napon = Sila / P MsgBox Napon End Sub

Cilj zadatka: Proširenje prethodnog zadatka na nešto složeniji inženjerski problem. Upoznavanje studenata sa Prompt argumentom InputBox funkcije koji se koristi u cilju informisanja korisnika programa o ulaznoj veličini koju treba unijeti.

Zadatak 3: Sastavite program za izračunavanje zbira dva broja koristeći ugrađene InputBox () i MsgBox () Visual Basic funkcije.

Rješenje: Private Sub Form_Load() a = InputBox("Unesite prvi broj") b = InputBox("Unesite drugi broj") c = a + b MsgBox c, , "Zbir je" End Sub

Cilj zadatka: Upoznavanje studenata sa potrebom za egzaktno definisanje (deklarisanje) tipa podataka za pojedine varijable. Na primjer, bez implicitnog deklarisanja a i b varijabli u single, 5 + 6 daje rezultat 56. Upoznavanje studenata sa Title argumentom funkcije MsgBox koji se može iskoristiti u cilju obavještenja korisnika o rezultatu izračunavanja. Zadatak 3: Upoznavanje studenata sa VBA API mogućnostima u Windows aplikacijama. Primjer u CATIA V5.

Page 3: Programiranje - Vjezbe - Rijeseni Zadaci

   3 

 

Termin 2

Tipovi podataka, varijabli i izraza, operacije sa podacima

Ukratko ponoviti tipove varijabli prema datoj tabeli:

Zadatak 1: Uraditi prethodni zadatak (sastaviti program za izračunavanje zbira dva broja) uz eksplicitno deklarisanje potrebnih varijabli:

Rješenje:

Dim a As Single Dim b As Single Dim zbir As Single Private Sub Form_Load() a = InputBox("Unesite prvi broj:") b = InputBox("Unesite drugi broj:") zbir = a + b MsgBox "Zbir je" & zbir End Sub Cilj zadatka: Rješavanje problema iz prošlog zadatka deklarisanjem varijabli za zadate brojeve u neki od brojčanih tipova. Isprobati Integer, te Single ili Double. Upoznavanje studenata sa kombinovanjem brojčanih i znakovnih tipova podataka korištenjem operatora &. MsgBox funkcija se koristi bez zagrade ako ista ne predaje vrijednost nekoj varijabli. Ako se koristi samo Prompt argument MsgBox funkcije onda on može stajati u zagradi.

Page 4: Programiranje - Vjezbe - Rijeseni Zadaci

   4 

 

Zadatak 2: Sastavite program koji će za unijetu vrijednost radijusa izračunavati obim i površinu kružnice, te površinu i zapreminu lopte istog radijusa. (Površina lopte: 4 ∙ ∙ , zapremina

lopte: ∙ ∙ )

Rješenje: Dim R As Double Const pi = 3.14159265358979 Dim obim As Double Dim Pkruga As Double Dim Plopte As Double Dim Vlopte As Double Private Sub Form_Load() R = InputBox("Unesite poluprecnik u milimetrima") obim = 2 * R * pi Pkruga = R ^ 2 * pi Plopte = 4 * R ^ 2 * pi Vlopte = 4 / 3 * R ^ 3 * pi MsgBox "Obim kruznice je" & obim & "[mm]" MsgBox "Povrsina kruznice iznosi" & Pkruga & "[mm^2]" MsgBox "Povrsina lopte je" & Plopte & "[mm^2]" MsgBox "Zapremina lopte je" & Vlopte & "[mm^3]" End Sub

Cilj zadatka: Primjer potrebe za deklarisanjem konstantne brojčane vrijednosti koja se često ponavlja kroz program, a u svrhu jednostavnijeg zapisivanja naredbi. Upoznavanje studenata sa operatorom za stepenovanje ^. Zadatak 3: Sastaviti program koji će nakon pojedinačnog unosa Vašeg imena i prezimena i broja godina u jednoj rečenici ispisati Vaše prezime i ime i koliko imate godina. Rješenje: Dim ime As String Dim prezime As String Dim god As Integer Private Sub Form_Load() ime = InputBox("Unesite Vase ime") prezime = InputBox("Unesite Vase prezime")

Page 5: Programiranje - Vjezbe - Rijeseni Zadaci

   5 

 

god = InputBox("Unesite koliko imate godina") MsgBox "Zovete se" & prezime & ime & "i imate" & god _ & "godina." End Sub

Cilj zadatka: Primjer gdje je potrebno koristiti znakovni i cjelobrojni tip varijabli. Potrebno je riješiti problem nepreglednog ispisa rečenice tako što treba ubaciti razmake tamo gdje je potrebno. Pitati studente kako bi riješili taj problem, sa slike:

Termin 3

Funkcije u Visual Basic-u

Zadatak 1: Sastaviti program koji će za unesenu vrijednost ugla u stepenima ispisati vrijednosti trigonometrijskih funkcija , , i .

Page 6: Programiranje - Vjezbe - Rijeseni Zadaci

   6 

 

Rješenje:

Dim ugao As Double Dim sinus As Double Dim kosinus As Double Dim tangens As Double Dim kotangens As Double Dim pi As Double Private Sub Form_Load() ugao = InputBox("Unesite vrijednost ugla u stepenima") pi = 4 * Atn(1) sinus = Sin(ugao * pi / 180) MsgBox "Sinus unesenog ugla je " & sinus kosinus = Cos(ugao * pi / 180) MsgBox "Kosinus unesenog ugla iznosi " & kosinus tangens = Tan(ugao * pi / 180) MsgBox "Tangens unesenog ugla je " & tangens kotangens = kosinus / sinus MsgBox "Kotangens unesenog ugla iznosi " & kotangens End Sub Cilj zadatka: Prvo demonstrirati da naziv varijable ne može da se podudara sa nazivom funkcije! Potom

objasniti način izračunavanja broja PI preko funkcije za tangens ugla: pi = 4 * Atn(1). Zatim detaljnije objasniti pretvaranje argumenta trigonometrijske funkcije iz radijana u stepene:

Sin(ugao * pi / 180). Zadatak 2: Sastaviti VB program koji će na osnovu unešene početne i krajnje tačke vektora u ravni izračunati i ispisati intenzitet vektora i intenzitet njegovih projekcija. Program treba da obavijesti korisnika i o tome koliki ugao vektor zaklapa sa x i y osom. Rješenje: Dim x0 As Double 'x koordinata pocetne tacke vektora Dim y0 As Double 'y koordinata pocetne tacke vektora Dim x1 As Double 'x koordinata krajnje tacke vektora Dim yz As Double 'y koordinata krajnje tacke vektora Dim intenzitet As Double 'intenzitet vektora Dim xProj As Double 'Projekcija vektora na x - osu Dim yProj As Double 'Projekcija vektora na y - osu Dim xUgao As Double 'Ugao koji vektor zaklapa sa x - osom

Page 7: Programiranje - Vjezbe - Rijeseni Zadaci

   7 

 

Dim yUgao As Double 'Ugao koji vektor zaklapa sa y - osom Dim pi As Double Private Sub Form_Load() x0 = InputBox("Unesite x koordinatu pocetne tacke vektora") y0 = InputBox("Unesite y koordinatu pocetne tacke vektora") x1 = InputBox("Unesite x koordinatu krajnje tacke vektora") Y1 = InputBox("Unesite y koordinatu krajnje tacke vektora") pi = 4 * Atn(1) xProj = Abs(x1 - x0) yProj = Abs(y1 - y0) intenzitet = Sqr(xProj ^ 2 + yProj ^ 2) xUgao = Atn(yProj / xProj) * 180 / pi yUgao = 90 - xUgao MsgBox "Intenzitet vektora iznosi " & intenzitet MsgBox "Projekcija vektora na x-osu iznosi" & xProj MsgBox "Projekcija vektora na y-osu iznosi" & yProj MsgBox "Ugao koji vektor zaklapa sa apscisom je " & _ xUgao & " stepeni." MsgBox "Ugao koji vektor zaklapa sa ordinatom je " & _ yUgao & " stepeni." End Sub Cilj zadatka je korištenje što većeg broja funkcija. Nakon pisanja koda potrebno je testirati program. Ukazati na problem dijeljenja nulom za slučaj kada je vektor paralelan sa ordinatom. Taj problem ćemo moći riješiti na pravi način nakon savladavanja programskih struktura sa grananjem.

Termin 4 Znakovne funkcije

Page 8: Programiranje - Vjezbe - Rijeseni Zadaci

   8 

 

Zadatak 1: Sastaviti VB program koji će obavijestiti korisnika o tome koliko je upisao znakova u prozoru InputBox funkcije. Rješenje: Dim unos As String Dim n As Integer Private Sub Form_Load() unos = InputBox("") n = Len(unos) MsgBox "Upisali ste " & n & " znakova." End Sub Cilj zadatka: Primjer upotrebe Len( ) funkcije. Zadatak 2: Sastaviti VB program koji će u unesenom nizu znakova pronaći željeni znak i obavijestiti korisnika na kojoj poziciji se taj znak nalazi u unesenom znakovnom nizu. Rješenje: Dim unos As String Dim znak As String Dim n As Integer Private Sub Form_Load() unos = InputBox("Unesite niz znakova:") znak = InputBox("Unesite znak koji se trazi u nizu znakova") n = InStr(1, unos, znak) MsgBox "U unesenom nizu: " & unos & " trazeni znak "_ & znak & " nalazi se na poziciji " & n & "." End Sub Zadatak 3: Sastaviti VB program koji će iz unesenog imena i prezimena neke osobe, izdvojiti ime i prezime i ispisati ih pojedinačno.

Page 9: Programiranje - Vjezbe - Rijeseni Zadaci

   9 

 

Rješenje: Dim unos As String 'varijabla koja ce sadrzati upisano ime i 'prezime osobe Dim ime As String Dim prezime As String Dim n As Integer 'varijabla cija ce vrijednost odgovarati 'polozaju razmaka u upisanom imenu i prezimenu Dim duzina As Integer 'ukupan broj znakova u unesenom imenu i 'prezimenu, racunajuci i razmak Private Sub Form_Load() unos = InputBox("Unesite ime i prezime osobe:") duzina = Len(unos) n = InStr(1, unos, " ") ime = Mid(unos, 1, n) prezime = Mid(unos, n + 1, duzina) MsgBox "Ime osobe je " & ime MsgBox "Prezime osobe je " & prezime End Sub

Pretvaračke funkcije

Zadatak 4: Sastaviti VB program koji će omogućiti unos koordinata vektora u ravni koristeći samo jednu InputBox() funkciju. Unos koordinata početne i krajnje tačke trebada se izvršu u sljedećem obliku: x0;y0;x1;y1; , na primjer:

Page 10: Programiranje - Vjezbe - Rijeseni Zadaci

   10 

 

Dim unos As String Dim x0 As Double Dim y0 As Double Dim x1 As Double Dim y1 As Double Dim n1 As Integer Dim n2 As Integer Dim duzina As Integer Private Sub Form_Load() unos = InputBox("Unesite koordinate vektora u ravni", , _ "0;20.5;16;-30.25") duzina = Len(unos) n1 = 1 n2 = InStr(n1, unos, ";") x0 = CDbl(Mid(unos, n1, n2 - n1)) n1 = n2 + 1 n2 = InStr(n1, unos, ";") y0 = CDbl(Mid(unos, n1, n2 - n1)) n1 = n2 + 1 n2 = InStr(n1, unos, ";") x1 = CDbl(Mid(unos, n1, n2 - n1)) n1 = n2 + 1 y1 = CDbl(Mid(unos, n1, duzina - n2)) MsgBox x0 & " " & y0 & " " & x1 & " " & y1 End Sub

Komentar: Prilikom korištenja nekih aplikacija česta je praksa da se u jednom koraku unosi više podataka. Najsličniji primjer ovom zadatku je postupak unošenja koordinata tačaka u AutoCADu u Dekartovim koordinatama (npr. 50,-20) ili u polarnim koordinatama (npr. 25<30). U takvom slučaju više podataka se prvo predaje varijabli znakovnog tipa, a potom se pojedinačni podaci moraju izdvojiti iz tog stringa i predati odgovarajućim varijablama brojčanog tipa. Naš algoritam funkcioniše tako da se iz stringa unos funkcijom Mid() sukcesivno izdvajaju brojčani podaci koji odgovaraju koordinatama početne i krajnje tačke vektora. Međutim funkcija Mid() se mora koristiti kao argument pretvaračke funkcije CDbl(), zato što Mid() vraća string, a varijable x0, y0, x1 i y1 su eksplicitno deklarisane u brojčani (double) tip podataka. Pomoćne varijable cjelobrojnog tipa n1 i n2 se koriste da bi ''obuhvatile'' podatak koji treba da se izdvoji funkcijom Mid(). Na početku se varijabli n1 dodijeli vrijednost 1. Funkcija InStr() pretražuje unos počinjući pretragu od pozicije n1, pronalazi znak ; i poziciju znaka ; vraća varijabli n2. Funkcija Mid() potom izdvaja podatak iz unos varijable počinjući sa pozicije n1, pri čemu izdvaja n2 - n1 znakova. Taj podatak se kroz CDbl() funkciju predaje varijabli x0. Nakon toga varijabli n1 se dodjeljuje nova vrijednost naredbom n1 = n2 + 1, a potom funkcija InStr() pronalazi poziciju narednog ; znaka u unosu i predaje ga varijabli n2. Funkcija Mid() nakon toga će izdvojiti podatak koji odgovara y0 koordinati. Isti postupak se ponavlja i za izdvajanje x1 koordinate iz unosa. U posljednjem koraku, prilikom izdvajanja y1 koordinate varijabla n1 se

Page 11: Programiranje - Vjezbe - Rijeseni Zadaci

   11 

 

posljednji put mjenja prema naredbi n1 = n2 + 1. Iza posljednjeg broja (koordinate y1) u unosu nema znaka ;. Stoga ne treba ponovo koristititi InStr() funkciju, nego se za definisanje potrebnog broja znakova koje će Mid() ''uhvatiti'' koristi izraz duzina-n2. Varijabla duzina sadrži ukupan broj znakova unosa, a varijabla n2sadrži poziciju posljednjeg ; znaka u unosu.

Termin 4 Samostalna izrada zadataka i programske strukture sa grananjem,

dijagrami toka

Zadatak 1: Sastaviti VB program za izračunavanje površine jednakostraničnog trougla.

Napomena: Riješiti zadatak prema izrazu

∙ . Deklarisati varijable za stranu, visinu i

površinu trougla, kako bi se isti kod prilagodio za rješenje sljedećeg zadatka. Zadatak 2: Sastaviti VB program za izračunavanje površine jednakokrakog trougla.

Rješenje zadatka 2: Jednakostranični trougao sa slike ne može biti određen ako je krak b manji

ili jednak polovini baze a. Program prvo ispituje istinitost izraza i na osnovu rezultata

ispitivanja izvršava lijevi ili desni blok programa sa priloženog dijagrama toka.

Page 12: Programiranje - Vjezbe - Rijeseni Zadaci

   12 

 

Dijagram toka programa:

Listing koda:

Dim a As Single, b As Single, h As Single, P As Single Private Sub Form_Load() a = InputBox("Unesi duzinu strane a") b = InputBox("Unesi duzinu kraka b") If b <= a / 2 Then MsgBox "Ulazni podaci nisu korektni" Else

Početak

a, b 

True

MsgBox "Ulazni podaci nisu korektni" 

∙2

 

Kraj

False 

Page 13: Programiranje - Vjezbe - Rijeseni Zadaci

   13 

 

h = Sqr(b ^ 2 - a ^ 2 / 4) P = a * h / 2 MsgBox "Povrsina iznosi '' & P End If End Sub

Zadatak 3: Sastaviti VB program koji će provjeriti da li se tačka sa zadanim koordinatama nalazi unutar kružnice prečnika 30mm sa koordinatama centra (15,5). Program treba da ispiše posebna obavještenja u slučaju da se tačka nalazi na kružnici i u slučaju da se tačka poklapa sa centrom kružnice.

Rješenje: Na osnovu ispitivanja istinitosti sljedećih izraza program treba da ispiše sljedeće zaključke:

L = 0 ⇒ Tačka se poklapa sa centrom kružnice

L < R ⇒ Tačka se nalazi unutar kružnice

L = R ⇒ Tačka se nalazi na kružnici

L > R ⇒ Tačka se nalazi izvan kružnice Listing Koda: Dim x As Single, y As Single, L As Single Private Sub Form_Load() x = InputBox("Unesite x koordinatu tacke") y = InputBox("Unesite y koordinatu tacke") L = Sqr((x - 15) ^ 2 + (y - 5) ^ 2) If L = 0 Then MsgBox "Tacka se poklapa sa centrom kruznice" ElseIf L < 15 Then

Page 14: Programiranje - Vjezbe - Rijeseni Zadaci

   14 

 

MsgBox "Tacka se nalazi unutar kruznice" ElseIf L = 15 Then MsgBox "Tacka se nalazi na kruznici" Else MsgBox "Tacka se nalazi izvan kruznice" End If End Sub Zadatak 4: Sastaviti VB program koji će izračunati otpore oslonaca proste grede opterećene silom F. Zadatak riješiti samostalno

Napomena: Prije izračunavanja reakcija u osloncima iz uslova statičke ravnoteže potrebno je analizirati ispravnost ulaznih podataka:

Sila treba biti zadana kao pozitivna brojčana vrijednost, jer smjerovi komponenata sile se određuju na osnovu ugla , a time i njihovi predznaci u jednačinama statičke ravnoteže. Zadavanje negativne vrijednosti za silu dovešće do greške u izračunavanju.

Dužina grede treba biti veća od 0

Položaj napadne tačke sile treba biti veći od 0 a manji od dužine grede. U suprotnom konfiguracija nosača odgovara gredi sa prepustom, a ne prostoj gredi.

Termin 5:

Ugnježdene programske strukture sa grananjem, Select Case metod

Zadatak 1: Sastaviti program koji će ispitati da li unešeni broj pripada intervalu [-2,6]. Rješenje: Moguće je na nekoliko načina riješiti zadatak. Programska struktura sa višestrukim grananjem omogućava elegantno rješavanje:

Page 15: Programiranje - Vjezbe - Rijeseni Zadaci

   15 

 

Private Sub Form_Load() Dim n As Single n = InputBox('''') If n < -2 Then MsgBox "Broj je izvan intervala, manji je od -2" ElseIf n > 6 Then MsgBox "Broj je izvan intervala, veci je od 6" Else MsgBox "Broj je unutar intervala [-2,6]" End If End Sub

Zadatak je moguće riješiti ''običnom'' programskom strukturom sa grananjem. U tom slučaju izraz koji se ispituje treba biti nešto složeniji. Izraz koji se ispituje je logičkog kataktera, odnosno, njegova vrijednost treba biti interpretirana kao True ili False. Mogu se dakle, koristiti i nešto složeniji logički izrazi sa operatorima And, Or i Not. Da bi se neki broj nalazio u intervalu [-2,6] on treba ispuniti dva uslova: da bude veći ili jednak -2 i da bude manji ili jednak 6. Prema tome se formira i izraz koji se ispituje u narednom rješenju zadatka:  

Private Sub Form_Load() Dim n As Single n = InputBox("") If n >= -2 And n <= 6 Then MsgBox "Broj se nalazi u intervalu [-2,6]" Else MsgBox "Broj je izvan intervala [-2,6]" End If End Sub

Datim izrazom n>=-2 And n<=6 iz prethodnog rješenja može se utvrditi da li se unešeni

broj n nalazi u datom intervalu. Ali ako se broj ne nalazi u intervalu [-2,6] onda se ne može utvrditi da li je broj manji od -2 ili je veći od 6. Ukoliko bi bila potrebna takva informacija onda bi koristili prvi primjer: programsku strukturu sa višestrukim grananjem.

Moguće je pak isti rezultat dobiti i primjenom ''običnih'' struktura sa grananjem, ali onda jedna struktura sa grananjem mora biti ugnježdena u drugu. Takva programska struktura daje potrebna tri programska bloka pri čemu se izvršava samo jedan, u zavisnosti od ispitivanja jednostavnih izraza. Na narednoj slici dat je dijagram toka ovakvog rješenja, a ispod je dat listing programa:

 

Page 16: Programiranje - Vjezbe - Rijeseni Zadaci

   16 

 

Private Sub Form_Load() n! = InputBox("") If n >= -2 Then If n <= 6 Then MsgBox "Uneseni broj se nalazi u intervalu [-2,6]" Else MsgBox "Uneseni broj je izvan intervala [-2,6] _ i veci je od 6" End If Else MsgBox "Uneseni broj je izvan intervala [-2,6] i _ manji je od -2" End If End Sub

Počeak 

n ‐2 

n 6 

True 

n je u intervalu [‐2,6] izvan intervala,  6izvan intervala,  2

True

False

Kraj 

False

Page 17: Programiranje - Vjezbe - Rijeseni Zadaci

   17 

 

Ovaj zadatak se može elegantno riješiti i primjenom Select Case metoda. Select Case omogućava grananje programske strukture u zavisnosti od vrijednosti neke varijable. Ispod je dat listing programa: Private Sub Form_Load() n! = InputBox("") Select Case n Case Is < -2 MsgBox "Broj se ne nalazi u intervalu [-2,6], _ manji je od -2" Case -2 To 6 MsgBox "Broj se nalazi u intervalu [-2,6]" Case Else MsgBox "Broj se nalazi izvan intervala [-2,6] _ i veci je od 6" End Select End Sub Zadatak 2: Sastaviti VB program koji će u zavisnosti od izmjerene sile izračunati nominalni napon epruvete kružnog poprečnog presjeka, opterećene na zatezanje. Program treba da izda izvještaj o tome u kom području napona/deformacija se nalazi epruveta ako su dati podaci o materijalu:

granica elastičnosti 210 ;

granica tečenja 250 ;

jačina materijala 450 ;

napon na granici kidanja 400 ; Program se ne smije rušiti ukoliko korisnik pri unosu sile i prečnika epruvete unese znakovne podatke! Treba isključiti i mogućnost zadavanja negativne vrijednosti sile i prečnika epruvete, kao i vrijednosti 0 za prečnik epruvete. Rješenje zadatka: Dim F As Double, d As Double, napon As Double, pi As Double Dim unos As Variant Private Sub Form_Click() unos = InputBox("Unesite silu u [N]:") If IsNumeric(unos) = False Then MsgBox "Vrijednost sile mora biti brojcani podatak.", vbExclamation,_ "Greska!"

Page 18: Programiranje - Vjezbe - Rijeseni Zadaci

   18 

 

GoTo kraj Else F = CDbl(unos) End If If F < 0 Then MsgBox "Intenzitet sile mora biti veci od 0.", vbExclamation,_ "Greska!" GoTo kraj End If unos = InputBox("Unesite precnik epruvete u [mm]") If IsNumeric(unos) = False Then MsgBox "Vrijednost precnika epruvete mora biti brojcani podatak.",_ vbExclamation, "Greska!" GoTo kraj Else d = CDbl(unos) End If If d <= 0 Then MsgBox "Precnik epruvete mora biti veci od 0.", vbExclamation,_ "Greska!" GoTo kraj End If napon = F / (d ^ 2 * pi / 4) Select Case napon Case 0 MsgBox "Epruveta nije opterecena" Case 210 MsgBox "Napon je na granici elasticnosti" Case 250 MsgBox "Napon je na granici tecenja materijala" Case 450 MsgBox "Napon je dostigao jacinu materijala" Case 400 MsgBox "Napon moze biti na granici kidanja materijala._ Provjerite deformaciju." Case 0 To 210 MsgBox "Epruveta se nalazi u zoni elasticne deformacije. Nominalni napon iznosi " & napon & " [MPa]." Case 210 To 250 MsgBox "Epruveta se nalazi u zoni popustanja materijala. Nominalni napon iznosi " & napon & " [MPa]." Case 250 To 400 MsgBox "Epruveta se nalazi u zoni trajne plasticne deformacije. Nominalni napon iznosi " & napon & " [MPa]."

Page 19: Programiranje - Vjezbe - Rijeseni Zadaci

   19 

 

Case 400 To 450 MsgBox "Epruveta se nalazi u zoni trajne plasticne deformacije, ili u zoni lokalizovane deformacije. Provjerite vrijednost deformacije. Nominalni napon iznosi " & napon & " [MPa]." End Select If napon > 450 Then MsgBox "Pri zadanom opterecenju za datu epruvetu vjerovatno je doslo do statickog loma epruvete" End If kraj: End Sub Private Sub Form_Load() pi = Atn(1) * 4 MsgBox "Klikom na formu startujete program" End Sub

Komentar: Program se ruši ukoliko se kroz InputBox() funkciju nekoj varijabli brojčanog tipa predaje znakovni podatak. Taj problem se može riješiti korištenjem Val() funkcije, na primjer: n = Val(InputBox('''')) . U navedenom programu korištena je IsNumeric() funkcija. IsNumeric() analizira podatak tipa Variant i vraća vrijednost True ukoliko varijabla tipa Variant sadrži zamo brojčanu vrijednost. IsNumeric() vraća False ako u Variant-u pronađe znakovni podatak. U ovom rješenju korištena je naredba GoTo koja omogućava bezuslovni skok u programu. Ukoliko bi se pojavila nepravilnost u unosu ulaznih podataka, na primjer d = 0, izvršavao bi se bezuslovni skok na kraj podprograma uz poruku korisniku da ulazni podatak nije ispravan. Na taj način je ostvarena stabilnost programa jer se nepravilan podatak ne prosljeđuje ostalim naredbama, pa za slučaj da je d = 0 ne može doći do dijeljenja nulom u naredbi napon = F / (d ^ 2 * pi / 4) .

Zadatak 2 - za samostalnu izradu: Sastaviti VB program koji će dimenzionisati vezu vratila i glavčine sa klinom bez nagiba prema priloženim dimenzijama iz DIN 6885 A standarda sa slike.

Page 20: Programiranje - Vjezbe - Rijeseni Zadaci

   20 

 

Komentar: Select Case metod može biti od velike koristi upotrebom kroz VBA API u nekom od CAD sistema. U ovom slučaju vrijednosti varijabli b, h, t1 i t2 se mogu izvršavanjem VBA makroa (podprograma) proslijediti odgovarajućim parametrima 3D modela. Na taj način se postiže automatizacija redizajna 3D modela čime se ubrzava rad konstruktora. Zadatak 3 - za samostalnu izradu: Sastaviti program koji će na osnovu unešenog datuma aprila mjeseca tekuće godine ispisati dan koji pada tog datuma. Na primjer: unos 15 - ispis ponedeljak.

Page 21: Programiranje - Vjezbe - Rijeseni Zadaci

   21 

 

Zadatak 4 - za samostalnu izradu: Sastaviti program koji će odrediti završnu ocjenu iz Programiranja na osnovu unosa uspjeha sa kolokvijuma i završnog ispita, uz maksimalnih 10 poena za prisustvo nastavi. Maksimalan broj poena na prvom i drugom kolokvijumu je po 35. Završni ispit nosi maksimalno 20 poena

Termin 6: Cikličke programske strukture

Zadatak 1: Sastaviti VB program za izračunavanje sume prvih n prirodnih brojeva. Rješenje: Private Sub Form_Load() n% = InputBox("") suma% = 0 'inicijalizacija varijable For i = 1 To n suma = suma + i Next i MsgBox suma End Sub Napomena: brojač i se može mijenjati od veće vrijednosti prema manjoj. Suma može biti izračunata i na sljedeći način: For i = n To 1 Step -1 suma = suma + i Next i

Zadatak 2: Sastaviti VB program za izračunavanje faktorjela. Rješenje: Private Sub Form_Load() n% = InputBox("") faktorjel# = 1 For i = 2 To n faktorjel = faktorjel * i Next i MsgBox faktorjel End Sub

Page 22: Programiranje - Vjezbe - Rijeseni Zadaci

   22 

 

Zadatak3: Sastaviti VB program koji zadanu riječ ispisuje unatrag. Rješenje je dato u skripti na strani 44. Zadatak 4: Sastaviti VB program za izračunavanje određenog integrala funkcije u zadatim granicama. Granice se trebaju unijeti kroz jedan input box u obliku 2;8 Rješenje: Dim granice As String Dim n As Integer 'pozicija znaka ; u unosu granica Dim integral As Double Dim n1 As Double, n2 As Double Private Sub Form_Load() granice = InputBox("Unesite granice integrala", , "0;3") n = InStr(1, granice, ";") n1 = CDbl(Mid(granice, 1, n - 1)) n2 = CDbl(Mid(granice, n + 1, Len(granice) - n)) a% = MsgBox("Granice integrala su " & n1 & " i " & n2 &_ "Racunaj integral?", vbInformation + vbYesNo) If a = 6 Then integral = 0 For i = n1 To n2 - 0.001 Step 0.001 integral = integral + i ^ 2 * 0.001 Next i Else GoTo kraj End If MsgBox "Integral iznosi " & integral kraj: End Sub Napomena: Algoritam se sastoji u tome da se interval između granica integrala podijeli na male segmente širine 0.001. Brojač ciklusa se kreće od prve granice integrala n1 do vrijednosti n2 - 0.001. Porast brojača odgovara širini segmenta intervala. Određeni integral se računa kao suma površina elementarnih pravougaonika, pri čemu jedna strana pravougaonika odgovara

Page 23: Programiranje - Vjezbe - Rijeseni Zadaci

   23 

 

širini segmenta, a druga strana elementarnog pravougaonika odgovara funkciji za vrijednost brojača, to jeste i^2. Što je podjela brojača manja to je preciznost izračunavanja integrala veća, ali iziskuje i veće procesorsko vrijeme jer se time mora izvršiti i veći broj ciklusa. Određeni integral se može i efikasnije izračunati primjenom neke od preciznijih numeričkih metoda: metode trapeza ili Simsonove metode. Proučite upotrebu MsgBox() funkcije u ovom zadatku, pročitajte sadržaj iz MSDN za MsgBox() funkciju. Zadatak 5: Sastaviti program koji će za uneseni broj n izlistati sve brojeve djeljive sa 6 do broja n. Zadatak riješiti primjenom ciklusa sa izlaznim kriterijumom. Rješenje: Private Sub Form_Load() n% = InputBox("") broj% = 6 lista$ = "" Do If broj Mod 6 = 0 Then lista = lista & broj & " " End If broj = broj + 1 Loop While broj <= n MsgBox lista End Sub Napomena: Doradite program da se koristi ključna riječ Until. Korigujte program tako da se tijelo ciklusa ne izvršava ukoliko se varijabli n dodijeli vrijednost manja od 6.

Termin 7: Nizovi

Zadatak 1: Sastaviti program za izračunavanje skalarnog proizvoda dva vektora u prostoru.

Definicija skalarnog proizvoda vektora a = [a1, a2, … , an] i vektora b = [b1, b2, … , bn] :

Page 24: Programiranje - Vjezbe - Rijeseni Zadaci

   24 

 

Rješenje: Dim a(2) As Single, b(2) As Single Dim proizvod As Single Private Sub Form_Load() a(0) = InputBox("unesite x komponentu vektora a") a(1) = InputBox("unesite y komponentu vektora a") a(2) = InputBox("unesite z komponentu vektora a") osa = Array(“x”,”y”,”z”) For i = 0 To 2 b(i) = InputBox("unesite “ & osa(i) & “ komponentu vektora b") End Select proizvod = 0 For i = 0 To 2 proizvod = proizvod + a(i) * b(i) Next i MsgBox "Skalarni proizvod vektora a i b iznosi " & proizvod End Sub Napomena: Kod za unos podataka u niz je elegantniji i pregledniji ako se koristi ciklus (slučaj niza b(2). Funkcijom Array() mogu se u kodu zadati vrijednosti članova niza deklarisanog kao Variant. Na taj način je definisan pomoćni niz osa, koji sadrži tri znakovne vrijednosti: osa(0) = ''x'', osa(1) = ''y'' i osa(2) = ''z''. Iz niza osa uzimaju se ove znakovne vrijednosti za definisanje Prompt argumenta InputBox() funkcije. Zadatak 2: Sastaviti program koji će ispisati najmanji i najveći broj od 6 unesenih cijelih brojeva. Rješenje: Dim niz(5) As Integer Dim najmanji As Integer Dim najveci As Integer Private Sub Form_Load() For i = 0 To 5 niz(i) = InputBox("") Next i

Page 25: Programiranje - Vjezbe - Rijeseni Zadaci

   25 

 

najmanji = niz(0) najveci = niz(0) For i = 1 To 5 If niz(i) < najmanji Then najmanji = niz(i) End If If niz(i) > najveci Then najveci = niz(i) End If Next i MsgBox "Najmanji clan niza je " & najmanji & ", a najveci clan niza je " & najveci End Sub Zadatak 3:

Sastaviti program koji će zadati vektor od tri komponente množiti matricom 0 1 21 2 32 3 4

Rješenje: Dim vektor(2) As Single, matrica(2, 2) As Single Dim rezultat(2) As Single Private Sub Form_Load() For i = 0 To 2 vektor(i) = InputBox("") Next i 'Kroz sljedeci ciklus odredjuju se vrijednosti 'dvodimenzionalnog niza matrica(2,2) For i = 0 To 2 For j = 0 To 2 matrica(i, j) = i + j Next j Next i 'Sljedeci ciklus mnozi vektor matricom. Rezultat mnozenja je 'sadrzan u nizu rezultat(2)

Page 26: Programiranje - Vjezbe - Rijeseni Zadaci

   26 

 

For i = 0 To 2 rezultat(i) = 0 For j = 0 To 2 rezultat(i) = rezultat(i) + vektor(j) * matrica(i, j) Next j Next i MsgBox "[ " & rezultat(0) & " " & rezultat(1) & " " &_ rezultat(2) & " ]" End Sub Napomena: Elementi matrice se mjenjaju u pravilnom rasporedu koji prati izraz i + j, pa je ugnježdenim nizom sa brojačem j u niz sa brojačem i elegantno riješeno izračunavanje elemenata matrice. Kod matrica čiji se elementi mjenjaju nasumično, nije moguće vrijednosti tih elemenata 'ubaciti' u dvodimenzionalni niz kao u prethodnom zadatku. Međutim efikasan način može biti

upotreba pomoćnog niza i funkcije Array sa ciklusom, na primjer za matricu 5 34 22 7

:

Dim matrica(1, 2) As Integer pomoc = Array(-5, 4, 2) For i = 0 To 2 matrica(0, i) = pomoc(i) Next i pomoc = Array(3, -2, 7) For i = 0 To 2 matrica(1, i) = pomoc(i) Next i Erase pomoc Zadatak 4: Sastaviti program koji će izračunati novi položaj tačke u ravni nakon rotacije tačke za zadan ugao oko ishodišta koordinatnog sistema.

Page 27: Programiranje - Vjezbe - Rijeseni Zadaci

   27 

 

Rješenje zadatka:

Matematički model rotacije tačke oko ishodišta koordinatnog sistema:

∙ ∙

∙ ∙ ∙ ∙ ∙ ∙ ∙ ∙

∙ ; ∙ ⟹

∙ ∙ ′ ∙ ∙

′ ′ ∙

Listing koda: Dim P(1) As Single, Pprim(1) As Single 'vektori polozaja Dim R(1, 1) As Single 'matrica rotacije Dim fi As Single 'ugao rotacije Dim pi As Double Private Sub Form_Load() pi = 4 * Atn(1)

Page 28: Programiranje - Vjezbe - Rijeseni Zadaci

   28 

 

P(0) = InputBox("Unesite x koordinatu tacke") P(1) = InputBox("Unesite y koordinatu tacke") fi = InputBox("Unesite ugao rotacije tacke oko ishodista_ u stepenima") pomoc = Array(Cos(fi * pi / 180), Sin(fi * pi / 180),_ Cos(fi * pi / 180)) For i = 0 To 1 For j = 0 To 1 R(i, j) = pomoc(i + j) Next j Next i R(0, 1) = -R(0, 1) For i = 0 To 1 Pprim(i) = 0 For j = 0 To 1 Pprim(i) = Pprim(i) + P(j) * R(i, j) Next j Next i MsgBox "Nakon rotacije tacke, nove koordinate su: x = "_ & Round(Pprim(0), 3) & " y = " &_ Round(Pprim(1), 3) End Sub

Termin 8 Korisnički tipovi podataka i kompjuterska grafika

Nizovi čuvaju veći broj istorodnih podataka pod istim imenom. Korisnički tip podataka

može čuvati veći broj raznorodnih podataka pod istim imenom. Primjer definisanja korisničkog tipa podataka u VB:

Private Type zupcanik modul As Single brzubaca As Integer sirina As Single materijal As String ... End Type Deklaracija varijabli korisničkog tipa: Dim z1 As zupcanik, z2 As zupcanik

Page 29: Programiranje - Vjezbe - Rijeseni Zadaci

   29 

 

Navodi se prvo ime varijable korisničkog tipa, potom znak ''.'', a zatim naziv podvarijable. Na primjer:

z1.modul = InputBox("Unesi modul zupcanika z1") z1.brzubaca = InputBox("Unesi broj zubaca z1") z2.modul = InputBox("Unesi modul zupcanika z2") z2.brzubaca = InputBox("Unesi broj zubaca z2") 'naredba za izracunavanje medjuosnog rastojanja a! = z1.modul * z1.brzubaca + z2.modul * z2.brzubaca

Zadatak 1: Sastaviti program koji na osnovu korisničkog tipa tačka izračunava rastojanje između dvije zadane tačke u prostoru. Program prvo treba ispitati da li se tačke poklapaju. Rješenje: Private Type tacka x As Single y As Single z As Single End Type Private Sub Form_Load() Dim p1 As tacka, p2 As tacka p1.x = InputBox("Unesi x koordinatu tacke p1") p1.y = InputBox("Unesi y koordinatu tacke p1") p1.z = InputBox("Unesi z koordinatu tacke p1") p2.x = InputBox("Unesi x koordinatu tacke p2") p2.y = InputBox("Unesi y koordinatu tacke p2") p2.z = InputBox("Unesi z koordinatu tacke p2") rastojanje! = Sqr((p2.x - p1.x) ^ 2 + (p2.y - p1.y) ^ 2 +_ (p2.z - p1.z) ^ 2) MsgBox "Rastojanje izmedju tacaka iznosi " & rastojanje End Sub

Page 30: Programiranje - Vjezbe - Rijeseni Zadaci

   30 

 

Zadatak 2: Sastaviti program koji na osnovu korisničkog tipa kružnica izračunava rastojanje između centara dvije kružnice u ravni, te izračunava i zbir njihovih obima i površina krugova tih kružnica. Rješenje: Private Type kruznica p As Single 'x - koordinata centra q As Single 'y - koordinata centra r As Single End Type Dim rastojanje As Single, zbirobima As Single Dim zbirpovrsina As Single Private Sub Form_Load() Dim K1 As kruznica, K2 As kruznica K1.p = InputBox("Unesi x koord. centra K1 kruznice") K1.q = InputBox("Unesi y koord. centra K1 kruznice") K1.r = InputBox("Unesi radijus K1 kruznice") K2.p = InputBox("Unesi x koord. centra K2 kruznice") K2.q = InputBox("Unesi y koord. centra K2 kruznice") K2.r = InputBox("Unesi radijus K2 kruznice") pi! = 4 * Atn(1) rastojanje = Sqr((K2.p - K1.p) ^ 2 + (K2.q - K1.q) ^ 2) zbirobima = 2 * pi * (K1.r + K2.r) zbirpovrsina = pi * (K1.r ^ 2 + K2.r ^ 2) MsgBox "Rastojanje izmedju centara iznosi " & rastojanje MsgBox "Zbir obima: " & zbirobima MsgBox "Zbir povrsina: " & zbirpovrsina End Sub

Page 31: Programiranje - Vjezbe - Rijeseni Zadaci

   31 

 

Zadatak 4: Sastaviti program u kome se definiše korisnički tip podataka za polinom trećeg stepena: . Program treba iscrtavati polinomsku funkciju na PictureBox kontroli u intervalu domena [-10,10]. Rješenje zadatka: Private Type polinom3 a As Single b As Single c As Single d As Single End Type Dim pol1 As polinom3 Private Sub Command1_Click() Picture1.Cls Call Form_Load Picture1.DrawWidth = 2 pol1.a = InputBox("Unesi koeficijent a") pol1.b = InputBox("Unesi koeficijent b") pol1.c = InputBox("Unesi koeficijent c") pol1.d = InputBox("Unesi koeficijent d") For i = -10 To 9.9 Step 0.1 Picture1.Line (i, pol1.a * i ^ 3 + pol1.b * i ^ 2 + pol1.c * i_ + pol1.d)-(i + 0.1, pol1.a * (i + 0.1) ^ 3 + pol1.b * (i + 0.1) ^ 2_ + pol1.c * (i + 0.1) + pol1.d) Next i End Sub Private Sub Form_Load() Picture1.AutoRedraw = True Picture1.DrawWidth = 1 Picture1.Scale (-10, 10)-(10, -10) Picture1.Line (0, -10)-(0, 10) Picture1.Line (10, 0)-(-10, 0) Command1.Caption = "Crtaj polinomsku f-ju" End Sub

Napomena: Širina i visina PictureBox kontrole trebaju biti isti. Upišite iste vrijednosti za Width i Height svojstva PictureBox-a u tabeli svojstava (Properties prozoru).

Page 32: Programiranje - Vjezbe - Rijeseni Zadaci

   32 

 

Termin 8 (ponavljanje) Zadatak 1: Саставити програм који за задане координате тачке (x,y) одређује квадрант којем тачка припада. Програм треба да открива и специјалне случајеве, кад је тачка у исходишту или на координатним осама. Private Type tacka x As Single y As Single End Type Private Sub Form_Load() Dim P1 As tacka P1.x = InputBox("") P1.y = InputBox("") If P1.x = 0 And P1.y = 0 Then MsgBox "Tacka je u ishodistu" ElseIf P1.x = 0 And P1.y <> 0 Then MsgBox "Tacka je na y-osi" ElseIf P1.x <> 0 And P1.y = 0 Then MsgBox "Tacka je na x-osi" ElseIf P1.x > 0 And P1.y > 0 Then MsgBox "Tacka je u I kvadrantu" ElseIf P1.x < 0 And P1.y > 0 Then MsgBox "Tacka je u II kvadrantu" ElseIf P1.x < 0 And P1.y < 0 Then MsgBox "Tacka je u III kvadrantu" Else MsgBox "Tacka je u IV kvadrantu" End If End Sub Zadatak 2: Sastaviti program koji će izbrojati koliko se znakova ''a'' sadrži u unesenoj riječi. a) Zadatak riješiti pomoću ciklusa sa brojačem b) Zadatak riješiti pomoću ciklusa sa izlaznim kriterijumom Rješenje: Dim rijec As String Dim brojac As Integer Private Sub Form_Load() rijec = InputBox("") brojac = 0

Page 33: Programiranje - Vjezbe - Rijeseni Zadaci

   33 

 

For i = 1 To Len(rijec) znak$ = Mid(rijec, i, 1) If znak = "a" Then brojac = brojac + 1 End If Next i MsgBox "Rijec sadrzi ukupno " & brojac & " znak(a) a." End Sub Napomena: Samostalno riješiti zadatak pomoću ciklusa sa izlaynim kriterijumom.

Zadatak 3: Programirati algoritam prikazan na sljedećem dijagamu toka:

 Rješenje: Dim DX As Single, DY As Single Dim D As Single Private Sub Form_Load() DX = InputBox("DX?") DY = InputBox("DY?") If DY = 1 Then If DX = 0 Then MsgBox "Kolicnik D je neodredjen"

Dijeljenje s nulom-Kolicnik beskonacan

DY=1

DX=0

DX, DY

Kolicnik D je neodređen

D = Dx/(DY-1)

D

KRAJ

DA

DA

NE

NE

Page 34: Programiranje - Vjezbe - Rijeseni Zadaci

   34 

 

Else MsgBox "Dijeljenje s nulom - kolicnik je beskonacan" End If Else D = DX / (DY - 1) MsgBox "Kolicnik iznosi " & D End If End Sub Zadatak 4: Sastaviti program koji će promjeniti redoslijed brojeva u nizu unos(9). Dim unos(9) As Single Private Sub Form_Load() For i = 0 To 9 unos(i) = InputBox("") Next i Dim privr As Single For i = 0 To 4 privr = unos(i) unos(i) = unos(9 - i) unos(9 - i) = privr Next i ispis$ = "" For i = 0 To 9 ispis = ispis & unos(i) & " " Next i MsgBox ispis End Sub

Termin 10: Uvod u rad sa VB kontrolama

Zadatak 1: Potrebno je doraditi program za izračunavanje nominalnog napona epruvete opterećene na zatezanje. Ulazni podaci treba da se unose kroz TextBox kontrole. Ispis nominalnog napona takođe treba da bude na TextBox kontroli, stim da korisniku treba onemogućiti upisivanje teksta u tu kontrolu, kao prema slici. U slučaju da je nominalni napon veći od granice tečenja pozadina kontrole ispisa treba biti crvene boje. Potrebno je i onemogućiti korisniku unos stringova u TextBox kontrole.

Page 35: Programiranje - Vjezbe - Rijeseni Zadaci

   35 

 

Rješenje: Najbotnije svojstvo svake kontrole je ime kontrole. U ovom zadatku data su sljedeća imena kontrolama:

txtSila - polje za unos sile

txtPrecnik - polje za unos precnika

txtRe - polje za unos granice tecenja

txtSigma - polje za ispis nominalnog napona

cmdIzracunaj - komandno dugme

Listing koda: Private Sub cmdIzracunaj_Click() pi! = 4 * Atn(1) If Val(txtSila.Text) <= 0 Then MsgBox "Sila ne moze biti manja od 0 ili 0" GoTo kraj ElseIf Val(txtPrecnik.Text) <= 0 Then MsgBox "Precnik ne moze biti manji od 0 ili 0" GoTo kraj ElseIf Val(txtRe) <= 0 Then MsgBox "Granica tecenja ne moze biti manja od 0 ili 0" GoTo kraj End If txtSigma.Text = 1000 * Val(txtSila) / (Val(txtPrecnik.Text)_ ^ 2 * pi / 4) If Val(txtSigma.Text) > Val(txtRe.Text) Then txtSigma.BackColor = vbRed Else txtSigma.BackColor = vbWhite End If kraj: End Sub

Page 36: Programiranje - Vjezbe - Rijeseni Zadaci

   36 

 

Private Sub Form_Load() txtSigma.Enabled = False End Sub Napomena: Pored imena svake kontrole najvažnije je svojstvo koje čuva sadržaj kontrole ili određuje status kontrole. Text svojstvo čuva sadržaj TextBox kontrole i u ovom slučaju se može koristiti umjesto varijabli koje bi se deklarisale. Međutim potrebno je koristiti pretvaračke funkcije kada se Text svojstvo koristi za čuvanje brojčanih vrijednosti. Funkcija Val( ) je najbolje rješenje jer omogućava konverziju upisa u brojčani tip podataka ali i stabilnost programa ukoliko se umjesto brojeva upišu znakovni podaci u TextBox. Zadatak 2: Sastaviti program koji će svakim klikom na komandno dugme mijenjati boju TextBox kontrole sukcesivno u crvenu, plavu, zelenu, žutu, a potpm ponovo u crvenu. Rješenje: Private Sub Command1_Click() If Text1.BackColor = vbWhite Then Text1.BackColor = vbRed ElseIf Text1.BackColor = vbRed Then Text1.BackColor = vbBlue ElseIf Text1.BackColor = vbBlue Then Text1.BackColor = vbGreen ElseIf Text1.BackColor = vbGreen Then Text1.BackColor = vbYellow ElseIf Text1.BackColor = vbYellow Then Text1.BackColor = vbRed End If End Sub Private Sub Form_Load() Text1.BackColor = vbWhite End Sub Zadatak 3: Koristeći Move metod sastaviti program koji će klikom na komandno dugme pomjerati TextBox kontrolu iz početnog u novi položaj u zavisnosti od unesenih ∆ i ∆ vrijednosti. Nakon toga dodati komandno dugme za proširenje TextBox kontrole za ∆ i ∆

Page 37: Programiranje - Vjezbe - Rijeseni Zadaci

   37 

 

Rješenje:

Dim dx As Single, dy As Single Private Sub cmdPomjeri_Click() dx = InputBox("dx?") dy = InputBox("dy?") Text1.Move Text1.Left + dx, Text1.Top + dy End Sub Private Sub cmdRedimenzionisi_Click() dx = InputBox("dx?") dy = InputBox("dy?") Text1.Move Text1.Left, Text1.Top, Text1.Width + dx,_ Text1.Height + dy End Sub Napomena: Vrijednosti dx i dy se unose u twip jedinicama. Ukoliko želite promjeniti mjerne jedinice za unos ovih veličina podesite ScaleMode svojstvo forme u tabeli svojstava na neku od ponuđenih mjernih jedinica:

1 - Twip

2 - Point

3 - Pixel

4 - Character

5 - Inch

6 - Milimeter

7 - Centimeter

Page 38: Programiranje - Vjezbe - Rijeseni Zadaci

   38 

 

Termin 10: Programiranje upravljano događajima

Balon kao VB objekat sa svojstvima, metodama i pripadajućim događajima

Zadatak 1: Nakon klika na formu potrebno je da se TextBox kontrola premjesti na položaj kursora. Private Sub Form_MouseDown(Button As Integer, Shift As Integer,_ X As Single, Y As Single) Text1.Left = X Text1.Top = Y End Sub Zadatak 2: Koristeći Scale(x1,y1) - (x2,y2) metod potrebno repozicionirati koordinatni sistem forme tako da je ishodište u centru forme. Potrebno je omogućiti da se TextBox kontrola može uhvatiti lijevim tasterom miša i prenijeti u drugi položaj na formi. TextBox kontrola treba da promjeni boju pozadine u zavisnosti od toga u koji je kvadrant pao lijevi gornji vrh TextBox-a: crvena za I kvadrant, plava za II, zelena za III i žuta za IV Rješenje: Private Sub Form_DragDrop(Source As Control, X As Single, Y As Single) Text1.Left = X Text1.Top = Y If X > 0 And Y > 0 Then Text1.BackColor = RGB(255, 0, 0) ElseIf X < 0 And Y > 0 Then Text1.BackColor = RGB(0, 0, 255) ElseIf X < 0 And Y < 0 Then

Page 39: Programiranje - Vjezbe - Rijeseni Zadaci

   39 

 

Text1.BackColor = RGB(0, 255, 0) ElseIf X > 0 And Y < 0 Then Text1.BackColor = RGB(255, 255, 0) End If End Sub Private Sub Form_Load() Form1.Scale (-Form1.Width / 2, Form1.Height / 2)-(Form1.Width / 2,_ -Form1.Height / 2) Text1.DragMode = 1 'Omogucava drag and drop kontrole End Sub

Zadatak 3: Četiri Label kontrole treba da se nalaze na formi. Dvije Label-e treba da ispisuju trenutne koordinate kursora u odnosu na ishodište forme. Druge dvije labele treba da ispisuju širinu i visinu forme nakon proširenja ili suženja forme. Rješenje: Private Sub Form_MouseMove(Button As Integer, Shift As Integer,_ X As Single, Y As Single) Label1.Caption = X Label2.Caption = Y End Sub Private Sub Form_Resize() Label3.Caption = Form1.Width Label4.Caption = Form1.Height End Sub Zadatak 5: Sastaviti VB program koji sadržaj TextBox kontrole naziva tekst1 ispisuje unatrag u kontroli tekst2 nakon klika na komandno dugme naziva prebaci. Ukoliko se unos vrši u kontrolu tekst2 onda se isti tekst treba pojaviti u kontroli tekst1. Rješenje:

Dim sadrzaj As String Private Sub prebaci_Click() sadrzaj = tekst1.Text slovo$ = "" tekst2.Text = "" For i = Len(sadrzaj) To 1 Step -1

Page 40: Programiranje - Vjezbe - Rijeseni Zadaci

   40 

 

slovo = Mid(sadrzaj, i, 1) tekst2.Text = tekst2.Text & slovo Next i tekst1.Text = sadrzaj End Sub Private Sub tekst2_Change() tekst1.Text = tekst2.Text End Sub

Komentar: Nekie događaje ne mora izazvati korisnik. U ovom slučaju sama aplikacija indukuje događaj Change na kontroli tekst2. U gornjoj sabrutini naredba tekst2.Text = "" briše

sadržaj tekst2 kontrole što intukuje Change događaj na toj kontroli te izvršavanje Private Sub tekst2_Change() sabrutine. Ta će sabrutina naredbom tekst1.Text = tekst2.Text isprazniti sadržaj tekst1 kontrole i rezultat klika na komandno dugme biće prazne obje kontrole! Zbog toga je deklarisan string sadrzaj$ u kome se prvo sačuva sadržaj tekst1 kontrole te se iskoristi za ispis unatrag u kontroli tekst2, a nakon toga taj sadržaj se iz stringa vrati nazad u tekst1 kontrolu. U sljedećem listingu koda dato je elegantnije rješenje problema: value svojstvo komandnog dugmeta se mijenja u true kada se napravi klik na komandno dugme. Stoga se može onemogućiti izvršavanje naredbe tekst1.Text = tekst2.Text u podprogramu tekst2_change( ) u slučaju klika na komandno dugme: Private Sub prebaci_Click() slovo$ = "" tekst2.Text = "" For i = Len(tekst1.Text) To 1 Step -1 slovo = Mid(tekst1.Text, i, 1) tekst2.Text = tekst2.Text & slovo Next i End Sub Private Sub tekst2_Change() If prebaci.Value = False Then tekst1.Text = tekst2.Text End If End Sub

Page 41: Programiranje - Vjezbe - Rijeseni Zadaci

   41 

 

Termin 11: ListBox, ComboBox, CheckBox, OptionButton

Zadatak 1: Sastaviti program koji se sastoji iz jedne ListBox kontrole, jedne Textbox kontrole i dva komandna dugmeta. Klikom na prvo komandno dugme umeće se u ListBox sadržaj TextBox kontrole. Klikom na drugo komandno dugme briše se sadržaj ListBox kontrole. Rješenje:

Imena kontrola

Private Sub Command1_Click() List1.AddItem Text1.Text End Sub Private Sub Command2_Click() List1.Clear End Sub Korigovati program tako da se sadržaj TextBox kontrole umetne na poziciju selektovane stavke u ListBox kontroli. Ne treba brisati cijelu listu nego selektovanu stavku. Rješenje zadatka: Private Sub Command1_Click() List1.AddItem Text1.Text, List1.ListIndex End Sub Private Sub Command2_Click() List1.RemoveItem List1.ListIndex End Sub Private Sub Form_Load() predmeti = Array("Matematika", "Programiranje",_ "Termodinamika")

Page 42: Programiranje - Vjezbe - Rijeseni Zadaci

   42 

 

For i = 0 To 2 List1.AddItem predmeti(i) Next i Erase predmeti List1.ListIndex = 0 End Sub Komentar: U listi mora postojati bar jedna stavka na čije mjesto bi trebalo ubaciti novu. Stoga je potrebno u ''Design Time'' režimu dodati nekoliko stavki u listu, izborom List svojstva u tabeli svojstava. U rješenju je dodato nekoliko stavki u ''Run Time'' režimu izvršavanjem Form_Load() sabrutine. Zadatak 2: Sastaviti program koji sadrži ListBox, TextBox i CommandButton kontrole. Klikom na CommandButton potrebno je u ListBox dodati sve brojeve djeljive sa upisanim brojem u TextBox iz intervala 0 do 200 Rješenje: Private Sub Command1_Click() List1.Clear For i = Val(Text1.Text) To 200 If i Mod Val(Text1.Text) = 0 Then List1.AddItem i End If Next i End Sub Zadatak 3: Sastaviti program za crtanje linije na formi tako da se prvim klikom definiše početna tačka linije a drugim klikom krajnja tačka linije. Dodati dvije ComboBox kontrole. U jednoj ComboBox kontroli treba izabrati debljinu linije a u drugoj boju. Rješenje: Dim crtanje As Boolean Dim xL As Single, yL As Single Private Sub cmbBoja_Click() Select Case cmbBoja.ListIndex Case 0 Form1.ForeColor = vbBlack

Page 43: Programiranje - Vjezbe - Rijeseni Zadaci

   43 

 

Case 1 Form1.ForeColor = vbRed Case 2 Form1.ForeColor = vbBlue End Select End Sub Private Sub cmbDebljina_Click() If cmbDebljina.ListIndex = 0 Then Form1.DrawWidth = 1 ElseIf cmbDebljina.ListIndex = 1 Then Form1.DrawWidth = 3 ElseIf cmbDebljina.ListIndex = 2 Then Form1.DrawWidth = 7 End If End Sub Private Sub Form_Load() Form1.AutoRedraw = True crtanje = True cmbDebljina.AddItem "Tanka" cmbDebljina.AddItem "Srednja" cmbDebljina.AddItem "Debela" cmbDebljina.ListIndex = 0 cmbBoja.AddItem "Crna" cmbBoja.AddItem "Crvena" cmbBoja.AddItem "Plava" cmbBoja.ListIndex = 0 End Sub Private Sub Form_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single) If crtanje = True Then xL = X yL = Y crtanje = False Else Form1.Line (xL, yL)-(X, Y) crtanje = True End If End Sub

Page 44: Programiranje - Vjezbe - Rijeseni Zadaci

   44 

 

Komentar: Osnovni algoritam za crtanje linije sastoji se iz dva koraka:

prvim klikom miša memoriše se pozicija početne tačke linije u varijable xL i yL

nakon drugog klika miša crta se linija iz početne tačke u tačku definisanu pozicijom kursora za vrijeme drugog klika.

Podprogram Form_MouseDown( ) mora da se grana u dva bloka, te da se prvo izvršava prvi blok, a narednim startom podprograma drugi, potom ponovo prvi blok, pa drugi i tako dalje. Zbog toga se uvodi logička varijabla imena crtanje, koja izvršavanjem prvog bloka mijenja vrijednost u False, kako bi se narednim startom podprograma izvršio drugi blok podprograma. Izvršavanjem drugog bloka crta se linija, te mijenja vrijednost varijable crtanje u True, kako bi se postupak mogao nastaviti. Zadatak 4 - za samostalnu izradu: Sastaviti program koji sadrži dvije ListBox kontrole i dva komandna dugmeta. Klik na jedno dugme omogućava da se selektovani izbor iz lijeve liste prebaci u desnu. Klik na drugo dugme omogućava obrnut postupak. Dodati OptionButton tastere koji omogućavaju uključivanje i isključivanje pojedinačno svake ListBox kontrole Napomena: U skripti II (str. 25. - 26.), opisano je kako se koriste CheckBox i OptionBox kontrole.

Termin 12: podprogrami i rad sa fajlovima

Zadatak 1: Sastaviti funkcijski podprogram za izračunavanje zapremine cilindra. Rješenje: Function zapremina(r As Single, H As Single) As Single 'Argumenti f-je su radijus baze i visina cilindra Const pi = 3.1415926536 Dim Baza As Single Baza = r * r * pi zapremina = Baza * H End Function Komentar: Ovaj funkcijski podprogram je znatno usložen da bi se pokazalo da i u funkcijskom podprogramu možete uvoditi nove konstante ili deklarisati nove varijable.

Page 45: Programiranje - Vjezbe - Rijeseni Zadaci

   45 

 

Zadatak 2: Sastaviti funkcijski podprogram koji će izračunati sumu svih brojčanih podataka koji se nalaze u nekoj ListBox kontroli. Function SumaStavki(Lista As ListBox) As Single SumaStavki = 0 For i = 0 To Lista.ListCount - 1 SumaStavki = SumaStavki + Lista.List(i) Next i End Function Komentar: Argumenti funkcijskog podprograma mogu biti i varijable korisničkog tipa, ili kao u prethodnom primjeru objekt(i) neke klase podataka. Zadatak 3: Sastaviti podprogram koji će izračunavati rješenja kvadratne jednačine: 0 Rješenje: Sub KvJed(a As Single, b As Single, c As Single, x1 As Single,_ x2 As Single) Dim Diskriminanta As Single Diskriminanta = b * b - 4 * a * c If Diskriminanta > 0 Then x1 = (-b - Sqr(Diskriminanta)) / (2 * a) x2 = (-b + Sqr(Diskriminanta)) / (2 * a) ElseIf Diskriminanta = 0 Then x1 = -b / (2 * a) x2 = x1 MsgBox "Rjesenja se podudaraju." Else MsgBox "Rjesenja su u skupu kompleksnih brojeva" End If End Sub Zadatak 4: Sastaviti program koji će množiti dvije 2x2 matrice. Elemenati prve matrice treba da se učitaju iz fajla naziva ulaz.txt, i njihove vrijednosti treba da se ispišu na Label kontrolama. Elementi druge matrice se zadaju u TextBox kontrolama. Rezultat treba na label kontrolama i pohranjen u fajl rezultat.txt

Page 46: Programiranje - Vjezbe - Rijeseni Zadaci

   46 

 

Rješenje zadatka:

Forma aplikacije sa kontrolama Fajl ulaz.txt Dim M1(1, 1) As Single, M2(1, 1) As Single, rezultat(1, 1)_ As Single Private Sub cmdUcitaj_Click() Open "C:\Programiranje\ulaz.txt" For Input As #1 Input #1, M1(0, 0), M1(1, 0) Input #1, M1(0, 1), M1(1, 1) Label1.Caption = M1(0, 0) Label2.Caption = M1(1, 0) Label3.Caption = M1(0, 1) Label4.Caption = M1(1, 1) Close #1 End Sub

Aplikacija nakon izvršavanja podprograma cmdUcitaj_Click()

Podprogrami za zadavanje elemenata matrice II: Private Sub Text1_Change() M2(0, 0) = Val(Text1.Text) End Sub

Page 47: Programiranje - Vjezbe - Rijeseni Zadaci

   47 

 

Private Sub Text2_Change() M2(1, 0) = Val(Text2.Text) End Sub Private Sub Text3_Change() M2(0, 1) = Text3.Text End Sub Private Sub Text4_Change() M2(1, 1) = Text4.Text End Sub Podprogram za množenje matrica, snimanje rezultata u fajl i ispis na formi: Private Sub cmdPomnozi_Click() For i = 0 To 1 For j = 0 To 1 rezultat(j, i) = M1(0, i) * M2(j, 0) + M1(1, i) * M2(j, 1) Next j Next i Open "C:\Programiranje\rezultat.txt" For Output As #2 Write #2, rezultat(0, 0), rezultat(1, 0) Write #2, rezultat(0, 1), rezultat(1, 1) Close #2 Label5.Caption = rezultat(0, 0) Label6.Caption = rezultat(1, 0) Label7.Caption = rezultat(0, 1) Label8.Caption = rezultat(1, 1) End Sub

Nakon izvršavanja cmdPomnozi_Click() fajl rezultat.txt