Память, распределенная для переменных с помощью New (выделение в динамически распределяемой облатсти), после завершения работы с ними должна освобождаться. Это позволит использовать динамически распределяемую память для других переменных. Нужно помнить, что если вы распределяете динамические переменные с помощью New, то освобождать выделенную для них память после завершения работы с этими переменными нужно с помощью Dispose (освобождение выделенной записи).
12-Однонаправленный список:
Unit Spisok;
Interface
Type BT = LongInt;
U = ^Zveno;
Zveno=Record Inf:BT;Next:U End;
Procedure_V_Nachalo(Var First : U; X : BT);
Procedure_Iz_Nachala(Var First:U;Var X:BT);
Procedure V_Spisok(Pred : U; X : BT);
Procedure Iz_Spiska(Pred : U; Var X : BT);
Procedure Ochistka(Var First: U);
Function Pust(First : U) : Boolean;
Procedure Print(First : U);
procedure zapol(var First:U);
Implementation
Procedure V_Nachalo;
Var Vsp : U;
Begin New(Vsp);
Vsp^.Inf := X;
Vsp^.Next := First;
First := Vsp; End;
Procedure Iz_Nachala;
Var Vsp : U;
Begin Vsp := First;
First := First^.Next;
X := Vsp^.Inf;
Dispose(Vsp); End;
Procedure V_Spisok;
Var Vsp : U;
Begin New(Vsp);
Vsp^.Inf := X;
Vsp^.Next := Pred^.Next;
Pred^.Next := Vsp; End;
Procedure Iz_Spiska;
Var Vsp : U;
Begin Vsp := Pred^.Next;
Pred^.Next := Pred^.Next^.Next;
X := Vsp^.Inf;
Dispose(Vsp); End;
Procedure Ochistka;
Var Vsp : BT;
Begin While Not Pust(First) Do Iz_Nachala(First, Vsp) End;
Function Pust;
Begin Pust := First = Nil End;
Procedure Print;
Var Vsp : U;
Begin Vsp := First;
While Vsp <> Nil Do
Begin
Write(Vsp^.inf: 6);
Vsp := Vsp^.Next;
End; WriteLn End;
procedure zapol;
var v:U;i,n:integer;a:Bt;
begin
write('vvedite kol-vo el-ov v spiske:');
readln(n);
a:=-10+random(21);
V_Nachalo(First,a);
v:=First;
for i:=2 to n do
begin a:=-10+random(21);
V_Spisok(v,a);
v:=v^.next; end;end;
Begin
End.
14-Кольцевой список:
Unit Spis;
Interface
type BT=longint;
U=^zveno;
zveno=record
inf:BT;
P,N:U;
end;
procedure V_Nachalo(var first:U;x:BT);
procedure V_Spisok(pred:U;x:BT);
procedure Print(first:U);
function vvod:U;
Implementation
procedure V_Nachalo;
var vsp:U;
begin
new(vsp);
vsp^.inf:=x;
vsp^.P:=first^.P;
vsp^.N:=first;
first^.P^.N:=vsp;
first^.P:=vsp;
first:=vsp;
end;
function vvod;
var v,S:U;x:BT;k,i:integer;
begin
write('vvedite kol-vo elem-ov');
readln(k);
x:=-100+random(201);
new(s);
s^.inf:=x;
s^.P:=s;
s^.N:=s;
v:=S;
for i:=2 to k do
begin
x:=-100+random(201);
V_Spisok(v,x);
v:=v^.N;
end;
vvod:=S;
end;
procedure V_Spisok;
var vsp:U;
begin
new(vsp);
vsp^.inf:=x;
vsp^.P:=pred;
pred^.N^.P:=vsp;
vsp^.N:=pred^.N;
pred^.N:=vsp;
end;
procedure Print;
var vsp:U;i:boolean;
begin
i:=true;
vsp:=first;
while (vsp<>first)or(i) do
begin
i:=false;
write(vsp^.inf:5);
vsp:=vsp^.N;
end;
writeln;
end;
Begin
end.
19-Модуль. Общая структура модуля. Компиляция и подключение модуля:
Модуль (UNIT) в TURBO PASCAL - это особым образом оформленная библиотека подпрограмм. Модуль в отличие от программы не может быть запущен на выполнение самостоятельно, он может только участвовать в построении программ и других модулей. Модули позволяют создавать личные библиотеки процедур и функций и строить программы практически любого размера. Модуль в TURBO PASCAL представляет собой отдельно хранимую и независимо компилируемую программную единицу. В общем случае модуль - это совокупность программных ресурсов, предназначенных для использования другими программами. Под программными ресурсами понимаются любые элементы языка TURBO PASCAL: константы, типы, переменные, подпрограммы. Модуль сам по себе не является выполняемой программой, его элементы используются другими программными единицами. Все программные элементы модуля можно разбить на две части: - программные элементы, предназначенные для использования другими программами или модулями, такие элементы называют видимыми вне модуля; - программные элементы, необходимые только для работы самого модуля, их называют невидимыми или скрытыми. В соответствии с этим модуль, кроме заголовка, содержит две основные части, называемые интерфейсом и реализацией. В общем случае модуль имеет следующую структуру:
unit <имя модуля>; {заголовок модуля}
interface
{описание видимых программных элементов модуля}
{описание скрытых программных элементов модуля}
begin
{операторы инициализации элементов модуля}
end.
В частном случае модуль может не содержать части реализации и части инициализации, тогда структура модуля будет такой:
unit <имя модуля>; {заголовок модуля}
interface
{описание видимых программных элементов модуля}
implementation
end.
Использование в модулях процедур и функций имеет свои особенности. Заголовок подпрограммы содержит все сведения, необходимые для ее вызова: имя, перечень и тип параметров, тип результата для функций, эта информация должна быть доступна для других программ и модулей. С другой стороны, текст подпрограммы, реализующий ее алгоритм, другими программами и модулями не может быть использован. Поэтому заголовок процедур и функций помещают в интерфейсную часть модуля, а текст - в часть реализации. Интерфейсная часть модуля содержит только видимые (доступные для других программ и модулей) заголовки процедур и функций (без служебного слова forward). Полный текст процедуры или функции помещают в часть реализации, причем заголовок может не содержать список формальных параметров. Исходный текст модуля должен быть откомпилирован с помощью директивы Make подменю Compile и записан на диск. Результатом компиляции модуля является файл с расширением .TPU (Turbo Pascal Unit). Основное имя модуля берется из заголовка модуля. Для подключения модуля к программе необходимо указать его имя в разделе описания модулей, например:
uses CRT,Graph;
В том случае, если имена переменных в интерфейсной части модуля и в программе, использующей этот модуль, совпадают, обращение будет происходить к переменной, описанной в программе. Для обращения к переменной, описанной в модуле, необходимо применить составное имя, состоящее из имени модуля и имени переменной, разделенных точкой. Например, пусть имеется модуль, в котором описана переменная К:
unit M;
interface
var K: Integer;
implementation
.................
end.
Пусть программа, использующая этот модуль, также содержит переменную К:
Program P;
uses M;
var K: Char;
begin
.............
end.
Для того, чтобы в программе P иметь доступ к переменной K из модуля M, необходимо задать составное имя M.K. Использование составных имен применяется не только к именам переменных, а ко всем именам, описанным в интерфейсной части модуля. Рекурсивное использование модулей запрещено. Если в модуле имеется раздел инициализации, то операторы из этого раздела будут выполнены перед началом выполнения программы, в которой используется этот модуль.