Форум программистов, компьютерный форум, киберфорум
PascalABC.NET
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.69/13: Рейтинг темы: голосов - 13, средняя оценка - 4.69
0 / 0 / 3
Регистрация: 18.11.2017
Сообщений: 99

Рекурсия: напечатать в обратном порядке заданный текст

27.02.2018, 14:08. Показов 2536. Ответов 13
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Напечатать в обратном порядке заданный текст (использовать рекурсивную функцию).

помогите, пожалуйста, написать программу. чот я вообще с этой рек. функцией не врубаюсь
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
27.02.2018, 14:08
Ответы с готовыми решениями:

Удалить из списка заданный элемент, добавить в конец новый элемент, напечатать список в обратном порядке
Прошу помощи! Пусть дан циклический двунаправленный список, с информативным полем - целое число: а) удалить из списка первый...

напечатать в обратном порядке заданный во входном файле текст (за текстом следует точка ).
напечатать в обратном порядке заданный во входном файле текст (за текстом следует точка ). Помогите плз Добавлено через 3 минуты ...

Заданный во входном файле текст (за ним следует точка) распечатать в обратном порядке
2.Заданный во входном файле текст (за ним следует точка) распечатать в обратном порядке

13
 Аватар для FreudeMan
108 / 95 / 45
Регистрация: 12.09.2017
Сообщений: 1,127
27.02.2018, 14:40
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
function F (s : string): string;
var i : integer;
begin
  for i:=Length(s) downto 1 do Result:=Result+s[i];
  Writeln(Result);
end;
 
var s : string;
begin
  Write('Введите строку: ');
  Readln(s);
  F(s);
end.
1
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
 Аватар для volvo
33400 / 21510 / 8236
Регистрация: 22.10.2011
Сообщений: 36,907
Записей в блоге: 12
27.02.2018, 14:45
Это не рекурсия
0
 Аватар для FreudeMan
108 / 95 / 45
Регистрация: 12.09.2017
Сообщений: 1,127
27.02.2018, 14:51
volvo, я понял свою ошибку
0
0 / 0 / 3
Регистрация: 18.11.2017
Сообщений: 99
27.02.2018, 15:00  [ТС]
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
program reverse;
function rever(s:string):string;
begin
  Write(s[Length(s)]);
  Dec(Length(s));
  if Length(s)>=1 then rever(s);
end;
var s:string;
begin
  Write('Введите строку: ');
  Readln(s);
  Write(rever(s));
end.
вот типа такого будет код? но он мне почему-то выдает ошибку на 5-й строке. Данный объект не может быть передан как var-параметр. что не так?
0
 Аватар для FreudeMan
108 / 95 / 45
Регистрация: 12.09.2017
Сообщений: 1,127
27.02.2018, 15:07
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
function F (s : string; l : integer): string;
var c : char;
begin
  inc(l);  // l:=l+1;
  if l<=Length(s) then begin
    c:=s[l];
    Result:=Result+c;
    F(s,l);
  end;
  Write(Result);
end;
 
var s : string;
    l : integer;
begin
  Write('Введите строку: ');
  Readln(s);
  l:=0;
  F(s,l);
end.
1
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
 Аватар для volvo
33400 / 21510 / 8236
Регистрация: 22.10.2011
Сообщений: 36,907
Записей в блоге: 12
27.02.2018, 15:07
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
function rever(s : string) : string;
begin
  if s = '' then result := ''
  else result := f(copy(s, 2, length(s) - 1)) + s[1];
end;
 
var s:string;
begin
  Write('Введите строку: ');
  Readln(s);
  Write(rever(s));
end.
не выдает ошибок (правда, тестировался на FPC, а не на PABC.NET)
1
 Аватар для FreudeMan
108 / 95 / 45
Регистрация: 12.09.2017
Сообщений: 1,127
27.02.2018, 15:11
Цитата Сообщение от Алексей9912 Посмотреть сообщение
Dec(Length(s));
Ты не можешь уменьшить длину строки. Тебе нужно её присвоить какой-то переменной, а потом с ней проделывать необходимые операции. (Это моё мнение. Лучше дождаться экспертов и узнать их ответ)
0
0 / 0 / 3
Регистрация: 18.11.2017
Сообщений: 99
27.02.2018, 15:16  [ТС]
я хотел сначала присвоить значение переменной. но получается, что только со второго круга программа начнет работать, ибо значение переменной изначально не будет известно, а если в начале функции присвоить значение переменной, то получится зацикливание. как-то так.
0
 Аватар для FreudeMan
108 / 95 / 45
Регистрация: 12.09.2017
Сообщений: 1,127
27.02.2018, 15:27
Цитата Сообщение от Алексей9912 Посмотреть сообщение
если в начале функции присвоить значение переменной, то получится зацикливание
тоже столкнулся с этой проблемой сейчас и подумав, вынес этот момент в главную программу:

18-ая строка в моей программе Рекурсия: напечатать в обратном порядке заданный текст
Pascal
1
l:=0;
1
 Аватар для Hitoku
1755 / 1347 / 1407
Регистрация: 28.10.2016
Сообщений: 4,267
27.02.2018, 15:34
Ещё вариант
Pascal
1
2
3
4
5
6
function Rev(s: string; i: integer): string := i > 1 ? s[i] + Rev(s, i - 1) : s[i].ToString;
 
begin
  var s := ReadlnString;
  writeln(Rev(s, s.Length));
end.
1
0 / 0 / 3
Регистрация: 18.11.2017
Сообщений: 99
07.03.2018, 12:23  [ТС]
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
program reverse;
function rever(s:string; i:integer; l:integer):string;
var 
  c:char; {объявление переменной} 
begin
  inc(i);  
  if i<=l then begin
    c:=s[i];
    s[i]:=s[l];
    s[l]:=c;
    dec(l);
    rever(s,i,l);
  end; {расчет результата}
  write(s);
end; {вывод результата в подпрограмме и завершение функции}
var
  s:string;
  i, l:integer;{объявление переменных}
begin
  write('Введите строку: ');
  readln(s); {ввод данных}
  l:=length(s);
  i:=0;
  rever(s,i,l); {вывод результата}
end.

Ввод: Введите строку: привет
Вывод:тевирптевирптеиврптривеп


помогите пожалуйста разобраться почему результат дублируется, а последний дубль и вовсе неправильный?
0
 Аватар для FreudeMan
108 / 95 / 45
Регистрация: 12.09.2017
Сообщений: 1,127
07.03.2018, 14:15
Прогони свою программу через отладчик, полезная вещь. Сразу поймёшь в чём была ошибка.
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
program reverse;
function rever(var s:string; i:integer; l:integer):string;
var 
  c:char; {объявление переменной} 
begin
  inc(i);  
  if i<=l then begin
    c:=s[i];
    s[i]:=s[l];
    s[l]:=c;
    dec(l);
    rever(s,i,l);
  end; {расчет результата}
  //write(s);
end; {вывод результата в подпрограмме и завершение функции}
var
  s:string;
  i, l:integer;{объявление переменных}
begin
  write('Введите строку: ');
  readln(s); {ввод данных}
  l:=length(s);
  i:=0;
  rever(s,i,l); {вывод результата}
  writeln(s);
end.
В твоём коде строка s неоднократно выводилась и в разном виде, так как, после того как функция вызвала саму себя, то предыдущая функция ждёт окончания внутренней. Рекурсия работает по принципу матрёшки.
Сначала ты залазишь в самую глубь, а потом постепенно вылазишь обратно.
У тебя в коде вывод строки (строка 14) находится внутри рекурсивной функции, поэтому происходит вот это:
1-ый вызов
внутри 1-ой вызывается 2-ой раз
внутри 2-ой вызывается 3-ий раз
внутри 3-ей вызывается 4-ый раз
...
конец 3-его вызова
вывод строки s
конец 2-ого вызова
вывод строки s
конец 1-ого вызова
вывод строки s

Для того чтобы это не происходило, я вытащил вывод строки в главную программу.
Изменения:
1. var в параметрах функции.
2. убрал строку 14 (write(s)) из функции.
3. добавил writeln(s) в главной программе.
1
Status 418
Эксперт Python
4584 / 2350 / 601
Регистрация: 26.11.2017
Сообщений: 5,262
Записей в блоге: 3
07.03.2018, 17:50
Pascal
1
2
3
4
function Rev(s: string): string := s > '' ? Rev(s?[2:]) + s?[:2] : '';
begin
  Rev(ReadString).Print
end.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
07.03.2018, 17:50
Помогаю со студенческими работами здесь

Динамические структуры. Заданный во входном файле текст(за ним следует точка) распечатать в обратном порядке
Тема: Динамические структуры. Заданный во входном файле текст (за ним следует точка) распечатать в обратном порядке.

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

Дана строка текста, оканчивающаяся точкой. Напечатать этот текст в обратном порядке
Дана строка текста, оканчивающаяся точкой. Напечатать этот текст в обратном порядке. Помогите, пожалуйста, решить с помощью рекурсий на...

Рекурсия (напечатать в обратном порядке заданный текст)
помогите с задачей пожалуйста! нужно напечатать в обратном порядке заданный текст (за текстом следует точка). используя механизм...

Рекурсия. Напечатать в обратном порядке заданный текст
Помогите плз. Нужно напечатать в обратном порядке заданный текст (за текстом следует точка), используя механизм рекурсии и через цикл.


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
14
Ответ Создать тему
Новые блоги и статьи
Как я обхитрил таблицу Word
Alexander-7 21.03.2026
Когда мигает курсор у внешнего края таблицы, и нам надо перейти на новую строку, а при нажатии Enter создается новый ряд таблицы с ячейками, то мы вместо нервных нажатий Энтеров мы пишем любые буквы. . .
Krabik - рыболовный бот для WoW 3.3.5a
AmbA 21.03.2026
без регистрации и смс. Это не торговля, приложение не содержит рекламы. Выполняет свою непосредственную задачу - автоматизацию рыбалки в WoW - и ничего более. Однако если админы будут против -. . .
Программный отбор значений справочника
Maks 21.03.2026
Установка программного отбора значений справочника "Сотрудники" из модуля формы документа. В качестве фильтра для отбора служит предопределенное значение перечислений. Процедура. . .
Переходник USB-CAN-GPIO
Eddy_Em 20.03.2026
Достаточно давно на работе возникла необходимость в переходнике CAN-USB с гальваноразвязкой, оный и был разработан. Однако, все меня терзала совесть, что аж 48-ногий МК используется так тупо: просто. . .
Оттенки серого
Argus19 18.03.2026
Оттенки серого Нашёл в интернете 3 прекрасных модуля: Модуль класса открытия диалога открытия/ сохранения файла на Win32 API; Модуль класса быстрого перекодирования цветного изображения в оттенки. . .
SDL3 для Desktop (MinGW): Рисуем цветные прямоугольники с помощью рисовальщика SDL3 на Си и C++
8Observer8 17.03.2026
Содержание блога Финальные проекты на Си и на C++: finish-rectangles-sdl3-c. zip finish-rectangles-sdl3-cpp. zip
Символические и жёсткие ссылки в Linux.
algri14 15.03.2026
Существует два типа ссылок — символические и жёсткие. Ссылка в Linux — это запись в каталоге, которая может указывать либо на inode «файла-ИСТОЧНИКА», тогда это будет «жёсткая ссылка» (hard link),. . .
[Owen Logic] Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора
ФедосеевПавел 14.03.2026
Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора ВВЕДЕНИЕ Выполняя задание на управление насосной группой заполнения резервуара,. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru