Хотите улучшить этот вопрос? Добавьте больше подробностей и уточните проблему, отредактировав это сообщение.
Закрыт 2 года назад.
Задача заключается в выводе матрицы (через функции) спиралью, начиная с верхнего правого угла против часовой стрелки, т.е.
Но написанный мною код даже не запускается. Завершается работа (после ввода размеров матрицы) приложения .ехе, которое создаётся при запуске программы.
#include<iostream>
using namespace std;
//---------------------------------
int **Create(int row, int col); // создание матрицы
void Free(int **M, int row); // освобождение матрицы
void Print(int **M, int row, int col); //вывод матрицы
//---------------------------------
void Work(int **M, int row, int col); //заполнение матрицы
//---------------------------------
int main()
{
setlocale(LC_ALL,"Rus");
int matrixSize;
cout << "Введите размер квадратной матрицы: ";
cin >> matrixSize;
int **A = Create(matrixSize, matrixSize);
Work(A, matrixSize, matrixSize);
Print(A, matrixSize, matrixSize);
Free(A, matrixSize);
return 0;
}
//----------------------------------
int **Create(int row, int col)
{
int **M = new int *[row];
for (int i = 0; i < row; i++) {
M[i] = new int[col];
}
return M;
}
//---------------------------------
void Free(int **M, int row)
{
for (int i = 0; i < row; i++)
delete[] M[i];
delete[] M;
}
//----------------------------
void Print(int **M, int row, int col)
{
for (int i = 0; i < row; i++) {
for (int j = 0; j < col; j++) {
cout << M[i][j] << " ";
}
cout << endl;
}
}
//---------------------------------------------
void Work(int **M, int row, int col)
{
int value = 1, j;
int p = col / 2;
for (int k = 1; k <= p; k++)//цикл по номеру витка
{
for (j = col - k + 1; j > k - 1; j--) M[k - 1][j] = value++; //top right-to-left
for (j = k - 1; j < col - k + 1; j++) M[j][k - 1] = value++;//left top-to-bottom
for (j = k - 1; j < col - k + 1; j++) M[col - k][j] = value++;//bottom left-to-right
for (j = col - k + 1; j >= k; j--) M[j][col - k] = value++;//right bottom-to-top
}
if (col % 2 == 1) M[p][p] = col * col;
}
Помогите разобраться пожалуйста!
В функции Work
for (int k = 1; k <= p; k++)
{
for (j = col - k + 1; j > k - 1; j--) M[k - 1][j] = value++;
...
for (j = col - k + 1; j >= k; j--) M[j][col - k] = value++;
}
При k = 1
будет j = col - k + 1 = col
. То есть в первом цикле вы сразу лезете в M[0][col]
, а в последнем - в M[col][col - 1]
. А это, разумеется, вылеты за пределы массива.
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Перевод документов на английский язык: Важность и ключевые аспекты
Я хочу уточнить один момент, касающийся использования char для доступа к элементам массива