Previous Page  12 / 18 Next Page
Information
Show Menu
Previous Page 12 / 18 Next Page
Page Background

Полное факториальное моделирование равномерных последовательностей…

ISSN 0236-3933. Вестник МГТУ им. Н.Э. Баумана. Сер. Приборостроение. 2017. № 5

143

int nb = n; // число объектов

int[] b = new int[nb]; // массив объектов

for (int i = 0; i < n; i++) b[i] = i + 1;

int nF = 1; // nF-факториал подпоследовательности

for (int i = 2; i <= nb; i++) nF *= i;

int iq = 0; // индекс для формируемого элемента в q

for (int z = n - 1; z > 0; z--) // цикл позиций

{ int ng = nF / nb; // число элементов в группе

int w = r / ng; // число предыдущих групп

if ((w * ng) < r) w++; // номер группы для r

int zb = w - 1; // позиция выбора из b для q

q[iq++] = b[zb]; // элемент в последовательности

for (int i = zb; i < z; i++) b[i] = b[i + 1];

r -= (w - 1) * ng; // r для следующей позиции

nb--; // на один объект меньше

nF /= z + 1; // следующий nF-факториал

}

q[n - 1] = b[0]; // последний элемент в q

}

}

}

После выполнения программы на мониторе появляется листинг:

n = 7

r = 3302

q = 5 4 3 6 1 7 2

Соответствие последовательности

q

заданному номеру

r

можно проверить

по распечатке моделирования в программе

P010301

, приведенной выше. Функ-

ция

DeonSequence()

реализует условие достаточности в доказательстве тео-

ремы об упорядоченной биекции.

В следующей программе

P010303

функция

DeonNumber()

вычисляет фак-

ториальный номер

r

функции

r

f F

для заданной равномерной последователь-

ности

,

r

d d D

 

состоящей из целых чисел множества

1,

B n

    

в модели

, ,

.

M B D F

В качестве примера использована предыдущая последователь-

ность

5, 4, 3, 6,1, 7, 2.

Пример программы

P010303

namespace P010303

{ class P010303

{ static void Main(string[] args)

{ int[] q = new int[] { 5, 4, 3, 6, 1, 7, 2 };

int n = q.Length; // длина последовательности

Console.WriteLine("n = {0}", n); // монитор

Console.Write("q = ");

for (int i = 0; i < n; i++)

Console.Write("{0,4}", q[i]);

int r = DeonNumber(q); // номер последовательности

Console.WriteLine("\nr = {0}", r); // монитор

Console.ReadKey(); // просмотр результата