Przekazywanie tablicy dwuwymiarowej jako argumentu funkcji, przy rozmiarze drugiego wymiaru nieznanym na początku działania programu
Ostatnio zmodyfikowano 2012-11-18 22:09
McAffey Temat założony przez niniejszego użytkownika |
» 2012-11-18 22:09:03 Dzięki wielkie, to jeszcze nie mój poziom programowania, więc raczej sam bym nie wpadł na takie rozwiązanie. Temat zamykam :) Edit : Dzisiaj przypadkiem wpadłem na pomysł tak prostego rozwiązania problemu, że aż mi było wstyd że na nie wczoraj nie wpadłem. Rozwiązanie to jest tym bardziej skomplikowane, im bardziej złożone są tablice (im więcej wymiarów mają), ale dla dwuwymiarowej tablicy sprawdza się bardzo dobrze. Wystarczy jako dwa argumenty w funkcji dodać wymiary tablicy, a tablicę dwuwymiarową przekształcić w tablicę jednowymiarową o takiej samej liczbie elementów i ją dodać jako trzeci argument. Wówczas wewnątrz funkcji trzeba zrobić takie samo działanie tylko na odwrót i wtedy wewnątrz funkcji otrzymujemy tę samą tablicę dwuwymiarową którą mieliśmy w mainie. Podaję przykład który najpierw tworzy tablicę dwuwymiarową, potem wypełnia ją wartościami dla testu, następnie przekształca ją w tablicę jednowymiarową, potem przekazuje ją do funkcji, a w funkcji przekształca ją z powrotem do tablicy dwuwymiarowej. Oczywiście korzystając ze sposobu z tego przykładu wartości z tablicy można tylko odczytać, a nie można ich potem modyfikować (tzn modyfikacje nie zostaną wprowadzone do tablicy dwuwymiarowej z początku programu), ale gdyby ktoś tego potrzebował może sobie to sam (analogicznie) dopisać. (Sory cyklopek11 za to wytłumaczenie, wiem że Ty tego nie potrzebujesz, ale napisałem z myślą o ewentualnych przyszłych (początkujących) czytelnikach ;> ) Przykład : #include <iostream> using namespace std;
void funkcja( int tablica_tymczasowa[], int x, int y ) { int tablica[ x ][ y ]; int indeks = 0; for( int i = 0; i < x; i++ ) { for( int j = 0; j < y; j++ ) { tablica[ i ][ j ] = tablica_tymczasowa[ indeks ]; indeks++; } } for( int i = 0; i < x; i++ ) { for( int j = 0; j < y; j++ ) { cout << tablica[ i ][ j ] << endl; } } return; }
int main() { int x, y; cout << "Wprowadz pierwszy rozmiar : "; cin >> x; cout << "Wprowadz drugi rozmiar : "; cin >> y; int tablica[ x ][ y ]; int indeks = 1; for( int i = 0; i < x; i++ ) { for( int j = 0; j < y; j++ ) { tablica[ i ][ j ] = indeks; indeks++; } } int tablica_tymczasowa[ x * y ]; indeks = 0; for( int i = 0; i < x; i++ ) { for( int j = 0; j < y; j++ ) { tablica_tymczasowa[ indeks ] = tablica[ i ][ j ]; indeks++; } } funkcja( tablica_tymczasowa, x, y ); return 0; } Samo działanie (bez wyjaśnień i testów) można skrócić do takiego kodu : using namespace std;
void funkcja( int tablica_tymczasowa[], int x, int y ) { int tablica[ x ][ y ]; int indeks = 0; for( int i = 0; i < x; i++ ) { for( int j = 0; j < y; j++ ) { tablica[ i ][ j ] = tablica_tymczasowa[ indeks ]; indeks++; } } return; }
int main() { int x = 5, y = 5, indeks = 0; int tablica[ x ][ y ]; int tablica_tymczasowa[ x * y ]; for( int i = 0; i < x; i++ ) { for( int j = 0; j < y; j++ ) { tablica_tymczasowa[ indeks ] = tablica[ i ][ j ]; indeks++; } } funkcja( tablica_tymczasowa, x, y ); return 0; } |
|
1 « 2 » |