Возвращаемые значения функции. 


Мы поможем в написании ваших работ!



ЗНАЕТЕ ЛИ ВЫ?

Возвращаемые значения функции.



Очень важной задачей является передача данных из вызываемой функции в вызывавшую её функцию. Для этого используется оператор return(val).

Рассмотрим пример использования функции вычисления среднего значения трёх введённых пользователем чисел.

#include <iostream.h>

float calc(int,int,int); // описание прототипа

void main()

{

int num1,num2,num3;

float avg;

cout<<”Введите 3 целых числа”<<endl;

cin>>num1>>num2>>num3;

avg=calc(num1,num2,num3);

cout<<”Среднее значение =”<<avg<<endl;

return 0;

}

float calc(int num1, int num2, int num3) //Описание функции

{

float local_avg;

local_avg =(num1+num2+num3)/3;

return (local_avg);

}

Слово float в описании функции указывает тип возвращаемого значения. Оператор возврата функции включает возвращаемое значение local_avg. Эта переменная будет передана в вызывающую функцию main(). Можно возвратить только одно значение в вызывающую функцию. После того, как функция вернула значение функция main() должна с ним что-нибудь сделать. Вызов функции расположен справа от знака присваивания, программа заменяет вызов функции на возвращаемое посредством оператора return значение. Следующий вызов функции является некорректным:

calc(num1,num2,num3);
Компилятор будет игнорировать такой вызов. Вызовы функций, возвращающих значение, обычно используются в выражениях или присваиваются переменным.

Передача функции как параметра.

Можно ли в качестве параметра функции задавать функцию? Может ли функция быть передана в другую функцию как данные? Да. Указатель на функцию может быть описан, как параметр и передаваться в функцию наряду с другими данными.

Рассмотрим определение типа:

typedef double (*intergrand)(double r);

В этой строке указывается, что *intergrand – это указатель на функцию с одним параметром типа double, возвращающую значение типа double.

#include <iostream.h>

#include <math.h>

typedef double (*intergrand)(double r);// описание типа

double integral(intergrand f, float l-limit, float u-limit); // прототип функции

void main ()

{ cout<< integral(sin, 0.0, 5.0); // вызов функции

}

double integral(intergrand f, float l-limit, float u-limit) //описание функции

{

double a=f(l-limit + u-limit);

return(a);

}

Первый параметр функции – это функция f типа intergrand, f – указатель на любую функцию от одного параметра, имя функции выступает в качестве указателя на эту функцию, поэтому не требуется указание ссылки.

Символ * имеет более низкий приоритет, чем операция (), поэтому круглые скобки в описании typedef следует использовать для задания того, что идентификатор intergrand является указателем на функцию, возвращающую переменную типа double, а не указателем на тип double. (Р. Уинер. Язык турбоси Изд-во Мир 1991, стр.242).

Задания.

Вариант 1.

1. Описать функцию stepen(x,n) от вещественного х и натурального n, вычисляющую величину xn и использовать ее для вычисления b=2.7k +(a+1)n

2. Из трёх матриц вещественных чисел А[3][3], B[2][2], C[2][2] сформировать вектор К из трёх чисел Х,У,Z, упорядоченных по возрастанию, где Х – минимальный элемент А, У – максимальный элемент В, Z – максимальный элемент С. Все повторяющиеся операции оформить в виде функций.

Вариант 2.

1. Даны отрезки a,b,c,d. для каждой тройки этих отрезков, из которых можно построить треугольник, напечатать площадь данного треугольника.

2. Даны три матрицы вещественных чисел. Вычислить след каждой из них с использованием функции. S=åaii

Вариант 3

1. Переменной присвоить значение 1, если уравнение x2 +6.2 x+a2=0 и x2+ax+b-1=0 имеют вещественные корни и при этом оба корня первого уравнения лежат между корнями второго и 0 во всех остальных случаях.

2. Даны 2 целые матрицы размером МхМ. С использованием функции определить являются ли они симметричными, т.е. Хij=Xji

Вариант 4

1. Вычислить выражение F(m.n)=n!*m!/(n+m)!, n и m – неотрицательные целые числа. (Определить функцию, вычисляющую факториал).

2. Описать функцию. Мах (А,n,k.), где А – матрица, n и k –индексы(n>k), вычисляющую наибольший элемент заштрихованной области.
k n

 
 


n

           
     
 
 


k

 

Вариант 5

1. По заданным вещественным числам c и d (c< d) вычислить
óarctg2 x dx+ósin E 10xdx
õ õ
Интегралы вычислить по формуле трапеций при n=20 для первого интеграла и n=100 для второго:
F(x)dx»h [f(a)/2+ Sf(a+ih) +f(b)/2]. Где h=(b-a)/n

2. Найти сумму двух матриц одинаковой размерности. Оформить в виде функции. Все матрицы распечатать.

Вариант 6

1. Написать функцию, которая для заданного натурального N вычисляет сумму его цифр.

2. Даны две квадратные вещественные матрицы 5 порядка. Транспонировать ту из них, в которой наименьший след (сумма диагональных элементов).

Вариант 7

1. Составить функцию возведения любого натурального числа в квадрат без операции умножения, пользуясь следующим свойством: квадрат любого числа равен сумме первых нечётных чисел. (12=1, 22=1+3, 32=1+3+5).

2. Описать функцию сум(А), вычисляющую величину
Х0*Xn-1+X1*Xn-2+…+Xn-1*X0 где Хi – максимальный элемент i строки матрицы.

Вариант 8

1. Составить функцию возведения любого натурального числа n в куб без операции умножения, пользуясь следующим свойством: куб любого числа n равен сумме n нечётных чисел, следующих по порядку за числами, сумма которых составила куб числа n-1. Например:(13=1, 23=3+5, 33=7+9+11).

2. Описать функцию swap(A,B), меняющую местами максимальные элементы матриц А и В.

Вариант 9

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

2. Три выборки заданы в векторах А(10),В(10),С(10). Составить программу статистической обработки этих выборок. В результате обработки определить математическое ожидание М=(åхi)/n и среднеквадратическое отклонение
s =Ö(å(хi - M)2)/n. Вычисление М и s оформить в виде функции.

Вариант 10

1. Описать функцию получения наибольшего общего делителя двух чисел.

2. Описать функцию, которая в том из трёх векторов x,y,z, где больше всего отрицательных элементов (считать, что такой вектор один), все его положительные элементы заменяет на их кубы – если это вектор х или вектор z и на их обратные величины – если это вектор у.

Вариант 11

1. Описать функцию, представляющую число в виде произведения простых чисел. Разложение на множители осуществляется следующим образом: сначала число делится на 2, а затем – подряд на все нечётные числа. Если на какое-либо число оно делится без остатка, то данное простое число является множителем.

2. Даны три вещественные квадратные матрицы 4 порядка. Напечатать ту из них, норма которой наименьшая (считать, что такая матрица одна). В качестве нормы матрицы взять максимум абсолютных величин её элементов.

Вариант 12

1. Описать функцию вычисления корня m-й степени из числа х по итерационной формуле: yn+1=yn+1/n((x/ynm-2)-yn) (y0=1). Итерация заканчивается, как только |yn+1-yn|<e.

2. Даны три вектора целых чисел х,у,z. Если наибольший элемент вектора х равен 10 и находится в первой половине этого вектора, и если в векторе у нет положительных элементов, тогда все элементы вектора z, предшествующие его наибольшему элементу заменить на их кубы. (считать, что в каждом векторе наибольший элемент один)

Дополнительное задание:

1. Описать функцию sort(x), упорядочивающую по неубыванию числа массива х следующим методом: все числа из х упорядочить по последней цифре и перенести во вспомогательный массив у; затем числа из у упорядочить по последней цифре (при равенстве этих цифр сохранять упорядоченность по последней цифре) и записать их снова в массив х, далее из х упорядочить по третьей от конца цифре и перенести в массив у. (учесть, что в конце концов числа должны оказаться в х).

2. Даны целочисленные матрицы А,В,С. Определить есть ли среди них числа, являющиеся полными квадратами.



Поделиться:


Последнее изменение этой страницы: 2016-12-12; просмотров: 308; Нарушение авторского права страницы; Мы поможем в написании вашей работы!

infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 3.93.59.171 (0.012 с.)