|
[ ana4539 @ 02.05.2010. 23:27 ] @
| Treba da napravim matricu treceg reda gde svaka vrsta ima razlicite vrednosti,da izgleda ovako:

Znam da napravim ovako nesto :
Code: Dim mat(2, 2) As Double
Private Sub TextBox1_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TextBox1.TextChanged
End Sub
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Dim i, j, c As Double
c = 1
For i = 0 To 2
For j = 0 To 2
mat(i, j) = c
c += 1
TextBox1.Text += CStr(mat(i, j)) + vbTab
Next
TextBox1.Text += vbCrLf
Next
End Sub
(da na jedan klik ispisuje matricu (1,2,3,4,5,6,7,8,9), znam i da u matrici budu sve iste vrednosti , ali nikako mi ne uspeva da napravim da u prvoj vrsti pise 2,4 drugoj 9,1 trecoj 0,5. (ili nesto slicno)
ako moze mala pomoc bila bih jako zahvalna. |
[ Shadowed @ 03.05.2010. 01:10 ] @
Pa, moglo bi npr. ovako (uz minimalne modifikacije):
Code (vbnet):
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Dim i, j, c As Double
Dim vals() As Double = {2.4, 9.1, 0.5}
c = 1
For i = 0 To 2
For j = 0 To 2
mat(i, j) = c
c += vals(i)
TextBox1.Text += CStr(mat(i, j)) + vbTab
Next
TextBox1.Text += vbCrLf
Next
End Sub
[ ana4539 @ 03.05.2010. 01:50 ] @
Hvaala,prepravila sam ovako : :)
Code:
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Dim i, j, c As Double
Dim vals() As Double = {2.4, 9.1, 0.5}
For i = 0 To 2
For j = 0 To 2
c = vals(i)
mat(i, j) = c
TextBox1.Text += Str(mat(i, j)) + vbTab
Next
TextBox1.Text += vbCrLf
Next
End Sub
End Class
Samo sto mi u trecoj vrsti umesto "0.5" pise samo ".5 " jel' to nema veze ako recimo hocu da saberem dijagonalu i moze li uopste da pise 0.5?
[ Shadowed @ 03.05.2010. 10:24 ] @
Probaj da umesto Str funkcije koristis mat(i, j).ToString(). Ako nece tako, onda dodaj parametar za format stringa. Nisam siguran kako ide tacno, ali mozes videti u dokumentaciji.
Inace, bolje ti je da koristis .ToString() i inace, jer je to standardna .NET funkcija dok je Str() specificna za vb.net.
[ lonelyrider_44 @ 03.05.2010. 10:36 ] @
U C# moze ovako:
double.ToString("0.00"); //ako hocesh dve decimale
tako da pretpostavljam da bi trebalo da radi ako napishesh ovako:
mat(i,j).ToString("0.0");//ili koliko vec budesh htela decimalnih mesta.
--
Using Opera's revolutionary e-mail client: http://www.opera.com/mail/
[ ana4539 @ 03.05.2010. 12:06 ] @
Hvala probacu.
Sad imam jos jedan problem, napravila sam da se na klik dugmeta racuna suma svih elemenata prve vrste,to izgleda ovako i radi:
Code:
Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button3.Click
Dim i, j, sumavrsta1 As Double
For i = 0 To 2
For j = 0 To 2
If i + j = j Then
sumavrsta1 += mat(i, j)
End If
Next
Next
TextBox1.Text = Str(sumavrsta1)
Ali hocu da napravim da se umesto ovoga poziva takva funkcija na klik dugmeta,napravila sam u modulu ovako: (ali ne radi)
Code:
Module Module1
Public mat(2, 2) As double
Public Function funsum(ByVal sumavrsta1 As Double)
Dim i, j As Double
For i = 0 To 2
For j = 0 To 2
If i + j = j Then
sumavrsta1 += mat(i, j)
End If
Next
Next
End Function
End Module
A u klik dogadjaju dugmeta ovako:
Code:
Private Sub Button4_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button4.Click
TextBox1.Text = Str(funsum(Val(TextBox1.Text)))
Zbunjuje je me kada pravim funkciju u modulu sto imam vise promenljivih i ByVal, pa ne znam gde gresim, da li pogresno postavljam promenljive u funkciji ili gresim u klik dogadaju,sve sam kombinacije probala i nikako da proradi.
[ lonelyrider_44 @ 03.05.2010. 12:30 ] @
Verovatno bi bilo bolje da ti odgovori neko ko radi u vb.net-u, ali i mene
je zanimalo kako se to radi, pa sam malo pogledao i evo kako mislim da
treba. Naime, f-ja ima povratnu vrednost i nju deklarises van zagrada, a
ne treba joj nijedan parametar ako uvek radi sumu prve vrste. I da bi tu
vrednost koju si izracunala (sumvrsta1) vratila pozivas Return (vrednost)
Code (vbnet):
Module Module1
Public mat(2, 2) As double
Public Function funsum() As Double
Dim i, j As Double
For j = 0 To 2
sumavrsta1 += mat(0, j)
Next
Return(sumavrsta1)
End Function
End Module
A ako bi htela da f-ja radi sumu za vrstu koju joj ti kazesh, onda ce
imati parametar redni broj vrste
Code (vbnet):
Module Module1
Public mat(2, 2) As double
Public Function funsum(ByVal rbVrste as Integer) As Double
Dim i, j As Double
For j = 0 To 2
sumavrsta1 += mat(rbVrste, j)
Next
Return(sumavrsta1)
End Function
End Module
Code (vbnet):
Private Sub Button4_Click(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles Button4.Click
TextBox1.Text = funsum().ToString()
'ili TextBox1.Text = funsum(1).ToString() // recimo
Nadam se da ce ti ovo pomoci.
--
Using Opera's revolutionary e-mail client: http://www.opera.com/mail/
[ lonelyrider_44 @ 03.05.2010. 13:09 ] @
Vidi ovo:
Code (vbnet):
Module Module1
Public mat(2, 2) As double
Public Sub subsumIspravno(ByRef sumavrsta1 As Double)
Dim i, j As Double
For j = 0 To 2
sumavrsta1 += mat(, j)
Next
End Sub
Public Sub subsumNeispravno(ByVal sumavrsta1 As Double)
Dim i, j As Double
For j = 0 To 2
sumavrsta1 += mat(, j)
Next
End Sub
End Module
Private Sub Button4_Click(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles Button4.Click
Dim c As Double
c = 0
subsumNeispravno(c)
'posle ovoga c je i dalje 0, jer u ovoj proceduri napravljena je kopija
vrednosti koja je upisana u sumavrsta1
subsumIspravno(c)
'poslata je adresa promenjive c i parametar sumavrsta1 ustvari
predstavlja promenljivu c,
' tj. ako menjash sumavrsta1 ustvari menjash c, i na tu adresu je
upisivan zbir svih elemenata
TextBox1.Text = c.ToString()
Kljucna stvar je da prosledish c ne po vrednosti, nego po adresi
(referenci - ByRef), jer ako prosledjujesh parametar po vrednosti(ByVal)
stvara se kopija vrednosti koju poshaljesh, na primeru koji si dala
sumavrsta1, i onda na nju dodajesh sve elemente prve vrste, ali ti ustvari
dodajesh na kopiju koja se napravila u f-ji, a ne na onaj original. Znaci
ako hocesh da posaljesh promenljivu kao parametar i da mozesh direktno da
joj menjash vrednost, morash da taj parametar bude prosledjen ByRef.
Znaci, moglo je i tako da se uradi, ali mislim da je bolje ona prva
verzija, sa f-jom a ne procedurom. Onaj tvoj nacin je bio negde izmedju,
jer si sumu upisivala u sumavrsta1 koja je parametar unutar f-je, a opet,
pri pozivu si je koristila kao f-ju a ne proceduru, tako da sam mislio da
bi ti koristilo i ovo.
--
Using Opera's revolutionary e-mail client: http://www.opera.com/mail/
[ ana4539 @ 03.05.2010. 13:09 ] @
edit, probam pa javljam.
[ ana4539 @ 03.05.2010. 13:23 ] @
Sta god da probam dobijem 0 kao rezultat.
[ lonelyrider_44 @ 03.05.2010. 13:23 ] @
Meni se sve chini da ti je prazna matrica. :) Po ovom zadnjem kodu koji si
okachila, mat je deklarisana iznad f-je, i ne vidim gde se popunjava.
Proveri da li upishesh u nju one vrednosti, i da li je to ista ona matrica
koju mi koristimo u f-ji funsum .
--
Using Opera's revolutionary e-mail client: http://www.opera.com/mail/
[ lonelyrider_44 @ 03.05.2010. 13:36 ] @
Ako mozesh okachi ceo projekat ili makar ceo kod te forme, to je
verovatno form1.vb ili kako se vec zove forma.
--
Using Opera's revolutionary e-mail client: http://www.opera.com/mail/
[ ana4539 @ 03.05.2010. 20:00 ] @
Sad sam obrisala onaj modul gde je bila funkcija za sumu elemenata vrste,ima jos jedan modul i u njemu je neka druga funkcija koja radi,
evo i projekat:
http://rapidshare.com/files/383138648/pp2.rar.html
[ lonelyrider_44 @ 03.05.2010. 21:06 ] @
Ta druga f-ja radi zato shto ne koristi matricu. Naime, matrica na koju se
pozivash u f-ji za sumu el. prve vrste, nije ista matrica koju si kreirala
na formi. Jedna je unutar klase form1, a druga unutar modula. F-ja iz
modula ne moze da pristupa matrici u klasi forme. Nema dometa. Matrica
definisana unutar klase vazi samo za tu klasu. Tako da jedina ispravka
koju treba da uradish jeste da kada pozivash funkciju za rachunanje sume
prve vrste, joj poshaljesh matricu kao parametar, da bi imala matricu za
koju rachuna prvu vrstu. :)
znachi, ovako neshto:
Code (vbnet):
Public Function funsum(ByVal mat(2,2) As Double) As Double
'ovde onaj kod koji si koristila u f-ji
End Function
I na kraju, kad pozivash f-ju, na neko dugme, pozvacesh je:
Code (vbnet):
textBox1.Text = funsum(mat).ToString() 'ili ono tvoje Str(funsum(mat)) :P
Sad nemam vishe vremena, pa ti bez provere ovo ostavljam da probash,
trebalo bi da radi. I ona f-ja shto si napisala, radila bi da nije bila u
odvojenom modulu. Slabo stojim sa VB-om pa nisam odmah znao(niti
razmishljao) da taj modul nije u istom fajlu. Mislim da je ovo bio jedini
problem. F-ja je rachunala prvu vrstu prazne matrice. Javi kako je proshlo.
--
Using Opera's revolutionary e-mail client: http://www.opera.com/mail/
[ ana4539 @ 03.05.2010. 23:12 ] @
Ok javljam ,sad sam nesto umorna pa mi ne ide, probacu sutra :)
Copyright (C) 2001-2025 by www.elitesecurity.org. All rights reserved.
|