Библиотеку работы с дробями никто не встречал?

Clarion, Clarion 7

Модератор: Дед Пахом

Правила форума
При написании вопроса или обсуждении проблемы, не забывайте указывать версию Clarion который Вы используете.
А так же пользуйтесь спец. тегами при вставке исходников!!!
Ответить
Аватара пользователя
RaFaeL
✯ Ветеран ✯
Сообщения: 1376
Зарегистрирован: 24 Март 2009, 17:59
Откуда: НН
Благодарил (а): 7 раз
Поблагодарили: 1 раз
Контактная информация:

Библиотеку работы с дробями никто не встречал?

Сообщение RaFaeL »

Чтобы передать туда "1/2 + 1/3" и получить "5/6" (ну или отдельными параметрами)
Yufil
Ветеран движения
Сообщения: 1277
Зарегистрирован: 16 Май 2006, 14:34
Контактная информация:

Библиотеку работы с дробями никто не встречал?

Сообщение Yufil »

В Python есть класс Fractions https://pythonworld.ru/moduli/modul-fractions.html. Есть также класс sympy для выполнения символических вычислений, тоже пойдёт...
Аватара пользователя
vic7tar
Ветеран
Сообщения: 365
Зарегистрирован: 09 Февраль 2017, 20:12

Библиотеку работы с дробями никто не встречал?

Сообщение vic7tar »

Если две дроби и четыре простых операции, может написать своё что-то без большой крови?
C10, Win10x64
Аватара пользователя
Admin
Администратор
Сообщения: 3959
Зарегистрирован: 05 Июль 2005, 15:59
Откуда: Хабаровск
Благодарил (а): 25 раз
Поблагодарили: 22 раза
Контактная информация:

Библиотеку работы с дробями никто не встречал?

Сообщение Admin »

Вот заготовка:

Код: Выделить всё

  		program
	
  		map
		end

fraction            class
numerator               long,private
denominator             long,private
set                     function(long numerator, long denominator)
set                     function(string number)
setnum                  function(long numerator)
setden                  function(long denominator)
getnum                  function(),long
getden                  function(),long
reduction               function
show                    function(),string
add                     function(fraction f)
sub                     function(fraction f)
mul                     function(fraction f)
					end

f1                  fraction
f2                  fraction

	code
	! сложение 
	!f1.set('1/2')
	!f2.set('1/3')
	!f1.add(f2)
	!message(f1.show()) ! 5/6
	
	! вычитание
	!f1.set('1/3')
	!f2.set('1/5')
	!f1.sub(f2)
	!message(f1.show()) ! 2/15
		
	! умножение
	!f1.set('1/3')
	!f2.set('1/5')
	!f1.mul(f2)
	!message(f1.show()) ! 1/15
		
fraction.set        function(long numerator, long denominator)
	code
	self.setnum(numerator)
	self.setden(denominator)
	
fraction.set        function(string number)
pos                 long 
	code
	pos = instring('/', number, 1, 1)
	if pos = 0 then return end
	self.setnum(sub(number, 1, pos - 1))
	self.setden(sub(number, pos+1, len(number) - pos))
	
fraction.getnum     function()
	code
	return self.numerator
	
fraction.setnum     function(long numerator)
	code
	self.numerator = numerator
	
fraction.setden     function(long denominator)
	code
	self.denominator = denominator

fraction.getden     function()
	code
	return self.denominator
	
fraction.reduction  function
n                       long
d                       long
t                       long
	code
	n = self.getnum()
	d = self.getden()
	loop while d <> 0
    	t = d
        d = n % d
        n = t
	end
	self.setnum(self.getnum() / n)
	self.setden(self.getden() / n)
	
fraction.show       function()
	code
	return self.getnum() & '/' & self.getden()
	
fraction.add        function(*fraction f)
r                   fraction
	code
	self.reduction
	r.setden(self.getden() * f.getden())
	r.setnum((r.getden() / self.getden()) * self.getnum() + (r.getden() / f.getden()) * f.getnum())
	self.setnum(r.getnum())
	self.setden(r.getden())

fraction.sub        function(*fraction f)
r                   fraction
	code
	self.reduction
	r.setden(self.getden() * f.getden())
	r.setnum((r.getden() / self.getden()) * self.getnum() - (r.getden() / f.getden()) * f.getnum())
	self.setnum(r.getnum())
	self.setden(r.getden())

fraction.mul        function(fraction f)
r                   fraction
	code
	self.reduction
	r.setnum(self.getnum() * f.getnum())
	r.setden(self.getden() * f.getden())
	self.setnum(r.getnum())
	self.setden(r.getden())
Рай совершает ошибки ничуть не реже чем ад. Просто у него хорошая пресса
Yufil
Ветеран движения
Сообщения: 1277
Зарегистрирован: 16 Май 2006, 14:34
Контактная информация:

Библиотеку работы с дробями никто не встречал?

Сообщение Yufil »

Если не секрет, зачем ?

Я делал что-то похожее ( с переменными, раскрытием и сокращениум многочленов ) в начале 80-х, писал на Фортране, был некий конкурс молодых программистов...

Кстати, стоит посмотреть Python\lib\fractions.py - как там наворочено :)
Аватара пользователя
RaFaeL
✯ Ветеран ✯
Сообщения: 1376
Зарегистрирован: 24 Март 2009, 17:59
Откуда: НН
Благодарил (а): 7 раз
Поблагодарили: 1 раз
Контактная информация:

Библиотеку работы с дробями никто не встречал?

Сообщение RaFaeL »

Yufil писал(а): 21 Август 2019, 16:15Если не секрет, зачем ?
Размещение рекламы на странице задается в виде дроби, типа 1/4 страницы, 1/3 страницы, просят выводить что заполнено 2/3, а не 0,67 (самый простой пример)
Аватара пользователя
vic7tar
Ветеран
Сообщения: 365
Зарегистрирован: 09 Февраль 2017, 20:12

Библиотеку работы с дробями никто не встречал?

Сообщение vic7tar »

Admin писал(а): 21 Август 2019, 15:48Вот заготовка:
Admin, не скромничай.
Yufil писал(а): 21 Август 2019, 16:15Я делал что-то похожее ( с переменными, раскрытием и сокращениум многочленов ) в начале 80-х, писал на Фортране, был некий конкурс молодых программистов...
Просто ради справки... В начале 80? Конкурс молодых программистов? Это где было?
C10, Win10x64
Yufil
Ветеран движения
Сообщения: 1277
Зарегистрирован: 16 Май 2006, 14:34
Контактная информация:

Библиотеку работы с дробями никто не встречал?

Сообщение Yufil »

Было в Саратове, что там было на самом деле - ХЗ, позвонили и пригласили поучаствовать. Я поучаствовал, сдал работу. И всё заглохло.... Абыдно было :(
Аватара пользователя
Admin
Администратор
Сообщения: 3959
Зарегистрирован: 05 Июль 2005, 15:59
Откуда: Хабаровск
Благодарил (а): 25 раз
Поблагодарили: 22 раза
Контактная информация:

Библиотеку работы с дробями никто не встречал?

Сообщение Admin »

vic7tar писал(а): 21 Август 2019, 16:29Admin, не скромничай.
Только что накатал с какого то примера в инете.
Реально заготовка. Там с целыми х.з. как работать.
Сам я в дробях не шарю вообще :)
Рай совершает ошибки ничуть не реже чем ад. Просто у него хорошая пресса
kreator
✯ Ветеран ✯
Сообщения: 4960
Зарегистрирован: 28 Май 2009, 15:54
Откуда: Москва
Благодарил (а): 6 раз
Поблагодарили: 19 раз

Библиотеку работы с дробями никто не встречал?

Сообщение kreator »

RaFaeL писал(а): 21 Август 2019, 16:28
Yufil писал(а): 21 Август 2019, 16:15Если не секрет, зачем ?
Размещение рекламы на странице задается в виде дроби, типа 1/4 страницы, 1/3 страницы, просят выводить что заполнено 2/3, а не 0,67 (самый простой пример)
Не надо искать универсальный вариант. Надо плясать от минимального рекламного блока на странице. По-моему, у рекламщиков такое практикуется, можно уточнить конкретный размер. Допустим - 1/96 страницы. Заказанную площадь превращаем в дробь типа хх/96. Складываем числители. И в итоге можем получить 64/96 (переводится в 2/3), 72/96 (3/4). Знаменатель итоговой дроби считается так - 96/(96-72).
We are hard at work… for you. :)
Аватара пользователя
RaFaeL
✯ Ветеран ✯
Сообщения: 1376
Зарегистрирован: 24 Март 2009, 17:59
Откуда: НН
Благодарил (а): 7 раз
Поблагодарили: 1 раз
Контактная информация:

Библиотеку работы с дробями никто не встречал?

Сообщение RaFaeL »

Как писать, в целом, понятно. Но прежде чем начинать писать, я обычно ищу уже написанное. Часто сильно экономит время
Ответить