Лабораторная работа № 11. Модули
Теория
Модуль – это набор ресурсов (функций, процедур, констант, переменных, типов и т.д.), разрабатываемых и хранимых отдельно от использующих их программ.
Модуль состоит из следующих частей:
1. Заголовок
2. Раздел интерфейса
3. Раздел реализации
4. Конец модуля
В заголовке определяется имя модуля. Это имя в дальнейшем используется при ссылке на модуль в предложении uses. Перед именем модуля стоит служебное слово Unit
Unit имя модуля;
Интерфейсная часть начинается со слова interface. В этой части объявляются только те константы, типы, переменные, процедуры и функции, которые являются глобальными, т.е. доступные основной программе. В интерфейсной части только перечисляются заголовки процедур и функций.
Раздел реализации начинается со слова implementation. В этом разделе приведены описания всех глобальных процедур и функций. В этом же разделе описываются все константы, типы переменных, процедуры и функции, которые являются глобальными для модуля, но локальными по отношению в основной программе. Основная программа их не видит.
Модуль заканчивается словом end с точкой.
Примеры
Пример 1.
Создать модуль содержащий функции возведения вещественного числа в целую степень, извлечения корня целой степени и возведение числа в произвольную степень.
Использовать этот модуль для вычисления z:
для произвольных a и b.
Модуль
Unit Power;
Interface
{Функция возведения в целую степень n вещественного числа x}
Function IntPower(x: real; n: integer): real;
{Функция извлечения целого корня n вещественного числа x}
Function Root(x: real: n: integer):real;
{Функция возведения в произвольную степень y вещественного положительного числа x}
Function RealPower(x, y: real): real;
Implementation
Function IntPower(x: real; n: integer): real;
var P: real; i: integer;
begin
P:=1;
For i:=1 to n do
P:=P*x;
IntPower:=P;
end;
Function Root(x: real: n: integer):real;
var y: real;
begin
y:=x;
repeat
y:=(n-1)/n*y+x/(n*IntPower(y, n-1));
until abs(IntPower(y, n)-x)<1.0E-4;
Root:=y;
end;
Function RealPower(x, y: real): real;
begin
RealPower:=exp(y*ln(x));
end;
end.
Основная программа:
program Powerz;
Uses Power;
var a, b, x, y, z: real;
begin
write(‘a, b=’);
readln(a,b);
y:=2*a-sqrt(b);
x:=Root(sqr(a)+IntRower(b,4)), 4);
z:=RealPower(abs(x), a) - IntRower(y, 3);
writeln(‘z=’,z:10:4);
readln;
end.
Контрольные вопросы
1. Как подключить к программе модуль
2. С какого слова начинается текст модуля.
3. Для чего предназначен раздел implementation.
4. Какие подпрограммы и данные можно не описывать в разделе interface.
5. Сколько модулей можно подключать к программе.
Задания для лабораторной работы
При создании процедур и функций стандартные функции не использовать.
1. Создать модуль и разработать ниже перечисленные функции, затем выполнить задание с текстом.
MaxText – найти самое длинное слово в тексте.
NewPos – определение вхождения подстроки с заданной позиции
Convers – переписать заданный текст наоборот
MyCopy – выделение с заданной позиции заданного количества символов.
MyLen определяет количество символов в строке
Задание. Дан текст. Найти самое длинное слово в тексте и все слова, равные по длине этому слову переписать в наоборот.
2. Создать модуль и разработать ниже перечисленные функции, затем выполнить задание с текстом.
WordN – выделяет N-ное слово
MyMove – перенести заданною подстроку в заданною позицию
CountWord– определяет количество слов в тексте
MyInsert – вставка подстроки с заданной позиции
Задание. Дан текст. Попарно переставить слова в этом тексте.
3. Создать модуль и разработать ниже перечисленные функции, затем выполнить задание с текстом.
CountWord– определяет количество слов в тексте
WordN – выделяет N-ное слово
DeleteAll – удаление всех вхождений заданной подстроки
DivEnd - разделить строку на две подстроки по последнему вхождению сочетания символов
Задание. Дан текст. Удалить в этом тексте все слова равные 4 символам. Дан текст в виде: описание товара и его цена. Цена отделяется от описания “ – “. Отделить описание товара от его цены.
4. Создать модуль и разработать ниже перечисленные функции, затем выполнить задание с текстом.
MoveEnd - перенести заданную подстроку в конец.
MyPos – определение первого вхождения подстроки
WordN – выделяет N-ное слово
CountWord– определяет количество слов в тексте
Sovpad проверяет совпадение двух строк без учета регистров, пробелов и знаков препинания
Задание. Поменять местами в тексте первое и последнее слово. Даны две строки, содержащие слова, написанные в разных регистрах. Найти какие слова в первой строке совпадают со словами из второй строки.
5. Создать модуль и разработать ниже перечисленные функции, затем выполнить задание с текстом.
NewCopy – выделение строки с заданного начального символа до заданного конечного символа
NewDelete – удаление подстроки с начальной позиции до конечной позиции
MyPos – определение первого вхождения подстроки
MyDown(строка) все буквы – строчные.
Задание. Дан текст содержащий фрагмент в круглых скобках. Переписать этот фрагмент в отдельную строку и сделать все буквы в этой строке строчными, а в первоначальном тексте удалить этот текст
6. Создать модуль и разработать ниже перечисленные функции, затем выполнить задание с текстом.
Inicial – текст фамилия, имя, отчество или фамилия имя преобразовать фамилия и инициалы и преобразует регистр
MyReplace – замена в строке одной подстроки на другую
NewPos – определение вхождения подстроки с заданной позиции
CountStr – вычисление вхождений одной подстроки в другую
DeleteStr - удаление k-того вхождения заданной подстроки
Задание. Дан текст содержащий в средине фамилию имя отчество, которым предшествует слово «уважаемый». Заменить имя отчество на инициалы и записать их с большой буквы. Дан текст содержащий несколько раз знак «!». Удалить последний «!».
7. Создать модуль и разработать ниже перечисленные функции, затем выполнить задание с текстом.
Abrev – получить аббревиатуру заданного текста
NewPos – определение вхождения подстроки с заданной позиции
MyReplace – замена в строке одной подстроки на другую
NewRight – выделение с конца строки начиная с заданного символа
Задание. Дан адрес организации. Название организации заключено в кавычки. Заменить название организации на аббревиатуру. Дан текст в конце текста указан город, которому предшествует «г.». Выделить этот город в отдельную переменную.
8. Создать модуль и разработать ниже перечисленные функции, затем выполнить задание с текстом.
MyNumber – записать целое число (до миллиона) числительными.
MyLeft – выделение сначала заданного количества символов.
MyDelete – удаление подстроки с заданной позиции данное количество символов
Задание. Дан текст, который содержит число (не более 6 цифр). Записать эти число прописью.
Дан адрес. В начале адреса указан почтовый индекс. Выделить этот индекс в отдельную строку, а в адресе индекс удалить.
9. Создать модуль и разработать ниже перечисленные функции, затем выполнить задание с текстом.
MyVal – преобразовать строку в целое число
NewCopy – выделение строки с заданного начального символа до заданного конечного символа
MyPos – определение первого вхождения подстроки
MyLen определяет количество символов в строке
Задание. Дана строка, содержащая название товара и его цены. Например: «Конфеты шоколадные «Перезвоны» 70 руб», «Хлеб Чусовской 7 руб. 30 коп.» или «Колбаса 103,40». Разделить название товара и его цены, записав цену в переменную вещественного типа. В названии товара все буквы сделать заглавными.
10. Создать модуль и разработать ниже перечисленные функции, затем выполнить задание с текстом.
MyPos – определение первого вхождения подстроки
ReplaceAll - замена в строке всех вхождений одной подстроки на другую
Rubl – преобразует число в строку денежного формата
Функция MyPropose(строка) все слова с большой буквы остальные буквы - строчные.
Задание. Дан юридический адрес предприятия, содержащий расчетный счет, перед которым стоит «р/с» или «расчетный счет». Заменить один расчетный счет на другой. Дана строка с фамилией сотрудника и число – оклад. Объединить это в одну строку. Фамилию имя отчество записать с заглавных букв.
11. Создать модуль и разработать ниже перечисленные функции, затем выполнить задание с текстом.
ReplaceAll - замена в строке всех вхождений одной подстроки на другую
NewPropose(строка) первое слово с большой буквы остальные слова строчные буквы.
TrimAll – удаление всех лишних пробелов.
MyStr – преобразовать целое число в строку.
Задание. Дан текст. заменить все слова «тебя» в этом тексте на «Вас».
Дана строка, содержащая фамилию ученика и класс, а также целое число – отметку. Объединить это в строку. Фамилию ученика написать с заглавной буквы, удалив лишние пробелы.
12. Создать модуль и разработать ниже перечисленные функции, затем выполнить задание с текстом.
MoveBeg – перенести заданную подстроку в начало
CountWord– определяет количество слов в тексте
WordN – выделяет N-ное слово
DivBegin – разделить строку на две подстроки по первому вхождению сочетания символов
Задание. Дан текст переписать слова в этом тексте в обратном порядке. Дан текст фамилия ученика, предмет и отметка. Отметка отделена словом «оценка». Получить две строки одна - фамилия и предмет, другая – отметка.