Основной профессиональной образовательной программы
Высшего образования – программы бакалавриата
по направлению подготовки
Мехатроника и робототехника
с направленностью (профилем)
Промышленная и специальная робототехника
Форма обучения: очная
Идентификационный номер образовательной программы: 150306-02-19
Тула 2019 год
Методические указания к лабораторным работам составлены профессором кафедры РТиАП, д.т.н. Котовым В.В. и обсуждены на заседании кафедры робототехники и автоматизации производства, протокол № 6 от «10» января 2019 г.
Зав. кафедрой ____________________ Е.В. Ларкин
Содержание:
Лабораторная работа №6. РАБОТА С ФАЙЛАМИ
Лабораторная работа №7. МОДУЛЬ SYSTEM
Лабораторная работа №8. ОСНОВНЫЕ ВОЗМОЖНОСТИ МОДУЛЯ GRAPH
Лабораторная работа №9. СТРУКТУРА МОДУЛЕЙ И ОСОБЕННОСТИ РАБОТЫС НИМИ
Лабораторная работа №10. ЛИНЕЙНЫЕ ОДНОНАПРАВЛЕННЫЕ СПИСКИ
Лабораторная работа №11. РАБОТА С ЭЛЕМЕНТАМИ ЛИНЕЙНОГО ОДНОНАПРАВЛЕННОГО СПИСКА
Приложение 1.
Приложение 2.
Приложение 3.
Приложение 4.
1. Лабораторная работа №6
РАБОТА С ФАЙЛАМИ.
1.ЦЕЛЬ РАБОТЫ:
Целью работы является изучение приемов работы с переменными файлового типа.
2. ТЕОРЕТИЧЕСКИЕ СВЕДЕНИЯ
Под файлом понимается либо именованная область внешней памяти ПК (жесткого диска, гибкой дискеты, электронного "виртуального" диска), либо логическое устройство - потенциальный источник или приемник информации.
Файловая переменная связывается с именем файла в результате обращения к стандартной процедуре ASSIGN:
ASSIGN (<ф.п.>, <имя файла или л.у.>);
Здесь
<ф.п.> - файловая переменная (правильный идентификатор, объявленный в программе как переменная файлового типа);
<имя файла или л.у.> - текстовое выражение, содержащее имя файла или логическое устройство.
Если имя файла задается в виде пустой строки, например, ASSIGN(f,"), то в зависимости от направления обмена данными файловая переменная связывается со стандартным файлом INPUT или OUTPUT.
Для чтения файл инициируется с помощью стандартной процедуры RESET:
RESET (<ф.п.>);
Здесь
<ф.п.> - файловая переменная, связанная ранее процедурой ASSIGN с уже существующим файлом или логическим устройством - приемником информации.
В Турбо Паскале разрешается обращатся к типизированным файлам, открытым процедурой RESET (т.е. для чтения информации), с помощью процедуры WRITE (т.е. для записи информации). Такая возможность позволяет легко обновлять ранее созданные типизированные файлы и при необходимости расширять их. Для текстовых файлов, открытых процедурой RESET, нельзя использовать процедуру WRITE или WRITELN.
Стандартная процедура
REWRITE (<ф.п.>)
инициирует запись информации в файл или в логическое устройство, связанное ранее с файловой переменной. Процедурой REWRITE нельзя инициировать запись информации в ранее существовавший дисковый файл: при выполнении этой процедуры старый файл уничтожается и никаких сообщений об этом в программу не передается. Новый файл подготавливается к приему информации и его указатель принимает значение 0.
Стандартная процедура
APPEND (<ф.п.>)
инициирует запись в ранее существовавший текстовый файл для его расширения, при этом указатель файла устанавливается в его конец. Процедура APPEND применима только к текстовым файлам, т.е. их файловая переменная должна иметь тип TEXT. Процедурой APPEND нельзя инициировать запись в типизированный или нетипизированный файл. Если текстовый файл ранее уже был открыт с помощью RESET или REWRITE, использование процедуры APPEND приведет к закрытию этого файла и открытию его вновь, но уже для добавления записей.
Процедура CLOSE закрывает файл, однако связь файловой переменной с именем файла, установленная ранее процедурой ASSIGN, сохраняется.
Формат сообщения:
CLOSE(<ф.п.>)
При создании нового или расширении старого файла процедура обеспечивает сохранение в файле всех новых записей и регистрацию файла в каталоге.
Функции процедуры CLOSE выполняются автоматически по отношению ко всем открытым файлам при нормальном завершении программы. Поскольку связь файла с файловой переменной сохраняется, файл можно повторно открыть без дополнительного использования процедуры ASSIGN.
3.ПОРЯДОК ВЫПОЛНЕНИЯ РАБОТЫ
1. Ознакомиться с теоретическими сведениями данной работы.
2. Ответить на контрольные вопросы.
3. Выполнить свой вариант задания.
4.ОФОРМЛЕНИЕ ОТЧЕТА
Отчет о работе должен содержать номер, название и цель работы, ответы на контрольные вопросы, текст программы и результат выполнения программы.
5.КОНТРОЛЬНЫЕ ВОПРОСЫ
1. В какое место файла можно добавлять новые элементы:
- в начало,
- в середину,
- в конец,
- куда угодно,
- никуда?
2. Если не переписывать файл заново, то значения каких его элементов можно менять:
- только первого;
- только последнего;
- каких угодно;
- никаких.
3. Если не переписывать файл заново, то какие из его элементов можно удалять:
- только первый;
- только последний;
- какие угодно;
- никакие.
4. Определить содержимое файла f после выполнения следующих операторов:
rewrite(f);
for i:=1 to 3 do write(f,i*2);
close(f);
5. Определить содержимое файла f после выполнения следующих операторов:
rewrite(f);
for i:=3 downto 1 do write(f,i);
close(f);
i:=5;
append(f);
write(f,i);
close(f);
6. Определить содержимое файла f после выполнения следующих операторов:
i:=5;
rewrite(f);
write(f,i);
close(f);
rewrite(f);
if eof(f) then write(f,i) else write(f,i-5);
close(f);
6.ЗАДАНИЕ
№ задания | |||||||||||||||
№ по журналу | |||||||||||||||
Состоит из двух частей:1-общая для всех, 2-по варианту.
1). Организовать процедуру, позволяющую записать в текстовый файл введенную с клавиатуры строку.
2-1).Удвоить в данном файле каждую цифру.
2-2).Заменить в данном файле каждую цифру на следующую по величине.
2-3).Оставить в данном файле только первые вхождения каждой литеры.
2-4).Заменить в данном файле каждую литеру 'a' на две литеры 'b'.
2-5).Дописать в начало файла фразу 'Turbo Pascal'.
Лабораторная работа №7
МОДУЛЬ SYSTEM.
1. ЦЕЛЬ И ЗАДАЧИ РАБОТЫ
Целью работы является изучение основных процедур и функций модуля System.
2. ТЕОРЕТИЧЕСКИЕ СВЕДЕНИЯ
Модуль System содержит все стандартные и встроенные процедуры и функции Turbo Pascal. Модуль System реализует низкоуровневые подпрограммы для операций ввода/вывода, обработки строк, управления оверлеями и динамическое распределение памяти. Модуль System используется автоматически любым модулем или программой и никогда не требуется указывать его в директиве uses.
Процедуры управления программой.
Процедура | Описание |
Exit | Позволяет немедленно выйти из текущего блока |
Halt | Останавливает выполнение программы и возвращает в операционную систему |
RunError | Останавливает выполнение программы и генерирует ошибку времени выполнения |
Функции преобразования.
Функция | Описание |
Chr | Возвращает символ с заданным порядковым номером |
Ord | Возвращает порядковый номер, соответствующий символу |
Round | Округляет значение вещественного типа до значения типа LongInt |
Trunc | Усекает значение вещественного типа до значения типа LongInt |
Арифметические функции.
Функция | Описание |
Abs | Возвращает абсолютное значение аргумента |
ArcTan | Возвращает арктангенс аргумента |
Cos | Возвращает косинус аргумента |
Exp | Возвращает экспоненту аргумента |
Frac | Возвращает дробную часть аргумента |
Int | Возвращает целую часть аргумента |
Ln | Возвращает натуральный логарифм аргумента |
Pi | Возвращает значение числа Pi {3.1415926535897932385} |
Sin | Возвращает синус аргумента |
Sqr | Возвращает аргумент в квадрате |
Sqrt | Возвращает квадратный корень аргумента |
Процедуры и функции для ординальных типов.
Процедура | Описание |
Dec | Уменьшает значение переменной |
Inc | Увеличивает значение переменной |
Функция | Описание |
Odd | Проверяет, является ли аргумент нечетным числом |
Pred | Возвращает предшествующее значение аргумента |
Succ | Возвращает его последующее значение |
Строковые процедуры.
Процедура | Описание |
Delete | Удаляет подстроку из строки |
Insert | Вставляет подстроку в строку |
Str | Преобразует численное значение в его строковое представление |
Val | Преобразует строковое значение в его численное представление |
Строковые функции.
Функция | Описание |
Concat | Выполняет слияние последовательности строк |
Copy | Возвращает подстроку из строки |
Length | Возвращает динамическую длину строки |
Pos | Производит поиск подстроки в строке |
Процедуры и функции для ввода/вывода.
Процедура | Описание |
Assign | Присваивает имя внешнего файла файловой переменной |
ChDir | Меняет текущую директорию |
Close | Закрывает открытый файл |
Erase | Удаляет внешний файл |
GetDir | Возвращает текущую директорию на заданном диске |
MkDir | Создает директорию |
Rename | Переименовывает внешний файл |
Reset | Открывает существующий файл |
Rewrite | Создает и открывает новый файл |
RmDir | Удаляет пустую директорию |
Seek | Передвигает текущую позицию файла на указанную компоненту (не используется с текстовыми файлами) |
Truncate | Усекает размер файла до текущей позиции в файле. (Не используется с текстовыми файлами) |
Функция | Описание |
Eof | Возвращает для файла состояние end-of-file (конец Файла) |
FilePos | Возвращает текущую позицию в файле. (Не используется с текстовыми файлами) |
FileSize | Возвращает текущий размер файла. (Не используется с текстовыми файлами) |
IOResult | Возвращает целое значение, являющееся состоянием последней выполненной операции ввода/вывода. |
Процедуры и функции для текстовых файлов.
Процедура | Описание |
Append | Открывает существующий файл для добавления |
Flush | Выводит содержимое буфера файла в физический файл |
Read | Считывает одно или более значений из текстового файла в одну или более переменных |
Readln | Выполняет те же действия, что и Read, а потом делает пропуск до начала следующей строки файла |
SetTextBuf | Назначает буфер ввода/вывода для текстового файла |
Write | Записывает в текстовый файл одно или более значений |
Write | Выполняет те же действия, что и Write, а затем добавляет к файлу маркер конца строки |
Функция | Описание |
Eoln | Возвращает для файла состояние end-of-line (конец строки) |
SeekEof | Возвращает для файла состояние end-of-line (конец строки). Предварительно пропускает все пробелы, символы табуляции и признаки конца строки. |
SeekEoln | Возвращает для файла состояние end-of-line (конец строки). В отличии от Eoln предварительно пропускает все пробелы и символы табуляции. |
Нетипизированные файлы.
Процедура | Описание |
BlockRead | Считывает в переменную одну или более записей |
BlockWrite | Записывает одну или более записей из переменной |
Функции для работы с указателями и адресами.
Процедуры и функции динамического распределения памяти.
Эти процедуры и функции используются для управления кучей – областью памяти, которая занимает всю свободную память, остающуюся при выполнении программы.
Процедуры и функции разного назначения.
Процедура | Описание |
Randomize | Инициализирует случайным значением встроенный генератор случайных чисел |
Функция | Описание |
Hi | Возвращает старший байт аргумента |
Lo | Возвращает младший байт аргумента |
Random | Возвращает случайное число |
UpCase | Преобразует символ в прописной |
3. ПОРЯДОК ВЫПОЛНЕНИЯ РАБОТЫ
1. Ознакомиться с теоретическими сведениями данной работы.
2. Ответить на контрольные вопросы.
3. Выполнить свой вариант задания.
4. ОФОРМЛЕНИЕ ОТЧЕТА
Отчет о работе должен содержать номер, название и цель работы, ответы на контрольные вопросы, текст программы и результат выполнения программы.
5. контрольные вопросы
1. Следует ли указывать в директиве USES модуль SYSTEM?
2. В чем разница в процедурах Halt и Exit (своими словами)?
3. Какого типа может быть параметр-переменная используемая в функциях Round и Trunc, и в чем разница между этими функциями (разницу показать на примере)?
4. Какая процедура возвращает текущую длину строки?
5. Какая процедура позволяет создавать подкаталог?
6. ВАРИАНТЫЗАДАНИЙ
№ задания | |||||||||||||||
№ по журналу | |||||||||||||||
Составить программу (по варианту), которая использует следующие процедуры и функции модуля System:
Exit, Chr, Abs, ArcTan, Dec,Random | |
Halt, Ord, Exp, Cos, Inc,Random | |
Exit, Round, Frac, Sin, Odd,Random | |
Halt, Trunc, Int, ArcTan, Pred,Random | |
Exit, Chr, Sqr, Cos, Succ,Random | |
Halt, Ord, Sqrt, Sin, Dec,Random | |
Exit, Round, Abs, ArcTa Inc n,,Random | |
Halt, Trunc, Exp, Cos, Odd,Random | |
Exit, Chr, Frac, Sin, Pred,Random | |
Halt, Ord, Int, ArcTan, Succ,Random | |
Exit, Round, Sqr, Cos, Dec,Random | |
Halt, Trunc, Sqrt, Sin, Inc,Random | |
Exit, Chr, Abs, ArcTan, Odd,Random | |
Halt, Ord, Exp, Cos, Pred,Random | |
Exit, Round, Frac, Sin, Succ,Random |
Лабораторная работа №8
ОСНОВНЫЕ ВОЗМОЖНОСТИ МОДУЛЯ GRAPH.
1. ЦЕЛЬ И ЗАДАЧИ РАБОТЫ
Целью работы является изучение основ работы с графическими процедурами и функциями языка Turbo Pascal.
2. ТЕОРЕТИЧЕСКИЕ СВЕДЕНИЯ
Модуль Graph представляет собой библиотеку из более чем 50 графических процедур и функций. В модуле поддерживаются несколько типов линий и стилей заполнения, существует несколько типов шрифтов, которые можно увеличивать, выравнивать и ориентировать вертикально или горизонтально. Для того чтобы выполнить программу, которая использует модуль Graph, необходимо иметь доступ к одному или более графических драйверов (файлы с расширением BGI), файлам TURBO.TPL, GRAPH.TPU и к файлам шрифтов с расширением CHR. Каждый драйвер содержит код и данные, хранящиеся в отдельном файле.
Во время выполнения, процедура InitGraph определяет графическое устройство, загружает и инициализирует соответствующий графический драйвер, переводит систему в графический режим и возвращает управление вызывающей программе.
Процедура Close Graph выгружает драйвер из памяти и восстанавливает предыдущий видеорежим.
Рассмотрим используемую в графическом режиме координатную систему.
Верхний левый угол графического экрана определен как (0,0). Значение Х или колонки увеличиваются направо. Значение Y или строки увеличиваются вниз. Так в режиме 640x480 на адаптере CGA экранные координаты каждого из четырех углов и точка в центре экрана будут представлены:
Для вывода графической информации в заданную позицию в Turbo Pascal
используется текущий указатель (CP - Current Pointer). CP подобен курсору в
текстовом режиме, но в отличие от курсора CP не виден. Следующие процедуры
перемещают CP: InitGraph, MoveTo, MoveRel, LineTo, LineRel, OutText,
SetGraphMode, GraphDefaults, ClearDevice, SetViewPort, ClearViewPort.
Причем последние 5 команд перемещают CP в позицию (0,0).
Графический модуль Turbo Pascal позволяет использовать большое число
процедур для рисования различных геометрических фигур: точек, линий,
окружностей, дуг, эллипсов, прямоугольников, многоугольников и т.д. Все
графические процедуры и функции с кратким описанием приведены ниже.
Процедуры модуля Graph | |
Arc | Рисует дугу от начального угла к конечному, используя (X,Y) как центр |
Bar | Рисует полосу, используя текущий стиль и цвет. |
Bar3D | Рисует 3-х мерную полосу, используя текущий стиль и цвет. |
Circle | Рисует окружность, используя (X,Y) как центр. |
ClearDevice | Очищает экран и устанавливает текущий указатель (CP) в начало. |
ClearViewPort | Очищает окно. |
CloseGraph | Закрывает графическую систему. |
DetectGraph | Проверяет аппаратуру и определяет какой графический драйвер и в каком режиме используется. |
DrawPoly | Рисует многоугольник текущим цветом и типом линии. |
Ellipse | Рисует эллиптическую дугу от начального угла к конечному, используя (X,Y) как центр. |
FillEllipse | Рисует заполненный эллипс, используя (X,Y) как центр и XRadius и YRadius как горизонтальные и вертикальные оси. |
FillPoly | Заполняет многоугольник, используя сканирование. |
FloodFill | Заполняет ограниченную область, используя текущий шаблон и цвет заполнения. |
GetArcCoords | Позволяет запросить координаты команды Arc. |
GetAspectRatio | Возвращает разрешение экрана из которого может быть вычислен относительный аспект (Xasp/Yasp). |
GetFillPattern | Возвращает шаблон заполнения, установленный последним вызовом SetFillPattern. |
GetFillSettings | Позволяет запросить текущий шаблон и цвет, установленные SetFillStyle или SetFillPattern. |
GetImage | Сохраняет битовый образ указанной части экрана в буфере. |
GetLineSettings | Возвращает текущие стиль, шаблон и толщину линии, установленные SetLineStyle. |
GetModeRange | Возвращает минимальный и максимальный графические режимы для данного драйвера. |
GetPalette | Возвращает текущую палитру и ее размер. |
GetTextSettings | Возвращает текущий шрифт, направление, размер и выравнивание текста, установленные SetTextStyle и SetTextJustify. |
GetViewSettings | Позволяет запросить текущие параметры окна и отсечения. |
GraphDefaults | Устанавливает текущий указатель (CP) в начало и переустанавливает графическую систему. |
InitGraph | Инициализирует графическую систему и устанавливает устройство в графический режим. |
Line | Рисует линию от (X1,Y1) к (X2,Y2). |
LineRel | Рисует линию от текущего указателя (CP) к точке, лежащей на заданном растоянии. |
LineTo | Рисует линию от текущего указателя к (X,Y). |
MoveRel | Передвигает текущий указатель (CP) на заданное расстояние от его текущей позиции. |
MoveTo | Передвигает текущий указатель (CP) в (X,Y). |
OutText | Выводит текст на экран от текущего указателя. |
OutTextXY | Выводит текст на экран. |
PieSlice | Рисует и заполняет сектор, используя (X,Y) как центр и рисуя от начального угла к конечному. |
PutImage | Выводит битовый образ на экран. |
PutPixel | Рисует точку (пиксел) в (X,Y). |
Rectangle | Рисует прямоугольник, используя текущий цвет и тип линии. |
RestoreCRTMode | Восстанавливает видеорежим, который был до инициализации графики. |
Sector | Рисует и заполняет сектор эллипса. |
SetActivePage | Устанавливает активную страницу для графического вывода. |
SetAllPalette | Изменяет цвет палитры. |
SetAspectRatio | Изменяет значение относительного аспекта. |
SetBkColor | Устанавливает цвет фона. |
SetColor | Устанавливает основной цвет, которым будет осуществляться рисование. |
SetFillPattern | Выбирает шаблон заполнения, определенный пользователем. |
SetFillStyle | Устанавливает шаблон заполнения и цвет. |
SetGraphBufSize | Позволяет изменить размер буфера для функций заполнения. |
SetGraphMode | Переводит систему в графический режим и очищает экран. |
SetLineStyle | Устанавливает текущие толщину и стиль линии. |
SetPalette | Изменяет один цвет палитры, указанный через ColorNum и Color. |
SetRGBPallete | Позволяет модифицизовать палитру для IBM 8514 и VGA. |
SetTextJustify | Устанавливает выравнивание текста, используемое OutText и OutTextXY. |
SetTextStyle | Устанавливает текущий шрифт, стиль и размер текста. |
SetUserCharSize | Позволяет изменить ширину и высоту символа для штрихового шрифта. |
SetViewPort | Устанавливает текущее окно для графического вывода. |
SetVisualPage | Устанавливает номер видимой графической страницы. |
SetWriteMode | Устанавливает режим вывода (копирование или XOR) для линий, рисуемых с DrawPoly, Line, LineRel, LineTo, Rectangle. |
Функции модуля Graph. | |
GetBkColor | Возвращает текущий фоновый цвет. |
GetColor | Возвращает текущий цвет. |
GetDefaultPalette | Возвращает аппаратную палитру в записи PaletteType. |
GetDriverName | Вoзвращает строку с именем текущего драйвера. |
GetGraphMode | Возвращает текущий графический режим. |
SetMaxColor | Возвращает максимальный цвет, который можно задать в SetColor. |
GetMaxMode | Возвращает номер максимального режима текущего загруженного драйвера. |
GetMaxX | Возврашает максимальный Х (разрешение по горизонтали) для текущего графического драйвера и режима. |
GetMaxY | Возвращает максимальный Y (разрешение по вертикали) для текущего графического драйвера и режима. |
GetModeName | Возвращает строку с именем указанного графического режима. |
GetPaletteSize | Возвращает размер таблицы палитры. |
GetPixel | Возвращает цвет точки в (X,Y). |
GetX | Возвращает координату X текущей позиции (CP). |
GetY | Возвращает координату Y текущей позиции (СР). |
GraphErrorMsg | Возвращает строку сообщения об ошибке для заданного кода ErrorCode. |
GraphResult | Возвращает код ошибки для последней графической операции. |
ImageSize | Возвращает число байт, требуемое для заполнения прямоугольной области экрана. |
InstallUserDriver | Устанавливает пользовательский драйвер устройства в BGI таблицу драйверов устройств. |
InstallUserFont | Устанавливает новый шрифт, который не встроен в BGI систему. |
RegisterBGIdriver | Регистрирует драйвер BGI для графической системы. |
RegisterBGIfont | Регистрирует шрифт BGI для графической системы. |
TextHeight | Возвращает высоту строки в пикселах. |
TextWidth | Возвращает ширину строки в пикселах. |
Рассмотрим пример программы:
program GraphText;
uses
Graph;
var
GraphDriver,
GraphMode,
ErrorCode: Integer;
begin
{Автоматическое определение драйвера}
GraphDriver:=Detect;
{Последний параметр InitGraph указывает путь к драйверам}
InitGraph(GraphDriver, GraphMode, 'C:\DRIVERS');
ErrorCode:=GraphResult;
if ErrorCode <> grOK then {ошибка }
begin
Writeln('Graphics error: ', GraphErrorMsg(ErrorCode));
Writeln('Program aborted...');
Halt(1);
end;
Rectangle(0, 0, GetMaxX, GetMaxY); {рисовать прямоугольник на весь экран}
OutTextXY(GetMaxX div 2, GetMaxY div 2,
'Borland Graphics interface (BGI)');
Readln;
CloseGraph;
end. {GraphTest}
Программа начинается с вызова InitGraph, который автоматически определяет тип адаптера и загружает соответствующий графический драйвер. ВНИМАНИЕ: на разных компьютерах этот путь различается, поэтому в программе пишите СВОЙ путь. Если графическое устройство не распознано или во время инициализации произошла ошибка, выдается сообщение об ошибке и программа завершается. Иначе, чертится прямоугольник по краю экрана и в центре экрана выводится текст.
3.ПОРЯДОК ВЫПОЛНЕНИЯ РАБОТЫ
1. Ознакомиться с теоретическими сведениями данной работы.
2. Ответить на контрольные вопросы.
3. Выполнить свой вариант задания (см. Приложение 1).
4.ОФОРМЛЕНИЕ ОТЧЕТА
Отчет о работе должен содержать номер, название и цель работы, ответы на контрольные вопросы, текст программы и результат выполнения программы.
5.КОНТРОЛЬНЫЕ ВОПРОСЫ
1) Что такое текущий указатель?
2) Какой вид имеет система координат в графическом режиме?
3) Следует ли указывать в директиве USES модуль GRAPH?
4) Какие действия производят процедуры InitGraph и CloseGraph?
5) Написать программу, которая в центре красного экрана пользователя рисует окружность, залитую желтым цветом.
6. ВАРИАНТЫЗАДАНИЙ
№ задания | ||||||||||
№ по журналу | ||||||||||
С помощью процедур и функций модуля GRAPH на экране изобразить декартовую систему координат (по осям расставить цифровые значения) и построить графики:
1) x=3t (1+t3), y=3t2 (1+t3) при -1<t 5;
2) x=t2/(1+t2), y=t3/(1+t2) при -10 t
10;
3) x=(t2-1)/(1+t2), y=t(t2-1)/(1+t2) при -10 t
10;
4) x=cos2 t+cost, y=cost sint+sint при 0 t<2
;
5) x=cost (1+cost), y=sint (1+cost) при 0 t<2
;
6) x=t-sint, y=1-cost при 0 t<2
;
7) x=sint, y=t2-cost при 0 t<2
;
8) x=t2*sint, y=t2-cost при -
t.
;
9) x=sint, y=cost при -
t
;
10) x=cos2t, y=sin2t при 0 t
2
.
Лабораторная работа №9
СТРУКТУРА МОДУЛЕЙ И ОСОБЕННОСТИ РАБОТЫС НИМИ.
1. ЦЕЛЬ И ЗАДАЧИ РАБОТЫ
Целью работы является изучение общей структуры модулей.
2. ТЕОРЕТИЧЕСКИЕ СВЕДЕНИЯ
Наличие модулей в TURBO PASCAL позволяет программировать и отлаживать программу по частям, создавая библиотеки подпрограмм и данных, воспользоваться возможностями стандартных модулей, практически неограниченно увеличивать кодовую (содержащую коды команд) часть команд.
Модуль состоит из следующих частей:
· заголовок модуля,
· интерфейс модуля,
· исполнительная часть модуля,
· секция инициализации.
Заголовок модуля состоит из зарезервированного слова unit и идентификатора. Идентификатор модуля должен быть уникальным.
Пример заголовка: Unit MyModule.
Модуль должен быть помещен в файл, имя которого совпадает с именем модуля, а его расширение должно быть.PAS
Через интерфейс модуля осуществляется взаимодействие основной программы с модулем (модуля с модулем). В интерфейсе указываются константы, типы, переменные, процедуры и функции, которые могут быть использованы основной программой (модулем) при вызове этого модуля.
Интерфейс начинается словом interface. Далее после слова uses указываются имена модулей, которые используются данным модулем (необязательная часть). После этого могут быть: раздел объявления констант, раздел объявления типов, раздел объявления переменных, раздел объявления процедур и функций. Объявление процедуры может содержать директиву inline. В разделе объявления процедур и функций указываются лишь заголовки подпрограмм (за исключением тех подпрограмм, которые используют директиву inline). Сами подпрограммы приводятся в исполнительной части.
В интерфейсах различных модулей недопустимо цикличное обращение друг к другу, т.к. компилятор в этом случае не может установить связь.
Исполнительная часть включает в себя все подпрограммы модуля. Она может также включать локальные метки, константы, типы и переменные.
Исполнительная часть начинается словом implementation, затем после слова uses указываются имена модулей, которые используются подпрограммами данной исполнительной части (этот раздел необязательный). Если какой-то модуль уже указан в интерфейсе модуля, то в исполнительной части его повторять не следует. Далее могут быть: раздел объявления меток, раздел объявления локальных констант, раздел объявления локальных типов, раздел объявления локальных переменных. Затем идут описания подпрограмм модуля. При описании подпрограмм допустимо использовать сокращенные заголовки, как и в случае использования директивы forward.
В отличие от интерфейсов модулей в исполнительных частях допустимо циклическое обращение друг к другу, т.к. все равно взаимодействие осуществляется через интерфейсы, и здесь не возникает проблемы с установлением необходимых связей.
В некоторых случаях перед обращением к модулю следует провести его инициализацию (например, если необходимо установить связь с теми или иными файлами с помощью процедуры Assign, инициализировать какие-то переменные и т.д., то необходимые действия можно выполнить в секции инициализации модуля). Эта секция начинается словом begin, после которого идут исполняемые операторы, а затем помещается слово end (с точкой), например:
Begin
Assign(f, ‘file1.dat’);
End;
Следует иметь в виду, что операторы секции инициализации выполняются единственный раз в момент запуска программы.
Исходный текст модуля должен быть откомпилирован с помощью директивы 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.
Использование составных имен применяется не только к именам переменных, а ко всем именам, описанным в интерфейсной части модуля.
Рекурсивное использование модулей запрещено.
3. ПОРЯДОК ВЫПОЛНЕНИЯ РАБОТЫ
1. Ознакомиться с теоретическими сведениями данной работы.
2. Ответить на контрольные вопросы.
3. Выполнить свой вариант задания (см. Приложение2).
4.ОФОРМЛЕНИЕ ОТЧЕТА
Отчет о работе должен содержать номер, название и цель работы, ответы на контрольные вопросы, текст программы и результат выполнения программы.
5.КОНТРОЛЬНЫЕ ВОПРОСЫ
1. Из каких частей состоит модуль? Какие из них являются обязательными?
2. С какого слова начинается заголовок модуля?
3. Для чего нужен интерфейс?
4. В чем отличие между интерфейсом и исполнительной частью модуля?
5. Как организовать подключение того или иного модуля?
6. ВАРИАНТЫЗАДАНИЙ
№ задания | ||||||||||
№ по журналу | ||||||||||
Программа, использующая модуль, который:
1) подсчитывает, сколько раз введенное с клавиатуры число встречается в массиве;
2) вычисляет сумму элементов матрицы, распложенных на главной диагонали;
3) проверяет, есть ли в матрице элементы с одина