uses
crt, fraction;
var
a, b, c: frac;
begin
clrscr;
a.p := 2;
a.q := 5;
b.p := 1;
b.q := 3;
add (a, b, c);
writeln ('add: ', c.p, '/', c.q);
dec(a, b, c);
writeln ('dec: ', c.p, '/', c.q);
mult(a, b, c);
writeln ('mult: ', c.p, '/', c.q);
division(a, b, c);
writeln ('division: ', c.p, '/', c.q);
power(b, 3, c);
writeln ('power: ', c.p, '/', c.q);
writeln('done. press any key...');
readkey;
end.
{Дробь, как объект}
Unit fractions;
interface
Uses Objects;
Type
TFraction = object
numerator : longint; //Числитель
denominator: longint; //Знаменатель
constructor Init(num, denom: longint); //Конструктор дроби
function sum(Other: TFraction): TFraction; //Суммирование
function difference(Other: TFraction): TFraction; //Вычитание
function multiplication(Other: TFraction): TFraction; //Умножение
function division(Other: TFraction): TFraction; //Деление
function LCD(Other: TFraction): longint; //Общий знаменатель
procedure Show; //Выводит дробь на экран
end;
PFraction = ^TFraction;
implementation
constructor TFraction.Init(num, denom: longint);
Begin
numerator:=num;
denominator:=denom;
End;
//Суммирование
function TFraction.sum(Other: TFraction): TFraction;
Var
local: TFraction;
k, k1, k2: longint;
Begin
//Если знаменатели равны
If denominator=Other.denominator Then
Begin
//То просто складываем числители
local.numerator:=numerator+Other.numerator;
//А знаменатель остался неизменным
local.denominator:=denominator;
End
Else
//А если не ровны
Begin
//Находим общий знаменатель
k:=LCD(Other);
//И вычисляем поправочные коэффициенты к первой дроби
k1:=k div denominator;
//И ко второй дроби
k2:=k div Other.denominator;
//Теперь складываем числители, умноженные на поправочный коэффициент
local.numerator:=numerator*k1+Other.numerator*k2;
//А знаменатель у суммы будет найденый ранее общий знаменатель
local.denominator:=k;
End;
sum:=local;
End;
//Вычитание
function TFraction.difference(Other: TFraction): TFraction;
Var
local: TFraction;
k, k1, k2: longint;
Begin
If denominator=Other.denominator Then
Begin
local.numerator:=numerator-Other.numerator;
local.denominator:=denominator;
End
Else
Begin
k:=LCD(Other);
k1:=k div denominator;
k2:=k div Other.denominator;
local.numerator:=numerator*k1-Other.numerator*k2;
local.denominator:=k;
End;
difference:=local;
End;
//Умножение
function TFraction.multiplication(Other: TFraction): TFraction;
Var
local: TFraction;
Begin
local.numerator:=numerator*other.numerator;
local.denominator:=denominator*other.denominator;
multiplication:=local;
End;
//Деление
function TFraction.division(Other: TFraction): TFraction;
Var
local: TFraction;
Begin
local.numerator:=numerator*other.denominator;
local.denominator:=denominator*other.numerator;
division:=local;
End;
//Общий знаменатель
function TFraction.LCD(Other: TFraction): longint;
Begin
If Other.denominator<>denominator Then
LCD:=Other.denominator*denominator
Else
LCD:=denominator;
End;
//Выводит дробь на экран
procedure TFraction.Show;
Begin
Write(numerator,'/',denominator);
End;
end.
{Пример работы с дробями-объектами}
Program example;
Uses Fractions;
Var
d1, d2, d3: TFraction;
Begin
d1.numerator:=5;
d1.denominator:=3;
d2.numerator:=1;
d2.denominator:=3;
//Сложение
d3:=d1.sum(d2);
WriteLn('Сложение дробей:');
d1.Show;
Write(' + ');
d2.Show;
Write(' = ');
d3.Show;
WriteLn;
WriteLn;
//Вычитание
d3:=d1.difference(d2);
WriteLn('Вычитание дробей:');
d1.Show;
Write(' - ');
d2.Show;
Write(' = ');
d3.Show;
WriteLn;
WriteLn;
//Умножение
d3:=d1.multiplication(d2);
WriteLn('Умножение дробей:');
d1.Show;
Write(' * ');
d2.Show;
Write(' = ');
d3.Show;
WriteLn;
WriteLn;
//Деление
d3:=d1.division(d2);
WriteLn('Деление дробей:');
d1.Show;
Write(' : ');
d2.Show;
Write(' = ');
d3.Show;
WriteLn;
WriteLn;
End.
Если Вы уже зарегистрированы на Портале - войдите в систему, если Вы еще не регистрировались - пройдите простую процедуру регистрации.