Форум программистов, компьютерный форум CyberForum.ru

Составить функцию, принимающую переменное количество параметров - C++

Восстановить пароль Регистрация
 
CHELOVEKPAUK
 Аватар для CHELOVEKPAUK
13 / 3 / 2
Регистрация: 01.08.2013
Сообщений: 332
Записей в блоге: 1
14.07.2014, 17:31     Составить функцию, принимающую переменное количество параметров #1
Напишите и протестируйте шаблонную функцию с переменным числом аргументов sum_values(), которая принимает список произвольной длины с аргументами, имеющими числовые значения (смешанных типов), и возвращает сумму в виде значения long double.

Помогите пожалуйста составить функцию или приведите пример шаблонной функции с переменными аргументами и образец ее вызова. Заранее спасибо.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
14.07.2014, 17:31     Составить функцию, принимающую переменное количество параметров
Посмотрите здесь:

C++ Функцию, принимающую в качестве параметра количество строк и столбцов в таблице умножения
C++ Напишите (консольную) программу, принимающую на вход имя файла и набор параметров. В зависимости от параметров программа должна работать в трёх режима
Переменное число параметров функции - трабл с int C++
C++ рекурсия.написать функцию,принимающую указ. на другую функцию, осуществл. некую операцию с переданным х
C++ Написать функцию, принимающую массив структур Student
Написать функцию, принимающую параметры, заданные явно и пропущенные C++
Переменное число параметров шаблона C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Riddleman
1 / 1 / 4
Регистрация: 03.03.2013
Сообщений: 49
14.07.2014, 17:34     Составить функцию, принимающую переменное количество параметров #2
Ну, самый простой вариант как по мне - это в функцию передавать указаель на массив и длину массива.
Vourhey
Почетный модератор
6470 / 2245 / 123
Регистрация: 29.07.2006
Сообщений: 12,635
14.07.2014, 17:36     Составить функцию, принимающую переменное количество параметров #3
C++
1
2
3
4
5
template<typename T>
T sum_values(std::initializer_list<T> values)
{
    return std::accumulate(values.begin(), values.end(), T{});
}
Пример вызова:
C++
1
sum_values({3.0l,6.0l,8.4l,1.6l})
0x10
2437 / 1609 / 235
Регистрация: 24.11.2012
Сообщений: 3,949
14.07.2014, 17:42     Составить функцию, принимающую переменное количество параметров #4
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#include <iostream>
 
template <class T>
long double sum_values(const T& item)
{
    return item;
}
 
 
template <class T, class... Args>
long double sum_values(const T& item, const Args&... args)
{
    return item + sum_values(args...);
}
 
 
int main()
{
    std::cout << sum_values(1, 2.0f, 3.0) << std::endl;
    return 0;
}
Добавлено через 28 секунд
Vourhey, насколько я вижу из условия, ему нужно, чтобы аргументы были разных типов.
Vourhey
Почетный модератор
6470 / 2245 / 123
Регистрация: 29.07.2006
Сообщений: 12,635
14.07.2014, 17:44     Составить функцию, принимающую переменное количество параметров #5
Цитата Сообщение от 0x10 Посмотреть сообщение
Vourhey, насколько я вижу из условия, ему нужно, чтобы аргументы были разных типов
Не обратил внимания.
CHELOVEKPAUK
 Аватар для CHELOVEKPAUK
13 / 3 / 2
Регистрация: 01.08.2013
Сообщений: 332
Записей в блоге: 1
14.07.2014, 18:31  [ТС]     Составить функцию, принимающую переменное количество параметров #6
1>------ Построение начато: проект: project1, Конфигурация: Debug Win32 ------
1> main.cpp
1>d:\dropbox\c++\c++\project1\project1\main.cpp(9): error C2332: class: отсутствует имя тега
1>d:\dropbox\c++\c++\project1\project1\main.cpp(9): error C2993: : недопустимый тип для параметра шаблона "<unnamed-tag>", не являющегося типом
1>d:\dropbox\c++\c++\project1\project1\main.cpp(9): error C2143: синтаксическая ошибка: отсутствие "," перед "..."
1>d:\dropbox\c++\c++\project1\project1\main.cpp(10): error C4430: отсутствует спецификатор типа - предполагается int. Примечание. C++ не поддерживает int по умолчанию
1>d:\dropbox\c++\c++\project1\project1\main.cpp(10): error C2143: синтаксическая ошибка: отсутствие "," перед "&"
1>d:\dropbox\c++\c++\project1\project1\main.cpp(18): error C2780: long double sum_values(const T &,const int): требует аргументов: 2, имеется: 3
1> d:\dropbox\c++\c++\project1\project1\main.cpp(10): см. объявление "sum_values"
1>d:\dropbox\c++\c++\project1\project1\main.cpp(18): error C2780: long double sum_values(const T &): требует аргументов: 1, имеется: 3
1> d:\dropbox\c++\c++\project1\project1\main.cpp(4): см. объявление "sum_values"
========== Построение: успешно: 0, с ошибками: 1, без изменений: 0, пропущено: 0 ==========
SatanaXIII
Супер-модератор
Эксперт С++
 Аватар для SatanaXIII
5534 / 2568 / 234
Регистрация: 01.11.2011
Сообщений: 6,345
Завершенные тесты: 1
14.07.2014, 18:47     Составить функцию, принимающую переменное количество параметров #7
Цитата Сообщение от 0x10 Посмотреть сообщение
C++
4
long double
Только со встроенными типами проканает.
0x10
2437 / 1609 / 235
Регистрация: 24.11.2012
Сообщений: 3,949
14.07.2014, 18:54     Составить функцию, принимающую переменное количество параметров #8
SatanaXIII, да я из формулировки задания решил, что ему принципиально нужна функция в возвращаемым значением такого типа.
CHELOVEKPAUK
 Аватар для CHELOVEKPAUK
13 / 3 / 2
Регистрация: 01.08.2013
Сообщений: 332
Записей в блоге: 1
14.07.2014, 18:58  [ТС]     Составить функцию, принимающую переменное количество параметров #9
Я решил отладить программу, попробовал скомпилировать программу без шаблона, получилось что то вроде этого
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#include <iostream>
 
long double sum_values(const int& item)
{
    return item;
}
  
long double sum_values(const int& item, const int&... args)
{
    return item + sum_values(args...);
}
 
int main()
{
    std::cout << sum_values(1, 2.0f, 3.0) << std::endl;
    return 0;
}
При компиляции выводятся ошибки:
1>------ Построение начато: проект: project1, Конфигурация: Debug Win32 ------
1> main.cpp
1>d:\dropbox\c++\c++\project1\project1\main.cpp(8): error C2146: синтаксическая ошибка: отсутствие ")" перед идентификатором "args"
1>d:\dropbox\c++\c++\project1\project1\main.cpp(8): error C3646: args: неизвестный спецификатор переопределения
1>d:\dropbox\c++\c++\project1\project1\main.cpp(8): error C2059: синтаксическая ошибка: )
1>d:\dropbox\c++\c++\project1\project1\main.cpp(10): error C2065: args: необъявленный идентификатор
1>d:\dropbox\c++\c++\project1\project1\main.cpp(10): error C2143: синтаксическая ошибка: отсутствие ")" перед "..."
1>d:\dropbox\c++\c++\project1\project1\main.cpp(10): error C2059: синтаксическая ошибка: )
1>d:\dropbox\c++\c++\project1\project1\main.cpp(15): warning C4244: аргумент: преобразование "float" в "const int", возможна потеря данных
========== Построение: успешно: 0, с ошибками: 1, без изменений: 0, пропущено: 0 ==========


Также, хочу заметить, не могу добавить хедер <initializer_list>, просто не видит и всё. Может быть у меня устаревшая IDE? MSVS 2012, c++11 должна поддерживать.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
14.07.2014, 19:09     Составить функцию, принимающую переменное количество параметров
Еще ссылки по теме:

Запилить функцию-аллюзию на функцию switch(), принимающую буквенные значения C++
C++ Указатели - разобрать функцию, принимающую параметр
Написать функцию, принимающую в качестве параметра одномерный массив C++
Переменное количество аргументов в функции ( зацикливание ) C++
Реализовать функцию без параметров, определяющую количество символов, отличных от пробела C++

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
0x10
2437 / 1609 / 235
Регистрация: 24.11.2012
Сообщений: 3,949
14.07.2014, 19:09     Составить функцию, принимающую переменное количество параметров #10
CHELOVEKPAUK, списки инициализации 12ая студия точно не поддерживала, вариадики - как видно, тоже.
Код рабочий (или как минимум притворяется таковым) http://ideone.com/WYlqQ9
Yandex
Объявления
14.07.2014, 19:09     Составить функцию, принимающую переменное количество параметров
Ответ Создать тему
Опции темы

Текущее время: 12:52. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru