Разделы презентаций


Лекция 29 Тема №6

Содержание

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

Слайды и текст этой презентации

Слайд 1АлгоритмизациЯ и программированиЕ
Лекция 29 Тема №6
Тип данных указатели. Динамическая память. Процедурные

типы. Вариантный тип. Виды динамических структур. Совместимость и преобразование типов.

Структура и состав модуля. Стандартные модули Pascal. Стандартные процедуры и функции Pascal. Директивы компилятора Pascal.
АлгоритмизациЯ и программированиЕ Лекция 29  Тема №6Тип данных указатели. Динамическая память. Процедурные типы. Вариантный тип. Виды

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

указывают на динамические переменные определенного типа, называемого базовым типом.
Если

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

Слайд 3Пример
var p1, p2 : ^real;
p3, p4 : ^integer;
Зарезервированное слово nil

обозначает константу со значением указателя, которая ни на что не

указывает.
Встроенный тип Pointer обозначает нетипизированный указатель, т. е. указатель, который не указывает ни на какой определенный тип.
Примерvar p1, p2 : ^real;p3, p4 : ^integer;Зарезервированное слово nil обозначает константу со значением указателя, которая ни

Слайд 4Операции с указателями
Для указателей определены операции:
присваивания;
p1 := p2;
проверки

на равенство и неравенство:
if p1 = p2 then



Правила присваивания указателей
Любому указателю можно присвоить стандартную константу nil, которая означает, что указатель не ссылается на какую-либо конкретную ячейку памяти: p1 := nil;
Указатели стандартного типа pointer совместимы с указателями любого типа.
Указателю на конкретный тип данных можно присвоить только значение указателя того же или стандартного типа.

Операции с указателями Для указателей определены операции: присваивания;					p1 := p2;проверки на равенство и неравенство:			 	 	if p1

Слайд 5Операция разадресации
применяется для обращения к значению переменной, адрес которой

хранится в указателе:

var p1: ^integer;

p1^ := 2; inc(p1^);

writeln(p1^);

С величинами, адрес которых хранится в указателе, можно выполнять любые действия, допустимые для значений этого типа.
Операция разадресации применяется для обращения к значению переменной, адрес которой хранится в указателе:var p1: ^integer;…p1^ := 2;

Слайд 6Мусор
При присваивании указателю другого значения старое значение теряется.
Это приводит

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

участку динамической памяти нет, а сам он помечен как занятый.

new(p1); new(p2);
p1 := p2;

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

Слайд 7ДИНАМИЧЕСКАЯ ПАМЯТЬ
Вся динамическая память в Турбо Паскале рассматривается как

сплошной массив байтов, который называется кучей.
Память под любую динамически размещаемую

переменную выделяется процедурой NEW. Параметром обращения к этой процедуре является типизированный указатель. В результате обращения указатель приобретает значение, соответствующее динамическому адресу, начиная с которого можно разместить данные, например:
var i,j : ^Integer;
r : ^Real;
begin
New(i);

end.
ДИНАМИЧЕСКАЯ ПАМЯТЬ Вся динамическая память в Турбо Паскале рассматривается как сплошной массив байтов, который называется кучей.Память под

Слайд 8Процедуры и функции работы с динамической памятью
1. Процедура New(var p: Pointer).
Выделяет

место в динамической области памяти для размещения динамической переменной, и

ее адрес присваивает указателю р.
2. Процедура Dispose(var p: Pointer).
Освобождает участок памяти, выделенный для размещения динамической переменной процедурой New, и значение указателя р становится неопределенным.
3. Процедура GetMem(var p: Pointer; size: Word).
Выделяет участок памяти, присваивает адрес его начала указателю р, размер участка в байтах задается параметром size.
4. Процедура FreeMem(var p: Pointer; size: Word).
Освобождает участок памяти, адрес начала которого определен указателем р, а размер – параметром size. Значение указателя р становится неопределенным.
Процедуры и функции работы с динамической памятью1. Процедура New(var p: Pointer).Выделяет место в динамической области памяти для размещения

Слайд 95. Процедура Mark(var p: Pointer)
Записывает в указатель р адрес начала участка

свободной динамической памяти на момент ее вызова.
6. Процедура Release(var p: Pointer)
Освобождает

участок динамической памяти, начиная с адреса, записанного в указатель р процедурой Mark, т. е. очищает ту динамическую память, которая была занята после вызова процедуры Mark.
7. Функция MaxAvaikLongint
Возвращает длину в байтах самого длинного свободного участка динамической памяти.
8. Функция MemAvaikLongint
Возвращает полный объем свободной динамической памяти в байтах.
9. Вспомогательная функция SizeOf(X):Word
Возвращает объем в байтах, занимаемый X.

5. Процедура Mark(var p: Pointer)Записывает в указатель р адрес начала участка свободной динамической памяти на момент ее вызова.6. Процедура

Слайд 10Динамическую память можно возвращать обратно. Для этого используется процедура DISPOSE.


Другая возможность состоит в освобождении целого фрагмента кучи. С этой

целью перед началом выделения динамической памяти текущее значение указателя запоминается в переменной-указателе с помощью процедуры MARK.
Теперь можно в любой момент освободить фрагмент кучи, начиная от того адреса, который запомнила процедура MARK, и до конца динамической памяти. Для этого используется процедура RELEASE.
Динамическую память можно возвращать обратно. Для этого используется процедура DISPOSE. Другая возможность состоит в освобождении целого фрагмента

Слайд 11Для работы с нетипизированными указателями используются процедуры:
GETMEM (P, SIZE)

- резервирование памяти; FREEMEM(P, SIZE) - освобождение памяти.
Здесь Р

- нетипизированный указатель;
SLZE - размер в байтах требуемой или освобождаемой части кучи.

Использование процедур GETMEM-FREEMEM как и вообще вся работа с динамической памятью, требует особой осторожности и тщательного соблюдения простого правила: освобождать нужно ровно столько памяти, сколько ее было зарезервировано, и именно с того адреса, с которого она была зарезервирована.

Для работы с нетипизированными указателями используются процедуры: GETMEM (P, SIZE) - резервирование памяти; FREEMEM(P, SIZE) - освобождение

Слайд 12Функция MAXAVAIL. Возвращает размер в байтах наибольшего непрерывного участка кучи.

Обращение: MAXAVAIL
Результат имеет тип LONGINT.
За один вызов процедуры

NEW или GETMEM нельзя зарезервировать памяти больше, чем значение, возвращаемое этой функцией.
Функция MEMAVAIL. Возвращает размер в байтах общего свободного пространства кучи.
Обращение: MEMAVAIL
Результат имеет тип LONGINT.
Функция MAXAVAIL. Возвращает размер в байтах наибольшего непрерывного участка кучи. Обращение: MAXAVAIL Результат имеет тип LONGINT. За

Слайд 13Длинные строки
Переменная этого типа является указателем на динамически выделяемую область

памяти, в которой хранится строка.
Если длина строки равно нулю, то

указатель также равен nil и память под строку не выделяется.
Если же строка не пустая, то в выделенной для нее области памяти хранится сама строка, терминальный нуль и число ссылок на данную строку (счетчик ссылок – 4 байта).


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

Слайд 14Для обработки текстов в Object Pascal используются следующие типы:
короткая строка

shortString (string) или string [n], где n

строка AnsiString (string);
широкая строка WideString;
нуль-терминальная строка pchar.
Для обработки текстов в Object Pascal используются следующие типы:короткая строка shortString (string) или string [n], где n

Слайд 15ПРОЦЕДУРНЫЕ ТИПЫ
В Турбо Паскале существует два процедурных типа: тип-процедура и

тип-функция.
ПРИМЕР:
type Proc1 = Procedure (a,b,c : integer; x:real);


Proc2 = Procedure (var a,b);
Proc3 = Procedure;
Func1 = Function : real;
Func2 = Function (n:integer) : boolean;
var p1,p2:Proc1; f1,f2:Func2;
ПРОЦЕДУРНЫЕ ТИПЫВ Турбо Паскале существует два процедурных типа: тип-процедура и тип-функция. ПРИМЕР: type Proc1 = Procedure (a,b,c

Слайд 16Переменным процедурных типов можно присваивать в качестве значений имена соответствующих

подпрограмм. При этом нельзя использовать стандартные процедуры и функции.
После

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

Слайд 17Вариантные типы
Вариантные типы используются для представления значении, которые могут интерпретироваться

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

и обычно применяется в случаях, когда тип ее значения при компиляции неизвестен или может изменяться в процессе выполнения программы.
Для описания переменной вариантного типа служит ключевое слово variant.
Пример использования вариантного типа
var v1, v2: Variant;
К: integer;
Вариантные типыВариантные типы используются для представления значении, которые могут интерпретироваться различными способами. Переменная вариантного типа может содержать

Слайд 18Турбо Паскаль - это типизированный язык, т.е тип переменной определяется

при ее описании и не может быть изменен. (Только в

современных версиях Pascal-Delphi стало возможным динамическое – во время выполнения – определение типа). Переменная может участвовать только в операциях допустимых ее типом. Выполнение операций в выражениях, а также операции сравнения требуют, чтобы операнды имели совместимые типы.
Два типа считаются совместимыми, если выполняется хотя бы одно из следующих условий:
1) оба они есть один и тот же тип;
2) оба они вещественные;
3) оба они целые;
4) один тип есть тип - диапазон второго типа;
5) оба они являются типами - диапазонами одного и того же базового типа;
6) оба они являются множествами, составленными из элементов одного и того же базового типа.

Совместимость типов

Турбо Паскаль - это типизированный язык, т.е тип переменной определяется при ее описании и не может быть

Слайд 19Этот вид совместимости требуется при присваивании значений, например в операторе

присваивания или при передаче значений в подпрограмму. Значение типа Т1

является совместимым по присваиванию с типом Т2 (то есть допустим оператор Т1 :=Т2), если выполняется одно из следующих условий.
Т1 и Т2 — тождественные типы (кроме файловых или типов, содержащих элементы файлового типа).
Т1 и Т2 — совместимые порядковые типы, при этом значения типа Т2 попадают в диапазон возможных значений Т1.
Т1 и Т2 — вещественные типы, при этом значения типа Т2 попадают в диапазон возможных значений Т1.
Т1 — вещественный тип, а Т2 — целочисленный.
Т1 и Т2 — строковые типы.
Т1 — строковый тип, а Т2 — символьный (char).
Т1 и Т2 — совместимые множественные типы, при этом все значения типа Т2 попадают в диапазон возможных значений Т1.
Т1 и Т2 — совместимые типы указателей.

Совместимость по присваиванию

Этот вид совместимости требуется при присваивании значений, например в операторе присваивания или при передаче значений в подпрограмму.

Слайд 20Приведение типов
Ch:=Char(N);
N:=Byte(ch);
! !! Переменные занимают одинаковое количество памяти. Исключение составляют

преобразования более длинных целых типов в более короткие: в этом

случае лишние биты просто отбрасываются.
Приведение типовCh:=Char(N);N:=Byte(ch);! !! Переменные занимают одинаковое количество памяти. Исключение составляют преобразования более длинных целых типов в более

Слайд 21Элемент динамической структуры состоит из двух частей:
информационной;
указателей:

Виды динамических структур


В программах чаще всего используются:

линейные списки
стеки
очереди
бинарные деревья

Элемент динамической структуры состоит из двух частей: информационной;указателей:Виды динамических структур В программах чаще всего используются: линейные спискистекиочередибинарные

Слайд 22Линейные списки
односвязные
кольцевые
двусвязные
Односвязный список обеспечивает возможность продвижения лишь в одном

направлении — от начала к концу — при просмотре списка.


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

Каждый элемент списка содержит ключ, идентифицирующий этот элемент.

type
pnode = ^node;
node = record
d : word;{ информационная }
s : string;{ часть}
p : pnode; { указатель на следующий элемент }
end;

Линейные списки односвязныекольцевыедвусвязныеОдносвязный список обеспечивает возможность продвижения лишь в одном направлении — от начала к концу —

Слайд 23Операции со списком:
начальное формирование списка (создание первого элемента);
добавление элемента в

конец списка;
чтение элемента с заданным ключом;
вставка элемента в заданное место

списка (до или после элемента с заданным ключом);
удаление элемента с заданным ключом;
упорядочивание списка по ключу.

Двусвязный линейный список

TYPE
ptr=^Node;
Node=record
x:<базовый тип>;
next:ptr;
prev:ptr;
end;
var b, e:ptr;

Операции со списком:начальное формирование списка (создание первого элемента);добавление элемента в конец списка;чтение элемента с заданным ключом;вставка элемента

Слайд 24Стеки
Стеком называется динамическая структура данных, добавление компоненты в которую и

исключение компоненты из которой производится из одного конца, называемого вершиной

стека. Стек работает по принципу LIFO(Last-In, First-Out) – «Поступивший последним, обслуживается первым».
Обычно над стеками выполняется три операции:
1) начальное формирование стека (запись первой компоненты);
2) добавление компоненты в стек;
3) выборка компоненты (удаление).
Для формирования стека и работы с ним необходимо иметь две переменные типа «указатель», первая из которых определяет вершину стека, а вторая – вспомогательная.
СтекиСтеком называется динамическая структура данных, добавление компоненты в которую и исключение компоненты из которой производится из одного

Слайд 25Очереди
Очередью называется динамическая структура данных, добавление компоненты в которую производится

в один конец, а выборка осуществляется с другого конца. Очередь

работает по принципу FIFO (First-In, First-Out) – «Поступивший первым, обслуживается первым».
Для формирования очереди и работы с ней необходимо иметь три переменные типа указатель, первая из которых определяет начало очереди, вторая – конец очереди, третья – вспомогательная.

ОчередиОчередью называется динамическая структура данных, добавление компоненты в которую производится в один конец, а выборка осуществляется с

Слайд 26Бинарное дерево
Бинарное дерево — динамическая структура данных, состоящая из узлов, каждый

из которых содержит кроме данных не более двух ссылок на

различные бинарные деревья.
На каждый узел имеется ровно одна ссылка.
Начальный узел называется корнем дерева.
Бинарное деревоБинарное дерево — динамическая структура данных, состоящая из узлов, каждый из которых содержит кроме данных не более

Слайд 27Операции для бинарных деревьев
Для бинарных деревьев определены операции:
включения узла в

дерево;
поиска по дереву;
обхода дерева;
удаления узла.

Элемент дерева:

type pnode = ^node;
node = record

data : word; { ключ }
left : pnode; { указатель на левое поддерево }
right : pnode { указатель на правое поддерево }
end;
Операции для бинарных деревьевДля бинарных деревьев определены операции:включения узла в дерево;поиска по дереву;обхода дерева;удаления узла.Элемент дерева:type	pnode =

Слайд 28Модуль
.tpu
unit имя; { заголовок модуля }

interface
{ интерфейсная секция модуля

}
{ описание глобальных элементов}
{модуля (видимых извне)

}

implementation
{ секция реализации модуля }
{ описание локальных (внутренних)}
{ элементов модуля }

begin
{ секция инициализации }
{ может отсутствовать }
end.

В интерфейсной секции модуля определяют константы, типы данных, переменные, а также заголовки процедур и функций.

В секции реализации описываются подпрограммы, заголовки которых приведены в интерфейсной части. Кроме того, в этой секции можно определять константы, типы данных, переменные и внутренние подпрограммы.

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

Модуль .tpuunit имя;	{ заголовок модуля }interface						 	{ интерфейсная секция модуля }	{ описание глобальных элементов}   {модуля

Слайд 29unit Average;
interface
const n = 10;
type mas

= array[1 .. n] of real;
procedure aver_mas(x :

mas;
var av : real);
implementation
procedure aver_mas(x : mas;
var av : real);
var i : integer;
begin
av := 0;
for i := 1 to n do
av := av + x[i];
av := av / n;
end;
end.

Пример модуля

Использование модуля в программе:

program dif_average;
uses Average;
var a, b : mas;
i : integer;
dif, av_a, av_b : real;
begin
for i := 1 to n do read(a[i]);
for i := 1 to n do read(b[i]);
aver_mas(a, av_a);
aver_mas(b, av_b);
dif := av_a – av_b;
writeln('Разность:', dif:6:2);
end.

unit Average;interface  const n = 10;  type mas = array[1 .. n] of real;

Слайд 30Стандартные модули Паскаля
System
Crt
Dos и WinDos

Graph
Strings

Стандартные модули ПаскаляSystem  Crt  Dos и WinDos Graph Strings

Слайд 31Модуль System
содержит базовые средства языка, которые поддерживают ввод-вывод, работу

со строками, операции с плавающей точкой и динамическое распределение памяти


содержит все стандартные и встроенные процедуры, функции, константы и переменные Паскаля
автоматически используется во всех программах, его не требуется указывать в операторе uses
Модуль System содержит базовые средства языка, которые поддерживают ввод-вывод, работу со строками, операции с плавающей точкой и

Слайд 32Примеры переменных System
var HeapOrg: Pointer
Указывает на конец динамической памяти.
var HeapPtr:

Pointer
Указывает на начало динамической памяти.
var InOutRes: Integer
Содержит код последней операции

ввода-вывода. Его можно получить с помощью вызова функции IOResult.
var Input: Text
Назначает стандартный файл ввода.
var RandSeed: Longint
Содержит начальное значение встроенного генератора случайных чисел.
Примеры переменных Systemvar HeapOrg: Pointer	Указывает на конец динамической памяти.var HeapPtr: Pointer	Указывает на начало динамической памяти.var InOutRes: Integer	Содержит

Слайд 33var RandSeed: Longint
function Abs(x)
procedure Assign(var f; Name)
procedure Continue
function Cоpy(s: String;

Indx: Integer; Count: Integer): String
procedure Dec(var x: [;

n: Longint])
function Eof[ (var f) ]: Boolean
procedure Exit
function Exp(x: Real): Real
procedure Моvе(var Src, Dst; Count: Word)
procedure MkDir(s: String)
procedure Randomize
procedure Writeln([var f: Text;] v1, [,v2, ..., vn] )

Примеры подпрограмм System

var RandSeed: Longintfunction Abs(x)procedure Assign(var f; Name)procedure Continuefunction Cоpy(s: String; Indx: Integer; Count: Integer): Stringprocedure Dec(var x:

Слайд 34Модуль Crt
позволяет:
выполнять вывод в заданное место экрана заданным цветом

символа и фона;
открывать на экране окна прямоугольной формы и выполнять

вывод в пределах этих окон;
очищать экран, окно, строку и ее часть;
обрабатывать ввод с клавиатуры;
управлять встроенным динамиком.
Модуль Crt позволяет:выполнять вывод в заданное место экрана заданным цветом символа и фона;открывать на экране окна прямоугольной

Слайд 35Подпрограммы модуля Crt
procedure ClrScr;
procedure Delay(Msec: word)
procedure GoToXY(X, Y: Byte)
function

KeyPressed: Boolean
procedure NoSound
function ReadKey: Char
function Sound(Herz: Word)
procedure TextBackGroud(Color: byte)
procedure TextColor(Color:

Byte)
function WhereX: Byte
function WhereY: Byte
procedure Window(X1, Y1, X2, Y2: Byte)…
Подпрограммы модуля Crt procedure ClrScr;procedure Delay(Msec: word)procedure GoToXY(X, Y: Byte)function KeyPressed: Booleanprocedure NoSoundfunction ReadKey: Charfunction Sound(Herz: Word)procedure

Слайд 36Модули Dos и WinDos
содержат подпрограммы, реализующие возможности операционной системы

MS-DOS — например, переименование, поиск и удаление файлов, получение и

установку системного времени, выполнение программных прерываний.
Для поддержки этих подпрограмм в модулях определены константы и типы данных.
Модули Dos и WinDos содержат подпрограммы, реализующие возможности операционной системы MS-DOS — например, переименование, поиск и удаление

Слайд 37Модуль Graph
обеспечивает:
вывод линий и геометрических фигур заданным цветом и

стилем;
закрашивание областей заданным цветом и шаблоном;
вывод текста различным шрифтом, заданного

размера и направления;
определение окон и отсечение по их границе;
использование графических спрайтов и работу с графическими страницами.

Спрайты (от англ. Sprite – «дух, привидение») представляют собой небольшие графические изображения, перемещаемые по экрану для имитации движущихся фигур или предметов.

Модуль Graph обеспечивает:вывод линий и геометрических фигур заданным цветом и стилем;закрашивание областей заданным цветом и шаблоном;вывод текста

Слайд 38Использование графики
подключение модуля Graph;
перевод экрана в графический режим;
установка параметров

изображения;
вывод изображения;
возврат в текстовый режим.

Использование графики подключение модуля Graph;перевод экрана в графический режим;установка параметров изображения;вывод изображения;возврат в текстовый режим.

Слайд 39Примеры подпрограмм модуля Graph
procedure Arс(Х, Y: Integer; Angle1, Angle2, R:

Word)
procedure Circlе(Х, Y: Integer; R: Word)
procedure CloseGraph
procedure FillPoly(N : Word;

var S)
function GetColor: Word
function GetMaxX: Integer
function GraphResult: Integer
procedure InitGraph(var GrDriver: Integer; var Mode: Integer; Path : String)
procedure Line(X1, Y1, X2, Y2: Integer)
procedure OutTextXY(Х, Y: Integer; S: String)
procedure PutImage(X, Y: Integer; var Mass; Oper: Word)
procedure Rectangle(X1, Y1, X2, X2: Integer)
procedure SetBkColor(Color: Word)
procedure SetColor(Color: Word)
procedure SetLineStyle(SType: Word; Pattern: Word; S: Word)
procedure SetVisualPage(Page: Word)
Примеры подпрограмм модуля Graphprocedure Arс(Х, Y: Integer; Angle1, Angle2, R: Word)procedure Circlе(Х, Y: Integer; R: Word)procedure CloseGraphprocedure

Слайд 40Модуль Strings
предназначен для работы со строками, заканчивающимися нуль-символом (ASCIIZ-строки)

и содержит функции копирования, сравнения, слияния строк, преобразования их в

строки типа string, поиска подстрок и символов.
В модуле System определен тип pChar, представляющий собой указатель на символ (^Char). Этот тип можно использовать для работы с ASCIIZ-строками. Эти строки располагаются в динамической памяти, и программист должен сам заниматься ее распределением.
Кроме того, для хранения ASCIIZ-строк используются массивы символов с нулевой базой, например:
var str : array[0 .. 4000] of char;
Массивы символов с нулевой базой и указатели на символы совместимы.
Модуль Strings предназначен для работы со строками, заканчивающимися нуль-символом (ASCIIZ-строки) и содержит функции копирования, сравнения, слияния строк,

Слайд 41Модуль OVERLAY
Модуль OVERLAY позволяет уменьшить требования к памяти программы DOS

реального режима. Фактически можно разрабатывать программы, превышающие общий объем доступной

памяти, поскольку в каждый момент в памяти будет находиться только часть программы.
Модуль OVERLAYМодуль OVERLAY позволяет уменьшить требования к памяти программы DOS реального режима. Фактически можно разрабатывать программы, превышающие

Слайд 42Директивы компилятора
Директивы компилятора – это особым образом оформленные комментарии, которые

вставляются в текст программы и модифицируют те или иные возможности

компилятора в процессе компиляции.
Все директивы оформляются фигурными скобками, а за открывающей скобкой должен без пробелов следовать знак доллара (десятичный код 36). Например, {$I-}
Как только в процессе разбора исходного текста программы компилятор встретит такого рода последовательность символов, он воспримет их как директиву и нужным образом изменит свою работу.
Директивы могут быть переключающими, условными и параметрическими
Директивы компилятораДирективы компилятора – это особым образом оформленные комментарии, которые вставляются в текст программы и модифицируют те

Слайд 43Переключающая директива содержит букву, обозначающую опцию, и знак «+» или

«-».
Знак «+» означает установку опции в активное состояние, знак

«-» - в пассивное состояние.
Например, директива ($I-} означает временное отключение контроля ошибок ввода-вывода, директива ($R+) - включение контроля границ диапазона
В одной директиве можно перечислить несколько опций.
Следует учесть, что директивы компилятора действуют от момента своего появления в тексте до конца текущего модуля, те локализуются в теле модуля, в то время как опции, установленные в самой среде, распространяются на все модули и основную программу.

Некоторые директивы компилятора могут действовать только на часть текста программы, такие директивы называются локальными; в отличие от этого глобальные директивы располагаются в самом начале текста программы (модуля) и действуют сразу на всю программу (модуль) в целом

Переключающая директива содержит букву, обозначающую опцию, и знак «+» или «-». Знак «+» означает установку опции в

Слайд 44{SA+} - выравнивать данные на границу слова (байта),
{$В+}* -

вычислять логические выражения полностью (до получения результата),
($D+} - разрешить

(запретить) работу со встроенным отладчиком, {$Е+} - включить (отключить) режим программной эмуляции сопроцессора,
{$F+} - использовать дальнюю (ближнюю) модель вызова,
{$G+}* - использовать (не использовать) полный набор команд микропроцессора Intel 80286 микропроцессора Intel 8088),
{$I+}* - включить (отключить) контроль операций ввода-вывода, ($L+) - включить (не включать) локальные символы в информацию для отладчика,
{$N+} - использовать числовой сопроцессор (реализовать операции с плавающей точкой программно),
{$О+} - разрешить (не разрешать) создание оверлейной структуры,
{$R+}* - включить (отключить) контроль границ диапазона,
{$S +}* - включить (отключить) контроль возможного переполнения стека, {$V+}* - включить (отключить) контроль длины строк при обращении к процедуре или функции,
{$Х+} - использовать (не использовать) расширенный синтаксис

* - локальные директивы.

{SA+} - выравнивать данные на границу слова (байта), {$В+}* - вычислять логические выражения полностью (до получения результата),

Слайд 45Условные директивы определяют условия, при которых компилируются те или иные

фрагменты программы.
{$DEFINE} - установить условный символ, {$IFDEF}

- проверить установку условного символа; если символ установлен, будет компилироваться вся следующая за директивой часть программы вплоть до директив {$ELSE} или {$ENDIF},в противном случае этот фрагмент программы будет пропущен компилятором,
{$IFNDEF <условный символ>} - проверить установку локального символа, обратна директиве {$IFDEF} , т.e действует только в том случае, когда условный символ не установлен,
{$ELSE} - определяет начало альтернативного фрагмента программы, этот фрагмент будет компилироваться в том случае, если условный символ, проверенный предыдущей по тексту программы директивой {$IFDEF} или ($IFNDEF} нe установлен, альтернативная часть вместе с директивой {$ELSE} может опускаться,
{$ENDIF} ограничивает область действия директив {$IFDEF}, {$IFNDEF} или {$ELSE}.
Условные директивы определяют условия, при которых компилируются те или иные фрагменты программы. {$DEFINE} - установить условный символ,

Слайд 46Параметрические директивы задают параметры, которые должен учитывать компилятор.
{$M ,,}

- установить требуемые размеры памяти (глобальная директива), здесь -

размер стека; <нижн> - нижняя граница динамической памяти, <верх> - верхняя граница динамической памяти,
{$I<имя файла>} - включение PAS-файла: <имя файла> - имя включаемого файла,
{$L <имя файла>} - включение ОВJ файла, <имя файла> - имя включаемого файла.
Параметрические директивы задают параметры, которые должен учитывать компилятор. {$M ,,} - установить требуемые размеры памяти (глобальная директива),

Обратная связь

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

Email: Нажмите что бы посмотреть 

Что такое TheSlide.ru?

Это сайт презентации, докладов, проектов в PowerPoint. Здесь удобно  хранить и делиться своими презентациями с другими пользователями.


Для правообладателей

Яндекс.Метрика