Является ли строка палиндромом паскаль

Является ли строка палиндромом паскаль

Задача

Определить, является ли строка палиндромом.

Палиндром – это число, слово или фраза, одинаково читающиеся в обоих направления.

Решение

s – строка;
f – флаг.

Алгоритм решения задачи:

  1. Брать очередной символ с начала строки и сравнивать его с противоположным.
  1. Если символы не равны, то выдать сообщение "не палиндром", изменить значение флага и остановить сравнение.
  • Если значение флага не было изменено, то выдать сообщение "палиндром".
  • Программа на языке Паскаль:

    Усложненный вариант задачи: составьте программу, позволяющую определить, будет ли введенная строка палиндромом после удаления из нее всех пробелов.

    Хотите стать программистом? Научиться писать программы? С чего начать? Давайте начнем с языка Паскаль.

    пятница, 7 ноября 2014 г.

    Занятие 9. Палиндром, или почему Аргентина манит негра?

    Сегодня мы рассмотрим еще одну стандартную олимпиадную (уровня районной олимпиады) задачу: проверить, является ли НЕЧТО палиндромом.

    Во-первых: что такое палиндром. Палиндром — это запись, которая одинаково читается слева направо и справа налево. Например, число 12321 можно считать палиндромом. Как и слово кабак. А бывают целые фразы — палиндромы: Аргентина манит негра; А роза упала на лапу Азора. Встречаются стихи — палиндромы и даже рассказы — палиндромы. О романах-палиндромах лично я не слышала, но я верю в людей.

    Во-вторых: почему НЕЧТО. Потому, что в зависимости от того, исследуем мы на палиндромность число, слово или фразу — задача может быть решена по-разному. Давайте рассмотрим все варианты решений.

    Итак, вариант 1.

    Проверить, является ли число палиндромом.

    Идея решения: вводим число a — то, которое будем проверять. Потом, используя цикл While — "пока" с помощью двух меняющихся в ходе выполнения цикла переменных b и c делаем следующую операцию: "откусываем" последнюю цифру от a и запоминаем её как временное значение c. На следующем витке цикла мы умножаем полученное ранее c на 10, и прибавляем следующую цифру. И так, пока не получим конечное число c, которое по сути является числом a, записанным задом наперед.

    Читайте также:  Просмотр видео с видеорегистратора на андроид

    Затем мы сравниваем a и c, и, если числа равны, выводим сообщение о том, что число — палиндром, или о том, что не палиндром, в противном случае.

    Перед вами результат работы программы, реализовавшей эту идею решения:

    Рассмотрим 2 вариант этой задачи.

    end. — конец программы.

    Чем интересно это решение?

    • Во-первых, мы повторили оператор div, который использовали для сокращения количества шагов в цикле. Слово проверяется за количество шагов, равное половине длины слова. Это позволяет корректно проверять слова, состоящие из нечетного количества букв. Например, слово "КАБАК" будет проверено так: сравним первую и последнюю буквы — это "К", все хорошо. Затем сравним вторую и предпоследнюю. Обе — "А". У буквы "Б" нет пары, но ее наличие не мешает слову быть палиндромом. Эту букву мы вообще не проверяем, потому, что.
    • Во-вторых мы познакомились с оператором length(s) , который считает ДЛИНУ любой переменной типа String, типа, который соответствует значению "много букв". Так вот, мы теперь можем узнать, сколько — много.
    • В-третьих посмотрите, почему цикл задан только до середины слова. На примере "КАБАК" — length(s) = 5. length(s) div 2 = 2. Именно по этой причине мы не трогали букву "Б", о чем было сказано в разделе "Во-первых".
    • В-четвертых, эта программа будет проверять ЛЮБЫЕ введенные символы. Т.е. ей будет все равно, введете вы реально существующее слово, случайный набор букв, число или смесь букв разных языков и цифр. Если введенная вами строка будет читаться одинаково с обоих концов — вам сообщат, что это — палиндром.

    Как проверить, является ли число палиндромом?

    любой язык. Любой алгоритм. (за исключением алгоритма превращения числа в строку, а затем реверсирования строки).

    Читайте также:  Импульсный блок питания википедия

    30 ответов:

    Это одна из проблем проекта Эйлера. Когда я решил в Haskell я сделал именно то, что вы предлагаете, преобразовать число в строку. Тогда тривиально проверить, что строка является паллиндромом. Если он работает достаточно хорошо, то зачем беспокоиться о том, чтобы сделать его более сложным? Быть паллиндромом-это скорее лексическое свойство, чем математическое.

    для любого заданного числа:

    если n == rev затем num — палиндром:

    работает только для целых чисел. Из постановки задачи неясно, нужно ли учитывать числа с плавающей запятой или ведущие нули.

    выше большинства ответов, имеющих тривиальную проблему, заключается в том, что переменная int, возможно, может переполниться.

    нажмите каждую отдельную цифру в стек, а затем вытащите их. Если это то же самое вперед и назад, это палиндром.

    Я не заметил никаких ответов, которые решали эту проблему, не используя дополнительного пространства, т. е. все решения, которые я видел, либо использовали строку, либо другое целое число для обратного числа, либо некоторые другие структуры данных.

    хотя языки, такие как Java, обертываются при переполнении целых чисел, это поведение не определено в таких языках, как C. [попробуйте повернуть вспять 2147483647 (целое число.MAX_VALUE) в Java] Обходной путь может быть использовать длинный или что-то еще, но стилистически мне это не совсем нравится подход.

    (12321 % 10000)/10 = (2321)/10 = 232. И теперь, 10000 должны быть уменьшены в несколько раз 2. Итак, теперь перейдем к Java-коду.

    за исключением того, чтобы сделать число строкой,а затем перевернуть строку.

    зачем отвергать это решение? это легко реализовать и читабельный. Если вас спросили без компьютера под рукой ли 2**10-23 — это десятичный палиндром, вы наверняка проверите его, записав его в десятичном формате.

    Читайте также:  Как установить мелодию на телефон айфон

    по крайней мере, в Python лозунг "строковые операции медленнее, чем арифметика" на самом деле ложен. Я сравнил арифметический алгоритм Сминка с простым разворот строки int(str(i)[::-1]) . Существенной разницы в скорости не было-случалось, что разворот струны был незначительно быстрее.

    в языках низкого уровня (C/C++) лозунг может иметь место, но один риск переполнения ошибок с большими числами.

    результаты в секундах (чем ниже, тем лучше):

    зашнурованный 1.50960231881
    арифметика 1.69729960569

    в Python, есть быстрый, итерационный способ.

    Это также предотвращает проблемы с памятью с рекурсией (например, ошибка StackOverflow в Java)

    Я ответил на проблему Эйлера, используя очень грубый способ. Естественно, был гораздо более умный алгоритм на дисплее, когда я добрался до Нового разблокированного связанного потока форума. А именно, у члена, который пошел по ручке Begoner, был такой новый подход, что я решил переопределить свое решение, используя его алгоритм. Его версия была в Python (с использованием вложенных циклов), и я переопределил ее в Clojure (используя один цикл/повторение).

    здесь для вашего развлечение:

    были также общие ответы на шепелявость, но они были для меня недоступны.

    просто для удовольствия, это тоже работает.

    вот вариант схемы, которая создает функцию, которая будет работать против любой базы. Он имеет проверку избыточности: быстро возвращает false, если число кратно базе (заканчивается на 0). И он не перестраивает все обратное число, только половину. Это все, что нам нужно.

    Ссылка на основную публикацию
    Шпионский софт родом из холода
    Borderlands: The Pre-Sequel! Разработчики 2K Australia Gearbox Software Издатели 2K Games Часть серии Borderlands Дата выпуска 17 октября 2014 года...
    Что делать если плохо работает отпечаток пальца
    Владельцы современных смартфонов на платформе Android нередко сталкиваются с тем, что сканер отпечатков пальцев реагирует недостаточно быстро и точно. Зачастую...
    Что делать если пропал звук в наушниках
    Всё о Интернете, сетях, компьютерах, Windows, iOS и Android Нет звука в наушниках на телефоне — что делать?! А Вы...
    Штампованные диски арриво отзывы
    Приветствую всех! Запись будет, как Вы уже догадались, о дисках.Дело в том, что я любитель иметь на автомобиле два комплекта...
    Adblock detector