1 / 1 / 0
Регистрация: 14.10.2019
Сообщений: 31
|
||||||||||||
1 | ||||||||||||
Найти среднее арифметическое всех элементов матрицы14.10.2019, 23:34. Показов 12236. Ответов 14
Доброго времени суток. Мне нужно написать код, "который находит среднее арифметическое всех элементов матрицы
0
|
14.10.2019, 23:34 | |
Ответы с готовыми решениями:
14
Найти среднее арифметическое всех положительных элементов матрицы Найти количество элементов динамической матрицы, не превышающих среднее арифметическое всех ее элементов Найти среднее арифметическое Sro всех отрицательных элементов матрицы Массив: Найти среднее арифметическое из всех положительных элементов этой матрицы |
Mental handicap
1246 / 624 / 171
Регистрация: 24.11.2015
Сообщений: 2,429
|
|
15.10.2019, 00:02 | 2 |
Antisovenok, то, что сделали Вы - это не двумерный массив.
0
|
1 / 1 / 0
Регистрация: 14.10.2019
Сообщений: 31
|
|
15.10.2019, 00:04 [ТС] | 3 |
Azazel-San, неожиданно. Ну не двумерный массив, так матрица?..
Не суть. Подскажите лучше, как это переделать через указатели. Буду благодарен.
0
|
Mental handicap
1246 / 624 / 171
Регистрация: 24.11.2015
Сообщений: 2,429
|
|
15.10.2019, 00:06 | 4 |
Antisovenok, смотря что вы вкладываете в понятие матрицы )
Так что у вас не получается?
0
|
1 / 1 / 0
Регистрация: 14.10.2019
Сообщений: 31
|
|
15.10.2019, 00:17 [ТС] | 5 |
Azazel-San, у меня не получается переделать код, что я написал -в код, где используется указатель при действиях с элементами массива.
0
|
7437 / 5029 / 2892
Регистрация: 18.12.2017
Сообщений: 15,692
|
||||||
15.10.2019, 00:41 | 6 | |||||
Antisovenok, главная диагональ есть не только у квадратной матрицы
0
|
1 / 1 / 0
Регистрация: 14.10.2019
Сообщений: 31
|
|
15.10.2019, 00:48 [ТС] | 7 |
Yetty, а, забыл указать, что у меня по условию квадратная матрица.
Добавлено через 1 минуту Yetty, однако я не понял, что это за "ранд" и %. Что это значит? Добавлено через 1 минуту Yetty, и что такое сетв2?..
0
|
Мозгоправ
|
||||||||||||||||
15.10.2019, 00:50 | 8 | |||||||||||||||
Antisovenok, во-первых, ваша программа с ошибкой. В строках 32-34 вы сбиваете переменную цикла j из цикла в строке 29.
Фрагмент (строки 28-37) может выглядеть так:
Но на самом деле, всё ещё проще:
Во-вторых, вас не учили освобождать память, занятую динамическими массивами? В конце программы надо написать:
Давайте вы как-то поднапряжётесь и сделаете это сами? В качестве "информации к размышлению" можете принять следующее: 1. В вашем случае, a , типа double** - это указатель на массив указателей на массив double . Т.е. по адресу, хранящемуся в a располагается массив адресов, по которым располагаются массивы строк матрицы. Т.е. a - это массив массивов. (Для иллюстрации посмотрите строки 11-13 вашего кода. А ещё лучше посмотрите под отладчиком как работает этот кусок и где и как будет изменяться содержимое памяти в строках 11-20.)2. Если double** pa = a , то *p - это адрес начала первой (нулевой) строки матрицы. Соответственно, после p++ , *p будет содержать начала второй строки матрицы. И т.д. Т.е. операторы -- и ++ будут перемещать указатель pa по строкам матрицы вверх или вниз.3. Если double* pra = *pa , то pra - это адрес начала строки матрицы, а *pra - это первый (нулевой) элемент строки матрицы. Соответственно, операторы -- и ++ будут перемещать указатель pra по строке влево или вправо.4. Ну и наконец классика адресной арифметики: выражение *(*(a + i) + j) эквивалентно выражению a[i][j] . Советую разобраться почему.
0
|
7437 / 5029 / 2892
Регистрация: 18.12.2017
Сообщений: 15,692
|
|
15.10.2019, 00:51 | 9 |
Antisovenok, сразу условие сообщить не получилось ? если квадратная, замените все m на n, ввод только
n оставьте обычное заполнение матрицы случайными (рандомными) числами - чтобы не заполнять матрицу с клавиатуры setw - выравнивает матрицу при выводе на экран
0
|
Мозгоправ
|
||||||
15.10.2019, 01:11 | 10 | |||||
Yetty, кто-то недавно меня укорял в нелояльности к новичкам?
Antisovenok, setw() - это манипулятор из <iomanip> . Устанавливает ширину поля для вывода следующего значения. Следующие фрагменты эквивалентны:
1
|
1 / 1 / 0
Регистрация: 14.10.2019
Сообщений: 31
|
|
15.10.2019, 01:19 [ТС] | 11 |
L0M, так, во-первых, скажу, что меня ничему не учили и похоже, что даже не пытаются. Я тут сижу уже четвертую неделю почти сам учу этот язык, потому что ни на лекциях, ни на практике по информатике в моем ВУЗе либо вообще толком не объясняют, либо, хм, я просто очень глупый, что не могу по презентации понять, как работают те или иные элементы языка. Я, как типичный представитель поколения егэ, учил Паскаль на информатике для того, чтобы, собственно, сдать егэ. А тут внезапно пришлось переучиваться, да ещё и через указатель какой-то, назначение которого вроде и понятно, но У МЕНЯ НЕТ НИКАКИХ ВНЯТНЫХ ПРИМЕРОВ его использования, что вовсе лишает меня возможности понимания работы указателя, ведь теория ничто без практики.
Во-вторых, я и поднапрягся, написал код, но абсолютно не понимаю, как использовать здесь указатель. За одномерный массив Вам спасибо, в прошлом моём вопросе Вы мне помогли, но двумерный массив - это более сложная структура и пока что все мои попытки тщетны, потому что я просто не понимаю - что, как и зачем. Именно поэтому я нахожусь на данном форуме. Чтобы от более опытных людей узнать свои ошибки и просто понять что-то новое. В остальном, спасибо Вам за более подробные подпункты, я постараюсь разобраться... А теперь непосредственно к коду Если я правильно понял, то Вы суммируете элементы главной диагонали? Так мне нужна сумма элементов строки, куда входит отрицательный элемент главной диагонали.
0
|
Мозгоправ
|
|
15.10.2019, 01:21 | 12 |
Кстати, Antisovenok, что бы окончательно порушить ваш мозг, посмотрите Как использовать указатели в двухмерном массиве. Это другой подход к созданию матрицы. Там на С, но для С++ такой подход вполне приемлем. (Если malloc() и free() мозолят глаза, можно переделать на new/delete[] - суть не поменяется. А можно "по-взрослому" завернуть это в класс.)
0
|
1 / 1 / 0
Регистрация: 14.10.2019
Сообщений: 31
|
|
15.10.2019, 01:26 [ТС] | 13 |
Yetty, понял, спасибо большое, буду дальше учить матчасть. Сложно, блин.
Добавлено через 1 минуту L0M, боже мой, это что за вундервафля? Я поступил на радиотехнический факультут и профиль у меня - физика. Что происходит и что я тут делаю, а?..
0
|
Мозгоправ
|
|
15.10.2019, 02:02 | 14 |
Сообщение было отмечено Antisovenok как решение
Решение
Это нормальная ситуация. (Привет Министерству образования!) Привыкайте.
А вот это вы молодец. Потому что другие, посмотрите по темам, желают получить только готовое решение, оставив получение знаний "на потом". Классический Паскаль я уже почти совсем не помню. Но даже там есть нечто типа varname^ . А в более продвинутых диалектах (Object Pascal, Delphi) - там точно есть.Могу только посоветовать почитать книжки. Например, Керниган, Ритчи Язык программирования С. Помнится там указателям и адресной арифметике уделено достаточно много материала. В "современном" С++ взят курс на отказ от адресной арифметики. Типа небезопасно. "Использовать только в крайних случаях". Но на самом деле, указатели (суть, адрес в памяти, где лежат данные) и адресная арифметика - одно из базовых понятий программирования. Даже если язык скрывает эти вещи, то в нетривиальных ситуациях будет ещё хуже: придётся лезть в места для того не предназначенные, что бы выяснить почему эта херь неправильно работает. А там дизассемблированный код и, да, адреса в памяти, где лежат данные. Так что лучше с указателями разобраться. Ну да, я тоже не понимаю зачем. Видимо в учебных целях, что бы вы поняли, что индексная нотация и работа через указатели взаимозаменяемы. Однако индексная нотация гораздо более человекочитаема. А компилятор генерирует одинаковый код для *(*(a + i) + j) и a[i][j] .Неправильно поняли. Во внешнем цикле я прохожу сразу по элементам главной диагонали. И только по ним. Это гарантирует равенство индексов: a[i][i] . Вложенный цикл (который накапливает сумму элементов в строках матрицы) запускается, если найден отрицательный элемент в главной диагонали.Добавлено через 12 минут У каждого свои недостатки (с)
0
|
1 / 1 / 0
Регистрация: 14.10.2019
Сообщений: 31
|
|
15.10.2019, 02:17 [ТС] | 15 |
L0M, ахахаххаха, "у каждого свои недостатки", верно подмечено)
Ладно, спасибо Вам большое за наиболее полный ответ и потраченное на меня время. Книги взял на заметку, продолжу грызть гранит науки, так сказать, ведь хоть и сложно, но на самом деле очень интересно. Добра Вам)
0
|
15.10.2019, 02:17 | |
15.10.2019, 02:17 | |
Помогаю со студенческими работами здесь
15
Массив: Найти среднее арифметическое из всех положительных элементов заданной матрицы. Найти индекс первого элемента, превосходяшего среднее арифметическое всех элементов матрицы Найти сумму всех положительных элементов массива и среднее арифметическое всех элементов Определить среднее арифметическое всех отрицательных элементов матрицы Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |