Вторник, 12.11.2019, 16:21
Главная | Регистрация | Вход Приветствую Вас Гость | RSS


Меню сайта


Статистика

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


Тестування онлайн
тестування онлайн 


Социальные закладк

Тема. Подпрограммы

Очень часто в процессе выполнения программы требуется многократное выполнение какой-либо ее части. Логичнее всего эту часть программы выделить, обозначить ее имя, задать ей необходимые параметры и вызвать эту часть по ее имени.
 Для этого используются процедуры и функции. Все процедуры и функции подразделяются на две группы:

  •            встроенные (стандартные)
  •             и пользовательские.

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

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


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

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

Описание процедуры включает заголовок (имя) и тело процедуры.

  1. Заголовок процедуры состоит из зарезервированного слова Procedure, имени процедуры и списка формальных параметров.
  2. Список формальных параметров необязателен и может отсутствовать, если же он есть, то в нем должны быть перечислены имена формальных параметров и их типы, например:
                                             Procedure sb (a: real, b: integer, c: char);
  3. Имя процедуры создается по тем же правилам, что и имена переменных. Все, что идет после имени процедуры, называют телом процедуры.

Синтаксис описания процедуры имеет следующий вид:

procedure <имя>[(список формальных параметров)]
const...;
var...;
begin
       
<операторы>;
end.

Обмен аргументами и результатами между основной программой и процедурой производится :

  • через формальные и фактические параметры,
  • существует еще один механизм обмена - через глобальные переменные.

Если подпрограмма описана с формальными параметрами, то обращение к ней производится оператором подпрограммы с фактическими параметрами.

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

Пример 12. Вывести на экран все четные числа до указанного. Выполните программу в режиме пошагового выполнения, используйте функциональную клавишу F7.

program pr12;
  var n,i:word;
  procedure pr(x:word);// подпрограмма  определения четности введенного с клавиатуры числа, х – формальный параметр процедуры
   begin
      if x mod 2 =0 then write(' ',x);
   end;

BEGIN
     write('введите число  ');
     read(n);
     for i:=1 to n do pr(i); // вызов процедуры, i – фактический параметр
     readln;

     readln;
END.

2. Пользовательские функции.

Ранее мы сталкивались со стандартными функциями: sqr(x). Возможно создавать собственные функции.

  1. Функция очень похожа на процедуру. В некоторых языках нет понятия процедуры. Ее заменяет функция как общая подпрограмма.
  2. Функция отличается от процедуры тем, что результат ее работы возвращается в виде значения этой функции, и, следовательно, вызов функции может использоваться наряду с операндами и выражениями.

Function <имя> [(список формальных параметров)]: <тип>;
Const …;
Var …;

Begin
    <Операторы>;
End.

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

program pr13;
  var r1,r2:integer;
  function p(r:integer):real; // r – формальный параметр функции
   var p1:real;
   const pi=3.14;
    begin
       p1:=pi*sqr(r);
       p:=p1;
    end;

BEGIN

     write('r1 - ?  ');readln(r1);
     write('r2 - ?  ');readln(r2);
     writeln(abs(p(r1)-p(r2))); //вызов функции и вычисление значений функции за фактическими

END.

3. Локальные и глобальные переменные.

     Деление переменных на локальные и глобальные является способом повысить надежность больших программ и понизить вероятность запутаться при их написании. Областью действия описания любого программного объекта (переменной, типа, константы...) является тот блок, в котором расположено это описание. Если в данный блок вложен другой (подпрограмма), то присутствующие в нем описания являются локальными. Они действуют только в пределах внутреннего блока. Описания же, стоящие во внешнем блоке, называют глобальными.

     Языки, в которых предусмотрены механизмы структурирования программ посредством подпрограммы, называются процедурно- ориентированными.

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

program pr14;
  var x1,x2,x3,y1,y2,y3:integer;
  p,a,b,c:real;
  function dlina(a1,b1,a2,b2:integer):real; //пользовательская функция определения длины отрезка, где a1,b1,a2,b2- формальные параметры
  var p1:real;
     begin
      p1:=sqrt(sqr(a1-a2)+sqr(b1-b2));
      dlina:=p1;
     end;

BEGIN

     write('x1, y1 - ?  ');readln(x1 , y1);
     write('x2, y2 - ?  ');readln(x2, y2);
     write('x3, y3 - ?  ');readln(x3, y3);
     a:=dlina(x1,y1,x2,y2); //вызов функции, вычисление значения функции по фактическим параметрам программы, передача результата вычисления функции фактическим параметрам программы
     b:=dlina(x1,y1,x3,y3);
     c:=dlina(x3,y3,x2,y2);
     p:= a+b+c;
     writeln('p = ',p);
END

 

Форма входа
Поиск
Календарь
«  Ноябрь 2019  »
ПнВтСрЧтПтСбВс
    123
45678910
11121314151617
18192021222324
252627282930
Архив записей
Друзья сайта
  • Официальный блог
  • Сообщество uCoz
  • FAQ по системе
  • Инструкции для uCoz

  • Рейтинг@Mail.ru
    Copyright MyCorp © 2019
    Конструктор сайтов - uCoz