Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Семестр1.doc
Скачиваний:
3
Добавлен:
19.09.2019
Размер:
1.03 Mб
Скачать

12.4 Модули

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

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

Погружение программы в область описаний модуля осуществляется в предложении uses. Это предложение записывается сразу после заголовка программы и имеет следующий формат:

uses <список модулей через запятую>

Область действия описаний каждого модуля начинается с имени этого модуля в предложении uses и заканчивается концом программы.

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

Unit <имя модуля>;

interface

[uses ...]

<описания глобальных типов данных, переменных, констант, процедур и функций>

implementation

[uses ...]

<реализация>

begin

<инициализация>

end.

Имя файла, содержащего исходный текст модуля (.pas) или объектный код (tpu), должно совпадать с именем модуля. Если имя модуля длиннее восьми символов, то оно должно совпадать с именем файла по первым восьми символам.

В списке uses имен модулей не должно быть «рекурсий» и «циклов»

При работе с модулями следует помнить, что в среде ТР имеется возможность управлять размещением кодов в файловой системе и режимами трансляции:

Options/Directories/EXE&TPU - сюда будут помещены загрузочные и объектные коды

Options/Directories/Unit Directories - здесь будет осуществляться поиск объектных (TPU) кодов модулей

Compile/Compile – компиляция только программы

Compile/Make – компиляция программы и модулей, текст которых был изменен

Compile/Build – компилируется и программа, и все модули

Пример Печать данного перечислимого типа. Вот простой пример модуля (пусть имя файла с представленным ниже текстом My_Unit.Pas):

Unit My_Unit;

Interface

type Color=(Red,Yellow,Green);

procedure WriteColor(x:Color);

Implementation

var mass:array[Color] of string[6];

procedure WriteColor;

begin writeln(mass[x]:6) end;

begin

mass[Red]:=' Red';

mass[Yellow]:='Yellow';

mass[Green]:='Green'

end.

После трансляции этого модуля средствами интегрированной среды ТР в директории модулей интегрированной среды образуется файл My_Unit.tpu. Теперь можно воспользоваться новым средством

Uses My_Unit;

var Col:Color;

begin

Col:=Red;

WriteColor(Col)

end.

На экране появится Red

12.5 Обзор модуля System

Модуль System не нужно указывать в предложении uses, поскольку он доступен каждой программе ТР по умолчанию. В модуле предопределены переменные Input и Output как стандартные текстовые файлы ввода и вывода.

12.5.1 Процедуры и функции, обслуживающие файловую систему

При работе с файловой системой используются следующие договоренности:

s disk:\kat\kat\...\file – поиск объекта file осуществляется с корневого каталога; s disk:kat\kat\...\file – поиск с текущей директории указанного диска.

GetDir(d:byte;var s:string); (d=0 – текущий дисковод, 1 – a:, 2 – b: и т.д.), s – текущий каталог.

ChDir,MkDir,RmDir(s:string) – изменение, создание, удаление пустого

Rename(f; newname:string) – переименование файла;

Задача: Написать процедуру удаления любого каталога (даже непустого).

12.5.2 Процедуры управления работой программы

Exit - выход из программы, функции, процедуры.

Halt(kod:word) - выход из программы.

12.5.3 Процедуры и функции распределения динамической памяти

GetMem, FreeMem(var p:pointer; size:word) - создает, уничтожает динамическую переменную.

MaxAvail, MemAvail:longint - объем максимального непрерывного участка и полный свободный объем динамической памяти;

Mark, Release(var p:pointer); - создает, удаляет новую кучу

12.5.4 Функции для работы с указателями

Addr(x):pointer; х - идентификатор переменной, процедуры или функции.

Seg(x):word;

Ofs(x):word;

Ptr(segm,ofset:word):pointer;

Программы с параметрами:

ParamCount:word; - количество параметров в командной строке (разделители пробелы и таб)

ParamStr(index:word):string; - возвращает заданный параметр командной строки.

Пример - программа, вычисляющая сумму

program sum;{ex_04}

var

s,x:real;

i,j,k:integer;

begin

s:=0;

i:=ParamCount;

j:=1;

while j<=i do

begin

val(ParamStr(j),x,k);

if k=0 then s:=s+x;

j:=j+1;

end;

writeln(s:10:5)

end.

Sum.pas ->sum.exe

Option/Directories

Выполнение в DOS: sum 3 5 7

Выполнение в ТР: Run..., Parameters

12.6 Список процедур и функций модуля

Процедуры управления

Procedure Break Обеспечивает немедленный выход из операторов повторения. 

Procedure Continue Завершает очередной итерационный цикл операторов повторения.

Procedure Exit Позволяет немедленно выйти из текущей подпрограммы. При вызове из тела основной программы завершает ее работу.

Procedure Halt [ (ExitCode: Word)] Останавливает выполнение программы и возвращает управление в операционную систему. Необязательный параметр ExitCode определяет код завершения программы.

Procedure RunError [ (ErrorCode: Byte)] Останавливает выполнение программы и генерирует ошибку периода выполнения программы. Необязательный параметр ErrorCode определяет код ошибки.

Процедуры динамического распределения памяти

Procedure Dispose(var P: Pointer [,Destructor]) Уничтожает динамическую переменную, связанную с указателем Р. Необязательный параметр Destructor определяет метод-деструктор для динамического объекта.

Procedure FreeMem(var P: Pointer; Size: Word) Уничтожает динамическую переменную P размером Size байт.

Procedure GetMemt(var Р: Pointer; Size: Word) Создает новую динамическую переменную Р заданного размера Size.

Procedure Mark(var P: Pointer) Записывает в указателе Р текущее состояние кучи.

Procedure New(var P; Pointer [,Constructor]) Создает новую динамическую переменную, связанную с указателем Р. Необязательный параметр Constructor определяет метод-конструктор для динамического объекта.

Procedure Release (var P: Pointer) Возвращает кучу в состояние, которое было сохранено в указателе Р процедурой Mark.

Функции динамического распределения памяти

Function MaxAvail: LongInt Возвращает размер наибольшего непрерывного свободного блока кучи, соответствующий размеру наибольшей динамической переменной, которая может быть помещена в кучу.

Function MemAvail; LongInt Возвращает количество имеющихся в куче свободных байт памяти.

Функции преобразования

Процедуры Pack и UnPack, определенные в стандартном Паскале, в Турбо Паскале не реализованы.

Function Chr(X: Byte): Char Возвращает символ с заданным порядковым номером X.

Function Ord(X) : LongInt Возвращает порядковый номер, соответствующий значению X порядкового типа.

Function Round (R: Real) : LongInt Округляет значение R вещественного типа до ближайшего целого.

Function Trunc(R: Real): LpngInt Усекает значение вещественного типа до значения типа LongInt путем отбрасывания дробной части.

Арифметические функции

При компиляции в режиме использования сопроцессора или его эмуляции арифметические функции возвращают значение типа EXTENDED, в противном случае - типа REAL.

Function Abs(R; Real): Real Возвращает абсолютное значение аргумента.

Function ArcTan(R: Real): Real Возвращает арктангенс аргумента.

Function Cos(R: Real): Real Возвращает косинус аргумента.

Function Exp(R; Real): Real Возвращает экспоненту аргумента.

Function Frac(R; Real): Real Возвращает дробную часть аргумента.

Function Int(R; Real): Real Возвращает целую часть аргумента.

Function Ln(R: Real) : Real Возвращает натуральный логарифм аргумента.

Function Pi: Real Возвращает значение числа pi=3.1415926535897932385.

Function Sin(R: Real): Real Возвращает синус аргумента.

Function Sqr(R: Real): Real Возвращает аргумент в квадрате.

Function Sqrt(R; Real): Real Возвращает квадратный корень аргумента.

Процедуры порядкового типа

Procedure Dec (var X [; DX: LongInt] ) Уменьшает значение переменной X на величину DX, а если параметр DX не задан - на 1.

Procedure Inc (var X [; DX: LongInt]) Увеличивает значение переменной X на величину DX, а если параметр DX не задан - на 1.

Функции порядкового типа

Function Odd(X) : Boolean Проверяет, является ли аргумент нечетным числом.

Function Pred(X) Возвращает предшествующее значение аргумента. Тип результата совпадает с типом аргумента.

Function Succ(X) Возвращает последующее значение аргумента. Тип результата совпадает с типом аргумента.

Строковые процедуры

Procedure Delete (var S: String; Index, Count: Integer) Удаляет Count символов из строки S, начиная с позиции Index.

Procedure Insert (SubS: String; var S: String; Index: Integer) Вставляет подстроку SubS в строку 5, начиная с позиции Index.

Procedure Str(X [: width [: Decimals]]; var S: String) Преобразует численное значение X в его строковое представление S.

Procedure Val(S; String; var X; var Code: Integer) Преобразует строковое значение S в его численное представление X. Параметр Code -содержит признак ошибки преобразования (0 - нет ошибки).

Строковые функции

Function Concat(S1 [, S2,...,SN]): String Выполняет конкатенацию последовательности строк.

Function Copy(S: String; Index, Count: Integer): String Возвращает подстроку из строки S, начиная с позиции Index и длиной Count символов.

Function Length(S: String): Byte Возвращает текущую длину строки S.

Function Pos(SubS, S: String): Byte Возвращает позицию, начиная с которой в строке S располагается подстрока SubS (О - S не содержит SubS).

Функции для работы с указателями и адресами

Function Addr (X) : Pointer Возвращает адрес заданного объекта X.

Function Assigned: (var P) : Boolean Проверяет, хранит ли ли указатель Р значение, отличное от NIL, и возвращает TRUE в этом случае.

Function CSeg: Word Возвращает текущее значение регистра CS.

Function DSeg: Word Возвращает текущее значение регистра DS.

Function Ofs (X) ; Word Возвращает смещение заданного объекта.

Function Ptr(Seg, Ofs: Word): Pointer Преобразует сегмент Seg и смещение Ofs в значение типа указатель.

Function Seg (X) : Word Возвращает сегмент для заданного объекта X.

Function SPtr: Word Возвращает текущее значение регистра SP.

Function SSeg: Word Возвращает текущее значение регистра SS.

Процедуры разного назначения

Procedure Exclude (var S: set of Т; I: T) Исключает элемент T из множества S.

Procedure FillChar(var X; Count: Word; Value) Заполняет заданное количество Count последовательных байт переменной X указанным значением Value (выражение любого порядкового типа).

Procedure Include (var S: set of Т; I; T) Включает элемент T во множество S.

Procedure Move (var X, Y, Count: Word) Копирует заданное количество последовательных байт из источника X в переменную Г.

Procedure Randomize Инициализирует случайным значением (текущим системным временем) встроенный генератор псевдослучайных чисел.

Функции разного назначения

Function Hi(X; Word) : Byte Возвращает старший байт аргумента X.

Function High (X) Возвращает максимальное значение порядкового типа.

Function Lo(X: Word): Byte Возвращает младший байт аргумента X.

Function Low(X) Возвращает минимальное значение порядкового типа.

Function ParamCount: Word Возвращает число параметров, переданных программе в командной строке (строке вызова).

Function ParamStr(N; Byte): String Возвращает N-ый параметр командной строки.

Function Random [ (Range: Word)] Возвращает псевдослучайное число. Если параметр Range опущен, функция возвращает вещественное число в диапазоне от 0 до 1, если указан - целое число в диапазоне от 0 до Range-1.

Function SizeOf(X): Word Возвращает число байт, занимаемых аргументом.

Function Swap(X) Производит перестановку старших и младших байт двухбайтного аргумента X. Тип функции соответствует типу аргумента.

Function UpCase(C: char): Char Преобразует латинскую букву в заглавную.

Процедуры ввода/вывода

Procedure Assign (var F; Name: String) Связывает внешний файл Name с файловой переменной F.

Procedure ChDir(S: String) Устанавливает текущий каталог. 

Procedure Close (var F) Закрывает открытый файл. 

Procedure Erase (var F) Удаляет внешний файл.

Procedure GetDir(D: Byte; var S: String) Возвращает каталог по умолчанию S на заданном диске D.

Procedure MkDir(S: String) Создает подкаталог S.

Procedure Rename (var F) Переименовывает внешний файл.

Procedure Reset (var F) Открывает существующий файл для чтения или изменения.

Procedure Rewrite (var F) Создает и открывает новый файл.

Procedure RmDir(S: String) Удаляет пустой подкаталог.

Procedure Seek (var F; N: LongInt) Устанавливает текущую позицию файла на указанный элемент (не используется с текстовыми файлами).

Procedure Truncate (var F) Усекает размер файла до текущей позиции в файле (не используется с текстовыми файлами)

Функции ввода/вывода

Function EOF (var F) ; Boolean Возвращает для файла F признак конца файла.

Function FilePos (var F) : LongInt Возвращает текущую позицию в файле (не используется с текстовыми файлами)

Function FileSize(var F) : LongInt Возвращает текущий размер файла (не используется с текстовыми файлами).

Function IOResult; Integer Возвращает целое значение, являющееся состоянием последней выполненной операции ввода/вывода.

Процедуры для текстовых файлов

Procedure Append (var F: Text) Открывает существующий файл для расширения. 

Procedure Flush (var F: Text) Выталкивает буфер файла вывода.

Procedure Read ([var F: Text;] V1 [, V2,...,VN]) Считывает одно или более значений из текстового файла в одну или более переменных.

Procedure Readln Выполняет те же действия, что и Read, а потом делает пропуск до начала следующей строки файла.

Procedure SetTextBuf (var F: Text; var Buf [; Size: Word]) Назначает буфер ввода/вывода для текстового файла. Параметр Size определяет длину буфера в байтах (если Size опущен, длина буфера равна 128 байтам).

Procedure Write([var F: Text;] V1 [, V2,...,VN]) Записывает в текстовый файл одно или более значений.

Procedure WriteLn Выполняет те же действия, что и Write, а затем добавляет к файлу маркер конца строки.

Функции для текстовых файлов

Function Eoln(var F: Text): Boolean Возвращает признак конца строки.

Function SeekEof [ (var F: Text)]: Boolean Возвращает признак конца файла. Предварительно пропускает все пробелы, символы табуляции и признаки конца строк.

Function SeekEoln [ (var F: Text)]: Boolean Возвращает признак конца строки. В отличие от Eoln предварительно пропускает все пробелы и символы табуляции.

Процедуры для нетипизированных файлов

Procedure BlockRead(var F: File; var Buf; Count; Word [;var Result; Word]) Считывает в переменную Buf Count записей из файла F. Необязательный параметр Result содержит истинное количество считанных записей.

Procedure BlockWrite(var F; File; var Buf; Count: Word [;var Result: Word]) Передает Count записей из переменной Buf файла F. Необязательный параметр Result содержит истинное количество переданных записей.