Laralion
Laralion
  1 stycznia 2009 (pierwszy post)

Tak jak w temacie mam drobny problem z tablicami 2 wymiarowymi w C++, zapomnialem jak sie je tworzylo :D

oto dokladnie w ktorym fragmencie mam problem

cout

Laralion
Laralion
  1 stycznia 2009

post mi sie usunal zaczne od nowa
/*
cout

Laralion
Laralion
  1 stycznia 2009

widocznie nie da sie kopiowac tresci programow nawet w komentarzach, wiec moj problem dotyczy tablic dynamicznych wielowymiarowych, program wyglada tak:

uzytkownik podaje liczbei, pozniej uzytkownik podaje liczbe j i chce by program zrobil tablice 2 wymiarowa o wymiarach i,j, tablice,i ,j zadeklarowalem jako "int", ale program w ogóle nie tworzy tablicy, czy ktos sie tutaj dobrze zna na tablicach wielowymiarowych i moglby mi podpowiedziec jak sie je tworzylo?

taro
taro
  2 stycznia 2009

int tablica[9][9];

tablica 9 na 9.

Laralion
Laralion
  2 stycznia 2009

Tak na poczatku robilem i w samym tym widzi 6 bledow
wpisywalem
int tablica[j];

gdzie uzytkownik podawal wymiary tablicy i nic nie dzialalo, pozniej probowalem
tablica = new int [j]
i rowniez jej nie robil, jest tutaj ktos po studiach informatycznych lub osoba ktora dobrze opanowala C++?

thomas893
Posty: 10977 (po ~132 znaków)
Reputacja: -11 | BluzgometrTM: 4
thomas893
  2 stycznia 2009
Laralion
Laralion: jest tutaj ktos po studiach informatycznych lub osoba ktora dobrze opanowala C++?

proponuję, żebyś temat wrzucił do działu "Technika", tam Ci pewno pomogą ;]
waskirk
Posty: 284 (po ~902 znaków)
Reputacja: 0 | BluzgometrTM: 0
waskirk
  3 stycznia 2009

No ja bym nie powiedział wcale taki drobny. Można użyć pewnych specyficznych funkcji, ale które dają tylko efekt przy kompilatorze Buildera, więc zaprezentuję sposób czysto językowy. Po pierwsze musisz postawić pierwszą tablice, a dopiero za pomocą pętli, np. for(;;) dla każdego jej elementu postawić następne tablice dynamiczne. W kodzie powinno wyglądać mniej więcej tak:

int widht, height; //tutaj deklarujesz zmienne określające wielkość macierzy
cin>> widht;
cin>> height;

int **tab = new int*[widht]; //tutaj stawiasz pierwszą tablicę
for(int i = 0; i < widht; i++) //tutaj dla każdych jej elementów ustawiasz nową tablicę
{
tab [ i ] = new int[height];
}

W taki sposób masz tablicę tab[widht][height] dla wartości int.

Pamiętaj, że po takiej operacji konieczne jest prawidłowe zwolnienie pamięci!! Możesz to zrobić tak:

for(int x = 0; x < widht; x++)
{
delete [] tab[x]; //oczywiście nie znak [] a dwa kwadratowe nawiasy [ ]
}
delete [] tab;

Metoda działa, testowałem przed chwilą u siebie na kompilatorze Bloodshed Dev-C++ 4.9.9.2 oraz MS Visual C++. Pozdrawiam ;)

Dyskusja na ten temat została zakończona lub też od 30 dni nikt nie brał udziału w dyskusji w tym wątku.