КАТЕГОРИИ: Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748) |
Создание модуля
Теоретические сведения МОДУЛИ Лабораторная работа № 10
Цель работы – изучение структуры и правил оформления модуля; создание программ с использованием модуля; изучение способов передачи данных в модули. Постановка задачи: 1. Составить модуль, содержащий, по крайней мере, три процедуры – чтение исходных данных из текстового файла, выполнение самого задания, вывод результатов в текстовый файл. Необходимые подпрограммам данные и результаты их работы передавать через списки формальных/фактических параметров. 2. Основная программа должна содержать подключение модуля и вызов процедур.
Модули пользователя Модуль в Турбо Паскале – специальным образом оформленная библиотека определений типов, констант, переменных, а также процедур и функций. Самостоятельно быть запущенным на выполнение модуль не может; он может лишь участвовать в построении программы или другого модуля. Но модули предварительно компилируются вне зависимости от основной (вызывающей) программы; результатом компиляции является файл с расширением *.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. {конец модуля}
Файл исходных данных Input8_2.pas:
Файл результата Out_8_2.pas:
Варианты заданий взять из лабораторной работы № 7 или № 9 по указанию преподавателя.
Дата добавления: 2014-12-26; Просмотров: 336; Нарушение авторских прав?; Мы поможем в написании вашей работы! Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет |