Oryginalna strona colobot.cba.pl umarła, gdy cba.pl przestało oferować darmowy hosting. To jest statyczny mirror, pobrany w 2018. ~krzys_h
 Polski Portal COLOBOTa - COLOBOT Polish Portal
Forum - Polski Portal COLOBOTa
Strona głównaStrona główna UżytkownicyUżytkownicy GrupyGrupy StatystykiStatystyki


Poprzedni temat «» Następny temat
Tablica[ZMIENNA][ZMIENNA]
Autor Wiadomość
Simbax 
Mod


Twoja ulubiona misja: Wszystkie na Krystalii
Pomógł: 6 razy
Wiek: 22
Dołączył: 07 Sie 2009
Posty: 473
Skąd: z Leszna
Wysłany: 30-05-2011, 19:42   Tablica[ZMIENNA][ZMIENNA]

Natknąłem się na malutki problemik. Mam już napisaną całą grę w kółko i krzyżyk. Wykonałem (bardzo trudne wg. tutoriala) ćwiczenie, żeby móc zmienić rozmiar planszy za pomocą stałej w pliku nagłówkowym.

Teraz chciałbym zrobić tak, żeby użytkownik sam na początku ustalał ten rozmiar. I tu pojawia się problem. Rozmiar jest stałą. Zapytacie - to co za problem zrobić z niego zwykłą zmienną? Otóż taki problem, że ta zmienna jest potrzebna do ustalenia rozmiaru tablicy dwuwymiarowej, a rozmiar tablicy musi być... stały.

Prościej:

Na początku programu chce się spytać o rozmiar planszy do gry. Musi to być zmienna.
cin wywala błąd, bo rozmiar planszy jest stałą.
Robię z tej stałej zmienną.
PewnaTablica[RozmiarPlanszy][RozmiarPlanszy] <- błąd! Rozmiar tablicy musi być stałą!

I co ja mam zrobić z tym, zdaje mi się nierozwiązywalnym, problemem? Może to dla was błahe, ale ja się uczę jeszcze :oops:
_________________
http://projektsimbax.blogspot.com/ <- Taki sobie blog
 
     
Raptor 
Clever Girl


Twoja ulubiona misja: Raptorowanie
Pomógł: 4 razy
Wiek: 24
Dołączył: 26 Cze 2010
Posty: 432
Skąd: Isla Nublar
Wysłany: 30-05-2011, 21:14   Re: Tablica[ZMIENNA][ZMIENNA]

Simbax napisał/a:
Może to dla was błahe, ale ja się uczę jeszcze :oops:

Dla mnie nie jest to wcale błahe. I tak jesteś na bardziej zaawansowanym poziomie, niż ja...
_________________
- Stężenie czekolady we krwi: 93‰
- Ja to bym zjadł jeszcze batona...


 
     
krzys_h 


Twoja ulubiona misja: Wszystkie :)
Pomógł: 3 razy
Wiek: 20
Dołączył: 12 Gru 2010
Posty: 255
Skąd: Łódź
Wysłany: 30-05-2011, 21:14   

Polecam lekturę dotyczącą dynamicznej allokacji pamięci. W wolnej chwili może dam jakiś przykładzik.
_________________
Gość, cieszysz się, że skontaktowaliśmy się z EPSITEC?
 
 
     
Simbax 
Mod


Twoja ulubiona misja: Wszystkie na Krystalii
Pomógł: 6 razy
Wiek: 22
Dołączył: 07 Sie 2009
Posty: 473
Skąd: z Leszna
Wysłany: 30-05-2011, 21:54   

To ma związek ze wskaźnikami? Jeszcze daleka droga zanim dojdę do rozdziału o nich... Cóż... Będę wdzięczny za przykład.
_________________
http://projektsimbax.blogspot.com/ <- Taki sobie blog
 
     
adiblol 
Administrator forum
FLOSS FTW!


Twoja ulubiona misja: porównywanie formatów audio
Pomógł: 18 razy
Dołączył: 21 Kwi 2008
Posty: 1313
Skąd: pokój odsłuchowy
Wysłany: 30-05-2011, 22:37   

Kod:
int width, height;
puts("Podaj szerokosc i wysokosc oddzielone spacja.");
scanf("%i %i", &width, &height);
T* tab = (T*)malloc(sizeof(T)*width*height);
#define tab2d(x, y) (tab[(x)+(y)*width])

Pod T podstawiamy typ tablicy.

Użycie:
Kod:

tab2d(0, 0) = jakas_zmienna;
if (tab2d(666, 1337) == jakas_inna_zmienna) poraz_uzytkownika_pradem();


Oczywiście można to zrobić lepiej na klasach.
_________________
1Tbps Project && Telecomix Network

 
 
     
Simbax 
Mod


Twoja ulubiona misja: Wszystkie na Krystalii
Pomógł: 6 razy
Wiek: 22
Dołączył: 07 Sie 2009
Posty: 473
Skąd: z Leszna
Wysłany: 31-05-2011, 16:59   

ERROR '(typ ENUM)' does not define this operator or a conversion to a type acceptable to the predefined operator

:roll: Chyba sobie podziękuje. Taka drobna modyfikacja, a tyle problemów...
_________________
http://projektsimbax.blogspot.com/ <- Taki sobie blog
 
     
adiblol 
Administrator forum
FLOSS FTW!


Twoja ulubiona misja: porównywanie formatów audio
Pomógł: 18 razy
Dołączył: 21 Kwi 2008
Posty: 1313
Skąd: pokój odsłuchowy
Wysłany: 31-05-2011, 18:22   

Simbax napisał/a:
ERROR '(typ ENUM)' does not define this operator or a conversion to a type acceptable to the predefined operator
Nie podałeś w której linii.
_________________
1Tbps Project && Telecomix Network

 
 
     
Simbax 
Mod


Twoja ulubiona misja: Wszystkie na Krystalii
Pomógł: 6 razy
Wiek: 22
Dołączył: 07 Sie 2009
Posty: 473
Skąd: z Leszna
Wysłany: 31-05-2011, 19:41   

W takiej, w której chcę użyć tablicy ;P

(pętle for)
g_aPlansza[i][j] = FLD_EMPTY; //błąd.

W dodatku podkreśla drugi nawias kwadratowy "No operator "[]" matches these operands". I taki błąd jest jeszcze w kilkunastu innych linijkach, w których używam tablicy.

Myślałem, że dałoby radę zrobić tak, żebym nie musiał zmieniać reszty kodu. Zresztą użycie tablica(x, y) też wywołuje błąd w kompilacji :roll:

Więc jak użyć tej tablicy w linijce takiej jak ta:

Kod:
    if (g_aPlansza[uY][uX] == FLD_EMPTY) g_aPlansza[uY][uX] = static_cast<FIELD>(g_AktualnyGracz);


Po zmianie nadal jest błąd:

Kod:
    if (g_aPlansza(uY, uX) == FLD_EMPTY) g_aPlansza(uY, uX) = static_cast<FIELD>(g_AktualnyGracz);


A najlepiej to daje kod źródłowy, bo już nie wyrabiam z tym...
http://dl.dropbox.com/u/16682532/CrossCircle.zip
_________________
http://projektsimbax.blogspot.com/ <- Taki sobie blog
 
     
adiblol 
Administrator forum
FLOSS FTW!


Twoja ulubiona misja: porównywanie formatów audio
Pomógł: 18 razy
Dołączył: 21 Kwi 2008
Posty: 1313
Skąd: pokój odsłuchowy
Wysłany: 31-05-2011, 20:20   

Simbax napisał/a:
bo już nie wyrabiam z tym
A w Minecrafcie wychodzi Ci wszystko od razu? Nie poddawaj się.
_________________
1Tbps Project && Telecomix Network

 
 
     
Berserker 
Dark Ness


Twoja ulubiona misja: Ofrenia
Pomógł: 16 razy
Wiek: 24
Dołączył: 24 Mar 2009
Posty: 496
Skąd: Bigos
Wysłany: 31-05-2011, 20:49   

Kod:
   srand(time(NULL));
   int x = rand()%5+1;
   int y = rand()%5+1;
   Label1->Caption = x;
   Label2->Caption = y;
   AnsiString **w;
   *w = new (AnsiString*)[y];
   for(int i = 0; i < y; i++) w[i] = new AnsiString[x];
   int a, b;
   for(a = 0; a < y; a++) for(b = 0; b < x; b++) w[a][b] = "LOL ";

C++ Builder mi kompiluje, zamiast AnsiString wpisz sobie inny typ.

Swoja droga dziwny problem, pamietam, ze Dev-Cpp kompilowal mi zwykle tablice ze zmiennym rozmiarem bez problemu, tylko nie mozna bylo przy deklaracji odrazu nadawac wartosci.
_________________
 
 
     
Simbax 
Mod


Twoja ulubiona misja: Wszystkie na Krystalii
Pomógł: 6 razy
Wiek: 22
Dołączył: 07 Sie 2009
Posty: 473
Skąd: z Leszna
Wysłany: 31-05-2011, 21:19   

Ech. Na razie daje sobie z tym spokój. Potrzebuję większej wiedzy żeby to wszystko ogarnąć.

adiblol napisał/a:
Oczywiście można to zrobić lepiej na klasach.


A więc lecę się dalej uczyć.
_________________
http://projektsimbax.blogspot.com/ <- Taki sobie blog
 
     
konrad-fligier@wp.pl
Gość


Wysłany: 17-06-2011, 23:47   

(też robiłem kółko i krzyżyk - sam)

A tak trochę inaczej.
Mi działa takie coś:
Kod:

const int zmienna=10;
tab[zmienna+2][zmienna+1];


(Potrzebowałem takie coś w jednym programie)

Wiec czy zadziała to coś:
Kod:

const int zmienna=0;
int a;
cin>>a;
tab[zmienna+a];
 
     
Berserker 
Dark Ness


Twoja ulubiona misja: Ofrenia
Pomógł: 16 razy
Wiek: 24
Dołączył: 24 Mar 2009
Posty: 496
Skąd: Bigos
Wysłany: 18-06-2011, 01:50   

Nie zadziala.
_________________
 
 
     
adiblol 
Administrator forum
FLOSS FTW!


Twoja ulubiona misja: porównywanie formatów audio
Pomógł: 18 razy
Dołączył: 21 Kwi 2008
Posty: 1313
Skąd: pokój odsłuchowy
Wysłany: 18-06-2011, 14:50   

Simbax napisał/a:
PewnaTablica[RozmiarPlanszy][RozmiarPlanszy] <- błąd! Rozmiar tablicy musi być stałą!

A do stałej nie można zapisywać. No chyba że się uprzesz i użyjesz wskaźników ale wtedy cuda się będą działy...
_________________
1Tbps Project && Telecomix Network

 
 
     
Simbax 
Mod


Twoja ulubiona misja: Wszystkie na Krystalii
Pomógł: 6 razy
Wiek: 22
Dołączył: 07 Sie 2009
Posty: 473
Skąd: z Leszna
Wysłany: 18-06-2011, 14:59   

Dałoby się wykorzystać dynamiczne tablice? Kiedyś takiego czegoś użyłem, tylko nie pamiętam w jakim celu. I jak :roll: Właściwie to w ogóle nie rozumiałem jak tamten kod działał, ale dobra...
_________________
http://projektsimbax.blogspot.com/ <- Taki sobie blog
 
     
Wyświetl posty z ostatnich:   

Wersja do druku

Skocz do:  

Powered by phpBB modified by Przemo © 2003 phpBB Group
Polski Portal COLOBOTa © 2008 - 2012