Serwis został przeniesiony pod nową domenę: http://cpp0x.pl/
PowrótPowrótHistoria odwiedzonych stron
AutorWiadomość
Data: 2010-06-01 10:56:27

poiuytrewq lkjhgfdsa mnbvcxz
Przesyłanie tablicy dwuwymiarowej do funkcji

Witam.
Jak przekazać tablice dwuwymiarową do funkcij?
np mam sobie
w pliku hpp


void wczytaj(int [][])


w pliku cpp


int foo[2][2];
wczytaj(foo[][]);//chce wczytać całą tablice



Jak to zrobić, bo to co podałem wyżej nie działa.

Data: 2010-06-01 13:40:17

Dragonit


#include <cstdlib>
#include <iostream>

using namespace std;

void wczytaj(int marchewa[10][10])
{
  // instrukcje    
}

int main(int argc, char *argv[])
{
  int foo[10][10];

  wczytaj(foo);         //chce wczytać całą tablice

  system("PAUSE");
  return EXIT_SUCCESS;
}

ZOBACZ CZY TAK DA RADE

Data: 2010-06-01 13:59:10

poiuytrewq lkjhgfdsa mnbvcxz


No dobra.
Ale ja nie ma z góry założone jaki rozmiar bedzie miała tablica. A w twoim przypadku rozmiar tablicy musi być stały.

Data: 2010-06-01 14:02:29

Dragonit


to musisz użyć tablicy dynamicznej

Tak sie ją tworzy:

int *tab, n;
cout<<"Podaj rozmiar tablicy"<<endl;

cin>>n;

tablica = new int [n];      //podajemy typ elementu i jego rozmiar

......

.......

........

delete[] tab; //kasujemy tablicę, jeśli jest niepotrzebna (zwalniamy pamięć)
Data: 2010-06-01 14:10:49

michalp


void wczytaj(int [][])


A przeczytałeś jaki error rzuca kompilator?

error: multidimensional array must have bounds for all dimensions except the first


@Dragonit: Niestety nie zrozumiałeś o co mu chodzi.

Co do rozwiązania problemu, to albo zrób to tak jak można:

void wczytaj(int a[][10])


albo użyj std::vector, albo stwórz sobie szablon:

template <class Tab>
void wczytaj(Tab a)
Data: 2010-06-01 14:37:59

Dragonit


#include <cstdlib>
#include <iostream>

using namespace std;

void wczytaj(int x, int y)
{     
  int tablica[x][y];  
}

int main(int argc, char *argv[])
{

  int foo1, foo2;    
  int foo[foo1 = 2][foo2 = 2];

  wczytaj(foo1, foo2);          

  system("PAUSE");
  return EXIT_SUCCESS;
}

Teraz masz ze zmiana rozmiaru tablic. Troche to dziwne ale dziala.

Data: 2010-06-01 20:50:13

Piotr Szawdyński


Musisz przekazać wskaźnik na tablicę oraz określić ile elementów posiada każdy z wymiarów. Nie da się dostać do konkretnej komórki tablicy kilku wymiarowej nie znając rozmiaru każdego z wymiaru.

Pamięć komputera jest płaska (liniowa). Każda komórka ma swój adres, a więc nawet tablica wielowymiarowa jest interpretowana jako linia, więc stosowane są wzory typu: y*sizeX+x.

Skoro sizeX jest nieznany to nie da się określić komórki, która powinna zostać zwrócona.

/edit:
@up: Twoje rozwiązanie jest błędne.
@down: To się nawet nie skompiluje wesoły

Data: 2010-06-01 21:33:20

Dragonit


Dzieki za info. Myslalem ze to na górze moze byc bo sie nie wywala przy kompilacji, ale czy dziala dobrze, najwidoczniej nie.

@up: Musze cię poinformować ze w devCpp się skompilowało bez zarzutów.

12



Statystyki tematuOstatnio przeczytali
Czytało użytkowników:19Dragonit, jacek_k, szyx_yankez, birkofm, SeaMonster131, lenrokskate, Iname (√ιק), pixelmaster, michalp, TheLukon, madmike44, Patzick, Pirotechnik, Piotr Szawdyński, malan
Przeczytało użytkowników:15
Czytało osób ogólnie:56
Przeczytało osób ogólnie:45



PowrótPowrótHistoria odwiedzonych stron
Panel Logowania
Login:
Hasło:

Użytkowników
Obecnie aktywnych:12
Zalogowanych:0
Zarejestrowanych:4367
Ostatnie 24h:716
Non-cookie 24h:2190
Wszystkich:214766
Ostatnia Aktualizacja
2010-09-01 19:27:34 (6 dni temu)
Ostatnio aktywni
fish133 godz
wiewiorka9 godz
Koni9 godz
BuZuz9 godz
Prezmen12 godz
trupank12 godz
szczgl14 godz
filipesq14 godz
KRIIS55115 godz
kuba181716 godz
extra217 godz
pixelmaster18 godz

Wynajem Sopot - wakacje
Pokój 2 osobowy 130zł/doba;
Lokalizacja: Sopot


O portaluArchiwumHistoriaIndeksRegulaminWyszukiwarkaLinki
Kurs HTML - strona WWW za darmoRestauracja "ATOL" - SopotValid HTML 4.01 TransitionalValid CSS!HTML CSS JavaScript FLASH PHP MySQL