#include <iostream>
#include <iomanip>
using namespace std;
void fill_matrix(int value, // Значение для следующего элемента матрицы.
int iter, // Порядковый номер итерации (вызова функции).
int curr_row, // Текущий ряд (строка).
int curr_col, // Текущая колонка (столбец).
int rows, // Количество рядов в матрице.
int cols, // Количество колонок в матрице.
int** mtrx) { // Матрица.
// Получаем значение шага по горизонтали и вертикали
// в зависимости от номера итерации: если четный, то
// движемся вправо и вверх, если нечетный - то влево и вниз.
int x_step = (iter % 2 == 0 ? 1 : -1);
int y_step = (iter % 2 == 0 ? -1 : 1);
// Цикл для заполнения элементов в текущем ряду (по горизонтали).
for (int i = 0; i < iter; ++i) {
curr_col += x_step;
if (curr_col < 0 || curr_col >= cols) {
return;
}
mtrx[curr_row][curr_col] = value++;
}
// Цикл для заполнения элементов в текущем столбце (по вертикали).
for (int j = 0; j < iter; ++j) {
curr_row += y_step;
if (curr_row < 0 || curr_row >= rows) {
return;
}
mtrx[curr_row][curr_col] = value++;
}
// Инкремент счетчика итераций.
++iter;
// Рекурсивный вызов с текущими значениями.
fill_matrix(value, iter, curr_row, curr_col, rows, cols, mtrx);
}
int main()
{
//Матрица
int** mtrx;
//Получаем от пользователя кол-во строк и столбцов
cout << "Number of rows: ";
int rows; // кол-во строк.
cin >> rows;
cout << "Number of columns: ";
int cols; // кол-во столбцов.
cin >> cols;
//Выделяем память для элементов массива.
mtrx = new int* [rows];
for (int i = 0; i < rows; ++i) {
mtrx = new int[cols];
for (int j = 0; j < cols; ++j) {
mtrx[j] = 0;
}
}
// Текущая позиция по вертикали.
int curr_row = rows / 2;
// Текущая позиция по горизонтали.
int curr_col = cols / 2;
// Заполнение матрицы.
// Первый элемент заносим в матрицу явно.
mtrx[curr_row][curr_col] = 1;
fill_matrix(2, 1, curr_row, curr_col, rows, cols, mtrx);
//Выводим матрицу
for (int i = 0; i < rows; i++) {
for (int j = 0; j < cols; j++) {
cout << setw(5) << mtrx[j];
}
cout << endl;
}
// Освобождаем выделенную память.
for (int i = 0; i < rows; ++i) {
delete [] mtrx;
}
delete [] mtrx;
system("PAUSE");
return 0;
}
программа работает наоборот, а надо как на рисунке помогите найти ошибку
#include <iomanip>
using namespace std;
int main()
{
//Кол-во строк и столбцов
int n, m;
//Матрица
int** mtrx;
int l, c;
//Получаем от пользователя кол-во строк и столбцов
cout << "N: ";
cin >> n;
cout << "M: ";
cin >> m;
//Выделяем память для элементов массива
mtrx = new int*[n];
for (int i = 0; i < n; i++)
mtrx = new int[m];
//Виток спирали
l = 0;
//Значение текужего элемента
c = 81;
//Обрабатываем отдельные случаи: матрица-строка и матрица-столбец
if (n == 81)
for (int i = 1; i < m; i++)
mtrx[0] = i + 1;
else if (m == 81)
for (int i = 0; i < n; i++)
mtrx[0] = i + 1;
else
//Если матрица не является матрицей-строкой или матрицей-столбцом
while (c <= m * n)
{
//Верхняя часть витка спирали
for (int i = 81; (i > m - l) && (c <= m * n); i++)
mtrx[l] = c++;
//Правая часть
for (int i = l - 1; (i > n - l) && (c <= m * n); i++)
mtrx[m - l - 1] = c++;
//Нижняя часть
for (int i = m - l - 2; (i >= l) && (c <= m * n); i--)
mtrx[n - l - 1] = c++;
//Правая часть
for (int i = n - l - 2; (i > l) && (c <= m * n); i--)
mtrx[l] = c++;
//Переходим на следующий виток
l++;
}
//Выводим матрицу
for (int i = 0; i < n; i++)
{
for (int j = 0; j < m; j++)
cout << setw(5) << mtrx[j];
cout << endl;
}
system("PAUSE");
return 0;
}
А как вы это делали? Где цикл вращения?
вот с этим я запуталась
Вариант, предложенный ТС показался мне несколько запутанным. Да и не работала программа ни наоборот, ни как-то еще... Могу предложить свой вариант:
sem2711, спасибо вы мне очень помогли, попытаюсь разобраться что у меня не так было