Evaluate binomial coefficients: Difference between revisions

no edit summary
(Add Seed7 example)
No edit summary
Line 1,548:
{{Out}}
<pre><10,118264581564861424></pre>
 
=={{header|Windows Batch}}==
<lang dos>@echo off & setlocal
 
if "%~2"=="" ( echo Usage: %~nx0 n k && goto :EOF )
 
call :binom binom %~1 %~2
1>&2 set /P "=%~1 choose %~2 = "<NUL
echo %binom%
 
goto :EOF
 
:binom <var_to_set> <N> <K>
setlocal
set /a coeff=1, nk=%~2 - %~3 + 1
for /L %%I in (%nk%, 1, %~2) do set /a coeff *= %%I
for /L %%I in (1, 1, %~3) do set /a coeff /= %%I
endlocal && set "%~1=%coeff%"
goto :EOF</lang>
 
{{Out}}
<pre>
> binom.bat 5 3
5 choose 3 = 10
 
> binom.bat 100 2
100 choose 2 = 4950
</pre>
 
The string <code>n choose k = </code> is output to stderr, while the result is echoed to stdout. This should allow capturing the result with a <code>for /f</code> loop without needing to define tokens or delims.
 
But...
 
<pre>
> binom.bat 33 17
33 choose 17 = 0
 
> binom.bat 15 10
15 choose 10 = -547
</pre>
 
The Windows cmd console only handles 32-bit integers. If a factoral exceeds 2147483647 at any point, <code>set /a</code> will choke and roll over to a negative value, giving unexpected results. Unfortunately, this is as good as it gets for pure batch. It's probably better to employ a PowerShell or JScript helper or similar instead.
 
=={{header|XPL0}}==
Anonymous user