Перебор вариантов |
Previous Top Next |
Code: |
{ Если Х - количество видов букв, из которых состоит генеримое слово, а Y - максимальная длинна слова, то общее количество сгенеренных слов равно: Z = Y^1 + Y^2 + ... + Y^X }
var Gen_Length: Byte; { максимальная длинна слова для генерации } Gen_CharArray: String; { массив символов, из которых будет сгенерированы слова } InS: String; { строка, из которой будет создан массив Gen_CharArray } I: Byte; { счётчик } F: Text; { файл для сохранения сгенерированных слов }
{ рекурсивная процедура генерации слова } procedure GenNext(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 GenNext(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 - пока строка пуста } GenNext(1, '');
Close(F); end. |
Автор: --= Eagle =--
©Drkb::04182