Odwracanie tablicy dwuwymiarowej c++

Odpowiedz Nowy wątek
2011-10-15 20:03
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

Pozostało 580 znaków

2011-10-15 20:16
0

...

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

Sprowadza się to do zamiany miejscami indeksów.


"(...) otherwise, the behavior is undefined".
chyba jednak nie... - krwq 2011-10-15 23:39
Dlaczego nie, element a_ij staje się elementem b_ji, jeżeli b to elementy macierzy a po transpozycji. To właśnie miałem na myśli mówiąc zamiana indeksów. Edit: heh, tak, tylko że sam obrót to nie transpozycja. My bad. - Endrju 2011-10-16 00:44

Pozostało 580 znaków

2011-10-15 21:29
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ć?

Pozostało 580 znaków

2011-10-15 22:34
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

Pozostało 580 znaków

2011-10-15 23:31
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];

Pozostało 580 znaków

2011-10-15 23:35
0

Tak, też nie jest dobrze

Pozostało 580 znaków

2011-10-16 02:23
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;
}

"(...) otherwise, the behavior is undefined".

Pozostało 580 znaków

2011-10-16 10:37
0

Faktycznie dzięki za pomoc

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

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