|
такое возможно в паскале? | ☑ | ||
---|---|---|---|---|
0
program345
28.08.14
✎
13:07
|
Доброго дня!
цель: сделать инверсию символов методом рекурсии путем вызова процедуры. исполнение: var a:string; procedure revers (a:string); var b:char; c:integer; begin c:=length(a); if c=0 then write('вы не ввели число!'); b:=a[c]; write(b); c:=c-1; if c<>0 then revers(a) end; begin writeln('введите символы для инверсии: '); readln(a); revers(a); end. \________ платформа pascalabc net |
|||
1
program345
28.08.14
✎
13:08
|
почемуто не работает(
|
|||
2
Ненавижу 1С
гуру
28.08.14
✎
13:08
|
хвастаешься?
|
|||
3
Kuzmich123
28.08.14
✎
13:08
|
Ну, вообще, движешься в правильном направлнеии. Еще бы форум правильный подобрать - цены б не было.
|
|||
4
HeroShima
28.08.14
✎
13:08
|
Всё можно, только выбрось его.
|
|||
5
HeroShima
28.08.14
✎
13:10
|
А лучше сожги.
|
|||
6
dmpl
28.08.14
✎
13:11
|
(1) Как именно не работает?
|
|||
7
DirecTwiX
28.08.14
✎
13:12
|
if c<>0 then
revers(Copy(a,1,c)) |
|||
8
program345
28.08.14
✎
13:14
|
(6) зацикливание
|
|||
9
vs7719
28.08.14
✎
13:16
|
Потому что, переменная с постоянно затирается при каждом рекурсивном вызове.
|
|||
10
HeroShima
28.08.14
✎
13:17
|
(8) значит c<>0 всегда срабатывает. Это не паскаль, это логика.
|
|||
11
dmpl
28.08.14
✎
13:17
|
(8) Ну дык строка же длину не меняет, тебе надо подстроку передавать, либо начальное смещение в качестве параметра.
|
|||
12
neo_matrix_123
28.08.14
✎
13:19
|
не хватает while
|
|||
13
program345
28.08.14
✎
13:21
|
хвала DirecTwiX
вот так работает: var a:string; procedure revers (a:string); var b:char; c:integer; begin c:=length(a); if c=0 then write('вы не ввели число!'); b:=a[c]; write(b); c:=c-1; if c<>0 then revers(Copy(a,1,c)) end; begin writeln('введите символы для инверсии: '); readln(a); revers(a); end. |
|||
14
neo_matrix_123
28.08.14
✎
13:21
|
уменьшение переменной c на единицу должно быть в цикле. в виртовском паскале это было так :-)
|
|||
15
dmpl
28.08.14
✎
13:25
|
(13) Непонятно только зачем так делать. С точки зрения производительности эта реализация - адЪ.
|
|||
16
HeroShima
28.08.14
✎
13:28
|
(15) зато с рекурсией - типа круто
|
|||
17
Мутабор
28.08.14
✎
13:32
|
Раньше от таких рекурсий стек переполнялся (под досом). Я одну прогу так же написал так она после себя не давала обращаться к дискам, приходилось перезагружаться.
|
|||
18
HeroShima
28.08.14
✎
13:35
|
Глубину нужно фиксировать.
|
|||
19
Мутабор
28.08.14
✎
13:36
|
Да, вместо обхода переменной в обратном направлении рекурсия, а еще на эту же переменную :)
|
|||
20
Мутабор
28.08.14
✎
13:38
|
Не помню, в паскале индексы с 1 начинаются?
|
|||
21
program345
28.08.14
✎
13:39
|
если есть варианты как сделать без функции copy - пожалуйста.
|
|||
22
program345
28.08.14
✎
13:39
|
(20) да
|
|||
23
dmpl
28.08.14
✎
13:44
|
(21) Вместо c:=length(a) передавай c-1 в качестве параметра.
|
|||
24
DirecTwiX
28.08.14
✎
13:46
|
(21)
for i:=length(s) downto 1 do write(s[i]); |
|||
25
HeroShima
28.08.14
✎
13:46
|
(24) пошляк...
|
|||
26
program345
28.08.14
✎
13:51
|
(23) это как?
|
|||
27
dmpl
28.08.14
✎
13:55
|
(26) Тебе копия строки нужна только для того, чтобы определить индекс текущего символа. Ну так и передавай индекс.
|
|||
28
program345
28.08.14
✎
14:07
|
(27) код такой?:
var a:string; procedure revers (a:string); var b:char; c:integer; begin c:=length(a); if c=0 then write('вы не ввели число!'); b:=a[c]; write(b); c:=c-1; if c<>0 then revers(a[c-1]) end; begin writeln('введите символы для инверсии: '); readln(a); revers(a); end. не работает.. |
|||
29
vcv
28.08.14
✎
14:18
|
> сделать инверсию символов методом рекурсии
А ведь это, похоже, учебная задача. А потом такой студент устроится в 1С и накодит такими методами реальную задачу... Грустно, господа :( |
|||
30
dmpl
28.08.14
✎
14:31
|
(28) Параметров у процедуры должно быть 2: исходная строка и индекс.
|
|||
31
program345
28.08.14
✎
14:37
|
(30) что-то непонятно...
|
|||
32
dmpl
28.08.14
✎
14:46
|
(31) Зачем каждый раз вычислять c:=length(a), если мы знаем, что при каждом вызове результат будет меньше на 1? Не проще ли отнять от текущего значения c единицу и передать ее с вызовом? Будет revers(a, c-1)
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |