Oryginalna strona colobot.cba.pl umarła, gdy cba.pl przestało oferować darmowy hosting. To jest statyczny mirror, pobrany w 2018. ~krzys_h
|
Forum - Polski Portal COLOBOTa |
|
|
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
|
|
|
|
|
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ę |
_________________ http://projektsimbax.blogspot.com/ <- Taki sobie blog |
|
|
|
|
|
|
| |
|
|
|
|
Polski Portal COLOBOTa © 2008 - 2012 |
|
|