Хелпикс

Главная

Контакты

Случайная статья





Лабораторная работа № 6. Процедуры и функции. Пояснения к работе.



Лабораторная работа № 6

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

Цель работы: изучение способов реализации вспомогательных алгоритмов с помощью процедур и функций.

Пояснения к работе.

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

Общая структура процедуры:

Procedureимя процедуры (параметры :тип);

Labelлокальные метки;

Constлокальные константы;

Typeлокальные типы;

Varлокальные переменные.

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

Общая структура функции:

Functionимя функции (параметры :тип):тип результата;

Labelлокальные метки;

Constлокальные константы;

Typeлокальные типы;

Varлокальные переменные.

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

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

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

Пример (вычисление факториала):

Function Fact (N: word): longint;

Begin

If N=0 then Fact:=1

         Else Fact:=N*fact(N-1);

End;

При использовании подпрограммы часто возникают ситуации, когда две подпрограммы одного уровня вложенности содержат взаимные вызовы друг друга. Для решения этой проблемы используется предварительное описание процедур, при котором вместо тела процедуры после ее заголовка записывается служебное слово forward. При этом заголовок полного описания может быть записан в сокращенном виде - без списка параметров и типа результата.

Пример:

Procedure P1(x,y:real); forward;

Procedure P2(a,b:real); forward;

Procedure P1;

Begin

P2(1,2);

end.

Procedure P2;

Begin

…P1(3,5);

end.

Задания к работе

1. Составить программу вычисления площади кольца по значениям внутреннего и внешнего радиусов, используя подпрограмму вычисления площади круга (2 варианта: с процедурой и с функцией.).

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

3. Даны три целых числа. Определить, сумма цифр которого из них больше. Подсчет суммы цифр организовать через функцию.

 



  

© helpiks.su При использовании или копировании материалов прямая ссылка на сайт обязательна.