Печать всех перестановок чисел от 1 до 5 - Free Pascal

Узнай цену своей работы

Формулировка задачи:

Программа печатает все перестановки чисел от 1 до 5.

Решение задачи: «Печать всех перестановок чисел от 1 до 5»

textual
Листинг программы
  1. Var RS : String;
  2.  
  3. Function StRevers(St :String) : String;
  4. Var
  5.   ii  : Longint;
  6.   St0 : String;
  7. Begin
  8.   St0:='';
  9.  For ii:=length(St) downto 1 do
  10.   St0:=St0+St[ii];
  11.   StRevers:=St0;
  12. end;
  13.  
  14. Function LexNext(S : String) : String;
  15. Var
  16.   len,m,k,t : Longint;
  17.   Sch       : Char;
  18.   cs        : String;
  19.   flag      : Boolean;
  20. Begin
  21.   len:=Length(S); flag:=True;
  22.   For m:=len-1 downto 1 do
  23.     If S[m]<S[m+1] then Break;
  24.   For k:=len downto m+1 do
  25.     If S[k]>S[m] then
  26.     Begin
  27.       flag:=False;
  28.       Break;
  29.     end;
  30.   If flag then LexNext:='' else
  31.   Begin
  32.     For t:=len downto m+1 do
  33.       If (S[t]>S[m]) and (S[t]<=S[k]) then k:=t;
  34.     cs:=S;
  35.     Sch:=cs[m];
  36.     cs[m]:=cs[k];
  37.     cs[k]:=Sch;
  38.     LexNext:=Copy(cs,1,m)+StRevers(Copy(cs,m+1,len-m));
  39.   end;
  40. end;
  41.  
  42. Begin
  43.   RS:='12345';
  44.   While RS<>'' do
  45.   Begin
  46.     Writeln(RS);
  47.     RS:=LexNext(RS);
  48.   end;
  49. end.

Объяснение кода листинга программы

В этом коде используется две функции:

  1. Функция StRevers принимает строку St и возвращает её обратное представление. Эта функция инициализирует переменную St0 пустой строкой, а затем проходит по всем символам строки St в обратном порядке и добавляет каждый символ в St0. В конце функция возвращает St0.
  2. Функция LexNext принимает строку S и возвращает следующую перестановку символов в этой строке. Эта функция сначала определяет длину строки len, а затем использует два цикла for для определения текущего порядка символов. Если текущий символ меньше следующего, функция прерывает выполнение. Если текущий символ больше следующего, функция устанавливает флаг flag в false и прерывает выполнение. Если текущий символ больше или равен следующему, но меньше последнего символа, функция находит максимальную позицию этого символа и заменяет его на последний символ в текущей позиции. Функция возвращает пустую строку, если достигается конец строки, иначе возвращает переставленную строку. В основной части кода используется цикл while, который продолжает выводить текущую строку RS и вызывать функцию LexNext, пока RS не станет пустой строкой.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

10   голосов , оценка 4.2 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы