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

14. Структура tpu- модуля и программы.

Модули, организованные на Паскале

Структура модуля

Unit имя;

{имя модуля обязательно совпадает с именем файла, в который записан этот модуль}

Uses имена других модулей; {возможность подсоединения других модулей}

Interface

Procedure имя1 (список параметров);

Function имя2 (список параметров): имя типа;

Описание необходимых типов, констант, переменных

{это поле не завершается служебным словом End и служит для работы транслятора. Сюда входит описание констант, типов, переменных, используемых в данном модуле, а также процедуры и функции с полными заголовками, но без тела.}

Implementation

End.

{обязательно}

Поле Imlementation

Implementation

Procedure имя1; {используются сокращенные заголовки для подпрограмм}

begin

тело1

end; {здесь; пропускать нельзя}

Function имя2;

begin

тело2

end; {здесь ; пропускать нельзя}

(*)

End. {точка как признак конца трансляции}

(*) – здесь может стоять поле инициализации, где задаются начальные значения. Оно не завершается словом end.

Пример поля инициализации, которое можно поместить вместо (*)

begin

For i:=1 to n do

M[i]:=0;

Структура основной программы

Program OSN_PR;

Uses имя, crt, graph; {важен порядок следования, если в одном модуле используется другой}

Поля описаний для ОП (основной программы)

Begin

имя1 (а, с);

y:=имя2(x);

End.

Трансляция F9:

имя.pas -> F9 -> имя.tpu

При работе с модулями желательно иметь и основную программу, и модуль в своем каталоге. В противном случае в меню опции следует указать путь, где хранятся модули.

Для обеспечения работы с массивами любого размера нельзя описывать массив внутри tpu-модуля, который хранит подпрограмму по его обработке, так как этот модуль уже в машинных кодах, и изменить размер массива нельзя. Именно поэтому константы и сам массив удобно описать в отдельном модуле с пустым полем Implementation, и этот маленький модуль хранить с расширением pas.

15.Ссылочные типы данных, работа со связанным списком.

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

Создаются динамические переменные с помощью процедуры New(p), а удаляется с помощью процедуры Dispose(p). Отсутствие ссылки на элемент записывается с помощью служебного слова NIL.

p – переменная ссылочного типа, указывающая абсолютный адрес динамической памяти, которая создавалась (закрывалась) процедурой (абсолютный адрес занимает 4 байта).

Переменная ссылочного типа связывается с типом переменной, под которую отводится память, следующим образом: н - ^ -тип –k.

Type

P1 =  ^integer;

P2 =  ^real;

P3 =  ^string[6];

Var

S:P1;  {при использовании процедуры New(S) у нас будет отводится  место только под целое, т.к. integer}.

Q:P2; {при использовании процедуры New(Q) отведётся 6 байт, т.к. real}.

A:P3; {при использовании процедуры New(A) отведётся 7 байт, т.к. string}.

Операции с переменными ссылочного типа

 При работе с переменными типа «ссылка» определяются три основные операции:

1.присваивание, но для ссылок на один и тот же тип.

2.операции отношения(<,>,=,<>).

3.переменная ссылочного типа может быть параметром в подпрограммах.

 

Динамическая переменная создаётся с помощью процедуры New(p).

Команда New(p) осуществляет три действия:

1)В ОЗУ отводит столько места, сколько требует тип переменной р(например если строковая 256+4=300)

2)Когда отведено место, в ту переменную, которая служит параметром, записывается начальный адрес 

p:= 10;  (который занимает 4 байта).

3)У этой переменной появляется имя. И это имя p^

 

Var  p:integer;

P^=128;

Если имеем массив, то обращаемся  P^[i]:

Type  mas=array [1..N] of integer;

 Var   p:mas;

       ………………….

       P^[i]=128;

Наибольшее распространение получили списковые структуры, в которых каждый элемент является записью:

Type

    Ссылка=^запись;

    Запись=record

           Содержимое:string[12];

           Адрес:ссылка;

           End

При описании записи с полем ссылочного типа в Паскале позволено описать сначала ссылку на еще неопределённую запись, а затем запись, и только в таком порядке! Это единственный случай в Паскале, когда можно ссылаться на что-то неопределённое.