IMHO.WS

IMHO.WS (https://www.imho.ws/index.php)
-   Программирование (https://www.imho.ws/forumdisplay.php?f=40)
-   -   Помогите плиз с алгоритмом приведения дробей к общему знаменателю (https://www.imho.ws/showthread.php?t=91686)

DOMRIK 28.08.2005 21:47

Помогите плиз с алгоритмом приведения дробей к общему знаменателю
 
Помогите плиз с алгоритмом приведения дробей к общему знаменателю
78. Даны дроби p1/q1, p2/q2, ..., pn/qn (pi, qi – натуральные). Составить программу, которая приводит эти дроби к общему знаменателю и упорядочивает их в порядке возрастания.
Плииииииииииииииз :)

ЕЖ 28.08.2005 23:40

На Паскале:
Цитата:

function NOD(x,y:longint):longint;
begin
if x<>0 then NOD:=NOD(y mod x,x) else NOD:=y;
end;

function NOK(x,y:longint):longint;
begin
NOK:=( x div NOD(x,y) ) * y;
end;
НОК знаменателей двух дробей и будет твой общий знаменатель.
Для сравнения дробей просто приводи их к десятичной форме, т.е. дели числитель на знаменатель. А такие числа уже можно сравнивать в том же операторе if.

Для организации хранения в программе простых дробей видимо придется описать соответствующие структуры.
Вот тебе пример на Паскале, где реализовано хранение простых дробей и все основные операции http://www.mai.ru/org/auditory/program/pas/solver/solv0002.htm

Trotil 28.08.2005 23:52

Аналогичный пример на С:
Цитата:

int NOD(int a,int b)
{
while(a && b)
{
if(a>b) a=a%b;
else b=b%a;
}
return a+b; // Одно - ноль
}

int NOK(int x, int y)
{
return x * y / NOD(x, y);
}

int NOK(int x, int y, int z)
{
return NOK(NOK(x, y), z);
}

Trotil 29.08.2005 02:10

Цитата:

ЕЖ:
Для сравнения дробей просто приводи их к десятичной форме, т.е. дели числитель на знаменатель. А такие числа уже можно сравнивать в том же операторе if.
Нафиг делить, если знаменатель уже одинаковый? Просто нужно провести сортировку по числителям безо всякого деления.

ЕЖ 29.08.2005 02:18

Цитата:

Trotil:
Нафиг делить, если знаменатель уже одинаковый? Просто нужно провести сортировку по числителям безо всякого деления.
Прав, просто я не обратил внимание, что сортировать надо после приведения к общему знаменателю :)

DOMRIK 29.08.2005 15:24

Всем спасибо, тема закрыта :)


Часовой пояс GMT +4, время: 09:56.

Powered by vBulletin® Version 3.8.5
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.