Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 23.09.2015, 23:27   #1
DarkPower
Пользователь
 
Регистрация: 12.09.2012
Сообщений: 15
Вопрос Модули/алгоритмы сокращения дроби

Вот интересно, есть ли модули сокращения дроби?

Есть ли такой модуль/исходник, который будет сокращать дроби типа: 2/3*3.
Я создал программу для подсчета, но она считает с небольшой ошибкой, так как она сначала делит 2/3=0,666(6)и потом умножает на 3, ну в общем суть понятно думаю...

И конечный результат отличается от правильно примерно на 3780-3720=60...
DarkPower вне форума Ответить с цитированием
Старый 23.09.2015, 23:40   #2
min@y™
Цифровой кот
Старожил
 
Аватар для min@y™
 
Регистрация: 29.08.2014
Сообщений: 7,629
По умолчанию

а какая у тебя дробь считается несократимой? числитель и знаменатель которой – целые числа, не имеющие общего делителя?
Расскажу я вам, дружочки, как выращивать грибочки: нужно в поле утром рано сдвинуть два куска урана...
min@y™ вне форума Ответить с цитированием
Старый 24.09.2015, 19:24   #3
DarkPower
Пользователь
 
Регистрация: 12.09.2012
Сообщений: 15
По умолчанию

Цитата:
Сообщение от min@y™ Посмотреть сообщение
а какая у тебя дробь считается несократимой? числитель и знаменатель которой – целые числа, не имеющие общего делителя?
2 целых любых (отрицательные/положительные/0) числа (числитель и знаменатель).
DarkPower вне форума Ответить с цитированием
Старый 24.09.2015, 19:51   #4
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Цитата:
2/3*3
где в такой записи сокращаемая дробь?
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 24.09.2015, 20:38   #5
Pavia
Лис
Старожил
 
Аватар для Pavia
 
Регистрация: 18.09.2015
Сообщений: 2,409
По умолчанию

Находишь наибольшее общее кратное(НОД) делителя и знаменателя.
Есть такой алгоритм, алгоритм Евклида называется.
Код:
function gcd(a, b):
    while b <> 0 do
       begin
       t := b;
       b := a mod b;
       a := t;
       end;
    Result:= a;
Далее делишь числитель и знаменатель на НОД.
Код:
R.P:=R.P div GCD_Result;
R.Q:=R.Q div GCD_Result;
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
У дзен программиста программа делает то что он хотел, а не то что он написал .
Pavia вне форума Ответить с цитированием
Старый 25.09.2015, 02:33   #6
northener
ПШП
Участник клуба
 
Регистрация: 15.07.2013
Сообщений: 1,877
По умолчанию

Цитата:
Сообщение от DarkPower Посмотреть сообщение
Вот интересно, есть ли модули сокращения дроби?

Есть ли такой модуль/исходник, который будет сокращать дроби типа: 2/3*3.
Я создал программу для подсчета, но она считает с небольшой ошибкой, так как она сначала делит 2/3=0,666(6)и потом умножает на 3, ну в общем суть понятно думаю...

И конечный результат отличается от правильно примерно на 3780-3720=60...
Покажи что ты создал. И мы ответим в чём ты не прав.
P.S. Хотя на 90% я и так знаю в чём проблема. В неверном выборе типа вещественных переменных.
northener вне форума Ответить с цитированием
Старый 25.09.2015, 12:06   #7
DarkPower
Пользователь
 
Регистрация: 12.09.2012
Сообщений: 15
По умолчанию

Цитата:
Сообщение от northener Посмотреть сообщение
Покажи что ты создал. И мы ответим в чём ты не прав.
P.S. Хотя на 90% я и так знаю в чём проблема. В неверном выборе типа вещественных переменных.
http://pastebin.com/dQ3sruje Это основная процедура подсчета

Последний раз редактировалось DarkPower; 25.09.2015 в 12:10.
DarkPower вне форума Ответить с цитированием
Старый 25.09.2015, 13:18   #8
Utkin
Старожил
 
Аватар для Utkin
 
Регистрация: 04.02.2009
Сообщений: 17,351
По умолчанию

Цитата:
где в такой записи сокращаемая дробь?
Наверно 2/3 и 3/1 умножаются
Маньяк-самоучка
Utkin появился в результате деления на нуль.
Осторожно! Альтернативная логика
Utkin вне форума Ответить с цитированием
Старый 25.09.2015, 23:31   #9
DarkPower
Пользователь
 
Регистрация: 12.09.2012
Сообщений: 15
По умолчанию

m:=m-Ail*Akj/n; double
это без дроби.
Для дроби я могу сделать как стринг. И разделить например "/", отправлять стринг в процедуру, которая возвращает тип и с 2-ух целых чисел (числитель/знаменатель).
m:=m-Ail*Akj/n; то есть тут может быть соответственно:
(2/3)-(1/3)*(4/1)/(3/8)
DarkPower вне форума Ответить с цитированием
Старый 26.09.2015, 00:36   #10
northener
ПШП
Участник клуба
 
Регистрация: 15.07.2013
Сообщений: 1,877
По умолчанию

А почему double, а не Extended?
northener вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Буквенные сокращения больших чисел. mrtoxas Общие вопросы Delphi 13 29.07.2015 10:37
Составить программу для сокращения дроби M / N, где M, N-натуральные числа. kirito_17 Помощь студентам 4 20.11.2013 18:11
библиотечные модули пользователя,модули CRT и DOS лерка:) Паскаль, Turbo Pascal, PascalABC.NET 0 08.01.2012 14:57
Перебор и его сокращения *Zimnij* Общие вопросы C/C++ 1 04.01.2009 14:38