§ 2.4. Запись вспомогательных алгоритмов на языке Паскаль

Информатика 9 класс Босова § 2.4. Запись вспомогательных алгоритмов на языке Паскаль

§ 2.4. Запись вспомогательных алгоритмов на языке Паскаль

Информатика. 9 класса. Босова Л.Л. Оглавление


Ключевые слова:

  • подпрограмма
  • процедура
  • функция
  • рекурсивная функция

Запись вспомогательных алгоритмов на языке Паскаль

Запись вспомогательных алгоритмов в языках программирования осуществляется с помощью подпрограмм. В Паскале подпрограмма является частью основной программы. Её описание располагается между разделом var и программным блоком главной программы. Если подпрограмм несколько, то их описания располагаются в произвольном порядке одно за другим.

Структура описания подпрограммы аналогична структуре главной программы. Описание подпрограммы начинается с заголовка и заканчивается оператором end.

В Паскале различают два вида подпрограмм: процедуры и функции.

Процедуры. Запись вспомогательных алгоритмов на языке Паскаль

Процедура — подпрограмма, имеющая произвольное количество входных и выходных данных.

Описание процедуры имеет вид:

  • procedure <имя_процедуры> (<описание параметров-значений>;
  •           var: Сописание параметров-переменных>);
  • begin
  •   <операторы>
  • end;

В заголовке процедуры после её имени приводится перечень формальных параметров и их типов. Входные параметры, значения которых не изменяются в программе, должны быть параметрами-значениями. Выходные (результирующие) параметры должны быть параметрами-переменными.

Для вызова процедуры достаточно указать её имя со списком фактических параметров. В качестве параметров-значений можно указывать имена переменных, константы и выражения.

Например, заголовок процедуры вычисления наибольшего общего делителя может быть описан так:

  • procedure nod (a, b: integer; var с: integer);

Возможны следующие варианты вызова этой процедуры:

  • nod (36, 15, z) — в качестве параметров-значений использованы константы;
  • nod (х, у, z) — в качестве параметров-значений использованы имена переменных;
  • nod (х+у, 15, z) — в качестве параметров-значений использованы выражение и константа;

В любом случае между фактическими и формальными параметрами должно быть полное соответствие по количеству, порядку следования и типу.

Пример 1. Напишем процедуру для нахождения наибольшего общего делителя двух чисел с помощью алгоритма Евклида. Используем её для нахождения наибольшего общего делителя следующих шести чисел: 16, 32, 40, 64, 80 и 128.

§ 2.4. Запись вспомогательных алгоритмов на языке Паскаль

Измените программу так, чтобы с её помощью можно было найти:

  • а) наибольший общий делитель следующих пяти чисел: 12, 24, 30, 48 и 51;
  • б) наибольший общий делитель произвольных десяти целых двузначных чисел.

Функции. Запись вспомогательных алгоритмов на языке Паскаль

Описание функции имеет вид:

  • function <имя_функции> (<описание входных данных>):
  •           <тип_функции>;
  • begin
  •   <операторы>;
  •   <имя_функции> := <результат>
  • end;

В заголовке функции после её имени приводится описание входных данных — указывается перечень формальных параметров и их типов. Там же указывается тип самой функции, т. е. тип результата.

Функция — подпрограмма, имеющая единственный результат, записываемый в ячейку памяти, имя которой совпадает с именем функции. Поэтому в блоке функции обязательно должен присутствовать оператор <имя_функции>:=<результат>.

Для вызова функции достаточно указать её имя со списком фактических параметров в любом выражении, в условиях (после слов if, while, until) или в операторе write главной программы.

Пример 2. Напишем программу нахождения максимального из четырёх целых чисел, использующую функцию поиска максимального из двух чисел:

§ 2.4. Запись вспомогательных алгоритмов на языке Паскаль

Измените программу так, чтобы с её помощью можно было найти:

  • а) максимальное из чисел а, b, с;
  • б) максимальное из чисел b, с, d;
  • в) минимальное из четырёх чисел;
  • г) разность максимального и минимального из четырёх чисел.

Пример 3. В январе Саше подарили пару новорождённых кроликов. Через два месяца они дали первый приплод — новую пару кроликов, а затем давали приплод по паре кроликов каждый месяц. Каждая новая пара также даёт первый приплод (пару кроликов) через два месяца, а затем — по паре кроликов каждый месяц. Сколько пар кроликов будет у Саши в декабре?

Составим математическую модель этой задачи. Обозначим через /(n) количество пар кроликов в месяце с номером n. По условию задачи, ?(1) = 1, ?(2) = 1, ?(3) = 2. Из двух пар, имеющихся в марте, дать приплод в апреле сможет только одна: ?(4) = 3. Из пар, имеющихся в апреле, дать приплод в мае смогут только пары, родившиеся в марте и ранее: ?(5) = ?(4) + ?(3) = 3 + 2 = 5. В общем случае: ?(n) = ?(n — 1) + ?(n — 2), n ? 3.

Числа 1, 1, 2, 3, 5, 8,… образуют так называемую последовательность Фибоначчи, названную в честь итальянского математика, впервые решившего соответствующую задачу ещё в начале XIII века.

Оформим в виде функции вычисление члена последовательности Фибоначчи.

  • function f (n: integer): integer;
  • begin
  •   if (n=l) or (n=2) then f:=1
  •   else f:=f(n-l)+f(n-2)
  • end;

Полученная функция считается рекурсивной — в ней реализован способ вычисления очередного значения функции через вычисление её предшествующих значений.

Напишите программу, вычисляющую и выводящую 10 первых членов последовательности Фибоначи.


САМОЕ ГЛАВНОЕ

Запись вспомогательных алгоритмов в языках программирования осуществляется с помощью подпрограмм. В Паскале различают два вида подпрограмм: процедуры и функции. Процедура — подпрограмма, имеющая произвольное количество входных и выходных данных. Функция — подпрограмма, имеющая единственный результат, записываемый в ячейку памяти, имя которой совпадает с именем функции.


Вопросы и задания к § 2.4. Запись вспомогательных алгоритмов на языке Паскаль

1. Ознакомьтесь с материалами презентации к параграфу, содержащейся в электронном приложении к учебнику. Дополняет ли презентация информацию, содержащуюся в тексте параграфа?

2. Для чего используются подпрограммы?

3. В чём основное различие процедур и функций?

4. Напишите программу вычисления наименьшего общего крат­ного следующих четырёх чисел: 36, 54, 18 и 15. Исполь­зуйте процедуру вычисления наибольшего общего делителя двух чисел.

5. Напишите программу перестановки значений переменных а, b, с в порядке возрастания, т. е. так, чтобы а<b<с. Ис­пользуйте процедуру swap.

6. Видоизмените программу сортировки массива выбором так, чтобы в ней использовалась процедура выбора наибольшего элемента массива.

7. Напишите программу вычисления выражения: s = 1! + 2! + 3! + … + n!

8. Напишите программу вычисления выражения: s = х3 + х5 + хn, где х и n вводятся с клавиатуры. Используйте подпрограмму вычисления степени.

9. Напишите функцию, вычисляющую длину отрезка по координатам его концов. Напишите программу, вычисляющую периметр треугольника по координатам его вершин с помощью этой функции.

10. Напишите функцию, вычисляющую площадь треугольника по целочисленным координатам его вершин. Напишите про­грамму вычисления площади четырёхугольника по координатам его вершин с помощью этой функции.


§ 2.3. Конструирование алгоритмов

§ 2.4. Запись вспомогательных алгоритмов на языке Паскаль

§ 2.5. Алгоритмы управления