Передача параметров по значению


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

· для фактического и формального параметров компилятор отводит разные ячейки памяти;

· при выполнении программы содержимое аргумента копируется в формальный параметр, то есть при первом вызове в нашем примере выполняется Len=20, y=5 и ch=’*’ , хотя это явно нигде не записывается;

· из первой особенности следует, что если в функции изменить формальный параметр, то это изменение не повлияет на значение переменной, используемой при вызове, то есть фактического параметра. Если бы в функции изменили y (например, там было бы записано y++), то значение соответствующей переменной Y в головной функции после второго вызова осталось бы без изменения, т. е. тем, что ввели;

· в качестве фактического параметра, соответствующего параметру-значению, может быть выражение соответствующего или совместимого типа. Например, функцию можно вызвать так: LINE2 ( LEN*2, Y+1, ‘*’). Как частный случай можно передавать константу, как показано при первом вызове, или переменную (см. второй вызов). При этом её имя, используемое при вызове, не обязательно должно отличаться, как в нашем примере, от имени формального параметра. В головной программе переменную для фактической длины символов можно было бы тоже назвать Len. Но и в этом случае это разные ячейки памяти.

§ 2. Функции типа void с несколькими результатами

С помощью оператора return можно возвратить только одно значение. А как быть, если функция возвращает более одного результата? В таком случае можно использовать указатели (см. 2-й семестр) и ссылочный тип. Здесь рассматривается второй способ, который легче первого.

Пример

Для x=-0.8, -0.6, -0.4, … , 0.8 найти и вывести на экран значения функций:

в виде следующих пяти столбцов: x, y, cos(x), z, sin(x), в которых показать значения указанных тригонометрических функций, вычисленные как сумма бесконечного ряда с заданной точностью, так и с помощью встроенных функций.

С точки зрения разбиения на функции возможны несколько вариантов. Составим функцию SINCOS, которая вычисляет обе бесконечные суммы с произвольной одинаковой точностью. Поэтому она имеет два входных параметра: аргумент функций (x) и одинаковую точность вычисления бесконечных сумм (eps) и два выходных (y и z), которые в заголовке функции объявляются с помощью ссылочного типа.

void SINCOS(float x, float eps, float &y, float &z);

int main()

{ float x, sn, cs;

cout<<" x MySin Sin(Standart) MyCos”<< “ Cos(Standart)";

cout<<endl<<endl;

for (x=-0.8; x<0.805; x+=0.1)

{ SINCOS(x,1E-10, cs, sn);

printf("%5.1f %10.6f %12.6f %10.6f %12.6f\n",

x, sn, sin(x), cs, cos(x)) ;

}

getch(); return 0;

}

void SINCOS(float x, float eps, float &y, float &z)

{ float k=1, v1=1; y=1;

do {

v1=v1*(-1)*x*x/(k*(k+1));

y+=v1;

k+=2;

}

while (fabs(v1)>eps);

k=2; v1=x; z=x;

do {

v1=v1*(-1)*x*x/(k*(k+1));

z+=v1;

k+=2;

}

while (fabs(v1)>eps);

}



Дата добавления: 2016-07-18; просмотров: 1648;


Поиск по сайту:

Воспользовавшись поиском можно найти нужную информацию на сайте.

Поделитесь с друзьями:

Считаете данную информацию полезной, тогда расскажите друзьям в соц. сетях.
Poznayka.org - Познайка.Орг - 2016-2024 год. Материал предоставляется для ознакомительных и учебных целей.
Генерация страницы за: 0.009 сек.