Помогите в с++. программа ругается Дана матрица (N+15)x(N+15), если сумма чисел в первой...

0 голосов
111 просмотров

Помогите в с++. программа ругается Дана матрица (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; }<hr>image


image
image
image

Информатика (19 баллов) | 111 просмотров
0

а на что ругается и на какую строчку?

0

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

0

исключение не обработано

Дан 1 ответ
0 голосов

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


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

{

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

int smp = mas[j][0];

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

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

}

(1.2k баллов)
0

j+1 кстати тоже опасная вещь, потому что можно выйти за границу массива

0

первое это: если сумма чисел в первой строке больше суммы чисел в первом столбце, тогда зеркально отобразить матрицу, иначе отсортировать по возрастанию, числа генерировать случайно в интервале

0

В любом случае, mas у тебя же матрица, и к элементам ты обращаешься как mas[i][j]. Обращение mas[x] вернет только указатель на массив, который является строкой матрицы, и сравнивать этот указатель с чем-либо не совсем корректно.

0

а как тогда переписать?