Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Процедуры и функции (96

..pdf
Скачиваний:
0
Добавлен:
15.11.2022
Размер:
195.17 Кб
Скачать

Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис»

if K<0 then Writeln(’факториал отрицательных чисел не существу-

ет’);

if( K>0) and (k=1) then factorial_I:=1 else begin

p:=1; for i:=2 to k do p:=p*i; {находит произведение} factorial_I:=p; {передача имени функции результата}

end; {if} End;{factorial_I} {———}

function factorial_R(K:byte):longint; {вычисляет k! рекурсией}

begin

if k=1 then factorial_R:=1

else Factorial_R:=k*factorial_R( k-1){рекурсия} End;{factorial_r}

{———–}

Procedure Factorial_Proc(n:byte; Var Fact:longint); {вычисляет k! итерационным методом } {n-входные данные; factвыходные данные} Var i:byte;

begin

if n<0 then writeln(’факториал отрицательных чисел не существует ’);

if n=1 then fact:=1

else begin fact:=1;For i:=2 to n do fact:=fact*i end end;{Factoril_Proc}

{———-}

Procedure Factorial_Proc_R(n:byte;Var Fact:longint); {вычисляет k! рекурсией }

{n-входные данные; factвыходные данные} begin

if n<0 then writeln(’факториал отрицательных чисел не существует ’);

if n=1 then fact:=1

else factorial_proc_R(n-1,fact) end;{Factoril_Proc_R} {———-}

BEGIN

ClrScr;

writeln(’Ведите l и r l>r’);

21

Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис»

read(l,r); chislitel:=factorial_I(l); k:=l-r;

znamenatel:=factorial_I(r)*factorial_I(k); sochetanie_fI:=chislitel div znamenatel;

writeln( ’сочетание’:34,’числитель’:13,’знаменатель:13 );

writeln( ’сочетание от функции_I =’:28,sochetanie_fI,’ ’:8,chislitel:5,’ ’:7,znamenatel:5);

factorial_Proc(l,s); factorial_Proc(r,d); factorial_Proc(l-r,e);znamenatel:=d*e; sochetanie_p:=s div(d*e);

writeln(’сочетание от процедуры =’:26,sochetanie_P:5,’ ’:20,s:6); chislitel:=factorial_R(l);

k:=l-r; znamenatel:=factorial_R(r)*factorial_R(k); sochetanie_fR:=chislitel div znamenatel;

writeln( ’сочетание от фукции_R =’:28,sochetanie_fR,’ ’:8,chislitel:5,’ ’:7,znamenatel:5 );

readln; readln

END.{Sochetanie_n_m}

Функция factorial_fI является более сложной по отношению к функции factorial_fR; в ней введены дополнительные локальные переменные i, p и применяется оператор цикла for i. Но главное заключается в том, что если тип переменной р будет отличен от типа выходного результата функции, то будет иметь место ошибка в вычислении факториала.

Входная переменная для указанных подпрограмм имеет тип byte, т. е. предполагается, что возможно вычислить факториал чисел от 1! до 255!, однако здесь имеет место ограничение по диапазону допустимых значений для переменной, в которую записывается результат вычислений факториала.

Следовательно, тип входного значения должен быть ограничен некоторым допустимым числом, поэтому рекомендуется для вычисления факториала применить интервальный тип (тип-диапазон).

Например, type interval = 1..19.

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

22

Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис»

Пример. Дан одномерный массив действительных чисел размерностью n. Найти сумму его элементов:

Program P_F_Summa; Const

n:=20; {Длина массива} Type

Tvector= array [1..n] of real; Var

Vector : Tvector; Sum : real;

i : integer;

Procedure Psumma (Vec: Tvector; Len: integer; Name: string); {Находит сумму элементов массива}

Var

i: integer; S: real; begin

S:=0;

for i:=1 to Len do s:=s+Vec[i];

Writeln (‘Сумма элементов вектора’, Name,’=’, s:7:2); End; {Psumma}

Function F_Summa (Vec: Tvector; Len: integer): real; Var

i: integer; S: real;

Begin

S:=0;

For I := 1 to Len do S := S+Vec[i];

F_Summa := S {Присвоение имени функции значения}

{результата является обязательным }

{оператором в теле функции}

End; {F_Summa} Begin {P_F_Summa}

Writeln (‘Введите ‘,n,’ элементов массива (n<=20):’); For i := 1 to n do read (Vector [i]);

readln;

Writeln (‘вызов процедуры выполняется отдельным оператором: обращение к имени процедуры с ее параметрами’)

23

Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис»

P_Summa (Vector, n, ‘Vector’);

{‘Вычисление суммы вектора в выражении’} Sum := F_Summa (Vector, n);

Writeln (‘Сумма элементов вектора, найденная через функцию’, Sum:7:2);

Writeln (‘Сумма элементов вектора вычисленная в операторе writeln при обращении к функции =’, F_Summa (Vector, n));

End. {P_F_Summa}

ЗАДАНИЯ К ЗАНЯТИЮ

Разработать следующие процедуры.

1. Для нахождения наименьшего из положительных элементов массива а1, а2, . . . , а10. В качестве значения наименьшего элемента использовать первый элемент массива.

2. Для нахождения наибольшего значения выражения Y = = a sin(a X + φ) при изменении аргумента Х от 0 до π/2 с шагом 0,1 при двух вариантах:

ϕ = сonst;

x = ϕ.

3.Написать процедуру «Игра». Играют двое — мальчик и девочка. В матрицу размером 3 × 3 вводятся последовательно элементы. Мальчик должен вводить цифру 1, а девочка — цифру 2. Если сумма элементов любой строки или любого столбца или диагоналей будет равна 6, то выиграет девочка; иначе — выиграет мальчик. Вывести сообщение о результате игры.

4.Написать процедуру по условию задания 3, в котором вместо значения 1 мальчик вводит символ «*», а девочка вместо цифры 2 вводит символ «=».

Задания 3 и 4 предлагаются для обсуждения.

Слова и выражения, которые следует знать:

Процедура, функция, подпрограмма, параметры-значения, па- раметры-переменные, параметры-константы, фактические параметры, формальные параметры, глобальные и локальные переменные.

24

Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис»

ОГЛАВЛЕНИЕ

 

Теоретическая часть . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

3

Расположение процедур и функций в программе . . . . . . . . . . . . . .

6

Описание процедур и функций. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

8

Параметры процедур и функций . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

9

Передача параметров в процедурах и функциях через открытые

 

массивы . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

13

Использование процедур и функций . . . . . . . . . . . . . . . . . . . . . . . . . .

14

Область действия (сфера видимости) идентификаторов при

 

использовании процедур и функций . . . . . . . . . . . . . . . . . . . . . . . . . . .

15

Перекрытие глобальных переменных и констант . . . . . . . . . . . . . .

17

Задания к занятию . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

24

Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис»

Учебное издание

Неземский Валентин Иванович Орешкина Ольга Алексеевна

ПРОЦЕДУРЫ И ФУНКЦИИ

Редактор С.Ю. Шевченко Корректор Р.В. Царева

Компьютерная верстка В.И. Товстоног

Подписано в печать 10.03.2009. Формат 60×84/16. Усл. печ. л. 1,63. Тираж 100 экз. Изд. № 94.

Заказ

Издательство МГТУ им. Н.Э. Баумана. Типография МГТУ им. Н.Э. Баумана. 105005, Москва, 2-я Бауманская ул., 5.

Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис»

ДЛЯ ЗАМЕТОК

Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис»

ДЛЯ ЗАМЕТОК

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]