Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

[C++]Obrócenie tablicy w prawo

Ostatnio zmodyfikowano 2013-11-06 18:13
Autor Wiadomość
waldorm
Temat założony przez niniejszego użytkownika
[C++]Obrócenie tablicy w prawo
» 2013-11-06 02:11:30
Mam napisać program który wczytuje tablice dwu wymiarowa i potem wypluwa ją obróconą o 90 stopni w prawo czyli przykład:

Wejście:
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

I jest taki problem, że mój program gdy jest mniej wierszy od kolumn się zupełnie  wysypuje, a gdy jest więcej kolumn niż wierszy to ucina pierwszy rząd po obróceniu...

W czym problem?

Mój kod:

C/C++
#include <iostream>

using namespace std;

int main()
{
    int w, k;
    cin >> w >> k;
    int ** tab = new int *[ w ]; //alokacja pamieci
   
    if( w >= 2 && k <= 100 )
    {
        for( int i = 0; i < w; ++i )
        {
            tab[ i ] = new int[ k ]; //alokacja pamieci
            for( int j = 0; j < k; ++j ) //wpisanie wartosci do tablicy
                 cin >> tab[ i ][ j ];
           
        }
        for( int i = w; i > 0; --i, cout << endl )
        for( int j = k; j > 0; --j )
        {
            if( tab[ j - 1 ][ i - 1 ] != 0 ) cout << tab[ j - 1 ][ i - 1 ] << '\t';
           
        }
        for( int i( 0 ); i < w; ++i )
             delete[] tab[ i ]; //uwolnienie pamieci
       
        delete[] tab; //uwolnienie pamieci
        tab = NULL;
       
    }
    return 0;
}
P-95434
den93
» 2013-11-06 05:16:32
Masz błędnie zrobione pętle for odpowiedzialne za przekręcanie prostokąta, poza tym wszystko chyba jest dobrze zrobione. Może to ci pomoże w napisaniu odpowiedniego algorytmu:
Obrazek pomocniczy
Obrazek pomocniczy
W tabelce 'ekran' lewa kolumna to jest numer linii w konsoli a prawa to numer liczby (kolumna).
Stałe w i k charakteryzują tablice w pamięci.
P-95435
docentpp
» 2013-11-06 08:45:55
Zakładając , że mamy macierz dwuwymiarową
tab[w][k]; w=ilość wierszy, k=ilość kolumn;
to obrót w prawo o 90 stopni :

C/C++
for( int j = 0; j < k; j++ )
{
    for( int i = w - 1; i >= 0; i-- )
         cout << tab[ i ][ j ] << " ";
   
    cout << endl;
}
 
P-95438
waldorm
Temat założony przez niniejszego użytkownika
» 2013-11-06 18:13:51
Dzięki za pomoc.
P-95481
« 1 »
  Strona 1 z 1