Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Программирование на ПАСКАЛЕ.doc
Скачиваний:
12
Добавлен:
04.09.2019
Размер:
2.98 Mб
Скачать

Контрольные вопросы

  1. Какие виды подпрограмм используются в языке Паскаль?

  2. На какие два типа принято подразделять процедуры?

  3. Где располагаются встроенные процедуры и что нужно написать в разделе объявлений, чтобы вызывать их в нужном месте программы пользователя?

  4. В каком разделе программы помещаются процедуры пользователя?

  5. Какова роль параметров процедуры?

  6. Чем отличаются параметры-переменные от параметров-значений?

  7. Чем отличаются фактические параметры от формальных параметров?

  8. Где объявляются локальные и глобальные переменные?

  9. Каким образом в программе вызывается процедура?

  10. В чем отличие заголовка процедуры от заголовка функции?

  11. Какой переменной обязательно присваивается значение в теле функции?

  12. Как в программе вызывается функция?

  13. Что является отличительной чертой рекурсивной функции?

  14. Каким образом в рекурсивной функции осуществляется выход из рекурсии?

  15. Задачи какого типа лучше реализовывать с помощью рекурсивных функций?

Задания для самостоятельной работы

Пример 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.