126 / 83 / 44
Регистрация: 18.11.2018
Сообщений: 299
|
|||||||||||
1 | |||||||||||
Функция с переменным числом параметров через указатели16.02.2021, 15:24. Показов 2873. Ответов 26
Здравствуйте! Есть задача: найти среднее гармоническое числового ряда двумя способами: через передачу количества параметров как параметра функции и через использование признака конца списка параметров. Спасибо пользователю SmallEvil за помощь в решении: Среднее гармоническое элементов числового ряда. Функции с переменным числом параметров. Решение верное, но сделано при помощи va_list, а нужно использовать указатели, я нашел подобный метод в интернете:
Реализовав задачу подобным методом, у меня выходил неккоректный результат, после чего решил реализовать простую функцию, которая бы выводила аргументы функции, чтобы посмотреть, как работает функция:
0
|
16.02.2021, 15:24 | |
Ответы с готовыми решениями:
26
Функция с переменным числом параметров находящая максимальный элемент в списке параметров Функция с переменным числом параметров, как узнать кличество переданных параметров? Передать в функцию с переменным числом параметров УКАЗАТЕЛИ на другие функции Функция с переменным числом параметров |
126 / 83 / 44
Регистрация: 18.11.2018
Сообщений: 299
|
||||||
17.02.2021, 17:46 [ТС] | 21 | |||||
Интересный вопрос, вероятнее всего нет. Но тут уж кому как, кто-то и на вакцинацию от COVID-19 ходит
Само собой я не уверен стопроцентно в качественной работе этой программы, просто проверил работу на простейших примерах, и результат выводится верный, следовательно вроде как работает, а всё остальное - лирика, запросил преподаватель указатели - вот ему через указатели. А так я бы их, конечно, не использовал, а пользовался va_list. А почему она должна находиться в разделе по C? Дисциплина называется программирование на C++, задание с курса, вот я в разделе C++ и создал. Здравствуйте, насколько я понял, вы используете массив в качестве параметра. Меня этот способ заинтересовал и я попытался реализовать через массив, вот, что у меня вышло:
0
|
1642 / 1091 / 487
Регистрация: 17.07.2012
Сообщений: 5,345
|
|
17.02.2021, 20:05 | 22 |
Неплохо б уточнить условие. Действительно ли нужна функция с переменным числом параметров(для таких задач по-моему смысла никакого, разве что потренироваться) ? Или все-таки хватит массива(в функцию передается указатель). Если функция с переменным кол-во параметров, то можно ли вместо ... и va_args использовать variadic templates ?
0
|
Вездепух
11695 / 6374 / 1724
Регистрация: 18.10.2014
Сообщений: 16,068
|
||||||
17.02.2021, 20:10 | 23 | |||||
val ?Переменная i не играет в коде никакой роли. Зачем было ее заводить?Бессмысленное применение оператора * .Зачем повторять присваивание val = *arr ? В ветке else значение val не используется вообще, а идет работа напрямую с *arr ? Почему? Может переменная val вообще не нужна?
1
|
126 / 83 / 44
Регистрация: 18.11.2018
Сообщений: 299
|
||||||||||||||||
17.02.2021, 20:51 [ТС] | 24 | |||||||||||||||
Я думаю да, преподаватель примерно так и сказал, что указатели нужно использовать тут именно для того, чтобы научиться с ними работать и так далее.
Почему нужно использовать именно const, это обязательно? Да, действительно переменная val лишняя, можно было сделать просто вот так, насколько я понимаю:
Чтобы был цикл в ходе которого считывался следующий элемент массива. Но сейчас понял, что можно было сделать подобным образом:
--- Исходя из всего этого написал так:
0
|
1642 / 1091 / 487
Регистрация: 17.07.2012
Сообщений: 5,345
|
|
17.02.2021, 21:25 | 25 |
Все лишние выводы из функции желательно убрать, у функции одна ответственность, посчитать среднее гармоническое и вернуть, все остальное она делать не должна. А summary лучше заменить на какой-то sum, потому что summary это не сумма(название переменной как бы сбивает с толку, хоть тут и кода несколько строчек, но лучше привыкать хорошо называть переменные).
0
|
126 / 83 / 44
Регистрация: 18.11.2018
Сообщений: 299
|
|
17.02.2021, 21:39 [ТС] | 26 |
Вообще они особо и не нужны в коде, я сделал эти выводы для того, чтобы отследить, как работает программа и показать преподавателю потом это для наглядности.
М-да, действительно ведь.. Я почему-то был убежден в обратном всё это время
Да, хорошо, спасибо, буду стараться так делать.
0
|
Вездепух
11695 / 6374 / 1724
Регистрация: 18.10.2014
Сообщений: 16,068
|
|||||||||||||||||||||
17.02.2021, 22:15 | 27 | ||||||||||||||||||||
Сообщение было отмечено woolfskinny как решение
Решение
Ну, допустим, завтра кто-то захочет использовать вашу функцию с массивом
const double array[] = { .... } и не сможет это сделать. Если ваша функция не модифицирует данные в массиве, то лучше ссылаться на эти данные с const .Ну как же? Переменную i ведь вы объявили не в начале функции, а локально - в цикле for . Точно так же и переменную val можно объявить локально - внутри цикла for , а не в начале функции
for (;;) . Для этого не нужно заводить никаких фиктивных переменных.Добавлено через 6 минут Это не принципиальное замечание, но многие люди придерживаются такого соглашения: не менять исходные значения параметров функции внутри функции. Это зачастую существенно облегчает пошаговую отладку - всегда можно легко посмотреть, что же именно было передано функции изначально. По этой причине можно было бы посоветовать поступить так
cnt является необязательной
for тоже совсем не обязательно
1
|
17.02.2021, 22:15 | |
17.02.2021, 22:15 | |
Помогаю со студенческими работами здесь
27
Функция с переменным числом параметров Функция с переменным числом параметров Функция с переменным числом параметров в С++ Функция с переменным числом параметров Функция с переменным числом параметров Функция с переменным числом параметров Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |