[ `and @ 14.11.2004. 22:28 ] @
Kako da napravim matricu ( dvodimenzionalnu ) a da joj pre toga nije odredjena velicina, korisnik treba da unese velicinu, a uz to jos i da matrica generise sve kombinacije brojeva ( koliko moze da stane u matricu ) od 0 - 255 ... any idea or help ... tnx
[ Milos Stojanovic @ 14.11.2004. 23:04 ] @
recimo matricu integera dimenzija n x m praviš dinamički
Code:
int i,j;
int *matrica;
matrica = (int*)malloc(sizeof(int)*n*m);
// a pristupas sa 
matrica[i][j];

A ovaj drugi deo nisam skapirao šta hoćeš?
[ Rapaic Rajko @ 15.11.2004. 08:03 ] @
Ovaj, ovo sto ti trazis je malo zesci problem. Alokacija je decja igra, ali pozivanje
Code:

  matrica[i][j];

...pa, heh, aj malo razmislimo; kolika je dimenzija matrice po 'i'...? I gde to pise? Kapiramo ili ne?
Elem, ja sam to svojevremeno radio u Delphi-ju (Pascal), i resenje je da napises klasu koja ti alocira memoriju kad joj das dimenzije. Zatim toj klasi sredis operator [] kako znas i umes, tako da dobijes zeljeni clan; ja sam u Delphi-ju pravio property (jasno, jer property ima getter i setter metode), ali sve ovo sam radio za dvodimenzionalni array. Pravi izazov je uraditi isto za proizvoljan broj dimenzija, i to je ono sto sam napisao u prvoj recenici ovog posta...

Rajko
[ vladab @ 15.11.2004. 08:18 ] @
Jel koristis C ili C++? Ako koristis C mozes da uradis na nacin na koji ti je rekao trooper, a ako koristis C++, mozes to da uradis pomocu sablona iz STL.
[ zvrba @ 15.11.2004. 08:23 ] @
Code:

#include <stdlib.h>

int **allocate_array(int m, int n)
{
  int **rows = malloc(m * sizeof(int*)), i;

  for(i = 0; i < n; i++)
    rows[i] = malloc(n * sizeof(int));
  return rows;
}


Dealokaciju napisi sam. Koristis ovako:
Code:

int **x = allocate_array(2, 5);
x[1][3] = 12;
[ Milos Stojanovic @ 15.11.2004. 13:04 ] @
uhhh, da. U pravu ste. zvrbin način je ispravan. Ne znam šta mi bi.
[ Dragi Tata @ 15.11.2004. 13:44 ] @
Citat:
vladab: a ako koristis C++, mozes to da uradis pomocu sablona iz STL.


Ili još bolje uBLAS ili neki stariji rođak.
[ Rapaic Rajko @ 16.11.2004. 07:21 ] @
E da, zaboravio sam na **; tako da matrica ispada prava decja igra; sorry na digresiji.

Rajko
[ Milos Stojanovic @ 16.11.2004. 14:29 ] @
Mada ako ne treba striktno matrica, možeš da koristiš niz i da uskladiš indexe, uštedećeš malo memorije i ubrzati(opet malo) vreme pristupa.
[ Riste Pejov @ 18.11.2004. 07:39 ] @
Ma i trooper-ov primer valja, ali sa malim promenama
Code:

int *matrica;
matrica = (int*)malloc(sizeof(int)*num_rows*num_cols);
// a pristupas sa
for(int i=0;i<num_rows;i++)
    for(int j=0;j<num_cols;j++) 
              cout<<"clan iz reda:"<<i<<" i kolone:"<<j<< " je :"<<matrica[i*n+j];

Posto u principu dvodimenzionalni matrix je num_rows puta duzine jednodimenzionalnog jednog.

Ako imamo matrix sa 3reda i 2 kolone onda to u memoriji izgleda 6 uzastopnih sizeof(whatever) polja:
Code:


matrica [1   2   3   4   5   6] 
         |   |   |   |   |   | 
        0,1 0,2  |   |   |   |
                1,1 1,2  |   |
                        2,1 2,2
[ `and @ 19.11.2004. 16:27 ] @
Evo prvi deo sam resio :


Code:

#include <stdlib.h>
#include <iostream.h>


int main()

{

int num_rows,num_cols;
int *matrica;
int n =0;

cin >> num_rows;
cin >> num_cols;

matrica = (int*)malloc(sizeof(int)*num_rows*num_cols);

for(int i=0;i < num_rows; i++)
    for(int j=0;j < num_cols; j++)
    {
    cin >> matrica[i*n+j];
    n++;
    }

int nn=0;

for(int ii=0;ii < num_rows; ii++)
     for(int jj=0;jj < num_cols; jj++)
     
     {     
     cout << "clan iz reda:" << ii << " i kolone:" << jj << " je :"<< matrica[ii*nn+jj];
     nn++;
     }

return 0;

}


tnx
[ Marko Stankovic @ 20.11.2004. 15:58 ] @
Jeste da zadatak radi i pomocu nacina koji si napisao, ali bar po meni taj nacin nije dovoljno elegantan. Koristeci nacin koji je zvrba naveo matrici se pristupa normalno sa matrica[x][y] sto je lepse i za oko i za tumacenje. U C-u su dozvoljene svakakve perverzije recimo umesto niz[x] mozemo da pisemo i x[niz] ali opet to ne radimo zato sto nije prakticno. Tako da 'and moja preporuka ti je da lepo stvoris dinamicku matricu kao u zvrbinom primeru. Mada koliko primecujem ti pises u C++ a koristis funkcije iz C-a za alociranje memorije, naravno one rade bez problema, ali u C++ postoji operator za alociranje memorije new i operator za oslobadjanje delete pa je preporucljivo da koristis njih za ovaj posao.
[ Dragi Tata @ 20.11.2004. 16:03 ] @
Kao što smo već pomenuli, u C++u postoji toliko gotovih biblioteka sa odličnim implementacijama matrice, da meni ne bi palo napamet da pišem novu iz početka. No, svako ima pravo da radi šta hoće...