(C++) Tablica dwuwymiarowa, dynamiczna

0

Zadanie polega na stworzeniu tablicy dwuwymiarowej oraz wypelnieniu jej, nastepnie w wejsciu podawany jest nr wiersza oraz rodzaj przesuniecia (prawo lub lewo) tablicy. Udalo mi sie napisac do tej pory cos takiego, najlepszym rozwiazaniem na przesuniecie tablicy bedzie stworzenie funkcji, do ktorej wyslemy wiersz i wlasnie z tym mam problem. Nie wiem jak napisac, aby dac do zrozumienia kompilatorowi, ze chce wyslac tylko wiersz z przypisanymi wartosciami a nie cala tablice.

Tyle udalo mi sie zrobic w tej kwestii w funkcji napisalem zwykle przesuniecie tablicy jednowymiarowej i utknalem na dobre ... :

 
#include <iostream>

using namespace std;

void lewo(int **tablica, int kolumna)
{
    /* przesuniecie dla tablicy jednowymiarowej
    int temp=tablica[0];

    for(int i=0;i<kolumna-1;++i){

    tab=tab[i+1];}

    tab[TAB_SIZE]=temp;
    
    */
}



void prawo(int **tablica, int kolumna)
{
    /* przesuniecie dla tablicy jednowymiarowej
    int temp=tablica[0];

    for(int i=0;i<kolumna-1;++i){

    tab=tab[i+1];}

    tab[TAB_SIZE]=temp;
    
    */
}



int main()

{
int wiersz, kolumna, zmiana;
cin >> wiersz >> kolumna;
int**tablica = new int*[wiersz];
for (int i = 0; i < wiersz; ++i) {
    tablica[i] = new int[kolumna];
}

for (int i =0; i<wiersz; ++i)
{
    for (int j=0; j<kolumna; ++j)
    {
      tablica[i][j]= i + j;
      cout << tablica[i][j] << " ";
    } cout << endl;
}

lewo(tablica, kolumna);

/*


zmiana tablicy


*/

return 0;
}

0

void lewo(int *tablica,int kolumna)
{
int temp=tablica[0],p=0;
for(int i=1;i<kolumna;p=i++) tablica[p]=tablica[i];
tab[p]=temp;
}

// w main
cin>>wiersz; // który wiersz przesuwamy
lewo(tablica[wiersz],kolumna);

0

Wlasnie nie dziala tak jak bym chcial, jesli napisze taka funkcje to zostanie wyslane tyle wierszy ile napisze czyli np.3 a chialbym aby wiersz nr3 zostal wyslany i przesuniety ... :(.

1
Laik93 napisał(a):

Wlasnie nie dziala ...

Laik93 napisał(a):

... jesli napisze ...
Te dwa cytaty są nawzajem wykluczające. Napisz i zobacz.

0
Laik93 napisał(a):
    /* przesuniecie dla tablicy jednowymiarowej
    int temp=tablica[0];

Używasz złego typu danych. Powinno być int*.

Laik93 napisał(a):
    for(int i=0;i<kolumna-1;++i){

    tab=tab[i+1];}

No tu jest poknocone.

tab[i]=tab[i+1]
Laik93 napisał(a):
    tab[TAB_SIZE]=temp;

Jeśli tablica ma rozmiar TAB_SIZE to jej ostatnią komórką jest tab[TAB_SIZE - 1]. Poza tym skoro przesuwamy komórki [1..kolumna-1] na [0..kolumna-2] to komórka która robi się "wolna" to komórka [kolumna-1], czyli nie tab[TAB_SIZE] = temp a tab[kolumna - 1] = temp.
Zadziała to w ten sposób, że wszystkie komórki znajdujące się przed komórka wskazaną (kolumna) zostaną przesunięte o 1 w lewo, a komórka pierwsza (0) wskoczy na wolne miejsce (kolumna - 1). Jeśli nie o takie przesuwanie ci chodzi to napisz o jakie.

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