Zachowanie oryginału tablicy
Ostatnio zmodyfikowano 2016-12-28 00:01
mat06 Temat założony przez niniejszego użytkownika |
Zachowanie oryginału tablicy » 2016-12-27 13:25:03 Mam do napisania program, który będzie zamieniał ze sobą dane wiersze/kolumny. Ma on jednak nie zmieniać oryginału tablicy. Funkcja wygląda tak: double zamiana( double tablica[ 4 ][ 3 ], int n, int m, int i, int j ) { double c; for( int k = 0; k < n; k++ ) { c = tablica[ k ][ i ]; tablica[ k ][ i ] = tablica[ k ][ j ]; tablica[ k ][ j ] = c; }
Co zrobić, aby oryginał tablicy nie zostawał zmieniany? I jeszcze drugie pytanie. Czy/jak można napisać funkcję w ten sposób, żeby nie podawać rozmiarów tablicy tylko przyjmować je jako n i m? Przykładowo: double zamiana( double tablica[][], int n, int m, int i, int j ) Z góry dziękuję za pomoc. |
|
pekfos |
» 2016-12-27 13:33:36 Użyj std::vector<std::vector<double>>, lub sam alokuj tablicę dynamicznie. W zwykłej tablicy wielowymiarowej, część wymiarów musi być znana z góry. |
|
mat06 Temat założony przez niniejszego użytkownika |
» 2016-12-27 13:36:47 A co zrobić, aby oryginał tablicy nie zostawał zmieniany?
|
|
pekfos |
» 2016-12-27 14:56:46 Kopiuj. |
|
mat06 Temat założony przez niniejszego użytkownika |
» 2016-12-27 16:30:13 A mogę prosić o jakieś dokładniejsze wytłumaczenie? |
|
pekfos |
» 2016-12-27 18:23:10 Kopiuj tablicę, modyfikuj kopię. Siłą rzeczy, nie zmodyfikujesz oryginału w ten sposób. |
|
mokrowski |
» 2016-12-28 00:01:59 Lepiej użyć vector. Jeśli jednak upierasz się "bo nie", to masz uniwersalne rozwiązanie na szablonach: #include <iostream>
using namespace std;
template < typename T, size_t N, size_t M > void rotate_table( const T( & table_src )[ N ][ M ], T( & table_dst )[ M ][ N ] ) { for( size_t row = 0; row < N; ++row ) { for( size_t column = 0; column < M; ++column ) { table_dst[ column ][ row ] = table_src[ row ][ column ]; } } }
int main() { int t1[ 3 ][ 2 ] = { { 10, 20 }, { 50, 33 }, { 45, 44 } }; int t2[ 2 ][ 3 ]; rotate_table( t1, t2 ); cout << "Tablica oryginalna:" << endl; for( size_t i = 0; i < 3; ++i ) { for( size_t j = 0; j < 2; ++j ) { cout << t1[ i ][ j ] << ", "; } cout << "\n"; } cout << "Tablica obrócona:" << endl; for( size_t i = 0; i < 2; ++i ) { for( size_t j = 0; j < 3; ++j ) { cout << t2[ i ][ j ] << ", "; } cout << "\n"; } }
PS. Przepraszam ale formatowanie kodu na tym forum jest .... takie sobie :-/ |
|
« 1 » |