Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Программирование / WORD / Лекции по ЯП (часть 2).doc
Скачиваний:
98
Добавлен:
15.04.2015
Размер:
2.24 Mб
Скачать
  1. Особенности использования процедур и функций в турбо паскале

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

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

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

  1. Тип параметра-значения может быть любым, кроме файлового.

Тип параметра- переменной может быть любым, включая файловый.

Вывод: Если необходимо в процедуру или функцию передавать файл, то он должен быть передан как параметр-переменная.

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

  1. Можно передавать длинные параметры не как параметры-значения, а как параметры-переменные (по адресу).

Вторая возможность избавляет от этого недостатка. Можно использовать т.н. параметры-константы.

  1. Можно использовать параметр - переменную или параметр - константу без типа.

( …Var a; const b; …)

Они передаются только по адресу.

  1. Можно использовать т.н. "открытые" массивы - массивы без границ. A : array of char;

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

  3. Есть следующие возможности «внезапного» выхода из процедур или функций и программы. Процедуры:

exit; - обеспечивает прекращение выполняемой процедуры или функции и возвращает управление в точку вызова.

Halt(n); - процедура используется для преждевременного выхода из всей программы, на каком бы уровне вложенности она бы не вызывалась.

n -код возврата; если n = 0 то завершение было нормальным; если n > 0 то программа завершена некорректно. Код возврата анализируется с помощью переменной DOS, которая называется ERRORLEVEL.

  1. Опережающее определение процедур и функций

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

Например: при уточнении процедуры А было решено, что она уточняется с помощью вызова двух процедур В и С.

2-й случай: сложная взаимная рекурсия

Каждый из этих двух рассмотренных случаев связан с описанием в программе использованных процедур:

А, В, С, (1-й случай), P, Q (2-й случай). Компилятор рассматривает программы сверху вниз. При этом все процедуры, функции, константы, переменные и метки должны быть известны до момента их использования. В противном случае компилятор сообщит, что используется неизвестное имя, и воспримет это как ошибку.

Есть две возможности устранения подобных ошибок:

  1. Изменить порядок описания процедур в тексте программы.

В 1-ом случае, чтобы устранить ошибку нужно поместить описание процедур В и С перед описанием процедуры А.

  1. Во 2-ом случае перестановка P и Q не к чему не приведет. Для устранения этой ошибки для процедур и функций есть директива forward. При ее использовании оба примера были бы записаны следующем образом:

Замечания:

  1. директива forward указывает компилятору, что описывается только заголовок. Полное описание будет сделано ниже по тексту программы. Задача оператора forward сделать известными имена процедур и функций.

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

Соседние файлы в папке WORD