tablice dwuwymiarowe c++

0

Dla wejscia:
1 2 3
2 3 4
3 4 5
4 5 6
Mam odwrocic tablice:
1 2 3 4
2 3 4 5
3 4 5 6
Przesunac wybrana linijke w lewo lub w prawo np.
4 1 2 3
2 3 4 5
3 4 5 6
i wrocic do schematu z wejscia:
czyli:
4 2 3
1 3 4
2 4 5
3 5 6

Pierwsze 3 operacje nie sprawiaja mi problemu mam za to problem z odwroceniem tablicy na samym koncu...

0

to tak samo jak pierwsza operacja tylko na odwrót (popatrz sobie z dołu do góry a nie z góry do dołu)

0

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

1 użytkowników online, w tym zalogowanych: 0, gości: 1