- •2 Организация программ линейной структуры. Примеры. Ввод-вывод различных типов данных и матриц.
- •3 Операторы передачи управления. Организация программ разветвляющейся структуры. Примеры.
- •4 Организация программ циклической структуры. Виды циклов. Примеры использования.
- •6 Классификация типов данных. Описание характеристик каждого типа данных. Описание конструкций пользовательских типов данных с помощью синтаксических диаграмм. Примеры использования.
- •7 Файловые типы данных. Работа с файлами различных типов в режиме последовательного доступа. Работа с файлами в режиме прямого доступа. Обработка ошибок.
- •8 Процедуры и функции. Сравнительная характеристика. Примеры использования.
- •9 Структура программ с использованием подпрограмм. Виды параметров. Использование массивов в качестве параметров. Параметр – открытый массив.
- •10 Параметры процедурного типа. Примеры использования.
- •11 Локальные и глобальные переменные. Процедуры без параметров. Побочные эффекты. Примеры.
- •12 Рекурсивные подпрограммы в языке Паскаль: организация, примеры использования. Взаимная рекурсия. Директива forward.
- •13 Задание начальных значений переменным. Примеры использования в программах для различных типов данных, определяемых пользователем.
- •14 Общая характеристика модуля и примеры его использования. Структура программы и структура модуля.
9 Структура программ с использованием подпрограмм. Виды параметров. Использование массивов в качестве параметров. Параметр – открытый массив.
В Delphiдопускается любой уровень вложенности процедур и функции. Схематическую структуру программ с использованием подпрограмм можно изобразить так:
Подпрограммы могут иметь Формальные и фактические параметры. Параметры, имена которых указаны в заголовке подпрограммы называют формальными. Переменные, имена которых подставляются в оператор вызова подпрограммы или фактическом обращении к ней, называютфактическимипараметрами.
Параметр переменная (В списке формальных параметров VAR). При любых изменениях значения формального параметра-переменной изменится и фактический параметр.
Параметр константа (CONST).
Параметр результат (OUT).
Параметр значение. При изменении формального параметра-значения фактический параметр не меняется.
Как известно, массив можно рассматривать не только как группу упорядоченных переменных, объединенных одним именем, но и как одну переменную, называемую полной переменной. Если имеются две полные переменные “A” и “B”, одинаковые по размерам и типу хранимых ими значений, то значение “A” может быть присвоено переменной “B” с помощью одного оператора присваивания B:=A; т.е. не обязательно передавать значения из одного массива в другой поэлементно. Таким образом, массивам внутри процедуры можно передавать значения извне с помощью формальных и фактических параметров, оформленных в виде полных переменных. При использовании массивов в качестве параметров процедур существует ряд ограничений. Во-первых, нельзя обрабатывать одной и той же процедурой массивы разных типов и размеров. Во-вторых, в заголовке процедур для указания типов формальных параметров- полных переменных запрещается использовать безымянные типы, например A:Array[1..20] of Real. Правильно будет предварительно описывать имя типа массива в разделе описаний программы:Type Mas1=Array[1..20] of Real; ............................... Procedure Proced(Var A:Mas1); begin ............................... end;
Как уже говорилось, при объявлении формальным параметром параметра-значения, фактический параметр копируется во временную память, а затем - из памяти в процедуру. Если в этом случае фактическим параметром будет большой массив, то на дополнительное копирование уйдет много времени и памяти, поэтому при обработке процедурой крупных массивов лучше использовать параметр-переменную.
Для передачи одномерных массивов в подпрограмму можно использовать так называемые открытые массивы. Открытый массив представляет собой формальный параметр подпрограммы, описывающий базовый тип элементов массива, но не описывающий его размерности и границы. Применительно к рассматриваемой функции ее заголовок при использовании открытого массива будет иметь следующий вид:
function sred(b:array of real;n:integer):real;
Внутри подпрограммы открытый массив трактуется как одномерный массив, у которого начальный индекс всегда равен нулю, а максимальный индекс можно получить с помощью функции High. Таким образом, используя открытые массивы можно передавать в подпрограмму и обрабатывать внутри подпрограммы одномерные массивы с произвольным количеством элементов. Это и демонстрирует следующая программа, в которой внесены изменения в подпрограмму-функцию для работы с открытыми массивами.