ГОСТ ISO/1EC 24724—2011
{
ini val = 0:
into;
int bar;
ini elmWidth;
int i;
int mxwElement;
int subVal. lessVal:
int narrowMask = 0;
for (n = i = 0; i < elements; i++)
{
n += widths(i):
}
for (bar = 0; bar < etements-1; bar++)
{
for (elmWidth = 1, narrowMask |= (1«bar);
elmWidth < widths[bar];
elmWidth++, narrowMask &= -(1«bar)) {
Л получение всех комбинаций nk 7
subVal = combins(n-elmWtdth-1. elements-bar-2);
Г исключение комбинаций с отсутствующими узкими элементами 7
if ((InoNarrow) && (narrowMask == 0) &&
(n-elmWidth-(elements-bar-1)>= elements-bar-1))
{
subVal -= combins(n-elmWidth-(elements-bar), elements-bar-2);
}
Г исключение комбинаций с шириной элемента более допустимой > maxVal V
if (elements-bar-1 > 1)
{
lessVal = 0;
for (mxwElement = n-elmWidth-(elements-bar-2);
mxwElement > maxWidth: mxwElement--)
{
lessVal += combins(n-elmWkJth-mxwElement-1. elements-bar-3);
}
subVal -= lessVal * (elements-1-bar);
}
else if (n-elmWidth > maxWidth)
{
subVal--;
}
val += subVal;
}
n -= elmWidth;
}
return (val);
}
/..........*........................................................................*.......*
.......
*
* компоновка (n.r); возврат множества комбинаций г. выбираемых из п;
*Комбинации = п! / ((п - г)! * г!)
.........................................................
.
..................../
int combins(int п, int г) {
int i, j;
int maxDenom, minDenom;
int val;
if (n-r > r) {
minDenom =
r; maxDenom
= n-r;
}
else {
47