ВУЗ:
Составители:
Рубрика:
9
// объявления подпрограмм
function Plus(r1,r2:Rational): Rational; // Плюс
function Minus(r1,r2:Rational): Rational; // Минус
function Dot(r1,r2:Rational): Rational; // Точка
function Slash(r1,r2:Rational): Rational; // Косая черта
procedure Add(var r1:Rational; r2:Rational); // Прибавить
procedure Subtract(var r1:Rational; r2:Rational); // Вычесть
procedure MultiplyBy(var r1:Rational; r2:Rational); // УмножитьНа
procedure DivideBy(var r1:Rational; r2:Rational); // РазделитьНа
{ Поскольку результат выполнения перечисленных выше процедур
сохраняется в первом аргументе, этот аргумент должен быть
передан по ссылке, а не по значению. }
implementation
uses SysUtils; // модуль включает поддержку исключений
procedure Normalize(var r:Rational);
{ Процедура приводит рациональное число r, передаваемое в качестве
параметра, к нормальной форме: числитель - целое число,
знаменатель - натуральное. }
begin
if r.den<0 then begin
r.num:=-r.num; r.den:=-r.den;
end;
end;
procedure Reduce(var r:Rational);
{ Процедура сокращает числитель и знаменатель числа r на их
наибольший общий делитель. }
var a,b:Integer;
begin // используется алгоритм Евклида поиска НОД
a:=Abs(r.num); b:=r.den;
while a<>0 do
if a>=b then a:=a-b else b:=b-a;
// по завершении цикла b=НОД(r.num,r.den)
r.num:=r.num div b; r.den:=r.den div b;
end;
// определения подпрограмм, объявленыых в разделе интерфейса
function Plus(r1,r2:Rational): Rational;
var res: Rational;
begin
res.num:=r1.num*r2.den+r1.den*r2.num;
res.den:=r1.den*r2.den;
Normalize(res); Reduce(res);
// объявления подпрограмм function Plus(r1,r2:Rational): Rational; // Плюс function Minus(r1,r2:Rational): Rational; // Минус function Dot(r1,r2:Rational): Rational; // Точка function Slash(r1,r2:Rational): Rational; // Косая черта procedure Add(var r1:Rational; r2:Rational); // Прибавить procedure Subtract(var r1:Rational; r2:Rational); // Вычесть procedure MultiplyBy(var r1:Rational; r2:Rational); // УмножитьНа procedure DivideBy(var r1:Rational; r2:Rational); // РазделитьНа { Поскольку результат выполнения перечисленных выше процедур сохраняется в первом аргументе, этот аргумент должен быть передан по ссылке, а не по значению. } implementation uses SysUtils; // модуль включает поддержку исключений procedure Normalize(var r:Rational); { Процедура приводит рациональное число r, передаваемое в качестве параметра, к нормальной форме: числитель - целое число, знаменатель - натуральное. } begin if r.den<0 then begin r.num:=-r.num; r.den:=-r.den; end; end; procedure Reduce(var r:Rational); { Процедура сокращает числитель и знаменатель числа r на их наибольший общий делитель. } var a,b:Integer; begin // используется алгоритм Евклида поиска НОД a:=Abs(r.num); b:=r.den; while a<>0 do if a>=b then a:=a-b else b:=b-a; // по завершении цикла b=НОД(r.num,r.den) r.num:=r.num div b; r.den:=r.den div b; end; // определения подпрограмм, объявленыых в разделе интерфейса function Plus(r1,r2:Rational): Rational; var res: Rational; begin res.num:=r1.num*r2.den+r1.den*r2.num; res.den:=r1.den*r2.den; Normalize(res); Reduce(res); 9
Страницы
- « первая
- ‹ предыдущая
- …
- 7
- 8
- 9
- 10
- 11
- …
- следующая ›
- последняя »