


Программирование
+3Задание 4 по Теме Функции. Перегрузка Функций. Рекурсия. На языке программирования C++
Пожалуйста. Помогите мне написать рекурсивную функцию, которая принимает двухмерный массив целых чисел и количество сдвигов и выполняет круговой сдвиг массива ВНИЗ.
Например:
Дан массив:
4 5 6 7
1 2 4 1
4 3 6 8
Сдвигаем ВНИЗ НА ОДИН (должно быть потом вот так):
4 3 6 8
4 5 6 7
1 2 4 1
ПРОСЬБА, НЕЙРОСЕТЬ НЕ ИСПОЛЬЗОВАТЬ!!!
НЕ КОПИРОВАТЬ НЕРАБОТАЮЩИЕ КОДЫ С++ С ИНТЕРНЕТА!
Читайте внимательно задание. И помогите мне с этим
Дураки исключаются в моём вопросе
Спасибо за ответы!
По дате
По рейтингу
1234567891011121314151617181920212223242526272829303132333435363738
#include <iostream>
#include <iomanip>
using namespace std;
void scroll(int** arr, size_t str, int dist)
{
if (dist > str) dist = dist % str;
if (!dist) return;
for (size_t i = str - 1; i > 0; i--) swap(arr[i], arr[i - 1]);
scroll(arr, str, dist - 1);
}
void print(int** arr, size_t str, size_t col)
{
for (size_t i = 0; i < str; i++)
{
for (size_t j = 0; j < col; j++) cout << setw(6) << left << arr[i][j];
puts("");
}
}
int main()
{
size_t str, col, dist;
puts("Enter array sizes: str and col");
cin >> str >> col;
int** arr = new int* [str];
arr[0] = new int[str * col];
for (size_t i = 1; i < str; i++) arr[i] = arr[0] + i * col;
puts("Enter elements");
for (size_t i = 0; i < str * col; i++) cin >> arr[0][i];
puts("Your arr:");
print(arr, str, col);
puts("Enter dist:");
cin >> dist;
scroll(arr, str, dist);
puts("Your arr:");
print(arr, str, col);
}
1234567891011121314151617181920212223242526272829303132333435363738394041
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
typedef unsigned char byte;
void rotate(int* matrix, int rows, int cols, int shift) {
shift %= rows;
if (shift < 0)
shift += rows;
if (shift) {
void* buffer = malloc(sizeof(int) * cols);
if (buffer) {
memcpy(buffer, matrix + ((rows - 1) * cols), sizeof(int) * cols);
memmove(matrix + cols, matrix, (rows - 1) * cols * sizeof(int));
memcpy(matrix, buffer, sizeof(int) * cols);
free(buffer);
rotate(matrix, rows, cols, shift - 1);
}
}
}
void print(int* matrix, int cols, int rows) {
for (int i = 0; i < rows; i++) {
printf("%i", matrix[i * cols]);
for (int j = 1; j < cols; j++)
printf(", %i", matrix[i*cols+j]);
printf("\n");
}
printf("\n");
}
int matrix[3][3] = {
{0,1,0},
{1,0,1},
{0,1,0},
};
int main() {
print((int*)matrix, 3, 3);
rotate((int*)matrix, 3, 3, -1);
print((int*)matrix, 3, 3);
}

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748
#include <iostream>
#include <vector>
void shiftDown(std::vector<std::vector<int>>& matrix, int shifts) {
if (shifts < 0) {
std::cerr << "Number of shifts must be non-negative" << std::endl;
return;
}
int rows = matrix.size();
if (rows == 0) return;
int cols = matrix[0].size();
shifts %= rows; // Оптимизация, чтобы избежать лишних повторений
if (shifts == 0) return;
for (int s = 0; s < shifts; s++) {
for (int col = 0; col < cols; col++) {
int tmp = matrix[rows - 1][col];
for (int row = rows - 1; row > 0; row--) {
matrix[row][col] = matrix[row - 1][col];
}
matrix[0][col] = tmp;
}
}
}
int main() {
std::vector<std::vector<int>> matrix = {
{4, 5, 6, 7},
{1, 2, 4, 1},
{4, 3, 6, 8}
};
int shifts = 1;
shiftDown(matrix, shifts);
for (const auto& row : matrix) {
for (int val : row) {
std::cout << val << ' ';
}
std::cout << std::endl;
}
return 0;
}
Больше по теме