visual basic - prezentacija - bojan djuric v1.1

Upload: ognjen-kostic

Post on 19-Oct-2015

59 views

Category:

Documents


4 download

TRANSCRIPT

  • 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 'liniju' matrice 'dodajemo razmak ako je broj manji od 10 If arrD(x, y) < 10 Then ln(x) = ln(x) & " " & " " & arrD(x, y) Else ln(x) = ln(x) & " " & arrD(x, y) End If Next Next 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 arrZbirRedova(4) As Integer Dim arrZbirKolona(4) As Integer Dim arrStanica(4) As Integer Dim 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 radi 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, takav 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
  • '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. Podeliti m sa n i ostatak zapamtiti u r 2. Ukoliko je r jednako 0, NZD je n i KRAJ, u suprotnom prelazimo na KORAK 3 3. Zameniti m sa n, n sa r, i prei na KORAK 1 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 bajta.

  • 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

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