
Программирование метода проверки палиндрома
Программную реализацию метода проверки палиндрома в символьной строке, подготовленной функцией preparator в ходе предварительной обработки аргументов командной строки программы PALINDROME, должна обеспечивать локальная функция comparison. Через формальные параметры ей необходимо передать адрес и длину символьной строки, сформированной в функции preparator и сохраненной в адресном пространстве формальных параметров основной функции main. Это значит, что в функцию comparison следует передать значение параметра argc для идентификации длины проверяемой символьной строки и адрес argv[0] для доступа к содержимому проверяемой строки символов. Результат проверки палиндрома должен передаваться в функцию main через целочисленный код возврата. Сам процесс выполнения проверки палиндрома в функции comparison состоит из 2-х операций: реверс и сравнение.
Операция реверса должна обеспечить запись символов проверяемой строки, индексы которых не меньше половины длины строки, в обратном порядке. Такое преобразование можно осуществить путем циклического сдвига влево символов реверсируемой половины строки, используя библиотечную функцию strncpy на каждой итерации цикла сдвига для копирования всех символов сдвигаемой части строки на одну позицию влево. При этом необходимо сохранить начальный символ сдвигаемой половины строки, чтобы получить возможность записать его в последнюю позицию фрагмента сдвига.
Процедура сравнения должна обеспечивать проверку эквивалентности обеих половин символьной строки, сформированной процедурой реверсирования. Диапазон сравнения определяется величиной половины длины проверяемой символьной строки. Программную реализацию сравнения должна обеспечивать библиотечная функция strncmp. Ее целочисленный код возврата определяет результат сравнения и, соответственно, результат проверки палиндрома в строке символов, адресуемой в функцию comparison.
Полученный результат сравнения должен передаваться через целочисленный код возврата функции comparison оператору return, который завершает спецификацию основной функции main, обеспечивая возможность числовой идентификации проверки палиндрома в операционной среде вызова программы PALINDROME.
Порядок разработки программы
Процесс разработки программы PALINDROME должен включать три стандартных этапа: подготовка исходного кода, трансляция его в исполняемый модуль и тестирование работы исполняемого модуля. Выполнение указанных этапов может производиться в среде любой реализации OS UNIX, в дистрибутиве которой предусмотрена поддержка инструментальных средств разработки прикладного программного обеспечения.
Для подготовки исходного кода программы PALINDROME может быть применен любой доступный текстовый редактор OS UNIX, например, vi, emacs, jed, joe, microemacs при работе в консольном режиме или xedit, при работе в операционной среде X Window System. Исходный код программы PALINDROME необходимо сосредоточить в текстовом файле, который следует сохранить под именем palindrome.c в любом доступном для записи каталоге файловой системы OS UNIX. Например, вызов экранного редактора joe для подготовки исходного кода программы в текущем каталоге обеспечивает команда:
$ joe palindrome.c
Для трансляции исходного кода программы PALINDROME необходимо применить инструментальные средства компилирующей системы программирования C в формате следующей командной строки:
$ cc -o palindrome palindrome.c
После вызова этой команды при отсутствии ошибок компиляции и компановки в текущем каталоге файловой системы OS UNIX создается выполняемый файл с именем palindrome. Полученный исполняемый код может быть вызван для выполнения в командной строке c требуемым набором аргументов.
Например, проверку палиндрома "Madam I'm Adam" обеспечивается следующая командная строка, согласно которой программе PALINDROME передается три аргумента:
$ palindrome Madam I\'m Adam
Следует отметиь, что в этой командной строке служебный символ обратной дробной черты '\' отменяет специальное действие металитеры одинарной кавычки в среднем аргументе. Кроме того, данная последовательность, как и любая другая, состоящая из нескольких алфавитно-цифровых фрагментов, может быть передана для обработки одним аргументом, если она заключена в двойные кавычки ("). В этом случае командная строка вызова программы PALINDROME должна иметь следующий формат:
$ palindrome "Madam I'm Adam"
Необходимый для анализа результата проверки код завершения программы PALINDROME, так же как и код возврата любой другой программы OS UNIX, автоматически сохраняется в предопределенной переменной окружения $?, которая поддерживается любым командным процессором. Ее значение можно отобразить через поток стандартного вывода, например, с помощью команды echo следующим образом:
$ echo $?
Следует отметить, что можно совместить вызовы программы PALINDROME и команды echo в одной командной строке, используя следующую инструкцию:
$ palindrome Madam I\'m Adam; echo $?
В любом из рассмотренных вариантов командной строки, реализующей вызов программы PALINDROME и визуализацию результата проверки, для заданной последовательности "Madam I'm Adam" в потоке стандартного вывода будет отображено значение 0, потому что она является текстовым палиндромом.