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
Matrica u letu ? ...
Zaključano
Zakačeno
recimo matricu integera dimenzija n x m praviš dinamički
A ovaj drugi deo nisam skapirao šta hoćeš?
Code:
int i,j;
int *matrica;
matrica = (int*)malloc(sizeof(int)*n*m);
// a pristupas sa
matrica[i][j];
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š?
Potpis
ex. trooper
Oh goody... it's my Illudium PU-36 Explosive Space Modulator!
Softversko Inženjerstvo
♪♫♪
Oh goody... it's my Illudium PU-36 Explosive Space Modulator!
Softversko Inženjerstvo
♪♫♪
Ovaj, ovo sto ti trazis je malo zesci problem. Alokacija je decja igra, ali pozivanje
...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
Code:
matrica[i][j];
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
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.
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;
}
#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;
int **x = allocate_array(2, 5);
x[1][3] = 12;
uhhh, da. U pravu ste. zvrbin način je ispravan. Ne znam šta mi bi.
Potpis
ex. trooper
Oh goody... it's my Illudium PU-36 Explosive Space Modulator!
Softversko Inženjerstvo
♪♫♪
Oh goody... it's my Illudium PU-36 Explosive Space Modulator!
Softversko Inženjerstvo
♪♫♪
E da, zaboravio sam na **; tako da matrica ispada prava decja igra; sorry na digresiji.
Rajko
Rajko
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.
Potpis
ex. trooper
Oh goody... it's my Illudium PU-36 Explosive Space Modulator!
Softversko Inženjerstvo
♪♫♪
Oh goody... it's my Illudium PU-36 Explosive Space Modulator!
Softversko Inženjerstvo
♪♫♪
Ma i trooper-ov primer valja, ali sa malim promenama
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:
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];
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
matrica [1 2 3 4 5 6]
| | | | | |
0,1 0,2 | | | |
1,1 1,2 | |
2,1 2,2
Potpis
People who think they know everything tend to irritate those of us who do.
Evo prvi deo sam resio :
tnx
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;
}
#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
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.
Potpis
I drink to make other people interesting.
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...