Курсовая работа: Нейминг. Разработка генератора
После разбиения всех введенных слов на слоги запускается функция группировки слогов в слова (group($k)). У неё только один входной параметр – количество слогов в новых словах.
В основе этой функции лежит алгоритм размещения с повторениями чисел 1..n в последовательности по kэлементов.[5]
Рассмотрим эту функцию.
function group($k)
{
$f=fopen("slogi.txt","rt");//откроемфайл slogi.txt
$a=explode("-",fgets($f));//запишем слоги в масс. а
fclose($f); //закроемфайл
$n=count($a)-1; //посчитаемколичествослогов
for($i=0;$i<$k;$i++){
$x[$i]=1; //зададим начальную и
$y[$i]=$n;} //конечную комбинацию чисел
while(prov($x,$y)) //пока они различны
{$p=$k; //пост. инд. в конец посл-ти
while($x[$p]==$n)//пока не найдем эл-т, отличный от
$p--; //максимального, уменьш. р
$x[$p]++; //увелич р-й эл-т послед-ти
for($i=$p+1;$i<$k;$i++)
$x[$i]=1; //все след-ие делаем единицами
if(correct($x)) //если комбинация нам подходит
{for($i=0;$i<$k;$i++) //выводим слоги с соотв.
{ print $a[$x[$i]-1];}//номерами на экран
echo "<br>";} //переход на новую строку}
Эта функция вызывает prov($x, $y)и correct($x). Функция prov($x, $y)следит за совпадением начальной и конечной комбинациями. Это осуществляется методом простого перебора всех элементов массивов x и y. Если в результате количество совпадающих элементов равно количеству элементов в любом из массивов, то возвращается 0 (и алгоритм размещений с повторениями заканчивает свою работу).
function prov($x, $y)
{
$fl=0;
for($i=0;$i<count($y);$i++)
if($x[$i]==$y[$i]) $fl++;