Лабораторная работа 4
Функции с переменным количеством параметров. Функция, как тип данных
Варианты заданий
Разработать функцию с переменным количеством параметров. Для извлечения параметров из списка использовать технологию программирования областей памяти переменного формата.
Вариант 7. Последовательность вещественных положительных переменных, ограниченная переменной со значением -1. Функция возвращает динамический массив, содержащий значения этих переменных.
//---------------------------------------------------------------------------
#pragma hdrstop
#include
#include
#include
//---------------------------------------------------------------------------
#pragma argsused
double* dyn_double (double,...); // функция с переменным числом параметров
int main ()
{
double *pp;
int h;
pp = dyn_double(333.55, 2.655, 552.5, 545.5, 364.552, 543.32, -1.); // вызов функции с переменным числом параметров
printf ("\n");
for (h = 0; pp[h] !=-1; h++) printf ("%f ", pp[h]); // вывод динамического массива переданных в функцию значений
pp = dyn_double(433.45, 2.65, 554.535, 545.54, 344.552, 353.332,95.2,25.5,362.5, -1.); // вызов функции с переменным числом параметров
printf ("\n");
for (h = 0; pp[h] !=-1; h++) printf ("%f ", pp[h]); // вывод динамического массива переданных в функцию значений
system("pause");
return 0;
}
//---------------------------------------------------------------------------
double *dyn_double (double x,...)
{
int j=0, k=0;
double i=0.0, s=0.0, *d;
va_list uk_arg;
va_start(uk_arg, x); // установка указателя uk_arg на первый необязятельный параметр
if (x!=-1) s = x; // проверка на пустоту списка
else return 0;
j++; k = j;
while((i=va_arg(uk_arg,double))!=-1.)
{
printf (" %f \n", i);
j++;
}
d = (double *)malloc((j+1) * sizeof(double));
va_start(uk_arg, x);
d[0] = x;
d[j] = -1;
while (k
{
i=va_arg(uk_arg, double);
d[k] = i;
k++;
}
va_end(uk_arg); // закрытие списка параметров
return d;
}
//---------------------------------------------------------------------------
|