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

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

Восстановить пароль Регистрация
 
Master_Yi
12 / 9 / 1
Регистрация: 22.12.2013
Сообщений: 289
29.05.2014, 21:27     Функции со сменным количеством параметров #1
Мне нужно написать функцию, которая 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
Это вообще по теме(?) и если это проще то объясните лучше на них =)
Лучшие ответы (1)
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
zss
Модератор
Эксперт С++
 Аватар для zss
5942 / 5547 / 1783
Регистрация: 18.12.2011
Сообщений: 14,164
Завершенные тесты: 1
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);
}
Master_Yi
12 / 9 / 1
Регистрация: 22.12.2013
Сообщений: 289
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 влияет на цикл вообще?
Master_Yi
12 / 9 / 1
Регистрация: 22.12.2013
Сообщений: 289
01.06.2014, 20:00  [ТС]     Функции со сменным количеством параметров #4
Народ, может кто-то написать рабочий код приведенного выше примера? Если он будет работать я хоть смогу разобраться с своим примером... А так мне сунули всего 2 неправильных кода и называется УЧИ, умный будешь!

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

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

Так вот я хочу узнать: как это исправить?
Jupiter
Каратель
Эксперт C++
6542 / 3962 / 226
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
01.06.2014, 20:38     Функции со сменным количеством параметров #5
Сообщение было отмечено автором темы, экспертом или модератором как ответ
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;
}
Master_Yi
12 / 9 / 1
Регистрация: 22.12.2013
Сообщений: 289
01.06.2014, 20:46  [ТС]     Функции со сменным количеством параметров #6
Jupiter, спасибо большое!
Yandex
Объявления
01.06.2014, 20:46     Функции со сменным количеством параметров
Ответ Создать тему
Опции темы

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