0 / 0 / 0
Регистрация: 02.12.2019
Сообщений: 28
|
||||||
1 | ||||||
Для строк, содержащих на главной диагонали отрицательные элементы,найти максимальный элемент19.01.2020, 15:50. Показов 3872. Ответов 8
Добрый день!
Помогите, пожалуйста, вроде код должен работать, но выводит постоянно -3. строки 34-45 При правильной работе программа должна вернуть значения 9 для первой строки и 3 для 3й.
0
|
19.01.2020, 15:50 | |
Ответы с готовыми решениями:
8
Для строк, содержащих на главной диагонали отрицательные элементы, вывести на экран сумму элементов. Для строк, содержащих на главной диагонали отрицательные элементы, вывести на экран сумму элементов Заменить элементы главной диагонали матрицы нулями и найти максимальный элемент ниже побочной диагонали В двумерном массиве найти максимальный среди элементов вне главной диагонали и разделить отрицательные элементы на 40 |
Модератор
12454 / 7479 / 1752
Регистрация: 25.07.2009
Сообщений: 13,755
|
||||||
19.01.2020, 16:55 | 2 | |||||
Честно лень вникать, что там не так, проще заново сделать
Код
[andrew@easybook numbers]$ gcc -Wall max_in_matrix_rows.c [andrew@easybook numbers]$ ./a.out Matrix: -3 1 9 8 10 3 2 3 -4 1 -2 3 1 7 5 0 Max elements on some rows: Row #1 Max: 9 Row #3 Max: 3 [andrew@easybook numbers]$
1
|
0 / 0 / 0
Регистрация: 02.12.2019
Сообщений: 28
|
|
19.01.2020, 17:49 [ТС] | 3 |
Спасибо большое! Вы, правда, используете более продвинутые способы выполнения этой задачи. А можете прокомментировать саму функцию поиска максимального элемента?Хочу понять
В момент нахождения отрицательного знач. на главной диагонали, мы передаем туда значение i и размер матрицы(4). Если размер меньше 2х, т.е 1, мы возвращаем что?рядок? а далее, если размер больше, то каким образом мы прибавляем к array сравнение в скобках? А также не совсем понятно вот что: мы уменьшаем размер на единицу и возвращаем эти данные в printf, а что происходит дальше?Просто выводится на экран? Или каким-то образом происходит рекурсия внутри функции поиска элемента?
0
|
Модератор
12454 / 7479 / 1752
Регистрация: 25.07.2009
Сообщений: 13,755
|
||||||
19.01.2020, 18:19 | 4 | |||||
Сообщение было отмечено Lockal как решение
Решение
Если количество элементов для проверки меньше двух ( size < 2 ) возвращается указатель на элемент массива, уже не обязательно первый, но первый максимальный. Приведение типов пока можно считать условностью. Если элементов два или больше, функция вызывает сама себя с изменёнными параметрами max_element(array + ( array[0] < array[size - 1] ), size - 1) . Здесь надо учитывать особенность вычисления логических выражений в языке С. Истинное выражение возвращает 1, ложное - 0. Если первый проверяемый элемент меньше последнего ( array[0] < array[size - 1] ) значение указателя сместится на следующий элемент, в противном случае останется прежним. Ну и количество элементов, передаваемое вторым параметром, в любом случае уменьшится size - 1 .Весь профит с такого варианта функции - компактная запись. На самом деле рекурсивные функции имеют ряд особенностей, сильно ограничивающих их применение. Нет. Элемент строки, находящийся на главной диагонали - это тот, у которого индекс строки и индекс столбца совпадают. Это где там такое?
1
|
0 / 0 / 0
Регистрация: 02.12.2019
Сообщений: 28
|
||||||
20.01.2020, 17:26 [ТС] | 5 | |||||
Ого, спасибо большое! Я и не знал до этого, что таким образом можно использовать буллевые функции(надеюсь, правильно написал).
В целом, стало понятней, хотя самостоятельно такую функцию не напишу.
элементов больше 2х, поэтому ф-ция вызывает себя же с параметрами(-3 + (-3<9)? и уменьшает размер до 3х, дальше все по новой, -3 остается, а каретка сравнивает уже другой элемент(переместилась, потому что -3 меньше 9), т.е. (-3 + (-3<1)? и снова уменьшаем размер....непонятно то, что в данном случае -3 самый маленький элемент строки и каждый раз возвращает значение "да" и провоцирует движение к следующему числу, а также не понятно почему сравнивается массив с первым элементом [0] и с предпоследним[size-1], почему не последним?Как нам потом сравнить с 8кой? Простите, просто Ваш код вызвал такой сумбур в голове... Добавлено через 11 минут или значение array тоже меняется, при этих манипуляций? И если да, то каким образом? к -3 добавляется 1(если да) и значение становится уже 1ей?(на примере нашей матрицы)
0
|
2 / 1 / 1
Регистрация: 13.11.2019
Сообщений: 4
|
|
20.01.2020, 17:49 | 6 |
Сообщение было отмечено Lockal как решение
Решение
на 41-строке напиши вот так: max = a[i][j];
1
|
Модератор
12454 / 7479 / 1752
Регистрация: 25.07.2009
Сообщений: 13,755
|
|
20.01.2020, 18:27 | 7 |
Сообщение было отмечено Lockal как решение
Решение
Ну в принципе ход мысли правильный, немного уточнить осталось:
Прежде всего в массиве из SIZE элементов у первого элемента индекс (смещение от начала массива) равен 0, у последнего SIZE - 1. Рассмотрим на примере первой строки матрицы: массив: -3, 1, 9, 8 размер 4 1 вызов: размер больше одного, сравниваем элементы с индексами 0 и 3: -3 < 8 - истина, то есть единица, указатель сдвигается на следующий элемент, размер уменьшается 2 вызов: массив: 1, 9, 8 размер 3. 1 < 8 истина, указатель сдвигается, размер - 1 3 вызов: массив: 9, 8 размер 2. 9 < 8 ложь, указатель на месте, размер - 1 4 вызов: массив: 9 размер 1. Выполняется условие "размер < 2", указатель на девятку "всплывает" через предыдущие вызовы и возвращается, как результат. Это не на долго.
1
|
0 / 0 / 0
Регистрация: 02.12.2019
Сообщений: 28
|
|
20.01.2020, 22:15 [ТС] | 8 |
Все, теперь понятно) Такая себе пузырьковая сортировка, но с одним циклом!
Спасибо, буду использовать Добавлено через 2 часа 36 минут SergiozZz, тю ..работает!)))я уже думал, что совсем котелок у меня не вариант, а нужно было правильно присвоить переменной значение. Спасибо большое! А не подскажите, как сделать так, чтобы код дальше продолжал проверять главную диагональ?осуществить это через цикл while?
0
|
2 / 1 / 1
Регистрация: 13.11.2019
Сообщений: 4
|
|
18.10.2020, 13:11 | 9 |
даа
0
|
18.10.2020, 13:11 | |