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ść
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, 15:26   

Ja wlasnie dalem przyklad z dynamicznymi tablicami ;)
_________________
 
 
     
Phitherek_ 


Twoja ulubiona misja: Nie wiem, bo nie znam wszystkich jeszcze...
Pomógł: 2 razy
Wiek: 25
Dołączył: 09 Lip 2011
Posty: 19
Skąd: Krk
Wysłany: 10-07-2011, 23:07   

Hmmm... Postaram się prosto napisać, jak stworzyć dwuwymiarową tablicę dynamiczną. Piszę na sucho bez sprawdzania, więc mogę coś pomylić, bo dawno już tego nie używałem... Kod jest w C++:

Kod:

//...
int** tab = NULL; // Tworzę wskaźnik na wskaźnik na int, na razie pusty;
int x, y; // Rozmiar tablicy x*y.
cin >> x >> y; // Wprowadzenie rozmiaru;
tab = new int*[x]; // Tworzę tablicę wskaźników o rozmiarze x.
for(int i = 0; i < x; i++) {
tab[x] = new int[y];
}
// Powyższa pętla tworzy drugi wymiar tablicy o rozmiarze y.
//...


Jeżeli nigdzie się nie pomyliłem, to powyższy kod tworzy dynamiczną tablicę dwuwymiarową o rozmiarze x*y, przy czym x i y wprowadza użytkownik z klawiatury. Tak stworzonej tablicy można potem używać tak jak tablicy statycznej - różnica jest w tym, że rozmiar może być zmienną, a nie stałą.

Mam nadzieję, że pomogłem.
_________________
Posted by Phitherek_
 
 
     
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: 11-07-2011, 12:30   

Dzięki wszystkim za pomoc. Już powolutku rozkminiam OOP i wskaźniki. Na pewno każdy z waszych programów działa, tylko nie umiem ich wykorzystać :<

@up Bardzo ładnie, a teraz powiedz mi jak mam teraz taką tablicę wsadzić w plik nagłówkowy? :)
_________________
http://projektsimbax.blogspot.com/ <- Taki sobie blog
 
     
Phitherek_ 


Twoja ulubiona misja: Nie wiem, bo nie znam wszystkich jeszcze...
Pomógł: 2 razy
Wiek: 25
Dołączył: 09 Lip 2011
Posty: 19
Skąd: Krk
Wysłany: 11-07-2011, 13:18   

Poczytaj sobie o zmiennych globalnych, polecam "Thinking in C++", strona 122 (http://helion.pl/online/thinking/index.html). Ja postaram się jeszcze zaraz napisać jakiś przykład (a tym razem siedzę na Linuxie, więc będzie to sprawdzone).

A oto i obiecany przykład:

dyntable.cpp:
Kod:

#include <iostream>
#include <cstdlib>
using namespace std;

int** tab = NULL; // Tworzę wskaźnik na wskaźnik na int
void create(int x, int y) { // Funkcja tworząca tablicę x*y
tab = new int*[x];
for(int i = 0; i < x; i++) {
tab[i] = new int[y];
}
return;
}

void init(int x, int y) { // Funkcja inicjalizująca tablicę
for(int i = 0; i < x; i++) {
for(int j = 0; j < y; j++) {
tab[i][j] = 0;
}
}
return;
}


dyntable.h
Kod:

extern int** tab; // Zmienna globalna zawarta w pliku dyntable.cpp
void init(int x, int y); // Funkcja inicjalizująca tablicę
void create(int x, int y); // Funkcja tworząca tablicę x*y


tableuse.cpp:
Kod:

#include <iostream>
#include <cstdlib>
#include "dyntable.h" // Dołączony plik nagłówkowy
using namespace std;

int main() {
int x, y; // Rozmiar tablicy x*y
// Wprowadzenie danych:
cout << "x: ";
cin >> x;
cout << "y: ";
cin >> y;
create(x,y); // Stworzenie tablicy x*y (funkcja z pliku nagłówkowego)
init(x,y); // Inicjalizacja tablicy (funkcja z pliku nagłówkowego)
for(int i = 0; i < x; i++) {
for(int j = 0; j < y; j++) {
cout << "tab[" << i <<"][" << j << "] = " << tab[i][j] << endl; // Wyświetlenie tablicy. Zwróć uwagę, że nie ma w tym programie wzmianki o zmiennej tab, jest to zmienna globalna dołączona przez plik nagłówkowy.
}
}
return EXIT_SUCCESS;
}


Kompiluję to poleceniem:
Kod:
g++ -o tableuse tableuse.cpp dyntable.cpp
- uwaga, ważne - te dwa pliki trzeba skompilować w ten sposób, to jest tzw. rozłączna kompilacja.

Program w działaniu wygląda mniej więcej tak:
Kod:

phitherek@stary-kubuntu global_test $ ./tableuse
x: 4
y: 5
tab[0][0] = 0
tab[0][1] = 0
tab[0][2] = 0
tab[0][3] = 0
tab[0][4] = 0
tab[1][0] = 0
tab[1][1] = 0
tab[1][2] = 0
tab[1][3] = 0
tab[1][4] = 0
tab[2][0] = 0
tab[2][1] = 0
tab[2][2] = 0
tab[2][3] = 0
tab[2][4] = 0
tab[3][0] = 0
tab[3][1] = 0
tab[3][2] = 0
tab[3][3] = 0
tab[3][4] = 0


Mam nadzieję, że dzięki temu zrozumiesz, jak użyć takiej tablicy w pliku nagłówkowym ;) .
_________________
Posted by Phitherek_
 
 
     
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: 11-07-2011, 14:25   

Ooo, dzięki. Wreszcie coś zrozumiałem :>
_________________
http://projektsimbax.blogspot.com/ <- Taki sobie blog
 
     
Phitherek_ 


Twoja ulubiona misja: Nie wiem, bo nie znam wszystkich jeszcze...
Pomógł: 2 razy
Wiek: 25
Dołączył: 09 Lip 2011
Posty: 19
Skąd: Krk
Wysłany: 11-07-2011, 14:37   

Nie ma sprawy, też dzięki temu odświeżyłem trochę moją wiedzę ;) .
_________________
Posted by Phitherek_
 
 
     
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: 11-07-2011, 18:38   

A ja wciąż brzydko łączę pliki przez #include "plik.cpp" bez nagłówków. ;) Działa.
Istnieje może jakiś generator kodu żeby nie pisać ręcznie .h?
_________________
1Tbps Project && Telecomix Network

 
 
     
Phitherek_ 


Twoja ulubiona misja: Nie wiem, bo nie znam wszystkich jeszcze...
Pomógł: 2 razy
Wiek: 25
Dołączył: 09 Lip 2011
Posty: 19
Skąd: Krk
Wysłany: 11-07-2011, 18:49   

Hmmm... Szczerze mówiąc to nie wiem, jak na razie nie pracowałem za dużo z plikami nagłówkowymi, bo moje programy są jak na razie małe i jednoplikowe, więc nie interesowałem się... Musiałbyś poszukać...

A co do łączenia plików, to w sumie do zmiennych globalnych niepotrzebne są pliki nagłówkowe, w "Thinking in C++" jest przykład rozłącznej kompilacji bez tego, wystarczy tylko to co jest w pliku nagłówkowym wstawić zamiast tego w pliku, który ma korzystać z tych zmiennych (logiczne, co nie?). Wtedy nie potrzebujesz nawet #include, tylko wystarczy rozłączna kompilacja. Pliki nagłówkowe są bardzo przydatne, jeśli chcesz używać zmiennych i funkcji w wielu plikach (czytaj: w większych projektach albo bardzo modularnych), ale takie małe programiki w ogóle ich nie potrzebują w sumie, tylko więcej roboty z ich pisaniem...

EDIT: A tak swoją drogą to przydałoby się zamknąć temat, skoro problem został rozwiązany ;) .
_________________
Posted by Phitherek_
 
 
     
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: 11-07-2011, 19:31   

Wiesz, to jest "programik" z kursu. Właśnie miałem się nauczyć jak korzystać z plików nagłówkowych :> I tak się zgadzam, to wystarczyłoby mieć w jednym pliku, ale cóż... Uczę się :mrgreen:
_________________
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