mallekith [ Centurion ]
C++ (o jezu, znowu ten i jego glupie pytania) czyli JA programuje ;)
hmm...
pytanie mam takie:
do zrobienia macierz kwadratowa n x n. jak moge zrobic, zeby klasa "macierz" rezerwowala sobie rozmiar tablicy 2 wymiarowej w zaleznosci od potrzeby?
class macierz
double *tablica;
int rozmiar;
mozna uzyc operatora new ale uzycie takie:
tablica = new [rozmiar][rozmiar];
jest bledne. prosze o pomoc.
Cainoor [ Mów mi wuju ]
mallekith --->
możesz tworzyć rozmiar tablicy dwuwymiarowej tylko z jednym wymiarem nie sprecyzowanym np [10][x]
niestety nie można zadeklarować tablicy [n][m]
Cainoor [ Mów mi wuju ]
Możesz zadeklarować tak:
new int[n] - tworzy to Ci tablice n elementów typu int, ale wartością tego wyrażenia jest wskaźnik na int (a nie na tablice)
Nie można napisać new int[n][m], gdyż nie ma takiego typu jak int[m]...
mallekith [ Centurion ]
czyli:
musze sobie jeden wymiar zdefiniowac. ale macierz ma byc kwadratowa, wiec obojetnie czy zdefiniuje jeden rozmiar czy 2. no jednynie bedzie sie roznic tym ze bedzie zajmowal wiecej pamieci, np jezeli bede potrzebowal macierz 10 x 10 a tam sobie zarezerwuje 100 x 100 to bedize wiecej zajmowac niz taki 100 x 10 :))
a mam do ciebie jedno pytanie (i do pozostalych, jezeli ktos tu zaglada ;) ): czy trudno napisac szablon tablicy tak, zeby poprawnie realizowal tablice tablic?
mallekith [ Centurion ]
kurde, czyl;i czegos nie rozumiem. musze mu zadac tak pamieci zeby od razu iedzial ile ma sobie przydzielic. wiec jak bede chcial macierz 2 wymiarowa [n][m] to jeden musze miec juz z gory staly a drugoi sobie moge robic new, tak?
Cainoor [ Mów mi wuju ]
mallekith --->
"wiec jak bede chcial macierz 2 wymiarowa [n][m] to jeden musze miec juz z gory staly a drugoi sobie moge robic new, tak?"
Tak.
"czy trudno napisac szablon tablicy tak, zeby poprawnie realizowal tablice tablic?"
Nie jest to raczej trudne do zrealizowania :)
mallekith [ Centurion ]
hueh, wiec prowadzac nasza dyskusje dalej:
ten szablon, no nie ;)) to definiuje sobie klase np tab, gdzie bedzie wartosc elementu i wskaznik do nastepnego, ale czy moglbys mi powiedzic czy dobrze rozumuje czy nie bardzo... ? bo nie mam nawet wogole pomyslu zeby zrobic ten szablon.
Cainoor [ Mów mi wuju ]
mallekith --->
Hmm... wg mnie najprościej będzie, jak zrobisz poprostu tablice wskaźników, na tablice. Chyba nie potrzeba innego kombinowania.
Regis [ ]
Hej, hej, hej... Chyba cos sie nie zgadza... Akurat pisze pewien program na infe dot. macierzy i tez mialem ten problem. I mozna dynamicznie zarezerwowac tablice o okrteslonych wymiarach! Robi sie to metoda wskaznik do wskaznika na tablice :) Zainteresowanych odsylam do tego tekstu - powodzenai :)
Regis [ ]
Cainoor nie uprzedzil :P
mallekith [ Centurion ]
tylko to ma byc szablon klasy. ta klasa realizuje tablice jednowymiarowa. ale dobry wzorzec powinien poprawnie realizowac szablon tablicy tablic. ale to ma byc klasa tablica.
mallekith [ Centurion ]
hm....
zdefiniowalem sobie taka klase:
class macierz
private:
int rozmiar;
int **tablica;
public:
macierz();
macierz(int rozm);
macierz::macierz(int rozm) //konstruktor
tablica = new int*[rozm];
for(int k=0; k<rozm;k++) tablica[k] = int new[rozm]; //i tu mi mowi ze mam expresion syntax in function macierz::macierz(int)
nie wiem gdze tkwi blad.... :|
Eliash [ Generaďż˝ ]
mallekith -> W jednym z Twoich poprzednich wątków zamieściłem prawie kompletny kod klasy macierzy (poza mnożeniem bo już zapomniałem jak to się robi :) )
tomek4 [ Centurion ]
mallekith -> "new int[]" a nie "int new[p]"