С++
Готовый код, который делает сдвиг динамического двумерного массива, который ввел пользователь на n вправо или вниз. Должен состоять из 2х функций (1я через 2й индекс, а 2я через массив через приведенный индекс
А точнее, что нужно изменить
Перепиши мне след функцию shiftDown (можно сделать перегрузку), эту функцию сделать через одинарный индекс, для этого выделаем дополнительную память в main под эту функцию, как единый индекс, данные после сдвига вправо копируем в эту и отправь мне весь изменённый код чтобы он работал
#include
using namespace std;
void fillMatrix(int** matrix, int rows, int cols) {
cout << "Введите значения матрицы:\n";
for (int i = 0; i < rows; i++) {
for (int j = 0; j < cols; j++) {
cout << "matrix[" << i << "][" << j << "] = ";
cin >> matrix[i][j];
}
}
}
void shiftRight(int** matrix, int rows, int cols, int shift) {
int** tempMatrix = new int* [rows];
for (int i = 0; i < rows; i++) {
tempMatrix[i] = new int[cols];
for (int j = 0; j < cols; j++) {
tempMatrix[i][j] = matrix[i][j];
}
}
for (int i = 0; i < rows; i++) {
for (int j = 0; j < cols; j++) {
int shiftedCol = (j + shift) % cols;
matrix[i][shiftedCol] = tempMatrix[i][j];
}
}
for (int i = 0; i < rows; i++) {
delete[] tempMatrix[i];
}
delete[] tempMatrix;
}
void shiftDown(int** matrix, int rows, int cols, int shift) {
int** tempMatrix = new int* [rows];
for (int i = 0; i < rows; i++) {
tempMatrix[i] = new int[cols];
for (int j = 0; j < cols; j++) {
tempMatrix[i][j] = matrix[i][j];
}
}
for (int i = 0; i < rows; i++) {
for (int j = 0; j < cols; j++) {
int shiftedRow = (i + shift) % rows;
matrix[shiftedRow][j] = tempMatrix[i][j];
}
}
for (int i = 0; i < rows; i++) {
delete[] tempMatrix[i];
}
delete[] tempMatrix;
}
void printMatrix(int** matrix, int rows, int cols) {
cout << "Матрица:\n";
for (int i = 0; i < rows; i++) {
for (int j = 0; j < cols; j++) {
cout << matrix[i][j] << " ";
}
cout << endl;
}
}
int main() {
setlocale(LC_ALL, "Rus");
int rows, cols, shiftRightVal, shiftDownVal;
cout << "Введите количество строк матрицы: ";
cin >> rows;
cout << "Введите количество столбцов матрицы: ";
cin >> cols;
int** matrix = new int* [rows];
for (int i = 0; i < rows; i++) {
matrix[i] = new int[cols];
}
fillMatrix(matrix, rows, cols);
printMatrix(matrix, rows, cols);
cout << "Введите количество столбцов, на которое нужно сдвинуть матрицу вправо: ";
cin >> shiftRightVal;
shiftRight(matrix, rows, cols, shiftRightVal);
printMatrix(matrix, rows, cols);
cout << "Введите количество строк, на которое нужно сдвинуть матрицу вниз: ";
cin >> shiftDownVal;
shiftDown(matrix, rows, cols, shiftDownVal);
printMatrix(matrix, rows, cols);
cout << "Введите дополнительное количество строк, на которое нужно сдвинуть матрицу вниз: ";
cin >> shiftDownVal;
shiftDown(matrix, rows, cols, shiftDownVal);
printMatrix(matrix, rows, cols);
for (int i = 0; i < rows; i++) {
delete[] matrix[i];
}
delete[] matrix;
}
Answers & Comments
Ответ:
С++
Готовый код, который делает сдвиг динамического двумерного массива, который ввел пользователь на n вправо или вниз. Должен состоять из 2х функций (1я через 2й индекс, а 2я через массив через приведенный индекс
А точнее, что нужно изменить
Перепиши мне след функцию shiftDown (можно сделать перегрузку), эту функцию сделать через одинарный индекс, для этого выделаем дополнительную память в main под эту функцию, как единый индекс, данные после сдвига вправо копируем в эту и отправь мне весь изменённый код чтобы он работал
#include
using namespace std;
void fillMatrix(int** matrix, int rows, int cols) {
cout << "Введите значения матрицы:\n";
for (int i = 0; i < rows; i++) {
for (int j = 0; j < cols; j++) {
cout << "matrix[" << i << "][" << j << "] = ";
cin >> matrix[i][j];
}
}
}
void shiftRight(int** matrix, int rows, int cols, int shift) {
int** tempMatrix = new int* [rows];
for (int i = 0; i < rows; i++) {
tempMatrix[i] = new int[cols];
for (int j = 0; j < cols; j++) {
tempMatrix[i][j] = matrix[i][j];
}
}
for (int i = 0; i < rows; i++) {
for (int j = 0; j < cols; j++) {
int shiftedCol = (j + shift) % cols;
matrix[i][shiftedCol] = tempMatrix[i][j];
}
}
for (int i = 0; i < rows; i++) {
delete[] tempMatrix[i];
}
delete[] tempMatrix;
}
void shiftDown(int** matrix, int rows, int cols, int shift) {
int** tempMatrix = new int* [rows];
for (int i = 0; i < rows; i++) {
tempMatrix[i] = new int[cols];
for (int j = 0; j < cols; j++) {
tempMatrix[i][j] = matrix[i][j];
}
}
for (int i = 0; i < rows; i++) {
for (int j = 0; j < cols; j++) {
int shiftedRow = (i + shift) % rows;
matrix[shiftedRow][j] = tempMatrix[i][j];
}
}
for (int i = 0; i < rows; i++) {
delete[] tempMatrix[i];
}
delete[] tempMatrix;
}
void printMatrix(int** matrix, int rows, int cols) {
cout << "Матрица:\n";
for (int i = 0; i < rows; i++) {
for (int j = 0; j < cols; j++) {
cout << matrix[i][j] << " ";
}
cout << endl;
}
}
int main() {
setlocale(LC_ALL, "Rus");
int rows, cols, shiftRightVal, shiftDownVal;
cout << "Введите количество строк матрицы: ";
cin >> rows;
cout << "Введите количество столбцов матрицы: ";
cin >> cols;
int** matrix = new int* [rows];
for (int i = 0; i < rows; i++) {
matrix[i] = new int[cols];
}
fillMatrix(matrix, rows, cols);
printMatrix(matrix, rows, cols);
cout << "Введите количество столбцов, на которое нужно сдвинуть матрицу вправо: ";
cin >> shiftRightVal;
shiftRight(matrix, rows, cols, shiftRightVal);
printMatrix(matrix, rows, cols);
cout << "Введите количество строк, на которое нужно сдвинуть матрицу вниз: ";
cin >> shiftDownVal;
shiftDown(matrix, rows, cols, shiftDownVal);
printMatrix(matrix, rows, cols);
cout << "Введите дополнительное количество строк, на которое нужно сдвинуть матрицу вниз: ";
cin >> shiftDownVal;
shiftDown(matrix, rows, cols, shiftDownVal);
printMatrix(matrix, rows, cols);
for (int i = 0; i < rows; i++) {
delete[] matrix[i];
}
delete[] matrix;
}
Объяснение:
Verified answer
Ответ:
Ну ты конечно задачку дал. За такое мне платить должны, если честно. Я починил твой код и сделал как ты просил, можешь сам убедиться через компилятор любой. Собственно код:
#include <iostream>
using namespace std;
void fillMatrix(int* matrix, int rows, int cols) {
cout << "Введите значения матрицы:\n";
for (int i = 0; i < rows; i++) {
for (int j = 0; j < cols; j++) {
cout << "matrix[" << i << "][" << j << "] = ";
cin >> *(matrix + i*cols + j);
}
}
}
void shiftRight(int* matrix, int rows, int cols, int shift) {
int* tempMatrix = new int[rows*cols];
for (int i = 0; i < rows; i++) {
for (int j = 0; j < cols; j++) {
*(tempMatrix + i*cols + j) = *(matrix + i*cols + j);
}
}
for (int i = 0; i < rows; i++) {
for (int j = 0; j < cols; j++) {
int shiftedCol = (j + shift) % cols;
*(matrix + i*cols + shiftedCol) = *(tempMatrix + i*cols + j);
}
}
delete[] tempMatrix;
}
void shiftDown(int* matrix, int rows, int cols, int shift) {
int* tempMatrix = new int[rows*cols];
for (int i = 0; i < rows; i++) {
for (int j = 0; j < cols; j++) {
*(tempMatrix + i*cols + j) = *(matrix + i*cols + j);
}
}
int* tempMatrix2 = new int[rows*cols];
for (int i = 0; i < rows; i++) {
for (int j = 0; j < cols; j++) {
int shiftedRow = (i + shift) % rows;
*(tempMatrix2 + shiftedRow*cols + j) = *(tempMatrix + i*cols + j);
}
}
for (int i = 0; i < rows; i++) {
for (int j = 0; j < cols; j++) {
*(matrix + i*cols + j) = *(tempMatrix2 + i*cols + j);
}
}
delete[] tempMatrix;
delete[] tempMatrix2;
}
void printMatrix(int* matrix, int rows, int cols) {
cout << "Матрица:\n";
for (int i = 0; i < rows; i++) {
for (int j = 0; j < cols; j++) {
cout << *(matrix + i*cols + j) << " ";
}
cout << endl;
}
}
int main() {
setlocale(LC_ALL, "Rus");
int rows, cols, shiftRightVal, shiftDownVal;
cout << "Введите количество строк матрицы: ";
cin >> rows;
cout << "Введите количество столбцов матрицы: ";
cin >> cols;
int* matrix = new int[rows*cols];
fillMatrix(matrix, rows, cols);
printMatrix(matrix, rows, cols);
cout << "Введите количество столбцов, на которое нужно сдвинуть матрицу вправо: ";
cin >> shiftDownVal;
shiftDown(matrix, rows, cols, shiftDownVal);
printMatrix(matrix, rows, cols);
delete[] matrix;
}
С тебя лучший ответ, дружище.