28616

Подпрограмма

Доклад

Информатика, кибернетика и программирование

Функции Другой вид подпрограммыфункцияоформляется аналогично процедуре. Отличительные особенности функции: она имеет только один результат выполнения но может иметь несколько входных параметров; результат обозначается именем функции и передаётся в основную программу. Функция оформляется в следующем виде: Function имя функции формальные параметры: тип: тип значения функции; Var . Вызов функции можно делать непосредственно внутри выражения.

Русский

2013-08-20

21.26 KB

1 чел.

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

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

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

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

Подпрограммы могут быть стандартными, т.е. определенными системой, и собственными, т.е. определенными программистом.

Стандартная подпрограмма (процедура или функция) - подпрограмма, включенная в библиотеку программ ЭВМ, доступ к которой обеспечивается средствами языка программирования. Вызывается она по имени с заданием фактических параметров с типом описанным при описании данной процедуры в библиотечке процедур и функций.

Из набора стандартных процедур и функций по обработке одного типа информации составляются модули. Каждый модуль имеет своё имя (мы уже хорошо знакомы с модулями Crt, Graph). Доступ к процедурам и функциям модуля осуществляется при подключении этого модуля (Uses Crt, Graph).

Help содержит подробные описания предусмотренных средой программирования процедур и функций. Для вызова помощи при работе со стандартными процедурами и функциями нужно поставить на имя подпрограммы курсор и нажать клавиши . Описание процедур и функций в Help строится по стандартному принципу.

Процедуры

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

Procedure <имя процедуры>(формальные параметры : их тип);

Var

    (локальные переменные)

begin

     . . .

end;

Процедура вызывается по имени:

<имя процедуры> (фактические параметры);

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

Каждый формальный параметр указывается вместе со своим типом. Соответствующий ему фактический параметр указывается без типа. Между формальными и фактическими параметрами должно быть соответствие по количеству параметров, по их типу и порядку следования.

Заголовок процедуры может выглядеть так:

PROCEDURE GG(a,b,c:integer); вызываться так: GG(3,n,m)

Здесь a,b,c-формальные параметры, а 3, n, m-фактические параметры

Таким образом в процедуру передаются значения: a=3, b=n, c=m

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

Например:

Procedure express(a,b,c : real; var x,y:real);

Var

  z : real;

begin

  z:=a+ b+ c;

  x:=sqr(z);

  y:=sqrt(z);

end ;

Эту процедуру можно вызвать следующим образом:

express(7.6, 6.8, 9.5, x1, x2);

Формальные входные параметры a, b, c принимают значения соответствующих фактических параметров a=7.6; b=6.8; c=9.5.

При этих значениях выполняется процедура. Результатом выполнения процедуры являются x, y, которые передают свои значения соответствующим фактическим параметрам x1, y1. Таким образом в основной программе будем иметь x1=20, y1=22.

В качестве фактических параметров могут быть константы, переменные, выражения, массивы. В качестве формальных параметров могут быть только переменные(константы и выражения недопустимы).

Функции

Другой вид подпрограммы-функция-оформляется аналогично процедуре. Отличительные особенности функции: она имеет только один результат выполнения (но может иметь несколько входных параметров); результат обозначается именем функции и передаётся в основную программу. Функция оформляется в следующем виде:

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

Var

  . . .

Begin

  . . .

End.

Вызывается функция по её имени с указанием фактических параметров.

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

Различие между процедурами и функциями

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

Program ProcedureAndFunction;

Uses

 Crt;

Var

 a, b, SumNumbers : integer;

Procedure Summa1(Var Sum: integer; a, b : integer);

Begin

 Sum:= a+b;

End;

 

Function Sum(a, b : integer) : integer;

Begin

 Sum:= a+b;

End;

 

Begin

 ClrScr;

 a := 12;

 b := 15;

 Summa1(SumNumbers, a, b);

 writeln ('С помощью процедуры сумма чисел равна ',SumNumbers);

 writeln ('С помощью функции сумма чисел равна ',Sum(a, b));

End.

Вызов процедуры производится по ее имени. Наряду с параметрами-значениями a и b, которые подлежат сложению, в списке параметров присутствует параметр-переменная Sum, который содержит возвращаемое процедурой значение - сумму. Функция же имеет только два параметра. Это связано с тем, что само имя функции представляет собой идентификатор параметра, значение которого после окончания работы функции равно результату вычисления. Этот параметр соответствует параметру-переменной Sum процедуры. При объявлении функции ей в соответствие ставят определенный тип данных - тип возвращаемого функцией значения.

Объявление функции

Function Sum(a, b : integer) : integer;

внешне похоже на объявление переменной Sum типа integer. Тип функции объявляется следом за списком параметров - после закрывающейся скобки этого списка и двоеточия.

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

SumNumbers:= Sum(a,b);

Если не обращать внимания на наличие списка параметров, то этот оператор выглядит как присвоение переменной SumNumbers значения переменной Sum. Компилятор, кончно же, знает, что Sum - это имя функции (т.к. определение предшествует использованию) и организует вычисления соответствующим образом. Точно так же, как константа или переменная, вызов функций может использоваться в списках параметров оператора write (см. программу), что для процедур невозможно.

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

Итак, из вышесказанного возьмите на заметку следующее:

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


 

А также другие работы, которые могут Вас заинтересовать

38032. Структура HTML-документа. Создание элементарной WEB-страницы 502 KB
  Для работы с этими текстами был создан специальный протокол HTTP Hyper Text Trnsfer Protocol были обозначены основные элементы языка разметки HTML. Язык HTML развился из стандартного обобщенного языка описания документов SGML и является его производной созданной для разметки текстовых документов. Существуют разные суждения о том считать HTML языком программирования или нет. С точки зрения программистов он имеет достаточно простой синтаксис и довольно легок в изучении но с другой стороны для простого пользователя иногда постижение...
38033. Форматирование текста 44.5 KB
  Форматирование текста Цель работы: используя теги разбивки текста логического и физического форматирования текста создать страницу по данному образцу. Теги разбивки текста h1 т h1 h2 т h2 h3 т h3 h4 т h4 h5 т h5 h6 т h6 заголовки стилей 1 2 3 4 5 6. Атрибут: lign= задает положение текста абзаца на строке. Значения: left выровнять текст по левому краю center выровнять текст по центру right выровнять текст по правому краю.
38034. Работа с цветом фона страницы и цветом шрифта. Задание бегущей строки 159.5 KB
  Работа с цветом фона страницы и цветом шрифта. Контейнер описания шрифта может быть помещен в любой другой контейнер. задает имя шрифта или несколько возможных шрифтов. Броузер берет последующий шрифт если у него нет предыдущего; size= задает размер шрифта.
38035. Нумерованные и маркированные списки 60.5 KB
  Сдвиг один Сдвиг другой Сдвиг сякой Хочу обратить ваше внимание что это прописано без параметра type но при помощи тэга ul : ul li Сдвиг один li ul ul ul li Сдвиг другой li ul ul ul ul ul li Сдвиг сякой li ul ul ul Списки могут быть и вложенными: как это выглядит: Код: тема 1 подтема 1 подтема 2 подподтема подтема 3 тема 2 UL LI тема 1 OL LI подтема 1 LI подтема 2 OL strt= 10 LI подподтема OL LI подтема 3 OL LI тема 2 UL Оформление списков может нумероваться...
38036. Вставка изображений на WEB-страницу 274.5 KB
  Если картинка лежит в поддиректории то ссылка на неё будет выглядеть так img src= путь к картинке название картинки.расширение картинки Для вашего удобства кладите картинку в ту же директорию что и документ тогда путаницы будет меньше и записывать короче img src= название картинки.расширение картинки Если картинка лежит на уровень выше а документ находится в поддиректории то ссылка на неё будет такой: img src= . название картинки.
38037. Гиперссылки 138.5 KB
  href= т ссылка. Атрибуты: href= задает URL адрес. Чтобы по ссылке в левом кадре открылся файл в правом кадре конструкция ссылки в файле загруженном в левый кадр должна быть такой: href= имя файлаимя метки trget= правый указатель ссылки где: имя файла имя файла загружаемого в правый кадр имя метки имя метки в этом файле. Принципы прописывания пути здесь такие же как в случае с картинками: 1 href= prf.
38038. Интегрирование мультимедиа на WEB-страницу 260.5 KB
  Если на странице обнаружен элемент embed или object то производится попытка использовать один из имеющихся плагинов для вывода мультимедиафайла в окне браузера. Применяется созданный компанией Netscpe и получивший широкое распространение элемент embed . Например: embed nme= Moviel src= moviel.com quicktime downlod embed ПРИМЕЧАНИЕ Internet Explorer 5.