Главная/Раздел  4

 

 

Главная

 

 Раздел 1

 

Раздел 2

 

Раздел 3

 

Раздел 4

 

Раздел 5

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Подпрограммы.
Процедуры без параметров

В практике программирования часто встречаются ситуации, когда по ходу выполнения программы приходится производить одни и те же вычисления или действия. Чтобы исключить повторение одинаковых записей и сделать тем самым программу проще и понятнее, можно выделить эти повторяющиеся фрагменты в самостоятельную часть программы, которая может быть использована многократно по мере необходимости. Такая автономная часть программы, реализующая определённый алгоритм и допускающая обращение к ней из различных частей программы, называется подпрограммой. Использование подпрограмм позволяет реализовать один из самых прогрессивных методов программирования - структурное программирование. Язык программирования Turbo Pascal 7.0, даже в сравнении с другими промышленными системами программирования, обладает очень мощными средствами для работы с подпрограммами.

Описание процедур без параметров.

Как вы уже знаете, в структуре Pascal-программы предусмотрен специальный раздел для описания подпрограмм - раздел описания процедур и функций. Именно в этом разделе производится описание подпрограмм. Структура любой подпрограммы почти буквально повторяет структуру всей Pascal-программы, и выглядит следующим образом:

Procedure <имя процедуры>;
  Uses   <имена модулей>;
  Label  <имена меток>;
  Const  <имена констант>;
  Type   <имена типов пользователя>;
  Var    <имена локальных переменных>;
     <раздел объявления подпрограмм>;
Begin
   <операторы>;
End;

Отличия Pascal-программ от подпрограмм.

Единственным отличием процедуры без параметров от Pascal-программы состоит в названии заголовка, которое начинается не служебным словом Program, а служебным словом Procedure. Наличие заголовка процедуры обязательно, в отличии от наличия заголовка программы, который может быть опущен. Кроме того любая подпрограмма заканчивается служебным словом End и точкой с запятой, в отличии от End с точкой в Pascal-программе.

Вызов процедур без параметров.

Вызов процедуры без параметров осуществляется по имени данной процедуры в теле программы. Имя процедуры воспринимается как оператор. При выполнении этого оператора выполняется вся подпрограмма.

Вложенность подпрограмм.

Допускается использование в одной программе сразу нескольких подпрограмм. Кроме использования одновременно нескольких подпрограмм Pascal-программа допускает использование вложенных подпрограмм. То есть каждая подпрограма может содержать в себе описание других подпрограмм, которые являются таким образом подпрограммами подпрограмм. Эти подпрограммы, в свою очередь, тоже могут содержать описание своих подпрограмм и так далее.

Область доступности переменных (объектов).

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

  1. Имена объектов, описанных в некотором блоке, считаются известными в пределах данного блока, ВКЛЮЧАЯ и все вложенные блоки.
  2. Имена объектов, описанных в блоке, должны быть уникальны в пределах данного блока и могут совпадать с именами объектов из других блоков.
  3. Если в некотором блоке описан объект, имя которого совпадает с именем объекта, описанного в объемлющем блоке, то это последнее имя становится недоступным в данном блоке.

Говорят, что имя, описанное в блоке, экранирует (закрывает, делает недоступным) одноимённые объекты из блоков, объемлющих данный.

Возвращаясь к предыдущей схеме, можно сказать, что объекты описанные в блоке B, известны (видимы), кроме самого блока B, ещё и в блоках D и E. Имена из блоков C, D, E известны только в пределах соответствующих блоков. Наконец, имена объектов из самого внешнего блока A (то есть блока, соответствующего программе в целом) известны во всех вложенных блоках.

Общий вид Pascal-программы с использованием подпрограмм.

Схематически Pascal-программа содержащая подпрограммы может выглядеть следующим образом:

PROGRAM <главная программа А>;

  procedure <подпрограмма B>;

     procedure <подпрограмма D>;
     begin
       <операторы подпрограммы D>;
     end;

  begin
    <операторы подпрограммы B>;
  end;

BEGIN
  <операторы главной программы A>;
END.

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

Программа, текст которой приведён ниже, выполняет рисование 15 прямоугольных треугольников расположенных горизонтально. Рисование прямоугольного треугольника оформлено в виде процедуры TRG. Треугольник рисуется от текущего указателя, который является правым нижним углом данного треугольника.

PROGRAM ex_25_1;
USES Graph,Crt;
VAR
 gd,gm,i: integer;

  procedure TRG;
  begin
   linerel(40,0);
   linerel(-40,-40);
   linerel(0,40);
  end;

BEGIN
  gd:=vga;
  gm:=vgahi;
  Initgraph(gd,gm,'');
  if Graphresult=grok then
    begin
     MoveTo(10,200);
     for i:=1 to 15 do begin MoveRel(45,0); TRG; end;
     Repeat Until KeyPressed;
    end;
END.

Для того, чтобы нарисовать линию из 15 разноцветных треугольников можно немного изменить процедуру рисования треугольников.

  procedure TRG2;
  begin
   setcolor(i);
   linerel(40,0);
   linerel(-40,-40);
   linerel(0,40);
  end;

Как вы заметили, переменная i, которая используется для изменения цвета рисования, в процедуре TRG2 не объявлена. Она объявлена в главной программе и доступна (видима) в любой её подпрограмме, в том числе и в процедуре TRG2. Такие переменные называются глобальными.

Переменные можно объявлять и внутри подпрограммы. Но в этом случае, переменная объявленная внутри подпрограммы будет доступна только внутри этой подпрограммы. Такие переменные называются локальными переменными. Ниже приведён пример нашей процедуры рисования прямоугольного треугольника с разноцветными сторонами, с использованием локальной переменной j.

  procedure TRG3;
  var j: integer;
  begin
   j:=12;      setcolor(j); linerel(40,0);
   j:=succ(j); setcolor(j); linerel(-40,-40);
   j:=succ(j); setcolor(j); linerel(0,40);
  end;

Пример программы с вложенными процедурами.

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

PROGRAM ex_25_2;
USES Graph,Crt;
VAR
 gd,gm,i: integer;

    procedure LineTrg;
    var k: integer;

        procedure TRG;
        begin
         linerel(40,0);
         linerel(-40,-40);
         linerel(0,40);
        end;

    begin
     for k:=1 to 10 do begin setcolor(i+k); moverel(45,0); trg; end;
    end;

BEGIN
  gd:=vga;
  gm:=vgahi;
  Initgraph(gd,gm,'');
  if Graphresult=grok then
    begin
     MoveTo(10,50);
     for i:=1 to 9 do begin LineTrg; MoveRel(-450,50); end;
     Repeat Until KeyPressed;
    end;
END.

Преимущества применения подпрограмм.

  1. Появляется возможность использовать при написании программ, уже готовые, отработанные фрагменты программ, оформленных в виде подпрограмм.
  2. Возможно применение технологии программирования "сверху-вниз". При использовании такой технологии более сложная и громоздкая задача разбивается на ряд простых и маленьких задач, решение которых сводится к написанию подпрограмм, объединяемых, в конечном итоге, в одну программу.
  3. Написание больших программ можно разделить между несколькими програмистами одновременно, объединив после этого подпрограммы, написанные ими, в одну программу.
  4. В результате использования локальных параметров, память используется более рационально, так как память под локальные переменные выделяется только во время работы данной подпрограммы.

Контрольные вопросы.

  1. Что называется подпрограммой?
  2. Как описываются процедуры без параметров?
  3. Назовите основные отличия подпрограмм от Pascal-программ.
  4. Как осуществляется вызов процедур без параметров?
  5. Что представляют собой вложенные подпрограммы?
  6. Сформулируйте правила дисциплины, регулирующие область доступности различных переменных (объектов).
  7. Что такое локальные и глобальные переменные?
  8. Перечислите преимущества использования подпрограмм.

Задания для самостоятельного выполнения.

  1. Изобразите на экране своё имя, высотой в восемь строк. Каждая буква имени должна быть изображена с помощью своей отдельной процедуры. Цвет букв различен.
  2. Нарисуйте на экране свои инициалы используя линии разного стиля, цвета и толщины. Изображение каждой буквы оформить с помощью отдельной процедуры.
  3. Нарисовать на экране последовательность из 7 одинаковых заполненных звёзд разного цвета.
  4. Составить программу калькулятор. Выполнение операций "+", "-", "*", "/" оформить в виде отдельных подпрограмм.
  5. Составить программу для обработки массива содержащего 10 целых чисел. Определить: 1) сумму элементов массива; 2) среднее арифметическое элементов массива; 3) максимальный элемент массива. Выполнение каждого логического блока программы оформить в виде отдельных процедур.
  6. Нарисуйте на экране диагональ экрана состоящую из 15 разноцветных правильных заполненных восьмиугольников.
  7. Нарисуйте окружность состоящую из 36 разноцветных пятиугольных звёзд, цвет которых непрерывно изменяется. Программа прекращает свою работу по нажатию любой клавиши.
  8. Нарисуйте пирамиду состоящую из заполненных шестиугольников. В основании пирамиды 20 шестиугольников
  9. Нарисуйте картину "лес", состоящую из нескольких "рядов" "ёлочек" сложенных из треугольников.
  10. Нарисуйте олимпийский флаг, состоящий из колец, каждое из которых, в свою очередь, состоит из 36 окружностей.
  11. Нарисуйте "сетку" размером 20x20, состоящую из разноцветных прямоугольных треугольников четырёх видов, различающихся расположением прямого угла.
  12. Нарисуйте сетку, в текстовом режиме размером 20x5, состоящую из надписи "Лицей N 53" выполненную различными цветами.

НАЗАД                    ДАЛЕЕ

 

 

 

 

 

 

 

 

 :::

 

 :::

 

 

 

 

 

 

 

Сайт создан в системе uCoz