slib_input=$wims_read_parm
slib_type=!item 1 of $slib_input
slib_input=!item 2 to -1 of $slib_input
listsg=1,1,1,-1
!goto $slib_type


!! ----------------------------------------   produit de puissance de 10
:produit
maxp=!item 1 of $slib_input
base=!item 2 of $slib_input
!bound base between -9 and 10 default 10
!if $base isin -1,1,0
 base=10
!endif
a=!randint 1,$maxp
sg=!randitem $listsg
a=$[$sg*$a]
b=!randint 1,$maxp
sg=!randitem $listsg
b=$[$sg*$b]
!if $base<0
 base=($base)
!endif

slib_out=$base^{$a}\times $base^{$b},$[$a+($b)]

!goto end

!! --------------------------------------- inverse de puissance de 10
:inverse
maxp=!item 1 of $slib_input
base=!item 2 of $slib_input
!bound base between -9 and 10 default 10
!if $base isin -1,1,0
 base=10
!endif
a=!randint 1,$maxp
sg=!randitem $listsg
a=$[$sg*$a]
!if $base<0
 base=($base)
!endif
slib_out=\frac{1}{$base^{$a}},$[-($a)]
!goto end


!! ----------------------------------------  quotient de puissance de 10
:quotient
maxp=!item 1 of $slib_input
base=!item 2 of $slib_input
!bound base between -9 and 10 default 10
!if $base isin -1,1,0
 base=10
!endif
a=!randint 1,$maxp
sg=!randitem $listsg
a=$[$sg*$a]
b=!randint 1,$maxp
sg=!randitem $listsg
b=$[$sg*$b]
!if $base<0
 base=($base)
!endif

slib_out=\frac{$base^{$a}}{$base^{$b}},$[$a-($b)]
!goto end

!! ---------------------------------------- produit puissances et nombres
:produitcp
!distribute item $slib_input into maxp,minv,maxv,nbpr
calcnb=1
calcpuis=0
enonce=$empty
!for i=1 to $nbpr
 a=!randint $minv,$maxv
 sg=!randitem $listsg
 a=$[$sg*$a]
 p=!randint 1,$maxp
 sg=!randitem $listsg
 p=$[$sg*$p]
 text=($a\times 10^{$p})
 enonce=!append item $text to $enonce
 calcnb=$[$calcnb*($a)]
 calcpuis=$[$calcpuis+($p)]
!next i
enonce=!replace internal , by \times in $enonce
list=!replace internal . by , in $calcnb
entier=!item 1 of $list
entier=$[abs($entier)]
nbch=!charcnt $entier
deca=0
!if $nbch>1
 deca=$[$nbch-1]
!else
 !ifval $nbch=0
  deci=!item 2 of $list
  nbdec1=!charcnt $deci
  deci=$[$deci]
  nbdec2=!charcnt $deci
  deca=$[-($nbdec1-$nbdec2+1)]
 !endif
!endif
calcpuis=$[$calcpuis+($deca)]
calcnb=$[$calcnb/10^($deca)]

slib_out=$enonce,$calcnb,$calcpuis

!goto end


!! ---------------------------------------- quotient puissances et nombres
:quotientcp
!distribute item $slib_input into maxp,minv,maxv
calcnb=1
calcpuis=0
enonce=$empty
 maxfl=$[floor($minv^(1/2))]
 minfl=$[max(floor($maxv^(1/2)),2)]
 c=!randint $minfl,$maxfl
 a=!randint $minfl,$maxfl
 sg=!randitem $listsg
 a=$[$sg*$a*$c]
 sg=!randitem $listsg
 b=$[$sg*$c]
 p1=!randint 1,$maxp
 sg=!randitem $listsg
 p1=$[$sg*$p1]
 p2=!randint 1,$maxp
 sg=!randitem $listsg
 p2=$[$sg*$p2]
 enonce=\frac{$a\times 10^{$p1}}{$b\times 10^{$p2}}
 calcnb=$[$a/($b)]
 calcpuis=$[$p1-($p2)]
list=!replace internal . by , in $calcnb
entier=!item 1 of $list
entier=$[abs($entier)]
nbch=!charcnt $entier
deca=0
!if $nbch>1
 deca=$[$nbch-1]
!else
 !ifval $nbch=0
  deci=!item 2 of $list
  nbdec1=!charcnt $deci
  deci=$[$deci]
  nbdec2=!charcnt $deci
  deca=$[-($nbdec1-$nbdec2+1)]
 !endif
!endif
calcpuis=$[$calcpuis+($deca)]
calcnb=$[$calcnb/10^($deca)]

slib_out=$enonce,$calcnb,$calcpuis

!goto end

!! ---------------------------------------- produit puissances et nombres

:somme
!distribute item $slib_input into maxp,minv,maxv,nbpr,nbdec
calcnb=1
calcpuis=0
!bound nbpr between 2 and 4 default 2
!bound maxp between 3 and 10 default 8
!bound nbdec between 0 and 3 default 2
listdiv=!values 10^v for v=0 to $nbdec

!if $nbpr=2 or $nbpr=3
 listdec=0,1,-1,2
!else
 listdec=0,-1,-2,1,2
!endif
listdec=!shuffle $listdec
enonce=$empty
puis=!randint 3,$maxp
sg=!randitem $listsg
puis=$[$puis*($sg)]
calcnb=0
!for i=1 to $nbpr
 a=!randint $minv,$maxv
 sg=!randitem $listsg
 div=!randitem $listdiv
 a=$[$sg*$a/$div]
 pi=!item $i of $listdec
 p=$[$pi+($puis)]
 text=$a*10^$p
 enonce=!append item $text to $enonce
 calcnb=$[$calcnb+($a*10^($pi))]
!next i
enonce=!replace internal , by + in $enonce
enonce=!texmath $enonce
list=!replace internal . by , in $calcnb
entier=!item 1 of $list
entier=$[abs($entier)]
nbch=!charcnt $entier
deca=0
!if $nbch>1
 deca=$[$nbch-1]
!else
 !ifval $nbch=0
  deci=!item 2 of $list
  nbdec1=!charcnt $deci
  deci=$[$deci]
  nbdec2=!charcnt $deci
  deca=$[-($nbdec1-$nbdec2+1)]
 !endif
!endif
calcpuis=$[$puis+($deca)]
calcnb=$[$calcnb/10^($deca)]


slib_out=$enonce,$calcnb,$calcpuis

!goto end

!! ---------------------------------------- quotient somme et puissances
:somquo
!distribute item $slib_input into maxp,minv,maxv,nbpr,nbdec

!bound nbpr between 2 and 4 default 2
!bound maxp between 3 and 10 default 8
!bound nbdec between 0 and 3 default 2
listdiv=!values 10^v for v=0 to $nbdec
listdec=0,1,-1,2
listdec=!shuffle $listdec

calcnb=1
calcpuis=0
enonce=$empty
 maxfl=$[floor($minv^(1/2))]
 minfl=$[max(floor($maxv^(1/2)),2)]
 c=!randint $minfl,$maxfl
 a=!randint $minfl,$maxfl
 sg=!randitem $listsg
 div=!randitem $listdiv
 a=$[$sg*$a*$c/$div]
 sg=!randitem $listsg
 b=!randint $minfl,$maxfl
 div=!randitem $listdiv
 b=$[$sg*$c*$b/$div]
 sg=!randitem $listsg
 div=!randitem $listdiv
 c=$[$sg*$c/$div]
 p=!randint 1,$maxp
 p=$[$sg*$p]
 sg=!randitem $listsg
 p1d=!item 1 of $listdec
 p1=$[$p+($p1d)]
 p2d=!item 2 of $listdec
 p2=$[$p+($p2d)]
 p3=!randint 1,$maxp
 sg=!randitem $listsg
 p3=$[$p3*($sg)] 
 !if $b<0
  sg1=$empty
 !else
  sg1=+
 !endif
 enonce=\frac{$a\times 10^{$p1}$sg1$b\times 10^{$p2}}{$c\times 10^{$p3}}
 calcnb=$[($a*10^$p1d+($b*10^$p2d))/($c)]
 calcpuis=$[$p-($p3)]
list=!replace internal . by , in $calcnb
entier=!item 1 of $list
entier=$[abs($entier)]
nbch=!charcnt $entier
deca=0
!if $nbch>1
 deca=$[$nbch-1]
!else
 !ifval $nbch=0
  deci=!item 2 of $list
  nbdec1=!charcnt $deci
  deci=$[$deci]
  nbdec2=!charcnt $deci
  deca=$[-($nbdec1-$nbdec2+1)]
 !endif
!endif
calcpuis=$[$calcpuis+($deca)]
calcnb=$[$calcnb/10^($deca)]

slib_out=$enonce,$calcnb,$calcpuis

!goto end





:end






!if e+ isin $slib_out
 !goto $slib_type
!endif