Napisz funkcję, która dostaje jako argumenty dwuwymiarową tablicę o elementach typu int oraz jej wymiary, i zmienia kolejność wierszy w tablicy w taki sposób, ze wiersz pierwszy ma sie znaleźć na miejscu drugiego, wiersz drugi ma się znaleźć na miejscu trzeciego itd., natomiast ostatni wiersz ma się znaleźć na miejscu pierwszego.

Odpowiedź :

Odpowiedź:

#include <iostream>

#include <vector>

void swap(std::vector<std::vector<int>> &tab, int m, int n) { //funkcja

   std::vector<int> tmp(3); //vector tymczasowy przechowujący linijkę w miejce której przenosimy linijkę wczesniejsza

   for (int i = 0; i < m - 1; i++) { //operacja przenoszenia

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

           tmp[i] = tab[i + 1][j]; //zapisujemy kolejna linijke do tmp

           tab[i + 1][j] = tab[i][j]; //podmieniamy kolejne linijki

           tab[i][j] = tmp[i];

       }

   }

}

int main() {

   std::vector<std::vector<int>> tab = {{1, 2, 3}, //tworzymy wektor dwuwymiarowy

                                        {4, 5, 6},

                                        {7, 8, 9}};

   int m = 3; // wymiary wektora

   int n = 3;

   swap(tab, m, n); //wywolanie funkcji

   

   for (int i = 0; i < tab.size(); i++) { //wyswietlenie zmienionej tablicy

       for (int j = 0; j < tab[i].size(); j++) {

           std::cout << tab[i][j] << " ";

       }

       std::cout << std::endl;

   }

   return 0;

}

Wyjaśnienie:

Proszę bardzo. Robiłem to pierwszy raz w życiu i się udało xd. Całkiem ciężkie było. Jak coś niejasne to pisz, wyjaśnię

Odpowiedź:

#include <cstring>

#include <iostream>

template <typename T, std::size_t N, std::size_t M>

void roll_down(T (&tab)[N][M]) {

 int last_row[M];

 memcpy(last_row, tab[N - 1], sizeof(tab[N - 1]));

 for (int i = N - 1; i > 0; i--) {

   memcpy(tab[i], tab[i - 1], sizeof(tab[i - 1]));

 }

 memcpy(tab[0], last_row, sizeof(last_row));

}

template <typename T, std::size_t N, std::size_t M>

void print(T (&tab)[N][M]) {

 for (int i = 0; i < N; ++i) {

   for (int j = 0; j < M; ++j) {

     std::cout << tab[i][j] << ' ';

   }

   std::cout << std::endl;

 }

}

int main() {

 int table[4][3] = {{1, 1, 1}, {2, 2, 2}, {3, 3, 3}, {4, 4, 4}};

 std::cout << "Przed:" << std::endl;

 print(table);

 std::cout << std::endl;

 roll_down(table);

 std::cout << "Po:" << std::endl;

 print(table);

 return 0;

}

Wynik:

Przed:

1 1 1

2 2 2

3 3 3

4 4 4

Po:

4 4 4

1 1 1

2 2 2

3 3 3