Предмет: Информатика, автор: 01Serj01

С++
Готовый код, который делает сдвиг динамического двумерного массива, который ввел пользователь на 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;


}

Ответы

Автор ответа: VeryTalking
0

Ответ:

С++

Готовый код, который делает сдвиг динамического двумерного массива, который ввел пользователь на 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;

}

Объяснение:

Автор ответа: kotakasi52
0

Ответ:

Ну ты конечно задачку дал. За такое мне платить должны, если честно. Я починил твой код и сделал как ты просил, можешь сам убедиться через компилятор любой. Собственно код:


#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;

}

С тебя лучший ответ, дружище.

Приложения:

01Serj01: Небольшие уточнение, матрица не делает сдвига вправо, и все это сделано через 1 индекс, а нужно индекс на индексе, и нужно чтобы только функция shiftDown делала сдвиг на n от пользователя через один индекс для этого - функция shiftDown принимает один индекс, тогда для этого нужно в int main выделить дополнительную память под эту матрицу как один индекс, уже готовые данные которые мы ввели и сдвинули скопировать туда. Что-то типа этого
Похожие вопросы