Odwracanie elemetów tablicy c++

0

Mam problem z zadaniem, mam zdefiniowac tablice a pozniej przesunac jej elementy gora, dol.

Koncepcja a raczej połowa mojego kodu polega na tym, aby obrocic tablice np:
1 2 2 3
1 2 4 1
2 7 9 1

Tablica odwrocona:
1 1 2
2 2 7
2 4 9
3 1 1

Tam pięknie wykonuje przesunięcia... I nadchodzi czas aby wrócić do pierwotnego schematu i kicha ... odwracam w ten sam sposob zmieniajac jedynie granice w pętlach for i kicha, nie chce odwroc tak aby zachowac wartosci ...

0

Po pierwsze, to się nazywa Transpozycja macierzy (http://pl.wikipedia.org/wiki/Macierz_transponowana)
Po drugie, dwukrotne wykonanie transpozycji nie zmienia macierzy. Czyli masz jednak gdzieś błąd w kodzie. Jako że kodu nie podałeś, bardziej pomóc nie możemy...

0

Własnie mam taki fragment tworze tablice to nic ciekawego tam nie mam i użytkownik ma przesunąć o jeden w gorę, czyli zrobiłem tak że obracam tablice

              for(int i=0; i<wiersz;i++){    //odwrocenie tablicy
                        for(int j=i+1;j<kolumna;j++){
                        int temp=tablica[i][j];
                        tablica[i][j]=tablica[j][i];
                        tablica[j][i]=temp;}} 
                        prawo(tablica[kolumna1], wiersz)
                        for(int i=0; i<kolumna;i++){    // ponowne odwrocenie tablicy po wyjsciu z funkcji
                        for(int j=i+1;j<wiersz;j++){
                        int temp=tablica[i][j];
                        tablica[i][j]=tablica[j][i];
                        tablica[j][i]=temp;}}

funkcja prawo:

 
void prawo(int *tablica,int kolumna)
{
   int temp=tablica[kolumna-1],p=0;
   for(int i=1;i<kolumna;i++) tablica[i]=tablica[i]-1;
   tablica[0]=temp;
}

Cos takiego udalo mi sie zrobic :) wartosci tablicy mielismy podane w zadaniu tj t[i][j] = i + j, i z tej wlasnosci skorzystalem piszac funkcje prawo, chociaz nie wiem czy nie za bardzo uogolnilem :)

0

Zauważ że jeżeli macierz nie jest kwadratowa to nie da rady zrobić tego przesunięciami. A jeżeli jest kwadratowa to gorszego podejścia niż przesunięcia nie da się wymyślić.
Albo przydziel drugą tablicę i w dwóch pętlach tb_new[x][y]=tb_old[y][x]; a na końcu podmiana wskaźników i usunięcie starej.
Albo zrób to np przez strumień zapisujesz tb[y][x] a odczytujesz tb[x][y]
Albo zrób to sensownie czyli swap przekątnych (tylko dla kwadratowych).

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