Главная / Лекции / Основы алгоритмизации и программирования

Содержание данной главы
Модуль 5. Процедуры и функции

5.1. Процедуры и функции.

Процедуры и функции используются в тех случаях, когда:
  1. Алгоритм или программа содержат одинаковые действия, различающиеся, возможно исходными данными;
  2. Решаемая задача состоит из нескольких задач, меньших по объему и сложности;
  3. Решением задачи занимается коллектив программистов.

5.2. Функции пользователя.

Работа с функцией в Паскаль-программе состоит из двух частей: объявление функции и обращение к функции. Объявление функции производится в специальном разделе декларационной части Паскаль-программы непосредственно перед разделом операторов. Начинается объявление с заголовка функции. В общем виде заголовок имеет следующие разделы:
   function <имя функции> (<список параметров>): <тип возвращаемого результата>, где function - зарезервированное слово.
В качестве имени функции может использоваться любой допустимый идентификатор.
Список параметров содержит перечисление всех формальных аргументов с указанием их типа. Однотипные аргумент можно перечислить списком.
Тип возвращаемого результата - один из стандартных типов языка Паскаль.
Пример:
   function factorial (n:integer):real;
   function mm (a, b:real; c:byte; d:char):integer;

При обращении к функции из раздела операторов Паскаль-программы указывается имя функции и список фактических параметров.
Обращение к функциям возможно из оператора вывода.
В качестве фактических параметров могут использоваться как значения, так и ссылки на другие переменные. В любом случае количество фактических и формальных параметров одинаково и передача значений происходит в порядке записи.
Пример:
   F:=factorial(5);
   T:=factorial(2)-7;
   M:=factorial(n);
   P:=mm(d,c,b,a);

Задача 1: вычислить факториалы первых 10 натуральных чисел:
var i: byte;
   f: real;
function factorial (n: byte): real;
var i: byte;
   f: real;
begin
   f:=1;
   for i:=1 to n do
      f:=f * i;
   factorial:=f;
end;
begin
   for i:=1 to 10 do
      begin
         f:=factorial(i);
         writeln(f);
      end;
end.

Задача 2: вычислить 10 натуральных степеней для каждого из первых 10 натуральных чисел:
var i, j : byte;
   p: real;
function stepen (b: integer; n: byte): real;
var i: byte;
   a: real;
begin
   a:=1;
   for i:=1 to n do
      a:=a * b;
   stepen:=a;
end;
begin
   for i:=1 to 10 do
      for j:=1 to 10 do
         begin
            p:=stepen (i, j);
            write (p);
         end;
end.



5.3. Процедуры пользователя.

Функции являются частным случаем, т.е. подвидом процедур. Следовательно, все свойства функций справедливы для процедур.
Объявляются процедуры в описательной части программы, в одном разделе с функциями. Порядок объявления независимых друг от друга процедур и функций не важен, если процедура использует в себе обращение к функции или другой процедуре, то последнии обязательно объявляются раньше.
Объявление процедур начинается с заголовка:
   procedure <имя процедуры> (<список параметров>);, где procedure - зарезервированное слово.
Список параметров процедур содержит формальные параметры двух видов. Те, значения которых не возвращаются в программу, и параметры с возвращаемыми значениями.
Последние в списке отмечаются зарезервированным словом var.
Пример:
   procedure xxx(a: byte; var b: byte; c,d: real; var j: char);

Для обращения к процедуре в тексте программы указывается имя процедуры и, в скобках, список фактических параметров. В этом списке параметрам с возвращаемыми значениями обязательно соответствуют переменные.
Пример:
   xxx (5, b, c, 8, i);

Задача 1: вычислить факториалы первых 10 натуральных чисел:
var i: byte;
   f: real;
procedure factorial (n: byte; var f: real);
var i: byte;
begin
   f:=1;
   for i:=1 to n do
      f:=f * i;
end;
begin
   for i:=1 to 10 do
      begin
         factorial(i, f);
         writeln(f);
      end;
end.

Задача 2: вычислить 10 натуральных степеней для каждого из первых 10 натуральных чисел:
var i, j : byte;
   p: real;
procedure stepen (b: integer; n: byte; var f: real);
var i: byte;
begin
   f:=1;
   for i:=1 to n do
      f:=f * b;
      stepen:=a;
end;
begin
   for i:=1 to 10 do
      for j:=1 to 10 do
         begin
            stepen (i, j, p);
            write (p);
         end;
end.



5.4. Использование функций в приближенных вычислениях.

Числовым рядом называется выражение вида U1+U2+…+Un+…, где U1, U2,…, Un - элементы ряда. Этот ряд можно записать в виде
Сумма Sn=U1+U2+…+Un называется n-ой частной суммой ряда.
Сумма U1(x)+U2(x)+…+Un(x)+…, в которой каждый элемент Un(x) является функцией аргумента x, называется функциональной.
Степенным называется функциональный ряд вида a0+a1x+a2x2+…+anxn+…, где a0, a1, a2,…,an,… - постоянные числа, называемые коэффициентами ряда.
Степенной ряд называется рядом Тейлора.


5.5. Использование процедур в приближенных вычислениях.

Пусть требуется вычислить

Значение равно площади криволинейной трапеции ACDB, сторона CD которой является частью графика функции f (x).

1 способ: преобразуем криволинейную трапецию в обычную, заменив сторону CD отрезком.

2 способ: заменим сторону CD криволинейной трапеции на отрезок, параллельный стороне AB и проходящий через одну из вершин C или D.


3 способ: восстановим в середине отрезка AB перпендикуляр до пересечения с графиком функции f(x). Проведем через найденную точку отрезок, параллельный AB.



Для нахождения приближенного значения определенного интеграла разобъем отрезок AB на две равные части (величину 2 обозначим через n). В середине каждого отрезка восстановим перпендикуляры и построим соответствующие прямоугольники. Вычислим площадь S1.


Т.к. выполнив вычисления один раз не возможно оценить их точность, то продолжим разбиение отрезка AB (n=4).

После проведенных вычислений можно оценить полученную точность, которая равна |S1-S2|. Если точность оказывается достаточной, то последнее вычисленное значение S2 будет считаться значением определенного интеграла. Если точность не достаточна, то последнее разбиение считается начальным, т.е. S1=S2 и количество разбиений увеличивается вдвое, т.е. n=2*n.


5.6. Использование библиотек стандартных процедур в программах. Модуль Crt. Текстовые режимы использования экрана.

Язык программирования Паскаль содержит ряд предопределенных процедур, разделенных по темам на несколько библиотек (модулей). Файлы с библиотеками процедур имеют расширение tpu и хранятся в папке units основной директории tp.
Подключение библиотек к программе производится сразу за заголовком программы. Для этого используется служебное слово uses. За ним перечисляются через запятую имена файлов библиотек.
Модуль Crt содержит процедуры и функции, испльзующиеся для работы на текстовом экране. Примером процедуры этого модуля может служить очистка экрана clrscr. Процедуры этого модуля всегда работают в активном окне. Окном считается прямоугольная область, определяемая координатами верхнего левого и нижнего правого угла. По умолчанию активным окном является экран. Размеры экрана, по умолчанию, - 80x25 знакомест.
Заданный по умолчанию режим экрана можно изменить, используюя процедуру textmode (<константа режима>). Константа 0 задает черно/белый режим с размером экрана 40x25.
1 - цветной режим 40x25
2 - черно/белый режим 80x25
3 - цветной режим 80x25
7 - черно/белый режим и монохромный дисплей
256 - загружаемый шрифт - 43 строки в EGA и 50 строк в VGA.

Процедуры этого модуля могут обеспечивать работу со звуком. Частоту звука определяет процедура sound (<число герц>). Длительность звука регулируется процедурой delay (<длительность звука в мс.>) и процедурой nosound - отключение звука.
Короткий звуковой сигнал можно обеспечить, используя символ #7 в списке вывода оператора write. В списке вывода также можно использовать еще 4 специальных символа:
#8 - смещение курсора влево на одну позицию
#10 - сдвиг курсора на одну строку вниз
#13 - перемещение курсора на левую границу окна
Комбинация #13#10 соответствует нажатию клавиши Enter.

Для активирования нового окна следует определить его границы. Для этого используется процедура window (x1, y1, x2, y2). Координаты x1, y1, x2, y2 - абсолютные, все остальные координаты в окне - относительные, а точкой отсчета считается верхний левый угол окна. В пределах окна курсор можно переместить на овую позицию, используя процедуру gotoxy (x, y). Если x, y выходят за пределы окна, то процедура игнорируется. Для изменения цветовой гаммы окна используются следующие процедуры:
textbackground (<…>) - изменяет цвет фона; в качестве аргументов выступают числа 0..7
textcolor (<…>) - изменяет цвет текста; в качестве аргументов выступают числа 0..15.
Для организации мерцающих цветов текста к константе цвета необходимо прибавить 128.


назад     содержание     вперед     на главную


Rambler's Top100
Hosted by uCoz