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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
CHELOVEKPAUK
13 / 3 / 2
Регистрация: 01.08.2013
Сообщений: 332
Записей в блоге: 1
#1

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

14.07.2014, 17:31. Просмотров 489. Ответов 9
Метки нет (Все метки)

Напишите и протестируйте шаблонную функцию с переменным числом аргументов sum_values(), которая принимает список произвольной длины с аргументами, имеющими числовые значения (смешанных типов), и возвращает сумму в виде значения long double.

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

Реализовать функцию перемещения строк, принимающую в качестве параметров два вектора строк - C++
Подскажите насколько правильно решена задача. условие: Напишите функцию MoveStrings, которая принимает два вектора строк, source и...

Функцию, принимающую в качестве параметра количество строк и столбцов в таблице умножения - C++
Пожалуйста помогите, завтра экзамен!!! Написать функцию, принимающую в качестве параметра количество строк и столбцов в таблице...

Напишите (консольную) программу, принимающую на вход имя файла и набор параметров. В зависимости от параметров программа должна работать в трёх режима - C++
Вообщем такое же задание Добавлено через 2 минуты Напишите (консольную) программу, принимающую на вход имя файла и набор...

Переменное число параметров шаблона - C++
Здоровеньки булы. Не уверен, что название темы точно отражает суть вопроса. Есть заготовка шаблонного делегата, параметры которого -...

Переменное число параметров функции - трабл с int - C++
Функция - выводит среднее арифметическое своих аргументов. Рабочий пример с double: #include <cstdarg> #include <iostream> double...

Запилить функцию-аллюзию на функцию switch(), принимающую буквенные значения - C++
Фрагмент кода: ... int fu; cout << "Сделать что-то? (1=да, 2=нет) "; //здесь предполагается введение не цифры, а буквы Y или N cin...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Riddleman
1 / 1 / 4
Регистрация: 03.03.2013
Сообщений: 49
14.07.2014, 17:34 #2
Ну, самый простой вариант как по мне - это в функцию передавать указаель на массив и длину массива.
0
Vourhey
Почетный модератор
6482 / 2257 / 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})
1
0x10
2464 / 1636 / 238
Регистрация: 24.11.2012
Сообщений: 4,031
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, насколько я вижу из условия, ему нужно, чтобы аргументы были разных типов.
1
Vourhey
Почетный модератор
6482 / 2257 / 123
Регистрация: 29.07.2006
Сообщений: 12,635
14.07.2014, 17:44 #5
Цитата Сообщение от 0x10 Посмотреть сообщение
Vourhey, насколько я вижу из условия, ему нужно, чтобы аргументы были разных типов
Не обратил внимания.
0
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 ==========
0
SatanaXIII
Супер-модератор
Эксперт С++
5616 / 2651 / 246
Регистрация: 01.11.2011
Сообщений: 6,529
Завершенные тесты: 1
14.07.2014, 18:47 #7
Цитата Сообщение от 0x10 Посмотреть сообщение
C++
4
long double
Только со встроенными типами проканает.
0
0x10
2464 / 1636 / 238
Регистрация: 24.11.2012
Сообщений: 4,031
14.07.2014, 18:54 #8
SatanaXIII, да я из формулировки задания решил, что ему принципиально нужна функция в возвращаемым значением такого типа.
0
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 должна поддерживать.
0
0x10
2464 / 1636 / 238
Регистрация: 24.11.2012
Сообщений: 4,031
14.07.2014, 19:09 #10
CHELOVEKPAUK, списки инициализации 12ая студия точно не поддерживала, вариадики - как видно, тоже.
Код рабочий (или как минимум притворяется таковым) http://ideone.com/WYlqQ9
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
14.07.2014, 19:09
Привет! Вот еще темы с ответами:

рекурсия.написать функцию,принимающую указ. на другую функцию, осуществл. некую операцию с переданным х - C++
рекурсия.написать функцию,принимающую указ. на другую функцию, осуществл. некую операцию с переданным х. прога должна иметь вид...

Указатели - разобрать функцию, принимающую параметр - C++
Есть функция: void handling(char **_names, bool *voarr, int pos){ char **names=new char*; for(int j=0; j&lt;N; ++j){ ...

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

Переменное количество аргументов в функции ( зацикливание ) - C++
Здравствуйте. Подскажите пожалуйста как правильно огранизировать доступ к каждому параметру. Заранее спасибо. Вот код: #include...


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
14.07.2014, 19:09
Ответ Создать тему
Опции темы

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