- •Часть 1
- •Предмет и задачи информатики
- •История эвм
- •Состав вычислительной системы
- •Аппаратное обеспечение
- •Программное обеспечение
- •Операционная система
- •Кодирование Двоичный код
- •Кодирование чисел
- •Кодирование текстовых данных
- •Кодирование графических данных
- •Представление цвета в машинной графике
- •Кодирование звуковой информации
- •Прикладное программное обеспечение Системы обработки текстов
- •Интегрированный пакет Microsoft Office
- •Текстовый процессорWord
- •Создание в документе листа Microsoft Excel
- •О рисунках и других графических объектах
- •Закрепление областей листа
- •Скрытие и отображение столбцов и строк
- •Выделение фрагментов документа
- •Ввод данных с клавиатуры
- •Ввод текста
- •Ввод чисел
- •Ввод формул с клавиатуры
- •Установка границ ячеек
- •Работа с диаграммами
- •Работа с базами данных Основные понятия
- •Объекты базы данных
- •Запросы
- •Страницы
- •Макросы и модули
- •Безопасность баз данных
- •Технологии программирования
- •Алгоритм, программа
- •Интегрированная среда разработки приложений в Delphi
- •Стандарт и диалекты языка
- •Основы Паскаля
- •Основные понятия языка Алфавит
- •Имена и идентификаторы
- •Программные элементы
- •Описания
- •Раздел констант
- •Типизированные константы
- •Переменные
- •Функции и процедуры
- •Правила записи текста программы
- •Концепция данных
- •Основные типы данных Целые типы
- •Битовые операции
- •Вещественные типы
- •Тип дата-время
- •Символьные типы
- •Логические типы
- •Выражения
- •Оператор присваивания
- •Составной оператор
- •Раздел меток
- •Оператор перехода
- •Пустой оператор
- •Раздел типов
- •Условный оператор
- •Перечислимые типы (перечни)
- •Оператор варианта
- •Ограниченные типы
- •Операторы цикла
- •Операторы цикла с параметром
- •Оператор цикла с постусловием
- •Оператор цикла с предусловием
- •Регулярные типы (массивы)
- •Многомерные массивы
- •Комбинированные типы (записи)
- •Оператор присоединения
- •Подпрограммы
- •Подпрограммы-процедуры
- •Подпрограммы-функции
- •Формальные и фактические параметры
- •Параметры-значения
- •Параметры-переменные
- •Параметры-константы
- •ПроцедураExit
- •Процедурные типы
- •Множественные типы
- •Оглавление
- •Часть 1
Подпрограммы-процедуры
Процедура вводится в употребление с помощью описания процедуры, помещенного в разделе процедур и функций программы.
<описание процедуры>::=<заголовок процедуры>;<блок>
<заголовок процедуры>::=procedure<имя процедуры>|
procedure<имя процедуры>(<список формальных параметров>)
Список формальных параметров состоит из групп (секций), отделенных друг от друга точкой с запятой. В каждой секции присутствуют параметры одного типа значений, отделенные друг от друга запятой.
<списокформ.пар.>::=<секцияформ.пар.>{;<секция форм. пар.>}
<секция форм. пар.>::=<имя>{,<имя>}:<имя типа>|
var<имя>{,<имя>}:<имя типа>|
const<имя>{,<имя>}:<имя типа>
Здесь <имя> – идентификатор.
Для активации процедуры, т.е. для выполнения фрагмента программы, объявленного процедурой, в нужном месте программы записывается оператор процедуры.
<оператор процедуры>::=<имя процедуры>|
<имя процедуры>(<список фактических параметров>)
<список фактических параметров>::=<фактический параметр>
{,<фактический параметр>}
<фактический параметр>::=<имя>|<выражение>
Если в описании процедуры отсутствует список формальных параметров, то мы имеем дело с процедурой без параметров. В этом случае оператор процедуры состоит из одного имени процедуры.
Подпрограммы-функции
В математике понятие функции хорошо известно и является центральным. В алгоритмических языках рассматриваются только такие функции, для определения которых можно задать алгоритм определения их значений. Кроме того в Паскале допустимы только такие функции, значения которых относятся к простым типам. Например, значением функции не может быть массив.
Для определения функции служит размещаемое в разделе процедур и функций описание функции, похожее на описание процедуры.
<описание функции>::=<заголовок функции>;<блок>
<заголовок функции>::=function <имя функции>:<имя типа>|
function<имя функции>(<список форм. параметров>):<имя типа>
Cледует обратить внимание на два момента:
после имени функции и параметров в скобках ставится двоеточие и указывается тип возвращаемого значения.
в теле функции должен присутствовать хотя бы один оператор вида
<имя функции>:=<выражение>
Операторов указанного вида может быть и несколько, но хотя бы один из них должен выполняться. Результат последнего по времени выполнения оператора присваивания указанного типа и принимается в качестве окончательного значения функции. Операторы присваивания указанного вида могут использоваться только в описаниях функций и нигде больше. Справа имя функции без аргументов использовать нигде нельзя. Ошибочно использование имени функции с аргументами в левой части оператора присваивания.
Чтобы упростить программирование функций, в Delphi в каждой функции по умолчанию задана встроенная переменная Result, которая имеет тот же тип, что и тип возвращаемого значения. Эту переменную специально объявлять не нужно, она уже готова к работе. В отличие от других языков, в Delphi этой переменной можно присваивать значение неоднократно. Результатом будет последнее присвоенное значение. Присваивание результата расчета имени функции из переменнойResult(в случае ее использования) осуществляется автоматически.
Подпрограмму-функцию можно вызвать так же, как процедуру, если нас не интересует возвращаемый результат, а важны действия, которые она выполняет. Такая возможность задается с помощью директивы {$X+}(расширенный синтаксис, установленный по умолчанию).
Паскаль допускает рекурсивное описание функций, т.е. в теле функции может содержаться обращение к этой же функции.Рекурсия – это определение понятия с использованием этого же понятия.
Пример.
Функцию f(n) = n! можно определить рекурсивно
На Паскале допустима такая подпрограмма-функция
functionfact1(n: integer): integer;
begin if n = 0 then fact1:=1 else fact1:=n*fact1(n-1) end;
В данном примере имеет место явная рекурсия. Рекурсия может быть и неявной, т.е. вызов описываемой функции может содержаться в теле другой процедуры, к которой производится обращение из данной.
Любое рекурсивное определение функции можно заменить не рекурсивным. Рекурсивность – это свойство описания функции, а не самой функции. Что предпочтительнее? Рекурсивное описание обычно короче и нагляднее, а не рекурсивное – длиннее. На вычисление рекурсивной функции затрачивается больше машинного времени и памяти из-за повторных обращений к функции и дублирования локализованных в ней переменных. Выбор способа описания функции – это выбор между компактностью и эффективностью.
При разработке подпрограммы важным является вопрос категорий используемых аргументов. Дело в том, что внутри подпрограммы все данные и вычисления локализованы, т.е. недоступны (если не позаботиться об этом) для основной программы. Обмен результатами расчетов осуществляется с помощью параметров (аргументов). Существует два вида параметров: входные, с помощью которых данные передаются внутрь подпрограммы, ивыходные, с помощью которых передаются результаты расчета. Обмениваться данными с подпрограммой можно с помощью глобальных переменных, но не рекомендуется. В этой связи различают:
локальные переменныезаданы и доступны только в подпрограмме;
глобальные переменные, объявленные в охватывающем подпрограмму блоке, доступны этому блоку и подпрограмме;
формальные параметры, записаные в заголовке, доступны вызывающей программной единице и подпрограмме.
Способ обмена данными с помощью глобальных переменных применяют только в простейших программах. Универсальным способом обмена данными является использование формальных параметров.