N-operations.frac.mg.dot

1
Составные выражения, состоящие из нескольких операций (десятичные дроби)
Версия 1.3 от 01.08.2013.
Генерация задач: <Ctrl> + <Alt> + <0>.
Удаление последней задачи: <Ctrl> + <Alt> + <Backspace>.
Красным цветом выделены параметры, задаваемые пользователем.
{first} = 1 & {last} = 2 & {packet} = 1 & {limit} = 5000 & {random} = 1 & {info} = 0
{cap}=0 & {before} = & {after} = & {title} = Найти значение выражения & {qnum} = 0
 {n} = 6
{b*1} = 30
{b+1} = 200
{b*2} = 250
{b+2} = 600
{b3} = 1000
&! (примерное) число арифметических операций
&! верхняя граница 1-й зоны умножения/деления
&! верхняя граница 1-й зоны сложения/вычитания
&! верхняя граница 2-й зоны умножения/деления
&! верхняя граница 2-й зоны сложения/вычитания
&! верхняя граница 3-й зоны: вычисление проводятся в пределах {b3}
&! должно быть: 1 < {b*1} < {b*2} < {b3}
&! должно быть: 1 < {b+1} < {b+2} < {b3}
&! числа в первой зоне получаются только вычитанием/делением
&! числа во третьей зоне получаются только сложением/умножением
&! числа во второй зоне получаются любым из 4-х действий
{FractMultDiv} = 50
&! доля операций умножения и деления в процентах
{order} = 0
&! =0 - произвольный порядок операций,
&! =1 - строго слева направо
&! =2 - строго справа налево
{shmin} = -4
&! минимальный сдвиг запятой
{shmax} = 1
&! максимальный сдвиг запятой
{first} = 1
{goto} = question
{Expand}
&! in: {a?}, {j?}, {MultDiv0}; out: {b?}, {c?}, {o?}, {op?}, {subst?}
{MultDiv} = ({MultDiv0} > -1) [of] {MultDiv0}, ({FractMultDiv} > (0 [to] 99))
{MultDiv0} = -1
{b1} = {MultDiv} [of] {b*1}, {b+1}
{b2} = {MultDiv} [of] {b*2}, {b+2}
{up} = {MultDiv} [of] {div}, {min}
{down} = {MultDiv} [of] {mult}, {plus}
{op?}=({a?} < {b1}) [of] {up},
{op?}=(({op?}[eq] ) [and] ({a?} < {b2})) [of] ((1 [to] 2) [of] {up}, {down}), {op?}
{op?}=({op?} [eq] ) [of] {down}, {op?}
{o?} ={op?}
{subst?} = {({j?} + 1)}{op?}{{j?}}
{goto} = ({op?} [eq] {mult}) [of] , endmult
{kmax?} = ({a?} ^ 0.5) : 1
{factors?} = 1
{k?} = 1
2
{loopmult}
{k?} = {k?} + 1
{goto} = (({a?} % {k?}) = 0) [of] , jumpmult
{factors?} = {factors?}, {k?}
{jumpmult}
{goto} = ({k?} < {kmax?}) [of] loopmult, endloopmult
{endloopmult}
{nfact?} = [count] {factors?}
{goto} = ({nfact?} = 1) [of] , normalcase
{b?} = 2 [to] {kmax?}
{c?} = {a?} : {b?}
{r?} = {a?} % {b?}
{goto} = (1 [to] 2) [of] , noswap
{tmp?} = {b?}
{b?} = {c?}
{c?} = {tmp?}
{noswap}
{subst?} = {({j?} + 1)}{mult}{{j?}}{plus},{r?}
{op?} = {plus}
{extra} = {extra} + 1
{goto} = {return}
{normalcase}
{b?} = (2 [to] {nfact?}) [of] {factors?}
{c?} = {a?} : {b?}
{goto} = (1 [to] 2) [of] , noswap1
{tmp?} = {b?}
{b?} = {c?}
{c?} = {tmp?}
{noswap1}
{goto} = {return}
{endmult}
{goto} = ({op?} [eq] {div}) [of] , enddiv
{b?} = (2*{a?}) [to] {b3}
!{ratio} = ({b2} − (2*{a?})) / ({b2} − {b1})
!{b?} = ({ratio} > 0) [of] ( \
(({ratio}*100) > (0 [to] 99)) [of] (({a?}*2) [to] {b2}), (({b2}+1) [to] {b3})\
), ((2*{a?}) [to] {b3})
{c?} = {b?} : {a?}
{b?} = {c?} * {a?}
{goto} = {return}
{enddiv}
{goto} = ({op?} [eq] {plus}) [of] , endplus
{b?} = ({a?} < {b*2}) [of] ((1 [to] 2) [of] (2 [to] {b*1}), (2 [to] ({a?}−2))),
{b?} = ({b?} [eq] ) [of] \
((1 [to] 3) [of] (2 [to] {b*1}), (({b*1}+1) [to] {b*2}), (2 [to] ({a?}−2))), {b?}
{c?} = {a?} − {b?}
{goto} = (1 [to] 2) [of] , noswap2
{tmp?} = {b?}
{b?} = {c?}
{c?} = {tmp?}
3
{noswap2}
{goto} = {return}
{endplus}
{goto} = ({op?} [eq] {min}) [of] , endmin
{bmax?} = (({a?}+2) < {b3}) [of] {b3}, ({a?} + 2)
{b?} = ({a?} < {b*1}) [of] \
((1 [to] 2) [of] (({a?}+2) [to] {b3}), (({a?}+2) [to] {b*2})),
{b?} = ({b?} [eq] ) [of] (({a?}+2) [to] {bmax?}), {b?}
{c?} = {b?} − {a?}
{goto} = {return}
{endmin}
{error} = impossible
{goto} = {return}
{begin}
{extra} = 0
{X} = 0
{MultDiv0} = {FractMultDiv} > (0 [to] 99)
{b1} = {MultDiv0} [of] {b*1}, {b+1}
{b2} = {MultDiv0} [of] {b*2}, {b+2}
{res} = (1 [to] 3) [of] (2 [to] ({b1}−1)), ({b1} [to] ({b2}−1)), ({b2} [to] {b3})
{L} = , {res},
{P} = {shmin} [to] {shmax}
{res1} = {res} * (10 ^ {P})
{i} = 0
{loop}
{i} = {i} + 1
{Lm} = ([count] {L}) : 3
{try}
{Li} = {order} [of] {Lm}, {i}, (1 [to] {Lm})
{Ln} = 3*({Li} − 1)
{goto} = ((({Ln} + 3) [of] {L}) [eq] ) [of] , try
{op} = ({Ln} + 1) [of] {L}
{ev} = ({Li} % 2) = 0
{a?} = ({Ln} + 2) [of] {L}
{j?} = 2*{i} &{return} = here
{goto} = Expand & {here}
{br1} = {op} [eq] {div}
{br2} = ({op} [eq] {mult}) [and] (({op?} [eq] {plus}) [or] ({op?} [eq] {min}))
{br3} = ({ev} [and] ({op} [eq] {min})) [and] (({op?} [eq] {plus}) [or] ({op?} [eq] {min}))
{br4} = ({op} [eq] {mult}) [and] ({op?} [eq] {div})
{[} = (({br1} [or] {br2}) [or] ({br3} [or] {br4})) [of] [,
{]} = ({[} [eq] ) [of] , ]
{Pa} = {Li} [of] {P}
{Pb} = (({o?} [eq] {plus}) [or] ({o?} [eq] {min})) [of] {Pa},
{Pc} = (({o?} [eq] {plus}) [or] ({o?} [eq] {min})) [of] {Pa},
4
{Pmin} = (({Pa}−{shmax}) < {shmin}) [of] {shmin}, ({Pa}−{shmax})
{Pmax} = (({Pa}−{shmin}) > {shmax}) [of] {shmax}, ({Pa}−{shmin})
{Pb} = ({o?} [eq] {mult}) [of] ({Pmin} [to] {Pmax}), {Pb}
{Pc} = ({o?} [eq] {mult}) [of] ({Pa}−{Pb}), {Pc}
{Pmin} = (({Pa}+{shmin}) < {shmin}) [of] {shmin}, ({Pa}+{shmin})
{Pmax} = (({Pa}+{shmax}) > {shmax}) [of] {shmax}, ({Pa}+{shmax})
{Pb} = ({o?} [eq] {div}) [of] ({Pmin} [to] {Pmax}), {Pb}
{Pc} = ({o?} [eq] {div}) [of] ({Pb}−{Pa}), {Pc}
{P} = {P}, {Pc}, {Pb}
{goto} = (([count] {subst?}) = 1) [of] subst-ok,
{subst?} = (1 [of] {subst?})((2 [of] {subst?}) * (10 ^ {Pa}))
{subst-ok}
{L} = ({Ln} + 3), {[}{subst?}{]} [put] {L}
{L} = {L}, {o?}, {c?}, , {o?}, {b?},
{goto} = ({i} < {n}) [of] loop, endloop
{endloop}
{Lm} = ([count] {L}) : 3
{expression} = {1}
{i} = 0
{loop1}
{i} = {i} + 1
{j} = 3*{i}
{new} = (({j} [of] {L}) [eq]) [of] ((({j}−1) [of] {L}) * (10 ^ ({i} [of] {P}))), ({j} [of] {L})
{new} = (({i} = {Lm}) [and] {X}) [of] X, {new}
{expression} = \{{i}}\{new}\ [subst] {expression}
{goto} = ({i} < {Lm}) [of] loop1, endloop1
{endloop1}
[ =>(
] =>)
{mult} => ∙
{div}=> ∕
{plus} => +
{min} => −
{question}
 {goto} = {first} [of] , continue
{first} = 0
{goto} = begin
{continue}
{expression} = \.\,\ [subst] {expression}
{res1} = \.\,\ [subst] {res1}
Стандартное выражение приблизительно в {n} действий
1)
| {expression}. | {res1}.
5
 {goto} = {first} [of] , continue
{first} = 0
{order} = 1
{FractMultDiv} = 100
{goto} = begin
{continue}
{goto} = ({extra} > 0) [of] begin,
{expr} = \[\\ [subst] {expression}
{expr} = \]\\ [subst] {expr}
{expr} = \{mult}\,{mult},\ [subst] {expr}
{expr} = ({mult},)(\{div}\,{div},\ [subst] {expr})
{i} = 0
{nom} = _
{den} = _
{nnom} = 0
{nden} = 0
{loop2}
{nom} = ((({i}+1) [of] {expr}) [eq] {mult}) [of] {nom}{mult}(({i}+2) [of] {expr}), {nom}
{nnom} = ((({i}+1) [of] {expr}) [eq] {mult}) [of] ({nnom}+1), {nnom}
{den} = ((({i}+1) [of] {expr}) [eq] {div}) [of] (({i}+2) [of] {expr}){mult}{den}, {den}
{nden} = ((({i}+1) [of] {expr}) [eq] {div}) [of] ({nden}+1), {nden}
{i} = {i} + 2
{goto} = ({i} < ([count] {expr})) [of] loop2,
{endloop2}
{goto} = ({nden} = 0) [of] begin,
{[n} = ({nnom} > 1) [of] [,
{]n} = ({nnom} > 1) [of] ],
{[d} = ({nden} > 1) [of] [,
{]d} = ({nden} > 1) [of] ],
{nom} = \.\,\ [subst] {nom}
{den} = \.\,\ [subst] {den}
{res1} = \.\,\ [subst] {res1}
_{mult} =>
{mult}_ =>
Большая дробь вида (a*b*c*...) / (z*y*x*...)
2)
|{[n}{nom}{]n}{div}{[d}{den}{]d}. | {res1}