13 / 10 / 3
Регистрация: 22.12.2013
Сообщений: 378
1

Функции со сменным количеством параметров

29.05.2014, 21:27. Показов 4072. Ответов 5
Метки нет (Все метки)

Мне нужно написать функцию, которая 3 раза может принять разное количество параметров и вывести минимальных из них.
Например ввести 5, 10, 12 параметров и одна и та же функция должна посчитать минимум.

Ну я начал разбираться и нашел некий пример чего-то подобного(по идее он считает суму параметров, но не правильно):
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#include <iostream>
 
using namespace std;
 
int sum (int k, ...)
{
int *p = &k; 
int s=0;
for ( ; k!=0;k--)
s=s+*(++p);
return s;
}
int main()
{
cout<<"\nSuma(2,4,6)= "<<sum(2,4,6); //должен выводить суму 4+6
cout<<"\nSuma(4,1,2,3,4)= "<<sum(4,1,2,3,4); //должен выводить суму 1+2+3+4
}
Ответ всегда 3, что бы я не вводил.

Но я не знаю как понять этот пример что бы решить свой так что я задам пару вопросов для этого:
1)Что такое этот элемент "р" вообще? (int *p = &k; или *(++p)). Почему именно р?
2) int *p = &k; как работает эта штука?
2) *(++p) - что эти символы вокруг "р" делают?
3) int sum (int k, ...) - как оно вообще принимает данные? Оно записывает первый элемент а остальные в некий массив? Как к нему обращаться?

А еще я нарыл нечто более понятное:
va_list
va_start
va_arg
va_end
Это вообще по теме(?) и если это проще то объясните лучше на них =)
__________________
Помощь в написании контрольных, курсовых и дипломных работ, диссертаций здесь
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
29.05.2014, 21:27
Ответы с готовыми решениями:

Как запрограммировать функцию со сменным количеством параметров
Кто силен в теории, ответьте, пожалуйста: Как запрограммировать функцию со сменным количеством...

Программа вызов функции со сменным числом параметров
Задание было такое(написать функцию со сменным числом параметров и вызвать эту функцию с разным...

задача на функции со сменным числом параметров. подскажите, пожалуйста решение
Дано натуральное число n (4 &lt;n &lt;10) и целые числа a1, a2, ... an. Посчитать: a1, -a1a2, a1a2a3 ...,...

Функция со сменным числом параметров
Нужно написать программу на С в которой будет функция у какую передаются масивы целых чисел....

5
Модератор
Эксперт С++
12114 / 9783 / 5912
Регистрация: 18.12.2011
Сообщений: 26,253
29.05.2014, 21:38 2
Вот пример Вашей функции с комментариями
C++
1
2
3
4
5
6
7
8
9
10
double f(double n, ...)    //--заголовок с переменным числом параметров
{   double *p = &n;        //--установились на начало списка параметров
    double sum = 0, count = 0;    
    while (*p)         //--пока аргумент не равен нулю
    { sum+=(*p);         //--суммируем аргумент
      p++;             //--«перемещаемся на следующий аргумент
      count++;         //--считаем  количество аргументов
    }
    return sum);
}
0
13 / 10 / 3
Регистрация: 22.12.2013
Сообщений: 378
29.05.2014, 21:50  [ТС] 3
Все-равно что-то неправильно. Ответ неправильный...
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#include <iostream>
 
 
using namespace std;
 
double summ(double n, ...)  
{   double *p = &n;     
    double sum = 0, count = 0;    
    while (*p)       
    { sum+=(*p);      
      p++;            
      count++;       
    }
    return (sum);
}
int main()
{
cout<<"\nSuma(2,4,6)= "<<summ(2,4,6);
cout<<"\nSuma(4,1,2,3,4)= "<<summ(4,1,2,3,4); 
}
И я так и не понял что такое *р... Что это за элемент? И как count влияет на цикл вообще?
0
13 / 10 / 3
Регистрация: 22.12.2013
Сообщений: 378
01.06.2014, 20:00  [ТС] 4
Народ, может кто-то написать рабочий код приведенного выше примера? Если он будет работать я хоть смогу разобраться с своим примером... А так мне сунули всего 2 неправильных кода и называется УЧИ, умный будешь!

Добавлено через 26 минут
Я тут нашел что при подсчете с *р полнейшая фигня выходит:

Функции со сменным количеством параметров


Так вот я хочу узнать: как это исправить?
0
Каратель
Эксперт С++
6606 / 4025 / 401
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
01.06.2014, 20:38 5
Лучший ответ Сообщение было отмечено Master_Yi как решение

Решение

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
int sum (int k, ...)
{
    int result = 0; 
    va_list args;
    va_start(args, k);
 
    for (int i = 0; i < k; ++i)
    {
        result += va_arg(args, int);
    }
 
    va_end(args);
    return result;
}
3
13 / 10 / 3
Регистрация: 22.12.2013
Сообщений: 378
01.06.2014, 20:46  [ТС] 6
Jupiter, спасибо большое!
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
01.06.2014, 20:46
Помогаю со студенческими работами здесь

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

работа с функциями со сменным числом параметров
Не пойму почему не работает. выдает ошибки: C:\4ko.cpp:9: error: expected `)' before '...' token...

Функции по переменным количеством параметров
нужна помощь по работе с такой функцией .. Искал в книге Страуструпа, не понял пример, помогите,...

Функции с переменным количеством параметров в языке C ++
Реализовать функцию конкатенации (сцепления) произвольного количества C-строк с динамическим...


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

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2022, CyberForum.ru