Odwracanie tablicy dwuwymiarowej c++

0
#include <iostream>

using namespace std;

const int MAXP = 100;

int main()
{
int n, m;  // n - liczba wierszy, m - liczba kolumn
int i, j;
int P[MAXP][MAXP];

cin >> n >> m;

for(i = 0; i < n; i++)
      for(j = 0; j < m; j++)
cin >> P[i][j];


           
system("pause");
return 0;
} 

Mam napisać program odwracający tablice dwu wymiarową o 90 stopni w prawo
np.
Wejście
3 4 // liczba wierszy, kolumn
1 2 3 4
5 6 7 8
9 10 11 12

Wyjście
9 5 1
10 6 2
11 7 3
12 8 4

Napisałem tyle i nie wiem za bardzo jak dalej, proszę o pomoc

0

...

http://pl.wikipedia.org/wiki/Macierz_transponowana

Sprowadza się to do zamiany miejscami indeksów.

0
#include <iostream>

using namespace std;

const int MAXP = 100;

int main()
{
int m, n;
int i, j, temp;
int P[MAXP][MAXP];
int S[MAXP][MAXP];

cin >> n >> m;

for(i = 0; i < n; ++i)
      for(j = 0; j < m; j++)
cin >> P[i][j];

for(i = 0; i < n; ++i)
      for(j = 0; j < m; ++j)
      S[j][n - i- 1] = P[i][j];
      
for(i = 0; i < n; ++i)
      for(j = 0; j < m; ++j)
cout << S[i][j] << " ";

system("pause");
return 0;
}

Napisałem coś takiego ale nie do końca działa jak powinno jak to naprawić?

0

Ja zawsze jak mam taki problem to rysuję sobie na kartce i staram się znaleźć jakiś algorytm.
W twoim przypadku polecam wypisać komórki

0

Sprawdź tak:

for(i = 0; i < n; ++i)
      for(j = 0; j < m; ++j)
      S[m - j -1][n - i - 1] = P[i][j];
0

Tak, też nie jest dobrze

1

Wybacz, transpozycja to nie jest to samo co obrót o 90 stopni.

for(i = 0; i < m; ++i) { 
  for(j = 0; j < n; ++j) {
    S[i][n - j - 1] = P[j][i];
  }
}

// wyswietlanie powinno byc tak:

for(i = 0; i < m; ++i) { 
  for(j = 0; j < n; ++j) {
    cout << S[i][j] << " ";
  }
  cout << endl;
}
0

Faktycznie dzięki za pomoc

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