Библиотеку работы с дробями никто не встречал?
Добавлено: 20 Август 2019, 18:05
Чтобы передать туда "1/2 + 1/3" и получить "5/6" (ну или отдельными параметрами)
Место общения программистов, форум разработчиков БД на Clarion
https://forum.clarionlife.net/
Код: Выделить всё
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())
Размещение рекламы на странице задается в виде дроби, типа 1/4 страницы, 1/3 страницы, просят выводить что заполнено 2/3, а не 0,67 (самый простой пример)
Admin, не скромничай.
Просто ради справки... В начале 80? Конкурс молодых программистов? Это где было?Yufil писал(а): 21 Август 2019, 16:15Я делал что-то похожее ( с переменными, раскрытием и сокращениум многочленов ) в начале 80-х, писал на Фортране, был некий конкурс молодых программистов...
Только что накатал с какого то примера в инете.
Не надо искать универсальный вариант. Надо плясать от минимального рекламного блока на странице. По-моему, у рекламщиков такое практикуется, можно уточнить конкретный размер. Допустим - 1/96 страницы. Заказанную площадь превращаем в дробь типа хх/96. Складываем числители. И в итоге можем получить 64/96 (переводится в 2/3), 72/96 (3/4). Знаменатель итоговой дроби считается так - 96/(96-72).