|
Урок 29Запись вспомогательных алгоритмов на языке Паскаль Ключевые слова: Запись вспомогательных алгоритмов в языках программирования осуществляется с помощью подпрограмм. В Паскале подпрограмма является частью основной программы. Её описание располагается между разделом var и программным блоком главной программы. Если подпрограмм несколько, то их описания располагаются в произвольном порядке одно за другим. Структура описания подпрограммы аналогична структуре главной программы. Описание подпрограммы начинается с заголовка и заканчивается оператором end. В Паскале различают два вида подпрограмм: процедуры и функции. 2.4.1. Процедуры Процедура — подпрограмма, имеющая произвольное количество входных и выходных данных. Описание процедуры имеет вид: procedure <имя_процедуры> (<описание параметров-значений>; var: <описание параметров-переменных>); begin <операторы> end; В заголовке процедуры после её имени приводится перечень формальных параметров и их типов. Входные параметры, значения которых не изменяются в программе, должны быть параметрами-значениями. Выходные (результирующие) параметры должны быть параметрами-переменными . Для вызова процедуры достаточно указать её имя со списком фактических параметров. В качестве параметров-значений можно указывать имена переменных, константы и выражения. Например, заголовок процедуры вычисления наибольшего общего делителя может быть описан так: procedure nod (a, b: integer; var c: integer); Возможны следующие варианты вызова этой процедуры: nod (36,15, z) - в качестве параметров-значений использованы константы; nod (x,у,z)-в качестве параметров-значений использованы имена переменных; nod (x+y,15,z)-в качестве параметров-значений использованы выражение и константа; В любом случае между фактическими и формальными параметрами должно быть полное соответствие по количеству, порядку следования и типу. Пример 1. Напишем процедуру для нахождения наибольшего общего делителя двух чисел с помощью алгоритма Евклида. Используем её для нахождения наибольшего общего делителя следующих шести чисел: 16,32, 40,64,80и128. program n_6; const m: array [1..6] of integer = (16,32,40,64,80,128); var i, x, у, z: integer; procedure nod (a,b: integer; var c: integer); if a>b then a:=a-b else b:=b-a; c:=a end; begin х:=m[1]; for i:=2 to 6 do begin y:=m[i]; nod (x, y, z); x:=z; end; writeln ('НОД=', х) end. Измените программу так, чтобы с её помощью можно было найти: а) наибольший общий делитель следующих пяти чисел: 12, 24, 30, 48 и 51; б) наибольший общий делитель произвольных десяти целых двузначных чисел. 2.4.2. Функции Описание функции имеет вид: function <имя_функции> (<описание входных данных>): <тип_функции>; begin <операторы>; <имя_функции>:= <результат> end; В заголовке функции после её имени приводится описание входных данных — указывается перечень формальных параметров и их типов. Там же указывается тип самой функции, т. е. тип результата. Функция — подпрограмма, имеющая единственный результат, записываемый в ячейку памяти, имя которой совпадает с именем функции. Поэтому в блоке функции обязательно должен присутствовать оператор <имя_функции>:=<результат>. Для вызова функции достаточно указать её имя со списком фактических параметров в любом выражении, в условиях (после слов if, while, until) или в операторе write главной программы. Пример 2. Напишем программу нахождения максимального из четырёх целых чисел, использующую функцию поиска максимального из двух чисел: program n_7; var а, b, с, d, f: integer; function max (x, у: integer): integer; begin if x>y then max:=x else max:=y; end; begin readln (a, b, c, d); f:=max (max(a,b), max(c,d)); writeln ('f=', f); end. Измените программу так, чтобы с её помощью можно было найти: а) максимальное из чисел а, Ь, с; б) максимальное из чисел Ь, с, d; в) минимальное из четырёх чисел; г) разность максимального и минимального из четырёх чисел. Пример 3. В январе Саше подарили пару новорождённых кроликов. Через два месяца они дали первый приплод — новую пару кроликов, а затем давали приплод по паре кроликов каждый месяц. Каждая новая пара также даёт первый приплод (пару кроликов) через два месяца, а затем — по паре кроликов каждый месяц. Сколько пар кроликов будет у Саши в декабре? Составим математическую модель этой задачи. Обозначим через f(n) количество пар кроликов в месяце с номером п. По условию задачи, /(1) = 1, /(2) = 1, /(3) = 2. Из двух пар, имеющихся в марте, дать приплод в апреле сможет только одна: /(4) = 3. Из пар, имеющихся в апреле, дать приплод в мае смогут только пары, родившиеся в марте и ранее: /(5) = /(4) + /(3) = 3 + 2 = 5. В общем случае: f(n) = f(n - 1) + f(n - 2), п > 3. Числа 1, 1, 2, 3, 5, 8,... образуют так называемую последовательность Фибоначчи, названную в честь итальянского математика, впервые решившего соответствующую задачу ещё в начале XIII века. Оформим в виде функции вычисление члена последовательности Фибоначчи. function f (n: integer): integer; begin if (n=l) or (n=2) then f:=l else f:=f(n-l)+f(n-2) end; Полученная функция считается рекурсивной — в ней реализован способ вычисления очередного значения функции через вычисление её предшествующих значений. Напишите программу, вычисляющую и выводящую 10 первых членов последовательности Фибоначи. Вопросы и задания 1.Ознакомьтесь с материалами презентации к параграфу, содержащейся в электронном приложении к учебнику. Дополняет 2.Для чего используются подпрограммы? 3.В чём основное различие процедур и функций? Самое главное Запись вспомогательных алгоритмов в языках программирования осуществляется с помощью подпрограмм. В Паскале различают два вида подпрограмм: процедуры и функции. Процедура — подпрограмма, имеющая произвольное количество входных и выходных данных. Функция — подпрограмма, имеющая единственный результат, записываемый в ячейку памяти, имя которой совпадает с именем функции. |
|