Основы программирования на C++, PASCAL
Наконец, раздел инициализации (часто отсутствующий) содержит операторы, которые должны быть выполнены сразу же после запуска программы, использующей модуль.
Приведем пример разработки и использования модуля. Поскольку рассмотренная ниже задача достаточно элементарна, ограничимся распечаткой текста программы с подробными комментариями.
Рассмотрим следующую задачу. Реализовать в виде модуля набор подпрограмм для выполнения следующих операций над обыкновенными дробями вида P/Q (Р — целое, Q — натуральное):
1) сложение;
2) вычитание;
3) умножение;
4) деление;
5) сокращение дроби;
6) возведение дроби в степень N (N — натуральное);
7) функции, реализующие операции отношения (равно, не равно, больше или равно, меньше или равно, больше, меньше). Дробь представить следующим типом:
Type Frac=Record
Р: Integer;
Q: 1..32767
End;
Используя этот модуль, решить задачи:
1. Дан массив А, элементы которого — обыкновенные дроби. Найти сумму всех элементов и их среднее арифметическое; результаты представить в виде несократимых дробей.
2. Дан массив А, элементы которого — обыкновенные дроби. Отсортировать его в порядке возрастания.
Unit Droby;
Interface
Type
Natur=l..High(Longint) ;
Frac=Record
Р: Longint;
Q: Natur
End;
Procedure Sokr(Var A: Frac);
Procedure Summa(A,B: Frac; Var C: Frac);
Procedure Raznost(A,B: Frac; Var C: Frac);
Procedure Proizvedenie(A,B: Frac; Var C: Frac);
Procedure Chastnoe(A,B: Frac; Var C: Frac);
Procedure Stepen(A: Frac; N: Natur; Var C: Frac);
Function Menshe(A,B: Frac): Boolean;
Function Bolshe(A,B: Frac): Boolean;
Function Ravno(A,B: Frac): Boolean;
Function MensheRavno(A,B: Frac): Boolean;
Function BolsheRavno(A,B: Frac): Boolean;
Function NeRavno(A,B: Frac): Boolean;
{Раздел реализации модуля}
Implementation
{Наибольший общий делитель двух чисел - вспомогательная функция, ранее не объявленная)
Function NodEvklid(A,B: Natur): Natur;
Begin
While A<>B Do
If A>B Then
If A Mod B<>0 Then A:=A Mod B
Else A:=B
Else
If B Mod A<>0 Then B:=B Mod A
Else B:=A;
NodEvklid:=A
End;
(Сокращение дроби)
Procedure Sokr;
Var M,N: Natur;
Begin
If A. P<>O
Then
Begin
If A.P<0
Then M:=Abs(A.P)
Else M:=A.P; (Совмещение типов, т.к. А.Р - Longint}
N:=NodEvklid(M,A.Q);
A.P:=A.P Div N;
A.Q:=A.Q Div. N