- •А.В. Карташов, ю.А. Скоб, в.А. Халтурин, и.А. Трофимова, л.И. Черноштан, ю.К. Чернышев, о.В. Яровая информатика
- •Стандартные типы данных среды Турбо Паскаль и описание величин
- •Описание величин
- •Процедуры ввода данных
- •Процедура вывода данных
- •Порядок выполнения работы
- •Варианты заданий
- •Пример программы
- •Лабораторная работа № 2 выражения
- •Порядок выполнения работы
- •Задача 2
- •Задача 3
- •Лабораторная работа № 4 операторы цикла
- •Теоретические сведения
- •Вывод коэффициента рекуррентности q
- •Проверка правильности вычисления q
- •Варианты заданий
- •Лабораторная работа № 5 массивы
- •Теоретические сведения
- •Варианты заданий Задача 1
- •Задача 2
- •Лабораторная работа № 6 текстовые файлы
- •Теоретические сведения
- •Файл исходных данных Input8_1.Pas:
- •Лабораторная работа № 7
- •Теоретические сведения
- •Теоретические сведения
- •Лабораторная работа № 9
- •Теоретические сведения
- •Варианты заданий
- •Лабораторная работа № 10 модули
- •Теоретические сведения
- •Создание модуля
- •Файл исходных данных Input8_2.Pas:
- •Варианты заданий взять из лабораторной работы № 7 или № 9 по указанию преподавателя.
Лабораторная работа № 10 модули
Цель работы – изучение структуры и правил оформления модуля; создание программ с использованием модуля; изучение способов передачи данных в модули.
Постановка задачи:
Составить модуль, содержащий, по крайней мере, три процедуры – чтение исходных данных из текстового файла, выполнение самого задания, вывод результатов в текстовый файл. Необходимые подпрограммам данные и результаты их работы передавать через списки формальных/фактических параметров.
Основная программа должна содержать подключение модуля и вызов процедур.
Теоретические сведения
Модули пользователя
Модуль в Турбо Паскале – специальным образом оформленная библиотека определений типов, констант, переменных, а также процедур и функций. Самостоятельно быть запущенным на выполнение модуль не может; он может лишь участвовать в построении программы или другого модуля. Но модули предварительно компилируются вне зависимости от основной (вызывающей) программы; результатом компиляции является файл с расширением *.TPU (TurboPascal Unit, или «программная единица Турбо Паскаля»). В этом основное отличие от инклудов, которые компилируются только совместно с основной программой, поскольку фактически являются ее фрагментом. Это означает, что использование модулей вместо инклудов более целесообразно. Причин две:
1) объем текста основной программы вместе с инклудами и памятью для числовых величин не должен превышать 64 кбт, а объем программы вместе с модулями ограничен только всей ОЗУ (но на программу по-прежнему не более 64 кбт ); если же использовать оверлейную структуру, то и это ограничение снимается;
2) время на компиляцию программы с модулями существенно меньше, т.к. слагается из времени компиляции основной программы и времени компоновки программы с модулями.
Создание модуля
Модуль содержит:
заголовок модуля (UNIT <имя модуля>);
раздел объявлений – интерфейс : INTERFACE;
раздел реализаций – IMPLEMENTATION;
раздел инициализации (необязательный) – между BEGIN и END. Если этот раздел отсутствует, то достаточно употребить END с точкой в конце.
Содержательная часть каждого из разделов может отсутствовать. Например, не будет противоречить синтаксису «пустой» модуль:
UNIT pustoj;
INTERFACE
IMPLEMENTATION
END.
Имя модуля либо должно совпадать с именем файла, в котором он помещен (без расширения), либо его первые восемь букв должны совпадать с именем файла; обычно расширение файла с модулем *.pas (но не обязательно).
В разделе объявлений (Interface) заносятся :
имена модулей, используемых в данном модуле, в виде USES <имя модуля 1>, <имя модуля 2> ,.., <имя модуля n>;
описание типов, констант, переменных, вносимых в программу из модуля;
заголовки процедур и функций, описываемых в модуле в следующем разделе; заголовок – это указание на вид процедуры (procedure или function), затем в круглых скобках дается список параметров с их типами в стандартном виде и для функции – тип возвращаемого результата.
В разделе реализации (Implementation) могут быть введены:
свои типы, константы и переменные, доступные только для программ данного модуля, для которых они являются глобальными;
тела процедур и функций, указанных в разделе объявлений; при этом должны повториться их заглавия, но, возможно, без списка параметров и типа возвращаемого результата (т.е. просто без круглых скобок и их содержимого).
В разделе инициализации помещают некоторые стартовые действия или присваивание стартовых значений некоторым величинам. Чаще всего этот раздел пустой и состоит из одного слова END. Если же он не пустой, то начинается со слова BEGIN.
Пример выполнения лабораторной работы
Задание. Найти разность R между максимальным и минимальным элементами массива
Программа расчета:
program lab_10;
uses crt, un1; {подключение модулей}
var A : arr; {массив А}
R : integer; {разность}
Amax : integer; {максимальный элемент}
Amin : integer; {минимальный элемент}
m : word; {реальный размер квадратной матрицы}
fi,fo : text; {файловые переменные}
{------------- основная программа --------------------}
begin
clrscr;
assign (fi, 'input8_2.pas');
reset (fi);
{вызов процедуры чтения данных из файла}
{ fi, A, MaxDim, m – фактические параметры}
ReadFromFile (fi, A, MaxDim, m);
close( fi );
{вызов процедуры решения основной задачи}
{A, m, Amin, Amax – фактические параметры}
MaxMin(A, m, Amin, Amax);
R:=Amax-Amin; { вычисление разности}
assign (fo, 'out_8_2.pas');
rewrite (fo);
{вызов процедуры вывода результатов в файл}
{ fo, Amin, Amax, R – фактические параметры}
SaveToFile(fo, Amin, Amax, R);
close (fo);
repeat until keypressed;
end.
Модуль с процедурами (содержимое файла un1.pas):
UNIT un1;
INTERFACE {интерфейсная часть}
{описание констант, типов, переменных}
const MaxDim = 10; {максимальный размер матрицы}
type arr=array[1.. MaxDim,1.. MaxDim] of integer; {описание типа arr}
{описание заголовков функций}
Procedure ReadFromFile (var f:text; var a1:arr; MaxD:word ;var m1:word);
{Исходные данные: f – файл исходных данных,
MaxD – максимальная размерность массива a1.
Результат: заполненный массив a1 и его реальный размер – m1.}
Procedure MaxMin(a1:arr; m1:word; var min, max : integer);
{Исходные данные: массив a1 и его реальный размер – m1.
Результат: min, max – минимальный и максимальный его элементы.}
Procedure SaveToFile(var f:text; min, max, R : integer);
{Исходные данные: f – файл для сохранения результата, min, max, R – выводимые в файл и на экран данные. Результатом подпрограммы является вывод результатов программы в файл и на экран}
IMPLEMENTATION {выполняемая часть}
Procedure ReadFromFile;
Var i, j : word; {счетчики по строкам, столбцам –
локальные переменные }
begin
readln (f,m1); {чтение размера матрицы из первой строки файла}
if m1> MaxD then {проверка размера матрицы}
begin
m1:= MaxD;
writeln(‘Матрица из файла урезана до размера массива’);
end;
for i:=1 to m1 do {чтение из файла матрицы А}
begin
for j:=1 to m1 do read ( fi,a1[i,j] );
readln(fi); {перевод указателя файла на новую строку}
end;
end;
Procedure MaxMin;
Var i, j : word; {счетчики по строкам, столбцам –
локальные переменные }
begin
min:=a1[1,1]; {начальные установки}
max:=a1[1,1];
{поиск минимального и максимального элементов:}
for i:=1 to m1 do
for j:=1 to m1 do
begin
if a1[i,j] < min then min:=a1[i,j];
if a1[i,j] > max then max:=a1[i,j];
end;
end;
Procedure SaveToFile;
begin
writeln (fo,' Amax=',max,' Amin=',min,' Разность=',R);
writeln ('Amax=',max,' Amin=',min,' Разность=',R);
end;
END. {конец модуля}
