Карта сайта Kansoftware
НОВОСТИУСЛУГИРЕШЕНИЯКОНТАКТЫ
KANSoftWare

Получать слова нужной длины при перестановке букв в указанном слове

Delphi , Синтаксис , Текст и Строки

Получать слова нужной длины при перестановке букв в указанном слове

Оформил: DeeCo
Автор: http://www.swissdelphicenter.ch

{ 
  Definition: Permutation 

  A permutation is an arrangement of n objects, arranged in groups of size r 
  without repetition where order is important. 

  P(n,r) = n! / (n-r)! 

  Example: Find all two-letter permutations of the letters "ABC" 

  n = ABC 
  r = 2 
   
  Output: AB  AC  BA  BC  CA  CB 
}


 { 
  Definition: Permutation 

  Eine Permutation ist eine Anordnung von n Objekten ohne Wiederholung. 
  Dabei spielt die Reihenfolge der Elemente in den Mengen keine Rolle. 

  P(n,r) = n! / (n-r)! 

  Beispiel: Finde alle 2-Buchstaben Kombinationen von "ABC" 

  n = ABC 
  r = 2 

  Ergebnis: AB  AC  BA  BC  CA  CB 
}


 { 
  The following is a console Program: 
  Choose File, New, Console Application 

}


    program Permute;
 {$APPTYPE CONSOLE}

 uses SysUtils;

 var
    R, Slen: Integer;

 procedure P(var A: string; B: string);
 var
    J: Word;
   C, D: string;
 begin
   { P(N,N) >>  R=Slen  }
   if Length(B) = SLen - R then
    begin
     Write(' {' + A + '} '); {Per++}
   end
    else
     for J := 1 to Length(B) do
     begin
       C := B;
       D := A + C[J];
       Delete(C, J, 1);
       P(D, C);
     end;
 end;

 var
    Q, S, S2: string;
 begin
   S  := ' ';
   S2 := ' ';
   while (S <> '') and (S2 <> '') do
   begin
     Writeln('');
     Writeln('');
     Write('P(N,R)  N=? : ');
      ReadLn(S);
     SLen := Length(S);
     Write('P(N,R)  R=? : ');
      ReadLn(S2);
     if s2 <> '' then R := StrToInt(S2);
     Writeln('');
      Q := '';
      P(Q, S);
   end;
 end.

Перевод контента на русский язык:

Это консольная программа Delphi, которая генерирует все перестановки заданного строки с указанной длиной. Вот разбивка кода:

Процедура P

  • Она принимает два входных параметра: A (строка) и B (еще одна строка).
  • Если длина B равна Slen - R, она выводит перестановку A + B в консоль.
  • Иначе, она рекурсивно генерирует все перестановки B удаляя один символ за раз из B и вызывая себя с обновленными строками.

Основной программный код

  • Он инициализирует две переменные: S (пустая строка) и S2 (также пустая строка).
  • Программа вступает в цикл, который продолжается до тех пор, пока обе S и S2 не станут ненулевыми.
  • Внутри цикла она:
    • Спрашивает пользователя ввести значения N (длина оригинальной строки) и R (желаемая длина перестановки).
    • Читает ввод с помощью ReadLn.
    • Вызывает процедуру P с пустой строкой Q и входной строкой S.

Имущества 1. Программа может быть сделана более пользовательской friendly, добавив обработку ошибок для недопустимого ввода. 2. Вместо использования жесткого формата вывода (Write(' {' + A + '}');), лучше использовать форматированный вывод (WriteLn('%s', [A]);) или механизм журналирования. 3. Программа может быть оптимизирована с помощью более эффективного алгоритма генерации перестановок, например, алгоритма Steinhaus-Johnson-Trencher.

Альтернативное решение Вот пример реализации алгоритма генерации перестановок в Delphi с использованием рекурсивной функции:

program Permute;
uses SysUtils;

var
  R, Slen: Integer;
  Q, S: string;

function GeneratePermutations(const S: string; R: Integer): TStrings;
var
  i: Integer;
  Perm: string;
begin
  Result := TStringList.Create;
  if Length(S) = R then
    Result.Add(S)
  else
    for i := 1 to Length(S) do
    begin
      Perm := S[i];
      Delete(S, i, 1);
      Result.AddRange(GeneratePermutations(S, R));
      Insert(i, S, Perm); // восстановить оригинальную строку
    end;
end;

begin
  Write('Enter the length of the original string: ');
  ReadLn(Slen);
  Write('Enter the desired permutation length: ');
  ReadLn(R);
  Q := '';
  GeneratePermutations(Q, R).SaveToFile('permutations.txt');
end.

В этом коде используется рекурсивная функция GeneratePermutations для генерации всех перестановок входной строки S с указанной длиной R. Результаты перестановок хранятся в объекте TStringList и записываются в файл "permutations.txt".

Описывается программное решение для перестановки букв в указанном слове, чтобы получить слова необходимой длины.


Комментарии и вопросы

Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS




Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.


:: Главная :: Текст и Строки ::


реклама


©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007
Top.Mail.Ru

Время компиляции файла: 2024-11-30 11:42:55
2024-12-10 22:53:18/0.0055000782012939/1