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