
04.12.2007, 04:00
|
Активный
|
|
Регистрация: 04.12.2007
Адрес: Москва
Сообщения: 234
Версия Delphi: Delphi 7
Репутация: 40
|
|
Сегодня у меня утро добрых дел.
Код:
{$APPTYPE CONSOLE}
//------------------------------------------------------------------------------
// Нахождение наибольшего общего делителя
//------------------------------------------------------------------------------
function NOD_Euclid(A, B: LongInt): LongInt;
begin
A := Abs(A);
B := Abs(B);
if (A = 0) or (B = 0) then begin
Result := A + B;
Exit;
end;
while A <> B do
if A > B then A := A - B
else B := B - A;
Result := B;
end;
//------------------------------------------------------------------------------
// Функция складывает и сокращает дроби A/B и C/D
// Результат возвращает в виде строки 'X/Y'
//------------------------------------------------------------------------------
function FractionSum(A, B, C, D: Integer): String;
var
X, Y, N: Cardinal;
begin
// Сумма дробей = (A*B + C*D) / (B * D)
X := A * D + C * B; // Числитель дроби результата
Y := B * D; // Знаменатель дроби результата
// Находим наибольший общий делитель для числителя и знаменателя результата
N := NOD_Euclid(X, Y);
// Сокращаем результат
X := Trunc(X / N);
Y := Trunc(Y / N);
// Преобразуем в строку и возвращаем
Result := IntToStr(X) + '/' + IntToStr(Y);
end;
begin
// Складываем дроби 1/5 и 3/10
Writeln(FractionSum(1, 5, 3, 10));
end.
|