Widzę że faktycznie Ci na tym zależy, już trzeci wątek zakładasz o tym samym ;P
http://4programmers.net/Forum/C_i_C++/206139-c++_tablica_dwuwymiarowa_dynamiczna
http://4programmers.net/Forum/Newbie/206352-odwracanie_elemetow_tablicy_c++
http://4programmers.net/Forum/C_i_C++/206384-tablice_dwuwymiarowe_c++
Powinienem być chyba oburzony za takie łamanie zasad, ale skoro to takie ważne to pomogę ;]
#include <iostream>
using namespace std;
#define TAB_WIDTH 3
#define TAB_HEIGHT 4
// zwykła funkcja odwracająca
// parametry szablonu to wysokość i szerokość tablicy
template <int H, int W>
void transpose(int in[H][W],
int out[W][H]) {
for(int y = 0; y < H; y++) {
for(int x = 0; x < W; x++) {
out[x][y] = in[y][x];
}
}
}
// tutaj się też nie mogłem powstrzymać i machnąłem szablony
template <int H, int W>
void print_array(int tab[H][W]) {
for (int y = 0; y < H; y++) {
for(int x = 0; x < W; x++) {
cout << tab[y][x] << " ";
}
cout << endl;
}
}
int main() {
int tabA[TAB_HEIGHT][TAB_WIDTH]; // zakładam że tablica ma być zawsze tego samego rozmiaru
int tabB[TAB_WIDTH][TAB_HEIGHT]; // jeśli nie, trzeba kombinować z vectorem/alokacją
for (int y = 0; y < TAB_HEIGHT; y++) {
for(int x = 0; x < TAB_WIDTH; x++) {
cin >> tabA[y][x];
}
}
cout << endl;
print_array<4, 3>(tabA);
cout << endl;
transpose(tabA, tabB);
print_array<3, 4>(tabB);
// a tutaj to przesuwanie w lewo...
cout << endl;
transpose(tabA, tabB);
print_array<4, 3>(tabA);
}
Jak widać, podwójne odwrócenie tablicy działa.
Pozostaje dopisać przesuwanie linii w lewo i masz rozwiązane zadanie.
Przykład działania:
T:\>a
1 2 3
2 3 4
3 4 5
4 5 6
1 2 3
2 3 4
3 4 5
4 5 6
1 2 3 4
2 3 4 5
3 4 5 6
// tutaj powinno być to przesunięcie w lewo
1 2 3
2 3 4
3 4 5
4 5 6