[C++] Odwracanie tablicy dwuwymiarowej

Kryk
Użytkownik
Użytkownik
Posty: 114
Rejestracja: 19 lut 2009, o 17:18
Płeć: Mężczyzna
Podziękował: 11 razy
Pomógł: 15 razy

[C++] Odwracanie tablicy dwuwymiarowej

Post autor: Kryk »

Mam zadanie takie jak w temacie
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

Czyli obracamy o \(\displaystyle{ 90 ^{o}}\) w prawo

Kod: Zaznacz cały

#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;
}
Nie mam pomysłu jak to dalej robić, proszę o pomoc
Ostatnio zmieniony 16 paź 2011, o 11:01 przez Afish, łącznie zmieniany 1 raz.
Powód: Poprawa wiadomości.
chlorofil
Użytkownik
Użytkownik
Posty: 548
Rejestracja: 16 cze 2010, o 18:30
Płeć: Mężczyzna
Lokalizacja: Warszawa
Podziękował: 29 razy
Pomógł: 96 razy

[C++] Odwracanie tablicy dwuwymiarowej

Post autor: chlorofil »

Jak na razie to pobrałeś dane. I ok, dobry początek. Teraz musisz się zastanowić jak skonstruować 2 następne pętle, czyli co dać w inicjalizatorze pętli, co w ograniczniku i co w kroku (gdzie będzie ++ a gdzie --).
Kryk
Użytkownik
Użytkownik
Posty: 114
Rejestracja: 19 lut 2009, o 17:18
Płeć: Mężczyzna
Podziękował: 11 razy
Pomógł: 15 razy

[C++] Odwracanie tablicy dwuwymiarowej

Post autor: Kryk »

czy pierwsza pętla będzie wyglądać tak

Kod: Zaznacz cały

for(i = n-1; i >= 0; i--)
?
jeżeli tak proszę o jakąś podpowiedź do drugiej a jeżeli nie to do obu :p,

-- 15 paź 2011, o 21:44 --

Kod: Zaznacz cały

#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 należy proszę o pomoc-- 16 paź 2011, o 10:38 --Zadanie już zrobiłem może komuś się przyda rozwiązanie

Kod: Zaznacz cały

#include <iostream>

using namespace std;

const int MAXP = 100;

int main()
{
int m, n;
int i, j;
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 < m; ++i) { 
  for(j = 0; j < n; ++j) {
    S[i][n - j - 1] = P[j][i];
  }
}
      
for(i = 0; i < m; ++i) { 
  for(j = 0; j < n; ++j) {
    cout << S[i][j] << " ";
  }
  cout << endl;
}

                 
return 0;
}
pattom
Użytkownik
Użytkownik
Posty: 13
Rejestracja: 11 wrz 2018, o 10:57
Płeć: Mężczyzna
Podziękował: 6 razy

[C++] Odwracanie tablicy dwuwymiarowej

Post autor: pattom »

Witam,

a jak to będzie z obrotem tablicy w lewo ale dla liter ?

Wejście:
3 3 // wiersze i kolumny
pro
sto
kat

Wyjście
oot
rta
psk
Awatar użytkownika
leg14
Użytkownik
Użytkownik
Posty: 3132
Rejestracja: 5 lis 2014, o 20:24
Płeć: Mężczyzna
Lokalizacja: Radom
Podziękował: 154 razy
Pomógł: 475 razy

[C++] Odwracanie tablicy dwuwymiarowej

Post autor: leg14 »

A czym się różni używanie znaków od liczb?
pattom
Użytkownik
Użytkownik
Posty: 13
Rejestracja: 11 wrz 2018, o 10:57
Płeć: Mężczyzna
Podziękował: 6 razy

[C++] Odwracanie tablicy dwuwymiarowej

Post autor: pattom »

leg14 pisze:A czym się różni używanie znaków od liczb?
W sumie niczym rozwiązany problem.

Ale mam inny:

jak można obrócić tablicę w lewo o jeden krok i tylko po obwodzie?

Wiem jak obrócić o 90 stopni ale jak przesunąć o jedną komórkę nie wiem

dla danych wejściowych:
4 5 // liczba kolumn i wierszy
1 2 3 4
5 6 7 8
9 0 0 9
1 2 3 1
1 2 3 2

Dane wyjściowe:
2 3 4 8
1 6 7 9
5 0 0 1
9 2 3 2
1 1 2 3

Obrót o 90 stopni w lewo mam tak (kod wyżej pomocny:-) ):

Kod: Zaznacz cały

#include <iostream>
using namespace std;
 
int maxp = 100;
int main()
{
int m, n,i,j;
char P[maxp][maxp];
cin >> n >> m; // liczba wierszy i kolumn
 
for( i = 0; i < n; i++ ) // wczytywanie
{
    for( j = 0; j < m; j++ )
    {
        cin >> P[ i ][ j ];
    }
}
for( i = 0; i < m; ++i ) { // wypisywanie
    for( j = 0; j < n; ++j ) {
        cout << P[ j ][ m - i - 1  ] ;
    }
    cout << "
";
}
 
return 0;
}
  
dla 90 stopni:
wejściowe:
3 3
qqq
eee
ddd

wyjściowe:
qed
qed
qed
ODPOWIEDZ