programiranje - vjezbe - rijeseni zadaci

28
   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 варијабле подаци симболи за операције (оператори) израз наредба 

Upload: aleksandar-lalovic

Post on 29-Dec-2014

586 views

Category:

Documents


18 download

DESCRIPTION

Programiranje

TRANSCRIPT

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 druga varijanta: Dim komentar as String, komentar & 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 ^.

Page 5: Programiranje - Vjezbe - Rijeseni Zadaci

   5 

 

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") 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:

Page 6: Programiranje - Vjezbe - Rijeseni Zadaci

   6 

 

Termin 3

Funkcije u Visual Basic-u

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

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

Page 7: Programiranje - Vjezbe - Rijeseni Zadaci

   7 

 

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

Page 8: Programiranje - Vjezbe - Rijeseni Zadaci

   8 

 

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

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.

Page 9: Programiranje - Vjezbe - Rijeseni Zadaci

   9 

 

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.

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

Page 10: Programiranje - Vjezbe - Rijeseni Zadaci

   10 

 

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:

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

Page 11: Programiranje - Vjezbe - Rijeseni Zadaci

   11 

 

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 

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.

Page 12: Programiranje - Vjezbe - Rijeseni Zadaci

   12 

 

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.  

Dijagram toka programa:

Početak

a, b 

True

MsgBox "Ulazni podaci nisu korektni" 

∙2

 

Kraj

False 

Page 13: Programiranje - Vjezbe - Rijeseni Zadaci

   13 

 

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

Page 14: Programiranje - Vjezbe - Rijeseni Zadaci

   14 

 

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

Page 15: Programiranje - Vjezbe - Rijeseni Zadaci

   15 

 

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:

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

Page 16: Programiranje - Vjezbe - Rijeseni Zadaci

   16 

 

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: 

 

 

 

Počeak 

n ‐2 

n 6 

True 

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

True

False

Kraj 

False

Page 17: Programiranje - Vjezbe - Rijeseni Zadaci

   17 

 

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 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 ;

Page 18: Programiranje - Vjezbe - Rijeseni Zadaci

   18 

 

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!" 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"

Page 19: Programiranje - Vjezbe - Rijeseni Zadaci

   19 

 

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]." 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) .

Page 20: Programiranje - Vjezbe - Rijeseni Zadaci

   20 

 

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.

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.

Page 21: Programiranje - Vjezbe - Rijeseni Zadaci

   21 

 

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

Page 22: Programiranje - Vjezbe - Rijeseni Zadaci

   22 

 

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

Page 23: Programiranje - Vjezbe - Rijeseni Zadaci

   23 

 

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 š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

Page 24: Programiranje - Vjezbe - Rijeseni Zadaci

   24 

 

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

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.

Page 25: Programiranje - Vjezbe - Rijeseni Zadaci

   25 

 

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

Page 26: Programiranje - Vjezbe - Rijeseni Zadaci

   26 

 

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

:

Page 27: Programiranje - Vjezbe - Rijeseni Zadaci

   27 

 

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. Rješenje zadatka:

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

∙ ∙

∙ ∙ ∙ ∙ ∙ ∙ ∙ ∙

∙ ; ∙ ⟹

Page 28: Programiranje - Vjezbe - Rijeseni Zadaci

   28 

 

∙ ∙ ′ ∙ ∙

′ ′ ∙

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