Пример 1. Вычислить значения функции f(x)=2 cos x+3, при x={1; 4; 7,5; 20}. Вывести результаты в два столбца: в первом - значения x, во втором - значения f(x). Вычисления провести двумя способами: с помощью функции и процедуры.
Решение. Аргумент и результат функции – действительные числа, поэтому используем тип Real. В теле функции будет только оператор присваивания – для вычисления значения выражения. Процедура отличается строкой заголовка, - для передачи в основную программу результатов вычислений добавим параметр-переменную fx. Чтобы вывести результаты в виде таблицы, используем форматный вывод.
program proc_1;
function f (x: Real):Real;
begin
f:=2*cos(x)+3
end;
procedure proc_f (x: Real; var fx: real);
begin
fx:=2*cos(x)+3
end;
var x, fx: real;
begin
Writeln('с использованием процедуры:');
Writeln(' x f(x)');
x:=1; proc_f (x,fx); Writeln (x:6:2, fx:6:2);
x:=4; proc_f (x,fx); Writeln (x:6:2, fx:6:2);
x:=7.5; proc_f (x,fx); Writeln (x:6:2, fx:6:2);
x:=20; proc_f (x,fx); Writeln (x:6:2, fx:6:2);
Readln;
Writeln('с использованием функции:');
Writeln(' x f(x)');
Writeln(1:6, f (1):6:2);
Writeln(4:6, f (4):6:2);
Writeln(7.5:6:2, f (7.5):6:2);
Writeln(20:6, f (20):6:2);
Readln;
end.
Пример 2.Создать рекурсивную функцию поиска i-го члена последовательности, заданной рекуррентной формулой A1=const1, A2=const2, Ai=3Ai-2-Ai-1.Вывести через пробел значения рекурсивной функции при значениях аргумента от 1 до 10 включительно.
Решение. По условию задачи аргумент может принимать только целые значения, поэтому функция имеет параметр-значение типа Integer. Выход из рекурсии в данном случае осуществляется при двух значениях аргумента (при i=1, i=2), поэтому в рекурсивной функции необходимы два вложенных условных оператора или же оператор выбора case. В приведенном примере использованы операторы if, но попробуйте самостоятельно записать решение с помощью оператора выбора. В основной программе значения аргумента - целые последовательные числа, поэтому следует воспользоваться оператором цикла с параметром for.
program proc_2;
function A (i: Integer): Integer;
begin
if i=1 then A:=1 else
if i=2 then A:=3 else А:=3*A(i-2)-A(i-1)
end;
var i: Integer;
begin
for i:=1 to 10 do Write (A(i),' ');
Readln
end.
Варианты заданий
Задание 1. Составить программу для решения задачи с применением функции и процедуры пользователя.
a) В правильном треугольнике проведена средняя линия. Найти площадь образовавшейся трапеции, дважды используя функцию вычисления площади правильного треугольникапо формуле:
b) Для правильного треугольника со стороной а построены вписанная и описанная окружности. Найти площадь образовавшегося кольца, используя функцию вычисления площади круга S=πR2. Для нахождения радиусов окружностей воспользуйтесь формулами:
,
c) Тариф предусматривает оплату телефонных разговоров следующим образом: при продолжительности разговора меньше P минут стоимость одной минуты составляет S1 копеек, в противном случае – S2 коп/мин (S1, S2, P - константы). Используя функцию вычисления стоимости одного разговора, найти суммарную стоимость трех звонков известной продолжительности.
d) На товар дважды была сделана скидка – на p1, а затем на p2 процентов. Первоначальная стоимость товара составляла S рублей. Используя функцию вычисления стоимости товара с учетом скидки на P процентов, найти стоимость товара после двойной скидки.
Задание 2. Вывести значения рекурсивной функции при значениях аргумента от 1 до 10 включительно.
a) Найти член последовательности, заданной формулой: Di=7+Di-1при i>1, где D1 определяется пользователем.
b) Найти член последовательности, заданной формулой: Ai=Ai-1-Ai-2при i>2. Значения первого и второго членов последовательности вводятся пользователем.
c) Найти член последовательности, заданной следующим образом: y1=0; y2=10; yn=2×yn-1-yn-2, где n>2.
d) Найти член последовательности, заданной формулой Bi=4·Bi-1, при i>1. Значения первого члена последовательности вводится пользователем.