[ c0de @ 01.03.2009. 23:33 ] @
Potrebno je prvo dimenzionisamt i,j,n kao broj... "n" cu da unosim a "i" i "j" ce da idu od 1 do "n".

Izgled matrice mora da bude ovakav.Na primer n=4 onda je matrica 4x4



Brojevi u celijama koje cine matricu se izvace slucajno pomocu RND(od 1 do 1000) i moraju da budu u ovakvom redosledu.



113 410 433 920
313 142 439 834
381 110 503 730
599 50 601 698

Sta primjecujete? (113,313,381,599) su neparni brojevi i idu od manje broja ka vecem.Kod (410,142,110,50) su svi parni i idu od viseg broja ka manjem.Znaci sljedeca kolona treba da bude sa neparnim brojevi pa sljedeca sa parnim.


Jel moze neko da mi pomogne oko ovog zadatka.Unaprijed zahvalan!
[ Jpeca @ 02.03.2009. 08:26 ] @
Za prvu pomoć.

Generisanje parnog broja mozes obaviti tako što generišeš slučajan broj k u opsegu 1..500 i onda pomnožiš sa 2.
Neparan broj možeš generisati tako što generiše slučajan broj k u opsegu 0..499 i onda dobiješ kao 2k+1.
Slučajan broj u opsegu lowerBound..upperBound dobiješ pomoću rnd funkcije

rndValue = CInt(Int((upperbound - lowerbound + 1) * Rnd() + lowerbound)) + 1

Posto generišeš niz za kolonu potrebno ga je soritirati. Kod za sortiranje niza mozes naci ovde:
http://www.xtremevbtalk.com/showthread.php?t=78889
Alternativa je da koristiš i excelov ugradjeni sort.
[ 3okc @ 02.03.2009. 10:38 ] @
Mala ispravka:
Citat:
Jpeca: Generisanje parnog broja mozes obaviti tako što generišeš slučajan broj k u opsegu 1..500 i onda pomnožiš sa 2.
Neparan broj možeš generisati tako što generiše slučajan broj k u opsegu 0..499 i onda dobiješ kao 2k+1.
Slučajan broj u opsegu lowerBound..upperBound dobiješ pomoću rnd funkcije


Neparan broj ne dobijaš generisanjem slučajnog iz neparnih granica, nego: isto kao i parni, pa mu onda oduzmeš 1. :)

Potrebno je "samo" implementirati pokretnu granicu za opseg generisanja. To znači i da će petlja morati da ima korak.
Najbolje je da korak bude veći od 1 i da sam sebe množi sa -1. Naravno, ovo treba raditi sa "invertovanjem" vrednosti za početnu i krajnju vrednost opsega iz kog se generišu slučajni brojevi.
[ c0de @ 02.03.2009. 11:14 ] @
Ama za parne i neparne brojeve mi nije problem,to znam.Ja radim na ovaj nacin.



Code:
If i / 2 = i \ 2 Then
    'Ako je ispunjen uslov onda je paran
Else
    'Neparan broj
End If


E sad ovo treba da se ubaci u FOR pa ako ne izvuce broj koji ja hocu da ponovi izvlacenje.Takodje mi je bitno da se brojevi Povecavaju dok nedodje do n.Kad su parni ide od veceg ka manjem a neparni od manjeg ka vecem broju.

[ Jpeca @ 02.03.2009. 14:24 ] @
Imaš dve petlje. Jednu po kolonama i drugu (unutrašnju) po redovima. Nakon što generišeš jednu kolonu sortiraš je. Efikasnije rešenje bilo bi da se umesto sortiranja koristi generisanje slučajnih brojeva većih (odnosno manjih) od prethodno generisanog u toj koloni, kao što predlaže 3okc, ali ne znam uslove zadatka - ukoliko je generisan slučajni broj na granici (npr 999 u neparnoj koloni) onda će i svi naredne vrednosti u toj koloni biti iste?!

U primeru matrica se upisuje na aktivnom listu od celije A1.

Code:

Sub GenMatrica()
' Generise matricu nxn za zadato n
' pod sledecim uslovima
' neparne kolone sadrze slucajno generisane neparne brojeve 1-999 u rastucem redosledu
' parne kolone sadrze slucajno generisane parne brojeve 2-1000 u opadajucem redosledu
Dim n As Integer, rw As Integer, cl As Integer
Dim rndValue As Integer
Dim sh As Worksheet

upperbound = 500
Set sh = ActiveSheet
n = InputBox("Unesi dimenziju matrice n:")

Randomize
Application.ScreenUpdating = False  ' ukida se osvezavanje ekrana

For cl = 1 To n
   ' Generisanje kolone
    For rw = 1 To n
        rndValue = Int(upperbound * Rnd + 1)
        sh.Cells(rw, cl).Value = 2 * rndValue - cl Mod 2
    Next rw
    'Sortiranje kolone
    If cl Mod 2 = 1 Then  ' neparna kolona
        sh.Range(sh.Cells(1, cl), sh.Cells(n, cl)).Sort _
           Key1:=sh.Cells(1, cl), Order1:=xlAscending, Header:=xlNo
    Else      ' parna kolona
        sh.Range(sh.Cells(1, cl), sh.Cells(n, cl)).Sort _
           Key1:=sh.Cells(1, cl), Order1:=xlDescending, Header:=xlNo
    End If
Next cl

Application.ScreenUpdating = True
End Sub


P.S.
Citat:
Neparan broj ne dobijaš generisanjem slučajnog iz neparnih granica, nego: isto kao i parni, pa mu onda oduzmeš 1. :)

Potpuno tačno, izgleda da sa godinama klikeri počinju da otkazuju :)


[Ovu poruku je menjao Jpeca dana 02.03.2009. u 16:08 GMT+1]