Professional Documents
Culture Documents
Programiranje I Algoritmi FSB Vježbe
Programiranje I Algoritmi FSB Vježbe
S v e u i l i t e
Fakultet
strojarstva
Z a g r e b u
brodogradnje
PROGRAMIRANJE I ALGORITMI
Podloge za vjebe programiranje
Visual Basic
Zagreb, 2006.
PREDGOVOR
Autori
U Zagrebu, Listopad 2006.
Sadraj
Visual Basic je program kontroliran (pokretan) dogaajima "event driven". Dogaaji
se mogu pojaviti zahvaljujui akciji korisnika kao to je klik miem ili odabir stavke iz
izbornika ili kao rezultat akcije nekog drugog prozora.
1.
Odabir predloka
2.
Prvi korak u kreiranju aplikacije Visual Basicom je stvaranje suelja aplikacije. Forme
i kontrole su osnovni elementi suelja - objekti koji imaju svojstva i dogaaje koji
odreuju njihovo ponaanje i interakciju s korisnikom. Postavljanjem svojstava formi i
kontrola te pisanjem Visual Basic programskog koda koji e odgovarati na dogaaje,
objekti se prilagoavaju zahtjevima aplikacije. Kontrole su objekti koji su sadrani u
objektima forme. Svaki tip kontrole ima svoj skup svojstava, metoda i dogaaja koje
ga ine prikladnim odreenoj namjeni.
Osobine smjetaja kontrole na formi i njena veliina osim miem mogu se mijenjati i u
prozoru s osobinama (Properties) u kojem se nalaze i ostale osobine kao to su
naziv (Name) odabranog objekta ili kontrole koja e se koristiti u programskom kodu,
tekst na gumbu (Text), poravnavanje teksta (TextAlign) itd.
Prilikom zadavanja osobina naziva (Name) mogu se postaviti slijedea pravila: naziv
ne smije imati prazna mjesta, moraju se koristiti slova engleske abecede, ne smiju se
koristiti rezervirane rijei programskog jezika, te neslubeno koritenje prefiksa od tri
slova za oznaku vrste objekta. Za naredbeni gumb to je cmd te se na njega doda
proizvoljni naziv s velikim poetnim slovom.
3.
VRSTA
VELIINA
RASPON VRIJEDNOSTI
Boolean
4 Byte-ova
Byte
1 Byte
0255 unsigned
Char
2 Byte-a
065,535 unsigned
Date
8 Byte-ova
1/1/1 CE to 12/31/9999
Decimal
12 Byte-ova
Double
8 Byte-ova
Integer
4 Byte-a
2147483648 to 2147483647
Long
8 Byte-ova
9223372036854775808 do 9223372036854775807
Object
4 Byte-a
Short
2 Byte-a
32768 to 32767
Single
4 Byte-a
String
10 Byte-ova
(+ znakova u stringu * 2)
PRETVORBA U TIP
CDbl
Double
CInt
Integer
CLng
Long
CSng
Single
CStr
String (tekst)
CVar
Variable
4.
START
A, B, C
A>B
AND
A>C
DA
DA
Razlika = A - (B + C)
NE
B>A
AND
B>C
Razlika = B - (A + C)
NE
Razlika = C - (A + B)
Razlika
END
10
11
12
INCIJALNI NAZIV
NOVI NAZIV
OBJEKTA (NAME)
(NAME)
NOVI TEKST
Button1
cmdIzracunaj
Izraunaj
Button2
cmdNovi
Novi unos
TextBox1
txtA
TextBox2
txtB
TextBox3
txtC
TextBox4
txtRazlika
Label1
lblBroj_A
Broj A:
Label2
lblBroj_B
Broj B:
Label3
lblBroj_C
Broj C:
Label4
lblRazlika
Razlika:
Dim X as Integer = 12
13
Jednakost
<
Manje od
<=
>
14
VRSTA USPOREDBE
>=
<>
Nejednakost
A AND B
A OR B
istina
istina
la
la
istina
la
istina
la
istina
la
la
la
istina
istina
istina
la
Ako je taj uvjet ispunjen, izraunava se i dodjeljuje vrijednost varijabli Razlika prema
izrazu B (A + C). Ako niti taj uvjet nije ispunjen onda preostaje samo mogunost da
je vrijednost varijable C najvea vrijednost varijable razlika tada se izraunava
prema naredbi koja slijedi iza rezervirane rijei Else.
Cjelokupni programski kd naredbe uvjetnog grananja IfThenElse za ovaj
primjer je:
If A > B And A > C Then
Razlika = A - (B + C)
ElseIf B > A And B > C Then
Razlika = B - (A + C)
Else
Razlika = C - (A + B)
End If
15
16
sintaksne pogreke kod pisanja, npr. krivo napisana varijabla ili rezervirana
programska rije,
17
5.
1 n
xi
n i =1
Ponavljanje ucitavanja i
zbrajanja koje korisnik
realizira ponovnim pozivom
procedure
START
Korisnik odlucuje o
tijeku izvravanja
preko sucelja
Zbroj = Zbroj + x
n=n+1
Sredina = Zbroj / n
Sredina
END
Slika 12. Dijagram toka
Na poetku nema niti jednog unesenog broja tako da je varijabla n jednaka nuli.
Korisnik unosi broj x, a varijabla Zbroj se uveava za vrijednost varijable x. Nakon
toga se i varijabla n uveava za jedan (zato to smo unijeli 1 broj) izrazom n = n + 1,
tj. iz 0 se mijenja u 1. Ponavljajui ovaj postupak unoenjem razliitih brojeva preko
varijable x, mijenjaju se varijable Zbroj i n. Aritmetika sredina cijelog niza definirana
je varijablom Sredina koja e imati vrijednost Sredina = Zbroj / n. Na kraju
programa ispisuje se vrijednost aritmetike sredine.
18
NOVI NAZIV
OBJEKTA (NAME)
(NAME)
NOVI TEKST
Button1
cmdUnesi
Unesi
Button2
cmdIzracunaj
Izraunaj
Button3
cmdNovi_niz
Novi niz
TextBox1
txtUnos
TextBox2
txtVelicina
TextBox3
txtSredina
Label1
lblUpisite
Upiite broj:
Label2
lblVelicina
Veliina niza:
Label3
lblSredina
Arit. sredina:
19
Funkcija Val() pretvara unesene znakove u broj iji je tip deklariran varijablom
(Integer, Double).
Zatim se dodaje programski kd za ispis veliine niza, tj. za ispis vrijednosti varijable
n u okvir s tekstom txtVelicina
txtVelicina.Text() = n
20
21
22
6.
Izraun
faktorijela
brojaem)
(primjena
petlje
23
Vrijednost varijable x mora biti manja od 10. Ako korisnik nije unio takav broj,
program ne smije izraunavati faktorijel i zbroj. Stoga se postavlja uvjet preko
strukture odluke IfThen:
If x < 10 Then
End If
25
26
7.
uporaba
petlje
sa
Tocnost
NE
Tocnost > 0
AND
Tocnost <= 1
DA
i=1
x=1
NE
x > Tocnost
DA
Zbroj = Zbroj + x
i=i+1
x = (-1) ^ (i + 1) / (2 * i 1)
Velicina = i - 1
Zbroj,
Velicina
END
27
Potrebno je odrediti broj lanova reda tako da apsolutna vrijednost posljednjeg lana
reda bude manja od uitane vrijednosti , gdje je 0 < 1. Formula reda glasi:
gdje je n=1,2,3...
29
Kada uvjet vie nije ispunjen izlazi se iz petlje i ispisuje zbroj i veliina reda u
predviene okvire.
Private Sub cmdIzracunaj_Click(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles cmdIzracunaj.Click
Dim Velicina As Integer
Dim i As Integer = 1
Dim x, Tocnost, Zbroj As Double
Tocnost = CDbl(txtTocnost.Text)
If Tocnost < 0 Or Tocnost >= 1 Then
MsgBox("Broj mora biti pozitivan i manji od 1")
Exit Sub
End If
x = 1
Do While Math.Abs(x) > Tocnost
x = (-1) ^ (i + 1) / (2 * i - 1)
Zbroj = Zbroj + x
i = i + 1
Velicina = Velicina + 1
Loop
txtVelicina.Text = Velicina
txtZbroj.Text = Zbroj
End Sub
30
8.
Uporaba
polja
strukture
jednodimenzionalnog
x=
1 n
xi
n i =1
START
i = 1, n
A (i)
i = 1, n
Sredina = Zbroj / n
Sredina
END
Slika 22. Dijagram toka
Program ima istu funkciju kao i program opisan u zadatku 2 osim to e se brojevi
unositi u polje (array).
Prema dijagramu prikazanom na slici 22 brojevi se unose u jednodimenzionalno polje
A. Polja omoguuju viestruku pohranu istog tipa podataka bez kreiranja posebnih
varijabli za svaki od podataka. Svi podaci su na taj nain pohranjeni pod istim
imenom, a manipulacija s pojedinim podatkom izvodi se preko indeksa polja.
Jednodimenzionalno polje moemo zamisliti kao redak s podacima gdje je svaki
podatak smjeten u svoj stupac. Primjer polja A s 5 elemenata koji su cijeli brojevi:
CADLab, Katedra za konstruiranje i razvoj proizvoda, FSB Zagreb
31
indeks
A(indeks)
12
238
17
89
975
Polje A(100) deklarirali smo kao Single, stoga e i zbroj njegovih elementa (varijabla
Zbroj) biti Single. Deklariranje razliitih varijabli istog tipa moemo skratiti odvajajui
varijable zarezom:
Dim A(100), Zbroj As Single
33
34
9.
Program slui za unos niza brojeva u polje i ispis brojeva koji imaju najveu i
najmanju vrijednost.
START
i=i+1
A(i)
Max = A (1)
Min = A (1)
j = 1, i
Da
Max = A(j)
Ne
Da
Ne
Min = A(j)
Min
Max
END
Slika 25. Dijagram toka
35
Prema dijagramu na slici 25 brojevi se unose u polje A. Nakon unosa, varijable koje
predstavljaju najvei i najmanji broj poprimaju vrijednost prvog lana polja A(1).
Usporedbom svakog lana polja s trenutnim uspostavljaju se novi minimalni i
maksimalni broj.
Svakim unosom broja u polje A(i) iz okvira s tekstom txtUnos, potvrdom na gumb
cmdUnesi uveava se varijabla i za jedan tj. i = i + 1. Visual Basic omoguava
pisanje ovog izraza u obliku i += 1. Uneseni brojevi unose se u popis lstLista.
Nakon poetnog definiranja, varijable Min i Max poprimaju vrijednosti prvog lana
polja A(1). ForNext petlja svaki element polja usporeuje s vrijednostima varijabli
Min i Max preko IfThen struktura odluke.
For j = 1 To i
If A(j) < Min Then
Min = A(j)
End If
If A(j) > Max Then
Max = A(j)
End If
Next j
36
37
38
B(1)
B(2)
B(3)
B(4)
A(4)
A(3)
A(2)
A(1)
A(0)
elementa
A(4)
preko
formule:
Osobinom Text postavlja se tekst natpisa lblUnos mijenjajui redni broj lana:
lblUnos.Text = "Unesite " + CStr(i + 1) + ". lan:"
39
40
i = 1, N
A(i)
i = 1, n - 1
j = 1, n - i
DA
temp = A(j)
A(j) = A(j+1)
A(j+1) = temp
NE
i = 1, n
A(i)
END
41
1
INICIJALNO
STANJE
A(j)
A(j+1)
A(j)
A(j+1)
A(j) = A(j+1)
Temp
Temp
A(j)
A(j+1)
Temp = A(j)
A(j)
A(j+1)
A(j+1)= Temp
Temp
Temp
7>2
7>6
7>1
2, 7, 6, 1
2, 6, 7, 1
2, 6, 1, 7
j=1
3 usporedbe
i = 1, n 1
2<6
6>1
2, 6, 1, 7
2, 1, 6, 7
j=2
2 usporedbe
i = 1, n 2
2>1
1, 2, 6, 7
j=3
1 usporedba
i = 1, n 3
Nakon prvog prolaza kroz vanjsku petlju najvei broj sigurno dolazi na zadnje mjesto
(npr. kao broj 7 na slici 31). Unutranja petlja (broja j) mora imati broj prolaza za
jedan manje za svaki novi prolaz kroz vanjsku petlju (broja i), zato to u svakom
prolazu kroz vanjsku petlju jedan broj zauzima svoje pravo mjesto. Broja unutranje
petlje stoga poprima vrijednosti od 1 do n broja vanjske petlje (u ovom primjeru ni). Broj prolaza kroz vanjsku petlju jednak je broju lanova niza umanjenom za 1.
42
Forma prema slici 31 sadri gumbe za unos broja u polje, sortiranje i izlaz, okvir s
tekstom za unos, dva popisa za nesortirani i sortirani niz te pripadajue natpise.
43
44
12. Uporaba
dvodimenzionalnog
polja
spremanje matrice i rad sa matricom
za
Napisati program za unos realnih brojeva u kvadratnu matricu te ispis koliko se u njoj
nalazi nula, pozitivnih i negativnih brojeva.
1.1
1.2
1.3
1.4
...
1.n-1
1.n
2.1
2.2
2.3
...
...
2.n-1
2.n
3.1
3.2
3.3
...
...
...
...
4.1
...
...
...
...
...
...
...
...
...
...
n-2.n-2
...
n-2.n
n-1.1
n-1.2
...
...
...
n-1.n-1
n-1.n
n.1
n.2
...
...
n.n-2
n.n-1
n.n
45
n
i = 1, n
j = 1, n
A(i, j)
DA
A(i, j) > 0
Broj_poz =
Broj_poz + 1
DA
NE
A(i, j) < 0
Broj_neg =
Broj_neg + 1
NE
Broj_nula =
Broj_nula+ 1
Slika 36
Slika 37
For i = 1 To n
For j = 1 To n
A(i, j) = InputBox("Unesite broj za element u " + CStr(i) +
". retku i " + CStr(j) + ". stupcu")
lstMatrica.Items.Add(CStr(i) + "." + CStr(j) + " = " + CStr(a(i, j)))
Next j
Next i
CADLab, Katedra za konstruiranje i razvoj proizvoda, FSB Zagreb
47
48
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
START
i = 1, n
m, n
Zbroj = 0
j = 1, m
i = 1, n
Sredina = Zbroj / m
A(i, j)
Sredina
END
Slika 39. Dijagram toka
CADLab, Katedra za konstruiranje i razvoj proizvoda, FSB Zagreb
49
51
52
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
Prema dijagramu prikazanom na slici 44 program unosi brojeve kao elemente polja
A(i,j). Zatim se provjerava istinitost uvjeta da je element na glavnoj dijagonali parni
broj, te ako jest element se unosi u novo polje B(k). Da bi formirali novo polje, prije
dodjeljivanja vrijednosti svakog novog lana polja potrebno je poveati vrijednost
varijable koja e biti indeks tog polja za 1. Najveim brojem (Max) se proglaava prvi
element tako formiranog polja i usporeuje se s ostatkom elemenata. Ako je za
pojedini element istinit uvjet da je vei od Max, varijabla Max poprima vrijednost tog
elementa.
Djeljivost nekog broja s drugim brojem provjeravamao tako da izraunavamo ostatak
kod dijeljenja. Dakle ako elimo provjeriti da li je broj x djeljiv sa y korisiti emo
funkciju koja kao vrijednost vraa ostatak od dijeljenja x sa y. U Visual Basic-u takva
funkcija se zove Mod, a sintaksa je slijedea:
Izraz x Mod y daje vrijednost ostatka od dijeljenja x sa y. Dakle ako elimo provjeriti
da li npr. varijabla A sadri paran broj, ispitati emo sliedei uvjet:
If A Mod 2 = 0
Ako je uvjet istinit, vrijednost je parna, a ako nije onda je vrijednost neparna. Na isti
nain provjeravamo i djeljivost sa drugim brojevima.
53
n
i = 1, n
i = 1, k
j = 1, n
B(i) > Max
A(i, j)
DA
Max = B(i)
NE
i = 1, n
A(i, i) Mod 2 = 0
DA
Max
k=k+1
B(k) = A(i, i)
NE
END
54
55
i = 1, N
j = 1, M
A(i, j)
NE
DA
Zbroj = Zbroj+ A(i, j)
Zbroj
END
57
NE
i>j
i<j
DA
DA
Zbroj_iznad = Zbroj_iznad + A(i,j)
Zbroj_iznad,
Zbroj_ispod
END
59
17. Iteracija
Potrebno je napraviti program za odreivanje visine h do koje je spremnik u obliku
kugle radijusa R ispunjen tekuinom za zadani volumen V uz zadanu tonost
( = Vzadani Vizracunati ). Volumen kuglina odsjeka rauna se po formuli:
1
V = h 2 (3R h) . Potrebno je pretpostaviti poetno rjeenje (h = R), provjeriti tonost
3
te korigirati po potrebi (iteracija).
(X-, X+)
x, y1=Y2
y1 = f (X)
(Y-,
Y+)
y2 = f (X)
Xo
X2
X1 X1
X1
X1
X2
X2
X1
61
18. Bisekcija
Napisati program koji e odrediti nultoku funkcije f(x) = 0 u intervalu [x1, x2] uz
odreenu tonost , metodom bisekcije. Za izraunavanje vrijednosti funkcije f(x)
nainiti funkcijski potprogram.
Algoritam
Uitati granice intervala x1 i x2 te traenu tonost .
Provjeriti da li funkcija u zadanom intervalu mijenja
f ( x1 ) f ( x 2 ) < 0 . Ako ne, ispisati poruku i zaustaviti program.
Petlja koja se prekida kada se zadovolji jedan od uvjeta:
predznak:
f ( x0 )
x 2 x1
x1 + x 2
2
Provjeriti uvjete. Ako su zadovoljeni ispisati vrijednost nultoke.
Provjeriti u kojoj polovici inetervala funkcija mijenja predznak:
Izraunati meutoku: x0 =
f ( x1 ) f ( x0 ) < 0 x 2 = x0
f ( x0 ) f ( x 2 ) < 0 x1 = x0
Ponovo izraunati meutoku s novim vrijednostima x1 i x2
62
63
64
65
f ( x) dx
po Simpsonovoj formuli:
f ( x) dx 3 ( y
+ 4 y1 + 2 y2 + 4 y3 + K + 2 yn 2 + 4 yn 1 + yn )
h=
ba
n
y = f(x)
y2
y3
yn-2
y1
yn-1
y0
yn
x1
x2
x3
xn-2
xn-1 b
67
68
Izraz: 5 6 2 + * 8 4 / - )
1
2
3
4
5
6
7
8
9
10
simbol
5
6
2
+
*
12
4
/
)
stog
5
5,6
5,6,2
5,8
40
40,8
40,8,4
40,2
38
1.
2.
3.
4.
5*(6+2)8/4
Dodaj ) na kraj izraza
skeniraj (parsiraj) izraz s lijeva
na desno i ponavljaj korake 3 i 4
dok se ne dostigne ) (oznaka
kraja izraza)
Ako je pronaen operand, stavi
ga na stog
Ako je pronaen operator o:
i.
ii.
iii.
5.
69
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)
op2 + op1
op2 - op1
op2 * op1
op2 / op1
stog.Push(mr)
' da li je simbol razliit od "praznine"?
ElseIf simbol <> " " Then
MsgBox("izraz sadri nedozvoljeni simbol!")
Exit Sub
End If
ListBox1.Items.Add(simbol)
' prikazi stanje stoga u listbox-u
Dim polje As Object() = stog.ToArray
k = stog.Count
stanje_stoga = ""
For i = k - 1 To 0 Step -1
70
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
71
b=
x y
i =1
n
72
x
i =1
x=
2
i
1 n
xi
n i =1
y = a + b x, gdje je:
nx y
a = y b x
nx
y=
1 n
yi
n i =1
73
dopi
promjer provrta
h2.
Program treba ispisati slijedee dimenizije za
odabranu varijantu nosaa:
b, b1, h1, h, A (povrina presjeka)
Pri tome trebaju biti zadovoljeni slijedei uvjeti:
<
dop
h1 > h2 + 5
Naprezanje se rauna pomou izraza:
M
W
W=
74
75
76
Programiranje
24.2 Zadatak 2
Potrebno je napraviti program za ispis svih brojeva veih od 10 koji se nalaze iznad
sporedne dijagonale kvadratne matrice.
24.3 Zadatak 3
Potrebno je napraviti program koji e za niz realnih vrijednosti x ispisati vrijednosti
funkcije prema formuli: y = x 3 + 2 x 2 + 3x + 4 .
24.4 Zadatak 4
Potrebno je napraviti program za ustanovljavanje da li je trokut jednakostranian,
jednakokraan ili raznostranian. U koordinatnom sustavu trokut je definiran s tri
koordinate njegovih vrhova: P1 ( x1 , y1 ) , P2 ( x 2 , y 2 ) i P3 ( x3 , y 3 ) . Formula za izraunavanje
udaljenosti izmeu vrhova trokuta glasi: Pij = ( xi x j ) 2 + ( y i y j ) 2 .
77