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

C++

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 47, средняя оценка - 4.87
Sasuke-sama
0 / 0 / 0
Регистрация: 22.05.2009
Сообщений: 33
#1

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

28.05.2009, 05:40. Просмотров 5772. Ответов 13
Метки нет (Все метки)

Вычисление суммы ряда значений оформить в
виде функции с переменным числом параметров.
прога вот:
1.rar
В ней не хватает как рас функции с переменным числом параметров
Как эту функцию задать?? Подскажите пожалуйста!
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
28.05.2009, 05:40
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Функция с переменным числом параметров (C++):

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

функции с переменным количеством параметров - C++
для некоторого класса необходимо чтобы его конструктор принимал переменное количество параметров. как это делается - понятно. я...

Вызвать функцию из dll с неопределённым числом параметров - C++
Нужно вызвать из dll функцию с неопределённым числом параметров. пока что работаю с таким вызовом char res; char (*dll) (char* ...);...

Рефакторинг: функция с большим количеством параметров - C++
День добрый. Скажите плз, гуру рефакторинга. Вот есть функция и в нее передаётся туча параметров. Как лучше исправить ситуацию? На ум...

Функция с переменным числом параметров - C++ Builder
Хочу написать функцию очищающую произвольное число MaskEdit.Выдает ошибку в описании функции. Вот код, как правильно? void...

С помощью функции с переменным числом параметров посчитать сумму - C++ Builder
Что не так в коде программы???? НЕ компелируется, нужно было с помощью функции с переменным числом параметров посчитать сумму!

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Patch
2276 / 491 / 11
Регистрация: 01.04.2009
Сообщений: 2,178
28.05.2009, 06:36 #2
Программист может разрабатывать свои функции с переменным числом параметров. Для обеспечения удобного способа доступа к аргументам функции с переменным числом параметров имеются три макроопределения (макросы) va_start, va_arg, va_end, находящиеся в заголовочном файле stdarg.h. Эти макросы указывают на то, что функция, разработанная пользователем, имеет некоторое число обязательных аргументов, за которыми следует переменное число необязательных аргументов. Обязательные аргументы доступны через свои имена как при вызове обычной функции. Для извлечения необязательных аргументов используются макросы va_start, va_arg, va_end в следующем порядке.

Макрос va_start предназначен для установки аргумента arg_ptr на начало списка необязательных параметров и имеет вид функции с двумя параметрами:

void va_start(arg_ptr,prav_param);

Параметр prav_param должен быть последним обязательным параметром вызываемой функции, а указатель arg_prt должен быть объявлен с предопределением в списке переменных типа va_list в виде:

va_list arg_ptr;

Макрос va_start должен быть использован до первого использования макроса va_arg.

Макрокоманда va_arg обеспечивает доступ к текущему параметру вызываемой функции и тоже имеет вид функции с двумя параметрами

type_arg va_arg(arg_ptr,type);

Эта макрокоманда извлекает значение типа type по адресу, заданному указателем arg_ptr, увеличивает значение указателя arg_ptr на длину использованного параметра (длина type) и таким образом параметр arg_ptr будет указывать на следующий параметр вызываемой функции. Макрокоманда va_arg используется столько раз, сколько необходимо для извлечения всех параметров вызываемой функции.

Макрос va_end используется по окончании обработки всех параметров функции и устанавливает указатель списка необязательных параметров на ноль (NULL).

Рассмотрим применение этих макросов для обработки параметров функции вычисляющей среднее значение произвольной последовательности целых чисел. Поскольку функция имеет переменное число параметров будем считать концом списка значение равное -1. Поскольку в списке должен быть хотя бы один элемент, у функции будет один обязательный параметр.

Пример:

#include
int main()
{ int n;
int sred_znach(int,...);
n=sred_znach(2,3,4,-1);
/* вызов с четырьмя параметрами */
printf("n=%d",n);
n=sred_znach(5,6,7,8,9,-1);
/* вызов с шестью параметрами */
printf("n=%d",n);
return (0);
}
int sred_znach(int x,...);
{
int i=0, j=0, sum=0;
va_list uk_arg;
va_start(uk_arg,x); /* установка указателя uk_arg на */
/* первый необязятельный параметр */
if (x!=-1) sum=x; /* проверка на пустоту списка */
else return (0);
j++;
while ( (i=va_arg(uk_arg,int))!=-1)
/* выборка очередного */
{ /* параметра и проверка */
sum+=i; /* на конец списка */
j++;
}
va_end(uk_arg); /* закрытие списка параметров */
return (sum/j);
}
Так.
Для вашей задачи достаточно поменять последнюю строку на
C++
1
return (sum);
Sasuke-sama
0 / 0 / 0
Регистрация: 22.05.2009
Сообщений: 33
28.05.2009, 09:33  [ТС] #3
спасибо огромное !!

Добавлено через 19 минут 41 секунду
А как вот из твоего примера сделать не среднее значение, а сумму??
Patch
2276 / 491 / 11
Регистрация: 01.04.2009
Сообщений: 2,178
28.05.2009, 09:37 #4
Цитата Сообщение от Patch Посмотреть сообщение
Для вашей задачи достаточно поменять последнюю строку на

return (sum);
Sasuke-sama
0 / 0 / 0
Регистрация: 22.05.2009
Сообщений: 33
28.05.2009, 09:48  [ТС] #5
аа туплю)))) сори!!! Спасибо ограомное

Добавлено через 7 минут 43 секунды
а блок схема на него как примерно выглядит???
Patch
2276 / 491 / 11
Регистрация: 01.04.2009
Сообщений: 2,178
28.05.2009, 10:16 #6
Даже не знаю, как нарисовать.
Просто в цикле проверка условия "есть ли еще аргументы".
Итого:
1)ромб - "условие - есть ли аргументы" - прицеплен к выходы прямоугольника 2
2)прямоугольник - "сложение аргументов" - прицеплен к ветке "да" ромба
3)прямоугольник - "выдача ответа" - прицеплен к ветке "нет" ромба
Sasuke-sama
0 / 0 / 0
Регистрация: 22.05.2009
Сообщений: 33
28.05.2009, 10:25  [ТС] #7
Вот выдаёт ошибку при компилировании:
http://pic.ipicture.ru/uploads/090528/9J3TY1kpDV.jpg
Sasuke-sama
0 / 0 / 0
Регистрация: 22.05.2009
Сообщений: 33
28.05.2009, 10:29  [ТС] #8
g.rar - это прога сама
Patch
2276 / 491 / 11
Регистрация: 01.04.2009
Сообщений: 2,178
28.05.2009, 11:04 #9
Ну и правильно.
у тебя после int summa(...) стоит ";"
Компилятор полагает, что объявление завершено.
А ты тут скобку открываешь.
А к чему твоя скобка относится - не пишешь.
Вот он и теряется в догадках.
Sasuke-sama
0 / 0 / 0
Регистрация: 22.05.2009
Сообщений: 33
28.05.2009, 15:03  [ТС] #10
убрал и стало ещё больше ошибок!!!! Можешь поправить и залить??

Добавлено через 3 часа 26 минут 46 секунд
Хоть ответте што не правильно плз))

Добавлено через 24 минуты 10 секунд
Походу мой Borland C++ не понимает макросы! что посоветуешь скачать, что бы норм работалось и можно даже ссылочку))
Evg
Эксперт CАвтор FAQ
17627 / 5851 / 376
Регистрация: 30.03.2009
Сообщений: 16,138
Записей в блоге: 26
28.05.2009, 15:14 #11
Цитата Сообщение от Sasuke-sama Посмотреть сообщение
убрал и стало ещё больше ошибок!!!! Можешь поправить и залить??
Выдачу компилятора в студию!

Цитата Сообщение от Sasuke-sama Посмотреть сообщение
Хоть ответте што не правильно плз))
Как же тебе ответят, еслиниктоне знает, что у тебя за проблема

Цитата Сообщение от Sasuke-sama Посмотреть сообщение
Походу мой Borland C++ не понимает макросы!
Прежде чем грешить на компилятор, убедись сначала в том, что у тебя руки не кривые

Цитата Сообщение от Sasuke-sama Посмотреть сообщение
можно даже ссылочку))
С помощью функции с переменным числом параметров посчитать сумму
Patch
2276 / 491 / 11
Регистрация: 01.04.2009
Сообщений: 2,178
28.05.2009, 15:53 #12
Sasuke-sama,
Публикуй свой код, который компилиш, и сообщения компилятора.
Телепатов-то среди нас нет.
У меня твой код работает(последний опубликованный, и без ";" ).
Sasuke-sama
0 / 0 / 0
Регистрация: 22.05.2009
Сообщений: 33
28.05.2009, 16:39  [ТС] #13
Яснео спасибо я откомпилил твой код, ну и свой, токо не понял для чего вводить
Код
printf("n=%d",n);
n=summa(5,6,7,8,9,-1);  // vyzov s 6 parametrami
если он всёравно считает элементы из 1 строки с 4 параметрами

Добавлено через 1 минуту 50 секунд
Цитата Сообщение от Sasuke-sama Посмотреть сообщение
Вложение 4526 - это прога сама
вот кста я прогу заливал))

Добавлено через 2 минуты 59 секунд
Код
http://www.cyberforum.ru/cpp-builder/thread36984.html
Это я темку тож создал)))
Evg
Эксперт CАвтор FAQ
17627 / 5851 / 376
Регистрация: 30.03.2009
Сообщений: 16,138
Записей в блоге: 26
28.05.2009, 17:46 #14
Цитата Сообщение от Sasuke-sama Посмотреть сообщение
Это я темку тож создал)))
Да я просто не сразу заметил
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
28.05.2009, 17:46
Привет! Вот еще темы с ответами:

Функции с переменным количеством параметров - C++ Builder
Прописываю в заголовке: void __fastcall TestClass::Test(int x, ...); компилятор выдает ошибку: Conflicting type modifiers В C++...

Функция с переменным числом параметров находящая максимальный элемент в списке параметров - C++
Написать функцию с переменным числом параметров:Максимальный из элементов в списке параметров, стоящих на нечетных местах....

Функция с переменным числом параметров, как узнать кличество переданных параметров? - C++
Добрый вечер, можно не использовать int n, а каким то другим способом узнать количество переданных аргументов в функцию и адрес? int suma...

В функция с переменным числом параметров. - C++
В функцию с переменным числом параметров поступают слова, конец списка - указатель NULL. Найти и вывести все слова, которые читаются...


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

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

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