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



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


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



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


ЗНАЕТЕ ЛИ ВЫ?

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



Очень важной задачей является передача данных из вызываемой функции в вызывавшую её функцию. Для этого используется оператор 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; Нарушение авторского права страницы; Мы поможем в написании вашей работы!

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