Сайт учителя

Тинькова Е.Н.

Урок 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);
begin                                                           
   while 
a<>b  do 

       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.В чём основное различие процедур и функций?


Самое главное

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

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

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

Block title

Вход на сайт

Поиск

Календарь

«  Май 2024  »
ПнВтСрЧтПтСбВс
  12345
6789101112
13141516171819
20212223242526
2728293031

Статистика


Онлайн всего: 1
Гостей: 1
Пользователей: 0

Архив записей