Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Uchebnoe_posobie_Programirovanie.docx
Скачиваний:
5
Добавлен:
08.12.2018
Размер:
217.65 Кб
Скачать

6.7. Директивы подпрограмм

Директивы дают дополнительную информацию, в частности, о размещении подпрограмм.

Директива FORWARD

Если одна подпрограмма использует другую, а та в свою очередь первую, то возникает проблема размещения таких подпрограмм в программе. Текст программы транслируется последовательно сверху вниз. При этом const, type, var должны быть определены до того, как начнутся их упоминания в операторах. В противном случае компилятор объявит их неизвестными. Проблема решается следующим образом:

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

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

Procedure <имя процедуры> ; {только имя}

{Тело процедуры}

Function <имя функции>; {только имя}

{Тело функции}

6.8. Открытые массивы

В Т-П имеется возможность передавать в подпрограмму массивы, размер которых не фиксируется в объявлении подпрограммы.

Function sum1 (var a:array of byte):byte;

Это единственное исключение из правила, согласно которому типы формальных параметров в заголовке подпрограммы могут задаваться только посредством идентификаторов.

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

В качестве открытых допускаются только одномерные массивы.

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

Интерпретация граничных значений открытых массивов и индексов открытых массивов в подпрограмму :

Program testparams;

Var

A1:array[1..10] of byte;

A2:array[0..5] of byte;

A3:array[-10..10] of byte;

Procedure P(var a:array of byte);

Var

I:word;

Begin

For i:=low(A) to high(A) do

Write (i:3);

Writeln

End;

Begin

p(A1) ; p(A2); p(A3);

End.

Результат 0 1 2 3 4 5 6 7 8 9

0 1 2 3 4 5

0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20

7. Записи

7.1.Определение и правила записи

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

Запись – структура данных, состоящая из фиксированного числа компонентов, называемых полями записи. В отличии от массива, поля записи могут быть различного типа.

Структура объявления типа записи:

<имя типа> = record

<имя поля 1>:<тип поля1>;

<имя поля 2>:<тип поля2>;

……..

<имя поля N>:<тип поляN>

End;

<имя типа>, <имя поля> - правильные идентификаторы;

Record, end - ключевые слова

Примеры

Type

Complex = record

Re: real;

Im: real;

End;

  1. Birthday = record

Year : 1900..2007;

Month : 1..12;

Day : 1..31;

End;

  1. Person = record

Name : string [20];

Sex : (wom, men);

Bd : birthday; (Запись, в состав которой входит запись)

{Age : integer;}

Married : Boolean

End;

Можно в программе задать типизированную const типа записи, определив значение каждого из полей.

Ivanov.person = (name:’Иванов’; sex : men; age : 40; married : true);

К каждому компоненту записи можно получить доступ, указав имя переменной типа record, затем (.) и имя поля (составное имя).

Пример.

Var

A,b : person;

Group : array [1..20] of person; (массив из 20 записей)

-------------------------------------------------------------------------

a.name := ‘Петрова’;

a.sex := wom;

a.age := 25;

a.married := false;

group.[4].name :=’Васильев’;

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]