Практика программирования (Бейсик, Си, Паскаль)


Задачи,советы и ответы - часть 29


Совет 1 (общий)

Конечно, функцию palindrom можно построить на базе функции invert. Достаточно возвратить в качестве значения функции результат сравнения N и invert (N). Но для разнообразия мы предлагаем вам другой алгоритм, в котором формируется массив десятичных цифр числа и производится сравнение его симметрично расположенных элементов.

Совет 2 (общий)

Более компактный вариант программы можно построить, заменив цикл формирования массива десятичных цифр стандартной функцией преобразования числа в его символьный эквивалент. Такого рода функции имеются в каждом алгоритмическом языке— STR$ в QBasic, Itoa в Си, процедура str в Паскале. Один из примеров — программа 2_17a.pas —демонстрирует указанный подход. Кроме того, в ее реализации показана уникальная особенность Паскаля, позволяющего в качестве индексов у элементов массива использовать нечисловые значения.

Совет 3 (QBasic)

В программе 2_l7.bas также реализован второй подход. Но здесь следует

иметь в виду, что функция STR$ выдает результат с пробелом в первой позиции для положительных чисел. Поэтому сравнение цифр начинается со второй позиции. Для выделения симметрично расположенных цифр использована функция MID$, второй аргумент которой определяет начальную позицию в строке, а третий — количество выделяемых символов.

Программа 2_17.bas

REM Является ли введенное число палиндромом?

DECLARE FUNCTION palindrom!(NS)

СLS

DIM noyes$(2)

noyes$(0)="не"

INPUT "Введите целое число: ",М&

PRINT "Это - "; noyes$(palindrom(M&));" палиндром"

END

FUNCTION palindrom(N&)

REM Если N - палиндром, то palindrom = 1

palindrom=l

IF N&<10 THEN EXIT FUNCTION : ' Одноразрядное - всегда палиндром

s$=STR$(N&) : ' Перевод числа в строку

k%=LEN(s$)

FOR j=2 TO l+k%/2 : ' Цикл проверки симметрии цифр

IF MID$ (s$, j,l)OMID$ (s$,k%+2-j,l) THEN palindrom=0

NEXT j

END FUNCTION

Программа 2_17.с

/* Является ли введенное число палиндромом? */




- Начало -  - Назад -  - Вперед -