Форум программистов, компьютерный форум, киберфорум
C++
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.64/33: Рейтинг темы: голосов - 33, средняя оценка - 4.64
0 / 0 / 0
Регистрация: 22.05.2009
Сообщений: 33
1

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

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


Вычисление суммы ряда значений оформить в
виде функции с переменным числом параметров.
прога вот:
1.rar
В ней не хватает как рас функции с переменным числом параметров
Как эту функцию задать?? Подскажите пожалуйста!
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
28.05.2009, 05:40
Ответы с готовыми решениями:

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

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

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

Функции с переменным числом параметров
Набираю пример программы из книги. Все строчка в строчку, а не компилируется:( Помогите,...

13
2342 / 498 / 22
Регистрация: 01.04.2009
Сообщений: 2,200
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);
1
0 / 0 / 0
Регистрация: 22.05.2009
Сообщений: 33
28.05.2009, 09:33  [ТС] 3
спасибо огромное !!

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

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

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

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

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

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

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

Цитата Сообщение от Sasuke-sama Посмотреть сообщение
можно даже ссылочку))
С помощью функции с переменным числом параметров посчитать сумму
1
2342 / 498 / 22
Регистрация: 01.04.2009
Сообщений: 2,200
28.05.2009, 15:53 12
Sasuke-sama,
Публикуй свой код, который компилиш, и сообщения компилятора.
Телепатов-то среди нас нет.
У меня твой код работает(последний опубликованный, и без ";" ).
1
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 секунд
Код
https://www.cyberforum.ru/cpp-builder/thread36984.html
Это я темку тож создал)))
0
Evg
Эксперт CАвтор FAQ
21153 / 8169 / 628
Регистрация: 30.03.2009
Сообщений: 22,468
Записей в блоге: 30
28.05.2009, 17:46 14
Цитата Сообщение от Sasuke-sama Посмотреть сообщение
Это я темку тож создал)))
Да я просто не сразу заметил
1
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
28.05.2009, 17:46

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

«Функции с переменным числом параметров»
И ещё 1на просьба :-[ В этом случае удобно использовать цикл do while, так как указатель p сразу...

Функция с переменным числом параметра
Написать функцию nok с переменным числом параметров, которая находит наименьшее общее кратное для...

Написать функцию min с переменным числом параметров, которая находит минимальное из чисел типа int или из чисел типа double
Написать функцию min с переменным числом параметров, которая находит минимальное из чисел типа int...

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


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

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

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