Tablica - "rozpychanie" elementow.

0

Witam, mam pewien problem z czescia kodu. Kod ogolnie dziala, nie wiem tylko jak napisac jedna czesc.
Polecenie brzmi tak:
Każda linia składa się z pojedynczej litery oznaczającej rodzaj operacji i jednej lub dwóch liczb naturalnych będących paramtrami tego polecenia. Obsługiwane polecenia:
o 'P' k - przesunięcie wiersza o numerze k w prawo.
o 'L' k - przesunięcie wiersza o numerze k w lewo.
o 'G' k - przesunięcie kolumny o numerze k w g
o 'D' k - przesunięcie kolumny o numerze k w dół.
o 'W' k l - wstawienie liczby 0 do komórki w wierszu k i kolumnie l.
Liczba 0 jest wstawiana do komórki o danym indeksie, a istniejące dane są przesuwane ( "rozpychane" ) na zewnętrz od wstawianej wartości, taj jak na poniższym przykładzie:
Tablica przed wstawieniem liczby
a
b
c d e f g h
i
j
Tablica po wstawieniu liczby
b
e
d e 0 e f g
e
i

kod:

#include <iostream>

using namespace std;

int tab[1000][1000];
int n, m;
int temp;


void przesuniecie_w_gore (int k)
{
    temp = tab [0][k];             
    for(int i=0; i<=n; i++)
        {
            tab[i][k]=tab[i+1][k];
        }
}

void przesuniecie_w_lewo (int k)
{
    temp = tab[k][0];
    for(int i=0; i<=n; i++)
        {
            tab[k][i]=tab[k][i+1];
        }

}

void przesuniecie_na_dol (int k)
{
    temp = tab[0][k];
    for(int i=n; i>=1; i--)
        {
            tab[i][k]=tab[i-1][k];
        }
    tab[0][k] = tab[n][k];
}

void przesuniecie_w_prawo (int k)
{
    for(int i=m; i>=0; i--)
        {
            tab[k][i]=tab[k][i-1];
        }
    tab[k][0] = tab[k][m]; 
}

int main()
{

cin >> m >> n;
for (int i=0; i<n; i++)                 
        {
            for (int j=0; j<m; j++)
                {
                    tab[i][j]=j+i;
                    cout<<tab[i][j]<<' ';
                }
        cout<<endl;
        }
cout<<endl;

int k;
char a;
while(cin>>a && a!='K'){
cin>>k;

switch(a)
    {
        case 'P':
            {
                przesuniecie_w_prawo(k);

                break;
            }

        case 'L':
            {
                przesuniecie_w_lewo (k);
                tab[k][m-1] = temp;       
                break;
            }

        case 'G':
            {
                przesuniecie_w_gore(k);
                tab[n-1][k] = temp;
                break;
            }

        case 'D':
            {
                przesuniecie_na_dol(k);
                tab[n+1][k] = temp;
                break;
            }

        case 'W':                                           /***PROBLEM Z TA CZESCIA KODU***/
            {
                int l;
                cin >> k >> l;
                tab[k][l]=0;

            }
    }}

            for (int i=0; i<n; i++)      
                {
            for (int j=0; j<m; j++)
                {

                    cout<<tab[i][j]<<' ';
                }
        cout<<endl;
                }



return 0;
}
 

Bylabym wdzieczna za pomoc

0

Przykład:

Wejscie Wyjscie

3 3 2 0 1
P 0 1 2 3
L 2 3 4 2
K

3 3 1 3 2
G 0 2 1 3
D 1 0 2 4
K

3 4 0 2 2 3
W 1 1 2 0 2 3
K 2 2 4 5

0

ja bym zmodyfikował funkcje przesuwające tak, by umiały przesuwać tylko część wiersza (kolumny) i wszystkie 4 funkcje wykorzystał do rozpychania

0

a w jaki sposob zmodyfikowac to? zreszta musi to byc zmodyfikowane tylko dla przypadku z litera W, bo w innych musi sie przesuwac cala kolumna lub wiersz

1

Obecnie:

  1. przesuwasz cały ciąg od 0 do m lub n

Dla początkujących:
2. możesz dodać do każdej metody 2 argumenty oznaczające początek i koniec przedziału dla który ma zostać przesunięty
3. wtedy dla standardowych użyć tych funkcji (LPGD) wywołujesz je z parametrami 0 i m (lub n)
4. w rozpychanie przeprowadzasz wywołując przesunięcia odpowiednich części wiersza i kolumny pilnując by przed każdym z nich w we wskazanej komórce znajdowała się stara wartość, a później do wskazanej komórki wstawiasz zero

Dla bardziej zaawansowanych:
5. Jak jesteś rozumiejacy, to wystarczy, że do każdej funkcji dodasz tylko jeden argument, a nie dwa
6. Może da się wykorzystać argumenty domyślne, by w LPGD sposób wywołania funkcji nie uległ zmianie i punkt 3. nie był potrzebny

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