You are on page 1of 76

PANEVROPSKI UNIVERZITET APEIRON FAKULTET POSLOVNE INFORMATIKE

Vanredne studije Smjer Poslovna informatika


Predmet Vii programski jezici i RAD alati programiranje u Visual Basic-u

"Rjeavanje zadataka u Visual Basic-u"


(seminarski rad)

Student Bojan uri, 37-10/vpi

Predmetni nastavnik Prof. dr Zoran . Avramovi, dipl.in.elek.

1.1. Prikazati broj dana u mjesecu histogramom Nainiti broj koji prikazuje broj dana u mjesecu histogramom. Obratiti panju na prestupne godine.

'deklarisemo dve matrice, velicine 12 elemenata Dim arrMjeseci(11) As Integer

Dim arrMjeseciImena(11) As String 'dodijelimo vrijednosti elementima matrica arrMjeseci = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31} arrMjeseciImena = {"jan", "feb", "mar", "apr", "maj", "jun", "jul", "avg", "sep", "okt", "nov", "dec"} 'provjera da li je godina prestupna. ako jeste, februar ima 29 dana If prestupna(cmbGodina.Text) Then arrMjeseci(1) = 29 End If 'povezemo chart element sa matricama Chart1.Series(0).Points.DataBindXY(arrMjeseciImena, arrMjeseci) End Sub

Private Function prestupna(godina As Integer) As Boolean 'ako je godina djeljiva sa 400 onda je prestupna If godina Mod 400 = 0 Then Return True End If 'ILI

'ako je godina djeljiva sa 4 I NIJE djeljiva sa 100, onda je prestupna If godina Mod 4 = 0 And godina Mod 100 <> 0 Then Return True End If Return False End Function

1.2. Iscrtati Pitagorinu tablicu Nainiti program koji iscrtava Pitagorinu tablicu.

'deklarisemo matricu kao dvodimenzionalnu matricu sa 10 x 10 elemenata Dim arrD(9, 9) As Integer 'deklarisemo matricu kao 1-dimenzionalnu matricu sa 10 elemenata

'koja ce cuvati citavu liniju elemenata 'kao string, zato sto ima razmake Dim ln(9) As String

'popunimo matricu sa elementima For x = 0 To 9 For y = 0 To 9 'dodijelimo vrijednosti elementima matrice 'uvecano za 1, jer nam trebaju 1 2 3 .. 10, a ne 0-9 arrD(x, y) = (x + 1) * (y + 1) 'dodajemo vrijednosti u 'dodajemo razmak ako je If arrD(x, y) < 10 Then ln(x) = ln(x) & " " Else ln(x) = ln(x) & " " End If Next Next 'liniju' matrice broj manji od 10 & " " & arrD(x, y) & arrD(x, y)

For index = 0 To 9 'dodajemo linije u glavnu listbox kontrolu ListBox1.Items.Add(ln(index))

'dodajemo brojeve u kolumn listbox, koja se nalazi sa lijeve strane lstColumn.Items.Add(index + 1) Next 'dodajemo liniju u red listbox, koja se nalazi iznad glavne listbox kontrole 'ista je kao prvi red glavne listbox kontrole lstRow.Items.Add(ln(0)) End Sub End Class

1.3. Broj n podijeljen sa 2 daje ostatak 1... Broj n podijeljen sa 2 daje ostatak 1, sa 3 ostatak 2, sa 4 ostatak 3, ... sa x daje ostatak x-1, za x = 2 do 9.

'deklarisemo varijable Dim broj As Integer 'naci prvi broj takav da n mod 2 = 1, n mod 3 = 2 ... n mod x = x-1

'pocetna vrijednost broja 1 broj = 1 'testiramo u petlji dok funkcija provjera ne vrati true Do Until provjera(broj) 'povecavamo broj broj = broj + 1 Loop End Sub

Private Function provjera(ByVal broj As Integer) As Boolean 'provjeravamo da li broj ispunjava sve uslove ' broj mod 2 = 1, broj mod 3 = 2 ... broj mod 9 = 9-1 For index = 2 To 9 'ako ne ispunjava uslov(e), vracamo se u glavni program If broj Mod index <> index - 1 Then 'vracamo false, izlazimo iz funkcije Return False End If Next

1.4. Kalkulator sa etiri osnovne radnje i faktorijelom

'deklarisanje varijabli

Dim dblPrvi, dblDrugi, dblRes As Double 'deklarisanje operacije kao string Dim strOp As String 'citanje odabrane operacije iz combo boksa strOp = cmbOp.SelectedItem Select Case strOp 'racunanje razultata, i ispis vrijednosti u tekst boks txtRes Case "+" dblRes = dblPrvi + dblDrugi txtRes.Text = dblRes Case "-" dblRes = dblPrvi - dblDrugi txtRes.Text = dblRes Case "*" dblRes = dblPrvi * dblDrugi txtRes.Text = dblRes Case "/" 'rezultat se zaokruzuje na 3 decimale, koristenjem math.round funkcije dblRes = Math.Round(dblPrvi / dblDrugi, 3) txtRes.Text = dblRes Case "!" 'Faktorijel 'provjera da li je broj manji od 1

If dblPrvi < 1 Then MessageBox.Show("Molim odaberite broj koji nije manji od 1") txtRes.Text = "" Exit Sub End If 'faktorijel broja 1 = 1 If dblPrvi = 1 Then dblRes = 1 txtRes.Text = dblRes Exit Sub End If 'dodijelimo pocetnu vrijednost rezultatu dblRes = 1 'definisemo brojac kao tip integer, ne mnozimo sa 1, jer n*1 = n For intBrojac As Integer = 2 To dblPrvi dblRes = dblRes * intBrojac Next 'zbog nacina zapisa promjenjivih double, moguc je gubitak preciznosti na vise od 15 decimala. If dblRes.ToString.Length > 15 Then MsgBox("Rezultat ima vise od 15 cifara, moguce je da rezultat nije tacan") End If

txtRes.Text = dblRes End Select End Sub End Class

1.5. Pronai najvei potreban kapacitet autobusa Na jednoj prevoznoj liniji unaprijed je pozat broj prodatih karata izneu svake 2 stanice. Pronai kapacitet prevoznog sredstva kojim treba realizovati prevoz. Ako podatake predstavimo matricom

bitno je primjetiti da na prvoj stanici (koordinate a1,b1, broj je 0) putnici kupe: 8 karata za 2. stanicu 6 karata za 3. 7 karata za 4. 5 karata za 5. stanicu. U autobusu je 8 + 6 + 7 + 5 + 26 putnika. (Zbir prvog reda matrice)

Dim arrMatrica(4, 4) As Integer 'dodijelimo vrijednosti elementima matrice arrMatrica = {{0, 8, 6, 7, 5}, {0, 0, 7, 9, 4}, {0, 0, 0, 8, 5}, {0, 0, 0, 0, 4}, {0, 0, 0, 0, 0}}

'deklarisemo matrice koje ce sadrzavati zbir redova i zbir kolona 'i broj putnika na svakoj stanici

Dim Dim Dim Dim

arrZbirRedova(4) As Integer arrZbirKolona(4) As Integer arrStanica(4) As Integer str As String = ""

'zbir redova For x = 0 To 4 For y = 0 To 4 arrZbirRedova(x) = arrZbirRedova(x) + arrMatrica(x, y) Next Next 'zbir kolona For y = 0 To 4 For x = 0 To 4 arrZbirKolona(y) = arrZbirKolona(y) + arrMatrica(x, y) Next Next arrStanica(0) = arrZbirRedova(0) 'racunamo za ostale stanice For x As Integer = 1 To 4 arrStanica(x) = arrStanica(x - 1) - arrZbirKolona(x) + arrZbirRedova(x) Next ListBox1.Items.Clear()

'ispisujemo elemente matrice u listbox For a = 0 To 4 For b = 0 To 4 If ListBox1.Items.Count = a Then ListBox1.Items.Add(arrMatrica(a, b)) Else ListBox1.Items(a) = ListBox1.Items(a) & " " & arrMatrica(a, b) End If Next Next

'dodajemo i broj putnika po stanicama na listu For a = 0 To ListBox1.Items.Count - 1 ListBox1.Items(a) = ListBox1.Items(a) & " /" & arrStanica(a) Next 'dodijeljujemo najvecu vrijednost label kontroli za ispis 'funkcija imeMatrice.Max, vraca najveci element matrice lblRezultat.Text = "Najveci broj putnika je " & arrStanica.Max End Sub End Class Zakljuak je da je najvei broj putnika bio 38, tako da nam treba prevozno sredstvo koji ima barem 38 mjesta.

1.6. Bouble sort Sortirati niz koritenjem bouble sort algoritma.

Public Class Form1 Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load 'po ucitavanju programa, popunimo combobox brojevima

For index = 1 To 50 cmbBroj.Items.Add(index) Next End Sub Private Sub btnDodaj_Click(sender As System.Object, e As System.EventArgs) Handles btnDodaj.Click, cmbBroj.SelectedValueChanged 'kada kliknemo na dugme dodaj, dodamo broj. 'provjerimo da li je unesen broj If IsNumeric(cmbBroj.Text) Then lstRezultat.Items.Add(cmbBroj.Text) End If End Sub

Private Sub btnSortriraj_Click(sender As System.Object, e As System.EventArgs) Handles btnSortriraj.Click 'deklarisemo varijable Dim temp, x, y, intMaxIndex As Integer 'dimenzionisemo matricu koliko ima elemenata u listbox-u '-1, jer count daje broj elemenata, a ne max index Dim arrLista(lstRezultat.Items.Count - 1) As Integer

'dodijelimo vrijednosti iz listbox-a u matricu For index As Integer = 0 To lstRezultat.Items.Count - 1 arrLista(index) = lstRezultat.Items(index) Next

'funkcija ubound vraca najveci index dimenzije matrice, a ne broj elemenata 'za 3 elementa, vraca broj 2 intMaxIndex = UBound(arrLista)

'za 4 elementa y = 0 pa 1 pa 2 'brojac kojim odredjujemo da svaki put smanjimo broj parova koje usporedjujemo For y = 0 To intMaxIndex - 1 'usporedjujemo clan sa lijeve strane sa desnim 'ako je veci, mijenjaju mjesta '-y jer svaki put smanjujemo broj parova koje usporedjujemo 'za 4 elementa xMaxInd = 01,12,23; 01,12(y=1); 01 (y=2) For x = 0 To intMaxIndex - 1 - y If arrLista(x) > arrLista(x + 1) Then temp = arrLista(x) arrLista(x) = arrLista(x + 1) arrLista(x + 1) = temp End If

Next Next

'ispis u listbox lstRezultat.Items.Clear() For index = 0 To intMaxIndex lstRezultat.Items.Add(arrLista(index)) Next End Sub Private Sub btnObrnuto_Click(sender As System.Object, e As System.EventArgs) Handles btnObrnuto.Click 'kreiramo privremenu matricu. ovdje smo koristili tip object da bi smo mogli koristiti array copy ' koji zauzima puno memorije. 'odredimo velicinu matrice Dim temparray(lstRezultat.Items.Count - 1) As Object 'kopiramo sadrzaj listboxa u array lstRezultat.Items.CopyTo(temparray, 0) 'zamijenimo mjesta elementima Array.Reverse(temparray)

'dodamo u listbox lstRezultat.Items.Clear() lstRezultat.Items.AddRange(temparray) End Sub Private Sub btnObrisiListu_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnObrisiListu.Click lstRezultat.Items.Clear() End Sub End Class

1.7. Podijeliti dva broja na odreeni broj decimala Nainiti program koji dijeli dva broja na zadani broj decimala.

Public Class Form1 Private Sub btnIzracunaj_Click(sender As System.Object, e As System.EventArgs) Handles btnIzracunaj.Click 'deklarisemo tip promjenjivih Dim intPrvi, intDrugi, intBrojDecimala, intBrojac, intRezultat As Integer

'provjera unesnih vrijednosti If Not IsNumeric(txtPrviBroj.Text) Or Not IsNumeric(txtDrugiBroj.Text) Then MsgBox("Molim unesite brojeve") Exit Sub End If If txtDrugiBroj.Text = 0 Then MsgBox("Dijeljenje sa nulom nema smisla") Exit Sub End If 'dodjela vrijednosti promjenjivim intPrvi = Int(txtPrviBroj.Text) intDrugi = Int(txtDrugiBroj.Text) intBrojDecimala = Int(txtBrojDecimala.Text) 'podijelimo prvi sa drugim 'cijelobrojnu vrijednost dodamo u rezultat txtRezultat.Text = intPrvi \ intDrugi & "," 'izracunamo ostatak kod dijeljenja prvog sa drugim intRezultat = intPrvi Mod intDrugi 'petlja se ponavlja dok rezultat dijeljenja ne bude 0, ili dok ne dodjemo do broja decimala Do Until intRezultat = 0 Or intBrojac = intBrojDecimala

'smjestamo ostatak dijeljenja u varijablu intRezultat intRezultat = intPrvi Mod intDrugi 'ostatku dopisemo 0 i podijelimo sa drugim 'ovo postaje prvi broj intPrvi = intRezultat * 10 'potreban nam je cjelobrojni ostatak '20/7 = 3 (2.85), 20\7 = 2. moze i int(20/7) 'dodamo rezultat u listu txtRezultat.Text = txtRezultat.Text & intPrvi \ intDrugi 'povecamo brojac decimala za 1 intBrojac = intBrojac + 1 'uslov za izlazak iz liste je ili da je re Loop End Sub End Class Rezultat se dodaje u tekst box.

1.8. Pronai najvei i najmanji lan niza

Public Class Form1 Private Sub btnUnesi_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnUnesi.Click 'deklarisemo varijable Dim intBrojClanova, index As Integer

'trazimo od korisnika da unese broj clanova intBrojClanova = InputBox("Unesite broj clanova niza")

'kreiramo matricu velicine broj clanova koji nam treba '-1 zato sto index clanova krece od 0 Dim arrNiz(intBrojClanova - 1) As Integer 'pripremimo listbox za upotrebu ListBox1.Items.Clear() 'unosimo clanove For index = 1 To intBrojClanova arrNiz(index - 1) = InputBox("Unesite " & index & ". clan") ListBox1.Items.Add(arrNiz(index - 1)) Next 'deklarisemo promjenjive za index najveceg i najmanjeg broja Dim intMaxIndex, intMinIndex As Integer 'dodijelimo im vrijednosti intMaxIndex = 0 intMinIndex = 0 'usporedjujemo svaki clan niza sa najmanjim. ako je clan manji od najmanjeg, index trenutnog clana, postaje index najmanjeg clana

'isto radimo i za najveci clan 'getupperbound(0) nam vraca najveci index u matrici. (da bi smo saznali do kojeg indexa elementa matrice da idemo) '0 oznacava dimenziju. 0 je prva dimenzija. For index = 0 To arrNiz.GetUpperBound(0) If arrNiz(index) < arrNiz(intMinIndex) Then intMinIndex = index End If If arrNiz(index) > arrNiz(intMaxIndex) Then intMaxIndex = index End If Next txtNajmanji.Text = arrNiz(intMinIndex) txtNajveci.Text = arrNiz(intMaxIndex) End Sub End Class Program koristi matricu za skladitenje podataka. Provjerava koji je broj manji, i njemu daje index najmanjeg. Slinios se ra di i za pronalaenje najveeg broja.

1.9. Pronai najvei zajedniki djelilac Nainiti program koji ispisuje najvei zajednici djelilac dva broja. Najvei zajedniki djelilac je broj sa kojim moemo da podijelimo oba broja bez ostatka. Odnosno najvei broj c, taka v da a/c i b/c ne daje ostatak

Public Class Form1 Private Sub btnIzracunaj_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnIzracunaj.Click 'deklarisemo promjenjive Dim intPrvi, intDrugi, intRezultat As Integer 'da li su uneseni brojevi If Not IsNumeric(txtPrvi.Text) Or Not IsNumeric(txtDrugi.Text) Then MsgBox("Molim unesite brojeve vece od 0") Exit Sub End If 'da li su uneseni brojevi veci od 0 If txtPrvi.Text <= 0 Or txtDrugi.Text <= 0 Then MsgBox("Molim unesite brojeve vece od 0") Exit Sub End If 'dodijelimo vrijednosti promjenjivim intPrvi = txtPrvi.Text intDrugi = txtDrugi.Text txtRezultat.Text = "" 'KORAK 1. Podeliti m sa n i ostatak zapamtiti u r 'KORAK 2. Ukoliko je r jednako 0, NZD je n i KRAJ, u suprotnom prelazimo na KORAK 3

'KORAK 3. Zameniti m sa n, n sa r, i prei na KORAK 1

Do 'KORAK 1. Podeliti m sa n i ostatak zapamtiti u r intRezultat = intPrvi Mod intDrugi 'zamijeniti prvi sa drugim, a drugi sa rezultatom 'buduci da nam prvi vise ne treba, a drugi prima vrijednost rezultata, 'mozemo direktno da dodijelimo vrijednosti intPrvi = intDrugi intDrugi = intRezultat Loop Until intRezultat = 0

'rezultat je u prvom, buduci da su prvi i drugi vec zamijenili mjesta txtRezultat.Text = intPrvi

End Sub

End Class

Za izraunavanje najveeg zajednikog delioca koristi se Euklidov algoritam 1. 2. 3. Podeliti m sa n i ostatak zapamtiti u r Ukoliko je r jednako 0, NZD je n i KRAJ, u suprotnom prelazimo na KORAK 3 Zameniti m sa n, n sa r, i prei na KORAK 1 1

(Avramovic)

1.10. Pronai najmanji zajedniki sadrilac Nainiti program koji pronalazi najmanji zajedniki sadrilac.

Prvi nain je da pronaemo broj sa kojim se prvi moe podijeliti bez ostatka, a zatim provjerimo da li se i drugi broj moe podijeliti sa njim bez ostatka. Drugi nain je da koristimo Euklidov algoritam, kao dio formule za pronalaenje najveeg zajednikog djelioca. Formula je

Public Class Form1 Private Sub btnIzracunaj_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnIzracunaj.Click 'deklarisemo tip varijabli Dim a, b, temp, i As Integer 'pripremimo polje txtRezultat za unos txtRezultat.Text = "" 'provjerimo da li su uneseni brojevi If Not IsNumeric(a) Or Not IsNumeric(b) Then MsgBox("Molimo unesite brojeve vece ili jednake 0") Exit Sub End If 'provjerimo da li su uneseni brojevi veci od nule If a < 0 Or b < 0 Then

MsgBox("Molimo unesite brojeve vece ili jednake 0") Exit Sub End If 'dodijelimo vrijednosti promjenjivim a = txtPrvi.Text b = txtDrugi.Text

If a = 0 Or b = 0 Then txtRezultat.Text = 0 MsgBox("Po definiciji, ako je a ili b = 0, nzs je 0") Exit Sub End If

'ako je b > a, mijenjaju mjesta If b > a Then temp = a a = b b = temp End If '" () " 'npr za 3 i 5 = 15

'provjeravamo da li je a djeljivo sa nekim brojem bez ostatka 'ako jeste, provjeravamo da li je b djeljivo sa istim brojem bez ostatka For i = a To a * b If i Mod a = 0 Then If i Mod b = 0 Then txtRezultat.Text = i 'ispisujemo rezultat i izlazimo iz petlje Exit For End If End If Next End Sub

Private Sub btnIzracunajuzNZD_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnIzracunajuzNZD.Click 'deklarisemo tip varijabli Dim a, b As Integer 'pripremimo polje txtRezultat za unos txtRezultat.Text = "" 'provjerimo da li su uneseni brojevi If Not IsNumeric(a) Or Not IsNumeric(b) Then MsgBox("Molimo unesite brojeve vece ili jednake 0") Exit Sub End If

'provjerimo da li su uneseni brojevi veci od nule If a < 0 Or b < 0 Then MsgBox("Molimo unesite brojeve vece ili jednake 0") Exit Sub End If 'dodijelimo vrijednosti promjenjivim a = txtPrvi.Text b = txtDrugi.Text If a = 0 Or b = 0 Then txtRezultat.Text = 0 MsgBox("Po definiciji, ako je a ili b = 0, nzs je 0") Exit Sub End If 'ispisemo rezultat, koristeci funkciju nzd. 'po definiciji formule, u nazivniku se koristi apsolutna vrijednost proizvoda dva clana txtRezultat.Text = Math.Abs(a * b) / nzd(a, b) End Sub End Class Private Function nzd(ByVal intPrvi As Integer, ByVal intDrugi As Integer) As Integer 'deklarisemo varijable Dim intRezultat As Integer

'KORAK 1. Podeliti m sa n i ostatak zapamtiti u r 'KORAK 2. Ukoliko je r jednako 0, NZD je n i KRAJ, u suprotnom prelazimo na KORAK 3 'KORAK 3. Zameniti m sa n, n sa r, i prei na KORAK 1 Do intRezultat = intPrvi Mod intDrugi intPrvi = intDrugi intDrugi = intRezultat Loop Until intRezultat = 0 Return intPrvi End Function

1.11. Ispisati brojeve Fibbonacijevog niza Nainiti broj koji ispisuje brojeve Fibonaccijevog niza.

Public Class Form1

Private Sub btnIzracunaj_Click(sender As System.Object, e As System.EventArgs) Handles btnIzracunaj.Click 'deklarisemo tip varijabli 'decimal moze da ispise vrijednosti do 10^28, ali zauzima puno memorije, 16 byta 'matrica sa 100 clanova Dim a(99) As Decimal 'prva dva clana niza su 0 i 1 a(0) = 0 a(1) = 1 'pripremimo listbox, i dodamo prva dva clana ListBox1.Items.Clear() ListBox1.Items.Add(a(0)) ListBox1.Items.Add(a(1)) 'petlja se izvrsava od 2 do 99 'racunamo clanove od 3. to 100., odnosno sa indeksom od 2 do 99 For i = 2 To 99 'clan 3 je jednak zbiru clanova 1 i 2, odnosno a = (a - 1) + (a - 2) a(i) = a(i - 1) + a(i - 2) 'dodamo u listbox ListBox1.Items.Add(a(i)) Next 'ispisemo broj clanova, i broj cifara najveceg clana

Label1.Text = ListBox1.Items.Count & " clanova, " & ListBox1.Items(ListBox1.Items.Count - 1).ToString.Length & " cifre." End Sub End Class Koriten je tip varijable decimal, koji moze da ispise vrijednosti do 10^28, ali zauzima puno memorije, 16 b ajta.

1.12. Pronai aritmetiku, geometrijsku i harmonijsku sredinu Nainiti program koji ispisuje aritmetiku, geometrijsku i harmonijsku sredinu. Aritmetika sredina je

Geometrijska sredina je: Uz napomenu da se 2. korijen is broja a moe napisati kao a 1/2 .

Harmonijska sredina je

Public Class Form1

Private Sub btnDodaj_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnDodaj.Click 'dodajemo brojeve iz textboxa u listbox, ako su brojevi a ne slova If IsNumeric(txtUlaz.Text) Then lstUlaz.Items.Add(txtUlaz.Text)

End If End Sub Private Sub btnIzracunaj_Click(sender As System.Object, e As System.EventArgs) Handles btnIzracunaj.Click 'deklarisemo tip promjenjivih Dim intZbir, intProizvod As Integer 'zbir reciprocnih vrijednosti elemenata Dim dblRecZbir As Double 'racunamo zvir clanova za aritmeticku sredinu For x = 0 To lstUlaz.Items.Count - 1 intZbir = intZbir + lstUlaz.Items(x) Next 'dodijeljujemo varijabli intProizvod neutralnu vrijednost za mnozenje intProizvod = 1 'racunamo proizvod clanova, potreban za geometrijsku sredinu For x = 0 To lstUlaz.Items.Count - 1 intProizvod = intProizvod * lstUlaz.Items(x) Next 'racunamo zbir reciprocnih vrijednosti elemenata, zaharmonijsku sredinu For x = 0 To lstUlaz.Items.Count - 1 dblRecZbir = dblRecZbir + (1 / lstUlaz.Items(x)) Next

'a sredina x1+x2+x3 / 3 'g sredina: 3 clana = '(x1*x2*x3) ^ (1 /3) 'h sredina: 3 / (1/prvi + 1/drugi+ 1/treci) 'ispisujemo rezultate lstIzlaz.Items.Clear() lstIzlaz.Items.Add("Zbir clanova: " & intZbir) lstIzlaz.Items.Add("Aritmeticka sredina: " & Math.Round(intZbir / lstUlaz.Items.Count, 3)) lstIzlaz.Items.Add("Geometrijska sredina: " & Math.Round(intProizvod ^ (1 / lstUlaz.Items.Count), 3)) lstIzlaz.Items.Add("Harmonijska sredina: " & Math.Round(lstUlaz.Items.Count / dblRecZbir, 3))

End Sub Private Sub btnIzbrisi_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnIzbrisi.Click 'brisemo sadrzaj ulaznih elemenata txtUlaz.Clear() lstUlaz.Items.Clear() lstIzlaz.Items.Clear() End Sub End Class

1.13. Pronai prvi manji lan od harmonijske sredine Nainiti program koji za niz brojeva pronalazi prvi manji lan od harmonijske sredine. Harmonijska sredina je .

Public Class Form1 Private Sub btnDodaj_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnDodaj.Click 'provjeravamo da li je unesen broj 'dodajemo ga u listbox If IsNumeric(txtUlaz.Text) Then ListBox1.Items.Add(txtUlaz.Text) End If End Sub

Private Sub btnPronadji_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnPronadji.Click 'deklarisemo matricu i promjenjive 'matricu deklarisemo da ima isti broj elemenata kao i listbox Dim arrNiz(ListBox1.Items.Count - 1) As Integer 'deklarisemo ostale promjenjive Dim x, y, temp As Integer

'unosimo elemente is listboxa u matricu For index = 0 To ListBox1.Items.Count - 1

arrNiz(index) = ListBox1.Items(index) Next 'deklarisemo varijable za harmonijsku sredinu 'za rezultat i zbir reciprocnih vrijednosti elemenata Dim dblHarSre, dblRecZbir As Double

'racunanje harmonijske sredine 'za svaku vrijednost niza, racunamo zbir reciprocnih vrijednosti elemenata 'koristimo for each , koja prolazi kroz sve vrijednosti matrice For Each item As Double In arrNiz dblRecZbir = dblRecZbir + (1 / item) Next 'broj clanova niza / zbir reciprocnih vrijednosti elemenata 'get length(0) sadrzi duzinu prve dimenzije, odnosno broj clanova dblHarSre = arrNiz.GetLength(0) / dblRecZbir 'potrebno nam je da sortiramo niz opadajuci 'GetUpperBound(0) = max index For y = 0 To arrNiz.GetUpperBound(0) - 1 For x = 0 To arrNiz.GetUpperBound(0) - 1 - y If arrNiz(x) < arrNiz(x + 1) Then temp = arrNiz(x) arrNiz(x) = arrNiz(x + 1)

arrNiz(x + 1) = temp End If Next Next 'dodamo sortirani niz u listbox ListBox1.Items.Clear() For Each item In arrNiz ListBox1.Items.Add(item) Next 'trazimo 1 manji clan niza od harmonijske sredine For Each item In arrNiz If item < dblHarSre Then 'ispisujemo harmonijsku sredinu, i clan 'zaokruzujemo na 3 decimalna mjesta koristeci math.round funkciju. broj 3 oznacava broj decimala lblRezultat.Text = "Prvi manji broj od harmonijske sredine (" & Math.Round(dblHarSre, 3) & ") je: " & item 'izlazimo iz for petlje, jer ne zelimo ispisati ako ima jos clanova manjih od harmonijske sredine Exit For End If Next End Sub End Class

1.14. Ispisati n prostih brojeva Nainiti program koji ispisuje n prostih brojeva. Broj je prost ako je djeljiv samo sa 1 i sa samim sobom.

Public Class Form1 Private Sub btnIzracunaj_Click(sender As System.Object, e As System.EventArgs) Handles btnIzracunaj.Click 'provjera da li je unesen odgovarajuci broj If Not IsNumeric(txtUkupnoBrojeva.Text) Then MsgBox("Molim unesite broj veci od 0") Exit Sub End If 'da li su broj veci od 0 If txtUkupnoBrojeva.Text <= 0 Then MsgBox("Molim unesite broj veci od 0") Exit Sub End If

'deklarisemo varijable broja i index kao cjelobrojne promjenjive. Dim index As Integer 'dodijelimo pocetne vrijednosti promjenjivima index = 1 'obrisemo sve stavke iz listboxa.

ListBox1.Items.Clear()

'izvrsavamo program u petlji dok ne izracunamo zadani broj rezultata Do Until ListBox1.Items.Count = txtUkupnoBrojeva.Text 'ako funkcija prost vrati true, broj dodajemo u listu prostih brojeva If Prost(index) Then ListBox1.Items.Add(index) End If 'provjeravamo sljedeci broj index = index + 1 Loop End Sub Private Function Prost(ByVal broj As Integer) As Boolean Dim i, max As Integer 'broj 1 nije prost broj If broj = 1 Then 'return vraca vrijednost i izlazi iz funkcije Return False End If 'ako je broj veci od 2 i paran, nije prost If broj Mod 2 = 0 And broj > 2 Then

'return vraca vrijednost i izlazi iz funkcije Return False End If 'izracunamo korijen iz broja za koji provjeravamo da li je prost max = Math.Sqrt(broj) 'provjeravamo za sve brojeve da li su djeljivi bez ostatka, sa brojevima manjim od 'zadanog broja. ako je tacno, zadani broj nije prost. For i = 2 To max If broj Mod i = 0 Then Return False End If Next

'Ako je prosao test, broj je prost. 'vracamo se u glavni program. Return True End Function

End Class

1.15. Prikazati histogramom generator sluajnih brojeva Nainiti progam koji prikazuje generator sluajnih brojeva za 1000 generisanih brojeva. Rezultat prikazati histogramom.

Public Class Form1 Private Sub btnIspisi_Click(sender As System.Object, e As System.EventArgs) Handles btnIspisi.Click 'deklarisemo promjenjive Dim intNumber As Integer Dim rndDouble As Double

'pripremimo listobx za koristenje lstGraph.Items.Clear() 'oznacimo brojeve od 1-10 na histogramu For index = 1 To 10 If index < 10 Then 'dodamo razmak ako je broj manji od 10, da bi bilo poravnano lstGraph.Items.Add(" " & index & "| ") Else 'ako ne, samo dodamo broj lstGraph.Items.Add(index & "| ") End If Next 'randomize, da bi smo dobili svaki put razlicite brojeve Randomize() 'kreiramo rnd brojeve For index = 1 To 1000 rndDouble = Rnd() 'Koristimo int() da bi smo dobili vrijednosti 0 1 2 ... 9 'Komanda Cint() zaokruzuje 9.8 na 10. 'int() uzima samo cijele vrijednosti 'dodajemo 1 jer nam trebaju 1 2 3 ... 10 intNumber = Int(rndDouble * 10) + 1 'dodamo vrijednosti na dijagram. po jednu liniju za svaki put kada se broj pojavi

lstGraph.Items(intNumber - 1) = lstGraph.Items(intNumber - 1) & "|" Next

'prebrojimo vrijednosti, -4 za oznake. Upisemo vrijednosti na histogram. For index = 0 To 9 'ove vrijednosti se mogu smjestiti u matricu, ako su nam potrebni za kasnije 'dim arrListaBrojeva(0 to 9) as Integer , van petlje 'arrListaBrojeva(index) = lstGraph.Items(index).ToString.Length - 4 'upisemo brojcane vrijednosti na histogram lstGraph.Items(index) = lstGraph.Items(index) & lstGraph.Items(index).ToString.Length - 4 Next End Sub End Class Program koristi listobox element za histogram. Pored svakog broja je ispisan i broj generisanih brojeva.

1.16. Ispisati proste brojeve izmeu m i n Nainiti program koji ispisuje proste brojeve izmeu m i n.

Public Class Form1

Private Sub btnIzracunaj_Click(sender As System.Object, e As System.EventArgs) Handles btnIzracunaj.Click 'da li su uneseni brojevi If Not IsNumeric(txtOd.Text) Or Not IsNumeric(txtDo.Text) Then MsgBox("Molim unesite brojeve vece od 0") Exit Sub End If 'da li su uneseni brojevi veci od 0 If txtOd.Text <= 0 Or txtDo.Text <= 0 Then MsgBox("Molim unesite brojeve vece od 0") Exit Sub End If 'obrisemo sve stavke iz listboxa. ListBox1.Items.Clear() 'izvrsavamo program u petlji dok ne izracunamo proste brojeve u zadanom rasponu For index = CInt(txtOd.Text) To CInt(txtDo.Text) If Prost(index) Then ListBox1.Items.Add(index) End If Next End Sub

Private Function Prost(ByVal broj As Integer) As Boolean Dim i, max As Integer 'broj 1 nije prost broj If broj = 1 Then 'return vraca vrijednost i izlazi iz funkcije Return False End If 'ako je broj veci od 2 i paran, nije prost If broj Mod 2 = 0 And broj > 2 Then 'return vraca vrijednost i izlazi iz funkcije Return False End If 'izracunamo korijen iz broja za koji provjeravamo da li je prost max = Math.Sqrt(broj) 'provjeravamo za sve brojeve da li su djeljivi bez ostatka, sa brojevima manjim od 'zadanog broja. ako jesu, zadani broj nije prost. For i = 2 To max If broj Mod i = 0 Then Return False End If Next

'Ako je prosao test, broj je prost. 'vracamo se u glavni program. Return True

End Function

End Class

1.17. Ispisati djelioce broja Nainiti program koji ispisuje sve djelioce broja.

Public Class Form1

Private Sub btnIspisi_Click(sender As System.Object, e As System.EventArgs) Handles btnIspisi.Click 'deklarisemo varijablu kao tip integer Dim intBroj As Integer 'provjeravamo da li je unesen broj If Not IsNumeric(txtBroj.Text) Then MessageBox.Show("Morate unijeti broj veci od 0") Exit Sub End If 'provjeravamo da li je unesen broj veci od 0 If txtBroj.Text <= 0 Then MsgBox("Morate unijeti broj veci od 0") Exit Sub End If 'brisemo sadrzaj list boxa od prijasnjih unosa lstListaBrojeva.Items.Clear()

'dodijeljujemo vrijednost promjenjivoj dblBroj iz sadrzaja txtBroja intBroj = txtBroj.Text 'svaki broj je djeljiv sa 1 lstListaBrojeva.Items.Add(1)

'ako broj podijeljen sa drugim, manjim, brojem nema ostatka, dodajemo ga u listu 'krecemo od 2 For index = 2 To intBroj / 2 If intBroj Mod index = 0 Then lstListaBrojeva.Items.Add(index) End If Next End Sub End Class

1.18. Ispisati savrene brojeve Nainiti program koji ispisuje savreene brojeve. Broj je savrsen ako je jednak zbiru svojih djelilaca. Koriste se dva naina: pronalazimo djelioce broja saberemo ih, u uporedimo sa zadanim brojem. Ako je rezultat jednak zadanom broju, broj je savren. Euklid je dokazao da je 2 (p1) * ( 2(p) 1) paran savrsen broj, ako je 2 (p) 1 prost broj Da bi 2 (p) 1 bio prost, p mora biti prost broj. Prva cetiri broja izracunata formulom 2 (p1) * (2 (p) 1): (p je prost broj): za p = 2: 2^1 * (2^2 1) = 6 za p = 3: 2^2 * (2^3 1) = 28 za p = 5: 2^4 * (2^5 1) = 496 za p = 7: 2^6 * (2^7 1) = 8128. Drugi metod je mnogo bri. Napomena: potrebno je obratiti panju na veliinu brojeva, pri izraunavanju.

Public Class Form1 Private Sub btnIzracunaj_Click(sender As System.Object, e As System.EventArgs) Handles btnIzracunaj.Click 'deklaracija tipa promjenjivih Dim intBroj As Integer 'naci savrsen broj manji od milijardu For intBroj = 1 To 1000000000 'pozivamo funkciju savrsen sa parametrom broja koji provjeravamo If Savrsen(intBroj) Then 'ako funkcija vrati true, prikazujemo broj

'ako odaberemo cancel, program izlazi iz podrutine If MsgBox(intBroj, MsgBoxStyle.OkCancel) = 2 Then Exit Sub End If End If Next

End Sub Private Function Savrsen(intBroj As Integer) As Boolean 'deklaracija promjenjivih Dim IntZbir, x As Integer 'trazimo djelioce broja For x = 1 To intBroj / 2 If intBroj Mod x = 0 Then 'saberemo ih IntZbir = IntZbir + x End If Next 'broj je savrsen ako je jednak zbiru svojih djelilaca If intBroj = IntZbir Then Return True

Else Return False End If End Function

Private Sub btnIzracunaj2_Click(sender As System.Object, e As System.EventArgs) Handles btnIzracunaj2.Click 'Euklid je dokazao da je 2^(p1) * ( 2^(p) 1) paran savrsen broj, ako je 2^(p) 1 prost broj (Euclid, Prop. IX.36). 'Da bi 2^(p) 1 bio prost, p mora biti prost broj. 'Prva cetiri broja izracunata formulom 2^(p1) * (2^(p) 1): '(p je prost broj) 'za 'za 'za 'za p p p p = = = = 2: 3: 5: 7: 2^1 2^2 2^4 2^6 * * * * (2^2 (2^3 (2^5 (2^7 1) 1) 1) 1) = = = = 6 28 496 8128.

'deklarisanje promjenjivih Dim rezultat, i, prost2 As Decimal 'petlja za prvih 100 brojeva For i = 1 To 100 'ako je broj prost

If prost(i) Then 'ako je rezultat formule veci od najveceg decimalnog, prijavljujemo gresku, i izlazimo iz programa. If 2 ^ i - 1 > 79228162514264337593543950335D Then MsgBox("prevelik broj" & " " & 2 ^ i - 1 & " " & i) Exit Sub End If 'izracunavamo formulu prost2 = 2 ^ i - 1 'ako je i ovo prost broj, ispisujemo rezultat. napomena: rezultat ne vazi za 11, zato moramo provjeriti If prost(prost2) Then rezultat = 2 ^ (i - 1) * (2 ^ i - 1) 'ako odaberemo cancel, program izlazi iz podrutine If MsgBox("savrsen broj: " & rezultat & ", broj cifara: " & rezultat.ToString.Length & ", prost broj: " & i, MsgBoxStyle.OkCancel) = 2 Then Exit Sub End If End If End If

Next End Sub

Private Function prost(ByVal intBroj As Decimal) As Boolean 'deklaracija promjenjivih Dim x As Decimal 'provjera da li je broj prost If intBroj = 1 Then Return False End If If intBroj = 2 Then Return True End If 'provjeravamo do korijena zadanog broja For x = 2 To Math.Sqrt(intBroj) 'ako je djeljiv sa nekim drugim brojem, nije prost. If intBroj Mod x = 0 Then Return False End If Next Return True End Function End Class

1.19. Iscrtati krug unutar kvadrata U kvadrat smjeten u severozapadnom uglu ekrana, ucrtati krug upola manje povrine.

Public Class Form1 Private Sub btnIscrtaj_Click(sender As System.Object, e As System.EventArgs) Handles btnIscrtaj.Click 'deklarisemo kanvas kao tip bitmap Dim kanvas As Bitmap 'dodijelimo joj pocetnu vrijednost kanvas = New Bitmap(PictureBox1.Width, PictureBox1.Height) 'deklarisemo varijablu grafika kao graphics/kazemo da cemo raditi sa graphics tipom crtanja Dim grafika As Graphics 'kazemo da cemo crtati na kanvas kontroli grafika = Graphics.FromImage(kanvas) 'u kvadrat ucrtati krug upola manje povrsine Dim stranaKvadrata, povrsinaKvadrata As Integer stranaKvadrata = txtStranaKvadrata.Text povrsinaKvadrata = stranaKvadrata * stranaKvadrata 'cratamo kvadrat strana 100 * 100

grafika.DrawRectangle(Pens.Black, 0, 0, stranaKvadrata, stranaKvadrata) 'povrsina kvadrata je 100 * 100 = 10000 'povrsina kruga je r^2 p, i mora biti 5000 (upola manja od povrsine kvadrata) 'r^2 * p = 5000 'znaci da je r = korijen iz (5000/p) Dim r As Double = Math.Sqrt((povrsinaKvadrata / 2) / Math.PI) 'ako krug ima radijus r, stranica kvadrata u koji je upisan je 2 *r Dim stranicaUnutrasnjegKvadrata As Double = r * 2 'crtamo elipsu 'ako je unutrasni kvadrat velicine 80, zaljepljen uz jednu stranu, to znaci da ostane 20 pixela sa strane. 100-80=20 'sto znaci da svake strane treba da ostane 10 pixela. (100-80)/2, ako hocemo da ga postavimo u sredinu grafika.DrawEllipse(Pens.Red, CInt((stranaKvadrata - stranicaUnutrasnjegKvadrata) / 2), CInt((stranaKvadrata - stranicaUnutrasnjegKvadrata) / 2), CInt(stranicaUnutrasnjegKvadrata), CInt(stranicaUnutrasnjegKvadrata)) 'prikazemo sliku u picturebox-u PictureBox1.Image = kanvas Label1.Text = ("Povrsina kvadrata = " & stranaKvadrata ^ 2) Label2.Text = ("Povrsina kruga = " & (r ^ 2) * Math.PI) End Sub End Class

1.20. Korijen iz e, koristei Tajlerov teorem Nainiti program za raunanje korijena iz e, koristei Tajlorov teorem, uz preciznost 0,00005.

Public Class Form1 Private Sub btnIzracunaj_Click(sender As System.Object, e As System.EventArgs) Handles btnIzracunaj.Click

'formula je e^x = 1 + x/1! + x^2/2! + ... x^n/n! 'trazi se e, kod odredjene preciznosti. 'x^n/n! mora biti manje od tacnosti 'deklarisanje promjenjivih Dim x, dblRezultat, dblTacnost, dblKolicnik As Double Dim n As Integer '2. korijen iz e sa moze napisati kao e ^ 1/2. x = 1/2 x = 1 / txtKorijen.Text

'dodijeljivanje vrijednosti promjenjivoj tacnost dblTacnost = txtTacnost.Text 'petlja se izvrsava dok kolicnik ne bude manji od tacnosti '0! =1 'x^0 = 1 Do dblKolicnik = (stepen(x, n) / faktorijel(n)) dblRezultat = dblRezultat + dblKolicnik n = n + 1 Loop Until dblKolicnik < dblTacnost 'ispisemo rezultat lblRezultat.Text = " Korijen iz e = " & dblRezultat

End Sub Private Function faktorijel(ByVal n As Integer) As Long 'deklarisanje varijabli i dodjela vrijednosti Dim lngRezultat As Long lngRezultat = 1 'racunamo faktorijel For index = 2 To n lngRezultat = lngRezultat * index Next 'vracamo rezultat Return lngRezultat End Function Private Function stepen(ByVal x As Double, ByVal n As Integer) As Double 'deklarisanje varijabli i dodjela vrijednosti 'x ^ n 'x moze biti i decimalna vrijednost, zato mora biti definisan kao double (0,5 ...) Dim dblRezultat As Double dblRezultat = 1 'racunamo stepen For index = 1 To n dblRezultat = dblRezultat * x Next

'vracamo rezultat Return dblRezultat End Function End Class

You might also like