Перебор вариантов

Перебор вариантов

{ Если Х - количество видов букв, из которых состоит генеримое слово,
 а Y - максимальная длинна слова, то общее количество сгенеренных
 слов равно: Z = Y^1 + Y^2 + ... + Y^X }

var
 Gen_Length: Byte; { максимальная длинна слова для генерации }
 Gen_CharArray: String; { массив символов, из которых будет сгенерированы слова }
 InS: String; { строка, из которой будет создан массив Gen_CharArray }
 I: Byte; { счётчик }
 F: Text; { файл для сохранения сгенерированных слов }
{ рекурсивная процедура генерации слова }
procedure Gen(Gen_LastCharNo: Byte; Gen_Str: String);
var
 I: Byte; { счётчик }
begin
 { генерируем до тех пор, пока не достигнем последнего символа в массиве генерации }
 for I := 1 to Byte(Gen_CharArray[0]) do
  begin
  { устанавливаем длинну строки слова, которое сейчас сгенерируем }
  Byte(Gen_Str[0]) := Gen_LastCharNo;
  { изменяем последний символ генерируемого слова, которое нам передано
  в заголовке процедуры }

  Gen_Str[Gen_LastCharNo] := Gen_CharArray[I];
  { слово сгенерировано, записываем в файл }
  WriteLn(F, Gen_Str);
  { если мы не достигли максимальной длинны слова, вызываем себя рекурсивно,
  указав, что уже следующи символ будет последним и передавая уже
  сгенерированный кусок строки }

  if Gen_Length > Gen_LastCharNo then Gen(Gen_LastCharNo+1, Gen_Str);
  end;
end;
begin
 Gen_CharArray := 'DELPHI';
 { в примере максимальная длинна слова для генерации равна длинне массива символов }
 Gen_Length := Byte(Gen_CharArray[0]);
 Assign(F, 'OUTPUT.TXT');
 ReWrite(F);
 { запускаем генерацию
  Gen_LastCharNo - последний символ будет иметь номер 1
  Gen_Str - пока строка пуста }

 Gen(1, '');
 Close(F);
end.
Автор: --= Eagle =--

Отправить комментарий

Проверка
Антиспам проверка
Image CAPTCHA
...