Рекурсивная процедура, переставляющая символы строки в обратном порядке - Free Pascal

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

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

var
  str, str1: string; n: integer;
 
procedure stroki(str: string; var str1: string);
begin
  if n < 2 then str := ''
  else
  begin
    stroki(str[n-1], str1);
    str1 := str1+str[n];
  end;
end;

begin
  readln(str);
  n := length(str);
  stroki(str, str1);
  writeln(str1);
end.
Компилятор выдает ошибку: Индекс находился вне границ массива. Что не так?

Решение задачи: «Рекурсивная процедура, переставляющая символы строки в обратном порядке»

textual
Листинг программы
procedure StrReverse(var S: string; k: integer);
var  t: char;
begin
if k<length(s) div 2 then
 begin
  t := S[k];
  S[k] := S[length(s)-k+1];
  S[length(s)-k+1] := t;
  StrReverse(s,k+1);
 end;
end;
var s: string;
begin
  S := '1234567890';
  writeln(S);
  StrReverse(S,1);
  writeln(S);
end.

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

  1. Объявлена рекурсивная процедура StrReverse для перестановки символов строки в обратном порядке
  2. В процедуре объявлена переменная t типа char
  3. Если значение k меньше половины длины строки S, то
    • Значение переменной t присваивается символу S[k]
    • Значение символа S[k] присваивается значению S[длина строки S - k + 1]
    • Значение символа S[длина строки S - k + 1] присваивается значению переменной t
    • Вызывается рекурсивная процедура StrReverse с аргументами S и k+1
  4. В основной части программы объявлена переменная s типа string со значением '1234567890'
  5. Выводится значение переменной s на экран
  6. Вызывается процедура StrReverse с аргументами s и 1
  7. Выводится значение переменной s на экран, которое должно быть '0987654321'

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


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

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

14   голосов , оценка 4.357 из 5
Похожие ответы