Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Закрытая тема
Ваша тема закрыта, почему это могло произойти? Возможно,
Нет наработок или кода, если нужно готовое решение - создайте тему в разделе Фриланс и оплатите работу.
Название темы включает слова - "Помогите", "Нужна помощь", "Срочно", "Пожалуйста".
Название темы слишком короткое или не отражает сути вашего вопроса.
Тема исчерпала себя, помните, один вопрос - одна тема
Прочитайте правила и заново правильно создайте тему.
 
Опции темы Поиск в этой теме
Старый 29.12.2011, 20:51   #1
glebast
Форумчанин
 
Аватар для glebast
 
Регистрация: 10.12.2011
Сообщений: 154
Восклицание Что то в функции!

Привет! Помогите пожалуйста мне разобраться.
Объясните мне подробно что делает эта функция:
Код:
Function Palindrom(S: String):Boolean; 
Var
  len: integer;

Begin

  len := length(s);
  Palindrom := (len <= 1) Or (s[1] = s[len]) And Palindrom(Copy(s,2,len - 2));

End;
и что такое Palindrom(Copy(s,2,len - 2))
glebast вне форума
Старый 29.12.2011, 20:55   #2
whatever
a.k.a. Skull
Форумчанин
 
Регистрация: 17.11.2009
Сообщений: 963
По умолчанию

Palindrom здесь - рекурентная функция, т.е. вызывающая сама себя.
Код:
Palindrom(Copy(s,2,len - 2))
Вот здесь она ИЗ себя вызывает СЕБЯ, но уже с входным параметром Copy(s,2,len - 2), т.е. укороченая начальная строка.
Все тривиальное просто
whatever вне форума
Старый 29.12.2011, 21:10   #3
ViktorR
Старожил
 
Регистрация: 23.10.2010
Сообщений: 2,378
По умолчанию

Код:
Function Palindrom(S: String):Boolean; {заголовок функции, возвращающей true или false}
Var
  len: integer; {описание внутренней переменной}

Begin

  len := length(s); {размер строки, переданной в функцию}
  Palindrom := (len <= 1) Or (s[1] = s[len]) And Palindrom(Copy(s,2,len - 2));
{выполнение логического оператора:
(длина строки 0 или 1 символ) ИЛИ (первый элемент равен последнему} И Palindrom(Copy(s,2,len - 2))
Palindrom(Copy(s,2,len - 2)) - Рекурсивный вызов функции Palindrom.
Функция вызывается с новой строкой,  у которой первый и последний символы удалены.
Copy(s,2,len - 2) - копировать со второго символа до предпоследнего
}
End;
В результате рекурсивного вызова будут последовательно проверяться на равенство первый и последний символы, пока не проверятся все такие пары до середины и длинна строки станет равной 0 - четное кол-во символов, или 1 - нечетное кол-во символов.
Т.к. используется оператор AND, то несовпадение на любом этапе вложенности породит значение False и в результате получим отрицательный результат - строка не Полиндром (перевертыш).
Как-то так, ...
ViktorR вне форума
Закрытая тема


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
что не так в функции cargo29 PHP 3 19.10.2011 05:57
что делают функции CodeNOT Общие вопросы C/C++ 5 19.05.2011 15:24
построение графика функции. что не правильно? Irishka.k Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 0 23.05.2010 00:36
Я что то забыл?Функции не хватает параметров... Студло Помощь студентам 16 15.02.2010 00:10
А что, в Delphi нет функции CreateJobObject Altera Win Api 5 20.12.2009 19:58