Компиляция: поиск модулей. Файл TURBO.TPL

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

1) Компилятор просматривает содержимое системного биб­лиотечного файла модулей TURBO.TPL (Turbo Pascal Library). Этот файл будет кратко описан далее в этом раз­деле.

2) Если искомый модуль не найден в файле TURBO. TPL, то компилятор осуществляет поиск соответствующего TPU-файла в ТЕКУЩЕМ каталоге.

3) Если в текущем каталоге нужный файл не найден, то по­иск продолжается в каталогах, заданных в альтернативе Options/ Directories/Unit Directories для интегри­рованной среды или в параметре /U вызова ТРС–компилятора.

4) Если на предыдущих шагах файл не найден, то компиля­тор прекращает работу и выдает диагностическое сообще­ние об ошибке.

5) Если компилятор активизирован посредством альтерна­тив Compile/Make или Compile/Build, то вышеуказан­ные шаги проводятся в поисках ИСХОДНЫХ ТЕКСТОВ ис­пользуемых модулей, которые будут оттранслированы перед трансляцией самой программы. При этом подразуме­вается, что имя файла с текстом модуля совпадает с име­нем модуля и имеет расширение .PAS.

Как было указано, первый шаг компилятора при поиске используемых модулей состоит в анализе системного файла TURBO.TPL. Этот файл имеет специальную структуру и пред­назначен для компактного хранения и быстрого доступа к наиболее часто используемым модулям. Обычно в этом фай­ле содержатся несколько системных (стандартных) модулей, однако с помощью специальной служебной программы TPUMOVER можно произвольным образом конструировать файл TURBO.TPL, включая в него нужные модули и удаляя неиспользуемые.

Понятие библиотеки модулей является потенциально удобным, но к сожалению, Turbo Pascal поддерживает только один библиотечный модуль; нельзя сформировать библиоте­ку модулей в некотором TPL-файле и обеспечить подключе­ние к программе модулей из этой библиотеки.

 

Стандартные модули

 

Turbo Pascal имеет восемь стандартных модулей, в которых, собственно, и содержатся все упоминаемые в книге систем­ные процедуры и функции. Имена этих модулей следующие:

SYSTEM

DOS

CRT

PRINTER

OVERLAY

GRAPH

TORBO3

GRAPHS

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

Каждый модуль хранится в одноименном TPU-файле в сис­темном каталоге Turbo Pascal. Кроме того, обычно модули System, Dos, Crt, Printer и Overlay входят в состав сис­темного библиотечного файла TURBO. TPL. Для того, чтобы воспользоваться ресурсами стандартного модуля, необходимо указать его имя в спецификации использования по обычным правилам. Исключение сделано для модуля System, имя кото­рого можно не указывать, так как содержащиеся в нем ресурсы подключаются автоматически к любой программе.

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

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

Модуль Dos содержит средства доступа к операционной системе и по существу является программным представлени­ем системного интерфейса MS-DOS.

Модуль Crt обеспечивает практически полный спектр возможностей для доступа к экрану дисплея в текстовом ре­жиме. Кроме того, в данный модуль включены средства чте­ния информации с клавиатуры (включая расширенные коды клавиш) и простейшего управления звуком.

Модуль Printer содержит единственный интерфейсный элемент - переменную Lst стандартного типа text, системно связанную с логическим устройством PRN (то есть с печатаю­щим устройством, если оно имеется в конфигурации). Испо­льзование этой переменной в стандартных процедурах Write и WriteLn приводит к выводу информации на печать.

Модуль Overlay предоставляет средства для организа­ции так называемых оверлейных программ, позволяющих обеспечить достаточно эффективное выполнение больших программных систем, размер которых превышает объем до­ступной оперативной памяти.

Модуль Graph объединяет многочисленные программ­ные средства управления графическим режимом работы дис­плея. Данный модуль обеспечивает использование всех воз­можностей наиболее распространенных типов дисплейных адаптеров - CGA, EGA, VGA, Hercules и т.п. как для монохро­мных, так и для цветных дисплеев, и позволяет создавать раз­нообразные и эффективные графические программы.

Модули Turbo3 и Graph3 обеспечивают совместимость с данной версией системы Turbo Pascal тех программ, кото­рые были разработаны для ранней версии 3.0.

 

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

 

В данном разделе содержится законченный пример модуля, в котором сосредоточены средства работы с памятью типа "стек". Обратите внимание, что способ конкретной реализа­ции стека скрыт в разделе implementation; поэтому переход к другой реализации стека (не в виде массива, а, например, в виде связанного списка) не повлечет за собой необходимость изменения программ, использующих этот модуль (эти про­граммы "не узнают" о таком изменении).

unit StackOps; { Операции над стеком целых }

interface

procedure Push ( Elem:integer );

function Pop : integer;

function Empty : boolean;

function Full : boolean;

 

implementation

{ Стек реализован в виде линейного массива элементов;

переменная Тор отмечает текущую вершину стека }

const

Мах = 100;

var

Stack array[1..Max] of integer;

Top : integer;

 

procedure Push; { помещение элемента в вершину стека }

begin

if Top>Max then Exit;

Stack[Top] := Elem;

inc(Top)

end;

 

function Pop; { извлечение элемента из вершины стека }

begin

Рop := 0 ;

if Top=1 then Exit;

dec(Top);

Pop := Stack[Top]

end;

 

function Empty; { проверка на пустоту стека }

begin

Empty := (Top=1)

end;

 

function Full; { проверка на заполненность стека }

begin

Full := (Тор>Мах)

end;

begin

{ инициализация: первоначально стек пуст }

Тор := 1

end.

 

Синтаксические диаграммы

 

В данном заключительном разделе приводятся синтаксичес­кие диаграммы для конструкций, рассмотренных в этой гла­ве. Кроме того, здесь показана полная синтаксическая диа­грамма для программы (рисунок 5,6,7,8,9,10,11,12,13).

 

Рисунок 5 – программа

 

 

 

Рисунок 6 - модуль

 

Рисунок 7 – заголовок модуля


Рисунок 8 – интерфейс модуля

 

Рисунок 9 - спецификация использования

 

Рисунок 10 – элемент интерфейса

 

 

Рисунок 11 – реализация модуля

Рисунок 12 - Элемент рализации

 

Рисунок 13 – инициализация модуля

 

Практическая часть

3 Перемножение двух матриц

 

Задание:

Заданы двумерные матрицы размерностью 6x5 элементов, заполненные случайными числами из диапазона [1, 100]. Перемножить их элементы, имеющие одинаковые индексы, и вывести результаты на экран и записать в файл «output.txt».

 

Что бы выполнить данное задание мы будем использовать PascalABC.NET — это язык программирования Паскаль нового поколения, включающий классический Паскаль, большинство возможностей языка Delphi, а также ряд собственных расширений.

Код программы будет таким

const

n = 6;

m = 5;

 

var

a: array[1..n, 1..m] of integer;

b: array[1..n,1..m] of integer;

c: array[1..n,1..m] of integer;

i, j: byte;

sum: integer;

t: text;

 

begin

assign(t, 'output.txt');

randomize;

for i := 1 to n do

begin

for j := 1 to m do

begin

a[i, j] := random(100);

b[i, j] := random(100);

end;

writeln

end;

for i := 1 to n do

begin

for j := 1 to m do

begin

write(a[i, j]:3);

end;

writeln

end;

writeln;

for i := 1 to n do

begin

for j := 1 to m do

begin

write(b[i, j]:3);

end;

writeln

end;

writeln;

 

for i := 1 to n do

begin

for j := 1 to m do

begin

c[i,j] := a[i, j]*b[i, j];

write(c[i, j]:8);

end;

writeln

end;

rewrite(t);

for i := 1 to n do

begin

for j := 1 to m do

begin

write(t,c[i,j]:8)

end;

writeln(t)

end;

close(t);

readln

end.

 

 

Описание программы :

 

const

n = 6;

m = 5;

 

var

a: array[1..n, 1..m] of integer;

b: array[1..n,1..m] of integer;

c: array[1..n,1..m] of integer;

i, j: byte;

sum: integer;

t: text;

 

определение переменных

 

begin

assign(t, 'output.txt'); открытие файла output для записи

randomize; включения рандома

for i := 1 to n do цикл по i от 1 до n

begin

for j := 1 to m do цикл по j от 1 до m

begin

a[i, j] := random(100); заполняется матрица а рандомно от 1 до 100

b[i, j] := random(100);

end;

writeln

end;

for i := 1 to n do цикл по i от 1 до n

begin

for j := 1 to m do цикл по j от 1 до m

begin

write(a[i, j]:3); выводим на экран матрицу а

end;

writeln

end;

writeln; вывели пустую строку для разделения двух матриц

for i := 1 to n do цикл по i от 1 до n

begin

for j := 1 to m do цикл по j от 1 до m

begin

write(b[i, j]:3); выводим на экран матрицу b

end;

writeln

end;

writeln; вывели пустую строку для разделения двух матриц

 

for i := 1 to n do цикл по i от 1 до n

begin

for j := 1 to m do цикл по j от 1 до m

begin

c[i,j] := a[i, j]*b[i, j]; матрица c заполняется перемножением элементов матриц a и b с одинаковыми элементами

write(c[i, j]:8);

end;

writeln

end;

rewrite(t); открываем файл output для перезаписи (удаляем все что было в нем написано ранее)

for i := 1 to n do цикл по i от 1 до n

begin

for j := 1 to m do цикл по j от 1 до m

begin

write(t,c[i,j]:8) заполняем файл output матрицой c

end;

writeln(t)

end;

close(t); закрываем файл output

readln

end.

 

В результате мы получаем в оке вывода(рисунок 14):

 

Рисунок 14

 

После чего программа записывает сама все в папку output.

Блок-схема программы будет выглядеть следующим образом (рисунок 15):

 

Начало
a: array[1..n, 1..m] of integer; b: array[1..n,1..m] of integer; c: array[1..n,1..m] of integer; i, j: byte;
a[i, j] := random(100); b[i, j] := random(100);
i := 1 to n do begin for j := 1 to m do
j := 1 to m do
a[i, j]:3
i := 1 to n do begin for j := 1 to m do
j := 1 to m do
b[i, j]:3
i := 1 to n do begin for j := 1 to m do
j := 1 to m do
c[i, j]:8
i := 1 to n do begin for j := 1 to m do
j := 1 to m do
Запись в файл
конец

 

 


Рисунок 15 – Блок-схема перемножение матриц

Заключение

 

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

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

Во второй главе были охарактеризованы составляющие ИТ, определены виды обеспечений и охарактеризованы свойства информационных технологий.

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

 

 

Список использованной литературы

 

1. Бим-Бад Б.М. Педагогический энциклопедический словарь / Б.М. Бим-Бад .// Научное издание

«Большая российская энциклопедия». - 2002.

2. Ломов Б.Ф. Вопросы общей, педагогической, инженерной психологии / Б.Ф. Ломов

// Педагогика. - 1991.

3. Различные интернет-ресурсы: http://www.tspu.tula.ru/

4. http://ugned.ru/

5. http://examen.od.ua/

6. http://phys.adygnet.ru/

7. http://www.akdi.ru/

8. Турбо Паскаль 7.0 – К.: торгово – издательское бюро BHV, 1996 – 448с.: ил. Т. Рюттяна.

9. Игошев А.Д. Матинин Е.Г. Express Pascal. Учебное пособие для средних уч. Заведений.

10. Кузницов А.А. Патапова Н.В. Основы информатики. 8-9 кл.: Учеб. Для общеобразовательных учеб. Заведений 2001 176с.:ил.