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

помогите в с++. программа ругается
Дана матрица (N+15)x(N+15), если сумма чисел в первой строке больше суммы чисел в первом столбце, тогда зеркально отобразить матрицу, иначе отсортировать по возрастанию, числа генерировать случайно в интервале
[-N-15; N+15].
#include
#include
#include
#include
using namespace std;

//int matrix[i][j];
//{
//const int i = 15;
//const int j = 15;
//}
int zd(int **mas, int N)
{
int sumi = 0;
int sumj = 0;
for (int i = 0; i < N; i++)
sumi += mas[i][0];
{
for (int j = 0; j < N; j++)
sumj += mas[j][0];

}
for (int i(0); i < N; i++)
{
for (int j(0); j < N; j++)
{
if (sumi > sumj)
{
cout << " Сумма чисел в первой строке больше суммы чисел в первом столбце. Зеркальное отображение матрицы: " << endl;
int tmp = mas[i][j];
mas[i][j] = mas[N - i - 1][j];
mas[N - i - 1][j] = tmp;
}
else
{
if (mas[j] > mas[j + 1])
{
cout << " Сумма чисел в первом столбце больше суммы чисел в первой строке. Сортировка по возростанию: " << endl;
int smp = mas[j][0];
mas[j] = mas[j + 1];
*mas[j + 1] = smp;
}
}
}
}
return **mas;
}
int main()
{
setlocale(LC_ALL, "Russian");
int N;
cout << "Введите размерность матрицы: ";
cin >> N;
// создание массива
int **mas = new int*[N];
for (int i(0); i < N; i++)
{
mas[i] = new int[N];
}
// заполнение массива
cout << " Заполненный массив: " << endl;
for (int i(0); i < N; i++)
{
for (int j(0); j < N; j++)
{
mas[i][j] = rand() % 21 - 5;
cout << mas[i][j] << endl;
}
cout << endl;
}

zd(mas, N); // задание
// освобождение массива
for (int i = 0; i < N; i++)
{
delete[] mas[i];
}
delete[] mas;
system("PAUSE");
return 0;
}

Приложения:

woopie: а на что ругается и на какую строчку?
fedoreca77: строка 46. Необработанное исключение по адресу 0x013B2951 в Project1.exe: 0xC0000005: нарушение прав доступа при чтении по адресу 0xFDFDFDFD.
fedoreca77: исключение не обработано

Ответы

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

С 36 строки и далее:


if (mas[j] > mas[j + 1]) // Сравниваем указатели на строки??

{

cout << " Сумма чисел в первом столбце больше суммы чисел в первой строке. Сортировка по возростанию: " << endl;

int smp = mas[j][0];

mas[j] = mas[j + 1];

*mas[j + 1] = smp; // Присваиваем число указателю?

}


woopie: j+1 кстати тоже опасная вещь, потому что можно выйти за границу массива
fedoreca77: первое это: если сумма чисел в первой строке больше суммы чисел в первом столбце, тогда зеркально отобразить матрицу, иначе отсортировать по возрастанию, числа генерировать случайно в интервале
woopie: В любом случае, mas у тебя же матрица, и к элементам ты обращаешься как mas[i][j]. Обращение mas[x] вернет только указатель на массив, который является строкой матрицы, и сравнивать этот указатель с чем-либо не совсем корректно.
fedoreca77: а как тогда переписать?
Похожие вопросы