Главная
Статьи
Скачать документацию
Delphi
C++ Builder
Моё проектирование
Гостевая
Поддержка
Ссылка

Статьи

Тема: Как я стал полиндромом Автор: Зарема Сейдаметова
 

  Не все юные программисты любят математику; есть и такие, у которых нелады с грамотностью. Но фокусы и приключения со словами и числами, думаю, всякому интересны.

Наступил 2002 год. И, как недавно заметил Альфред Посаментиер , профессор математики и декан педагогической школы при колледже нью-йоркского университета: «Теперь можно констатировать, что мы последнее в наступившем тысячелетии поколение, прожившее сразу в двух палиндромических годах –– 1991 и 2002».

Палиндром (от греческого palindromeo –– бегу назад) –– это слово, фраза или стих, одинаково читающиеся слева направо и справа налево. В математике палиндромы (перевертыши) –– это числа, которые читаются одинаково в обоих направлениях. В русском языке хорошо известны такие перевертыши:

Кармен не мрак.

А роза упала на лапу Азора.

Аргентина манит негра.

На в лоб, болван.

Чин зван мечем навзничь (В. Хлебников).

Есть палиндромические слова и выражения и в английском языке. Например,

Madam, I'm Adam.

Nurses run.

Rotator.

Reviver.

Палиндромические числа не просто красивы, у них есть еще ряд замечательных свойств. Например, возьмем любое число и запишем его в обратном порядке. Если мы начнем эти два числа складывать, в сумме рано или поздно получим палиндромическое число. Продемонстрируем это на примерах.

Пример 1

3724 + 4273 = 7997. Ура! :-)

Пример 2

865 + 658 = 1433. Не палиндромическое число, продолжим процесс сложения .

1433 + 3341 = 4774. Ура! :-)

Пример 3

9238 + 8329 = 17567. Похоже, придется продолжить.

17567 + 76571 = 94138. Сложим еще раз.

94138 + 83149 = 177287. Дальше.

177287 + 782771 = 960058. Увы, ничего не получилось.

960058 + 850069 = 1810127.

1810127 + 7210181 = 9020308. Попробуем еще разок.

9020308 + 8030209 = 17050517. Кажется, мое терпение вот-вот лопнет.

17050517 + 71505071 = 88555588. А вот теперь действительно ура. :-)

Вот ведь она какая бывает, математика. Думаю, у тех, кто доселе был к ней равнодушен, этот фокус засветил в глазах огонек.

А теперь попробуйте свои силы в решении следующих проблем:

1. Написать программу, которая будет осуществлять процесс получения палиндромического числа из заданного описанным путем.

2. Найти самое неудачное четырехзначное число, имеющее самую длинную цепочку непалиндромических сумм.

Ниже приведено решение задачи о поиске палиндромов в текстовом файле, выполненное в среде программирования Turbo Pascal .

Поиск палиндромов

Задача:

В тексте слова отделяются друг от друга пробелами. В конце предложения стоит точка. Найти все слова-перевертыши.

Необходимые условия:

Программа должна читать исходные данные из файла input.txt, содержащего исследуемый текст. Файл output.txt должен содержать список всех слов-палиндромов, разделенных пробелами.

Решение:

Программа читает текст из файла input.txt, удаляет знаки пунктуации, затем переводит все буквы в нижний регистр и с помощью функции Perev логического типа проверяет, является ли каждое из слов исследуемого текста палиндромом:

program task_15;
var
txt: string;
i,n: integer;
f: text;
Function Perev(str:string):boolean;
var
s: string;
k: integer;
begin
s:='';
for k:=length(str) downto 1 do s:=s+str[k];
if s=str
then Perev:=True
else Perev:=False;
end;
begin
assign(f,'input.txt');
reset(f);
readln(f,txt);
close(f);
for i:=1 to length(Txt) do
begin
case Txt[i] of
'А'..'П':Txt[i]:=Chr(ord(Txt[i])+32);
'Р'..'Я':Txt[i]:=Chr(ord(Txt[i])+80);
'A'..'Z':Txt[i]:=Chr(ord(Txt[i])+32);
end;
n:=1;
assign(f,'output.txt');
rewrite(f);
for i:=1 to length(txt) do
begin
if (Txt[i]=' ') or (i=length(txt))
then
begin
if Perev(Copy(Txt,n,i-n))
then
writeln(f,copy(Txt,n,i-n));n:=i+1;
end;
end;
close(f);
end.

Приведем еще несколько задач для реализации в Turbo Pascal или любой другой среде программирования.

1. Найти самый длинный палиндром в тексте. Если таких слов несколько, взять первое попавшееся. Интерфейс прежний — программа должна читать текст из файла input.txt и выводить самое длинное слово в файл output.txt.

2. Дан одномерный массив натуральных чисел a[1],

a[2],...,a[1000] . Определить максимальное количество палиндромов.

3. Из двух натуральных чисел составить наибольший возможный палиндром, максимально приближенный к первоначальной последовательности цифр. Опять же, исходные числа читаются из файла input.txt, полученное число или сообщения о невозможности построения такого числа выводятся в файл output.txt.

Примеры входного и выходного файлов приведены в таблице.


Рейтинг сайтов-участников .:: Индикатор доверия ::.

Ваше мнение о сайте 



Rambler's Top100




Дизайн сайта: MacRoss совместно с Timmy. 2006-03-09.
Hosted by uCoz