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

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

Вернуться   Форум программистов > Delphi программирование > Паскаль, Turbo Pascal, PascalABC.NET
Регистрация

Восстановить пароль
Повторная активизация e-mail

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

Ответ
 
Опции темы Поиск в этой теме
Старый 28.09.2011, 23:50   #1
Artur_Seredaa
Новичок
Джуниор
 
Регистрация: 28.09.2011
Сообщений: 1
По умолчанию в линейном масиве найти числа палиндромы

как в линейном масиве найти числа палендром?помогите не знею как сделать. срочно пожалуста
Artur_Seredaa вне форума Ответить с цитированием
Старый 29.09.2011, 00:46   #2
Pein95
Форумчанин
 
Регистрация: 25.04.2010
Сообщений: 881
По умолчанию

сначало нужно узнать какое число называетса палиндромом)
Pein95 вне форума Ответить с цитированием
Старый 29.09.2011, 06:58   #3
Smitt&Wesson
Старожил
 
Аватар для Smitt&Wesson
 
Регистрация: 31.05.2010
Сообщений: 13,543
По умолчанию

Цитата:
Сообщение от Pein95 Посмотреть сообщение
сначало нужно узнать какое число называетса палиндромом)
http://ru.wikipedia.org/wiki/%D0%9F%...80%D0%BE%D0%BC
Пиши пьяным, редактируй трезвым.
Справочник по алгоритмам С++ Builder
Smitt&Wesson вне форума Ответить с цитированием
Старый 29.09.2011, 09:31   #4
TinMan
Форумчанин
 
Аватар для TinMan
 
Регистрация: 05.09.2011
Сообщений: 869
По умолчанию

хехе ))
Кто хочет посмяться, могу повеселить..
Я с наскока подумал, что тут все через рекурсию в одну строчку и без изпользования строк (а значит, для любых СС). Ну, написал, потратил минут 15.. А потом, ессно, обнаружил, что число типа 1031 у нее тоже палиндром..

Самолюбие было задето не на шутку )). Короче, сделал, вроде.. По-прежнему, тело рекурсивной функции
function Palindrom(x: LongInt): boolean;
- занимает одну строчку (один оператор присваивания). Правда, эта строчка растянулась на немало строчек..

Могу показать. Никто не хочет сделать то же самое на слабо?
Эй, Стрелок? а?.. ))
Предпочитаю на "ты".
TinMan вне форума Ответить с цитированием
Старый 04.10.2011, 08:42   #5
TinMan
Форумчанин
 
Аватар для TinMan
 
Регистрация: 05.09.2011
Сообщений: 869
По умолчанию

И никто не поднял брошенную мной перчатку )). Ладно, я тогда просто выложу код..
Код:
const
  n= 100;
var
  a: array[1..n] of LongInt;
  i: integer;

function Palindrom(x: LongInt): boolean;
begin
  Palindrom:=
    (x<10) or ((x div Round(Exp(Ln(10)*Trunc(Ln(x)/Ln(10))))) = x mod 10) and (
      (
        x mod Round(Exp(Ln(10)*Trunc(Ln(x)/Ln(10)))) < Round(Exp(Ln(10)*Trunc(Ln(x)/Ln(10)))) div 10
      ) and Palindrom(
        x mod Round(Exp(Ln(10)*Trunc(Ln(x)/Ln(10)))) div 10+Round(Exp(Ln(10)*Trunc(Ln(x)/Ln(10)))) div 100+1
      ) or (
        x mod Round(Exp(Ln(10)*Trunc(Ln(x)/Ln(10))))>=Round(Exp(Ln(10)*Trunc(Ln(x)/Ln(10)))) div 10) and Palindrom(
          x mod Round(Exp(Ln(10)*Trunc(Ln(x)/Ln(10)))
        ) div 10
      )
    )
end;

begin
  for i:=1 to n do begin
    a[i]:= Random(1900)+100;
    Write(a[i]:8)
  end;
  for i:=1 to n do
    if Palindrom(a[i]) then Writeln(i:5,' : ',a[i]:10);
  Readln
end.
Как и было обещано, тело основной функции - одна строка кода .
Предпочитаю на "ты".
TinMan вне форума Ответить с цитированием
Старый 04.10.2011, 10:52   #6
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

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


а ещё я косячок нашёл в вашем алгоритме
Код:
  a[1]:=-123;
  if Palindrom(a[1]) then Writeln(a[1]:10);
Serge_Bliznykov вне форума Ответить с цитированием
Старый 04.10.2011, 11:14   #7
TinMan
Форумчанин
 
Аватар для TinMan
 
Регистрация: 05.09.2011
Сообщений: 869
По умолчанию

Цитата:
Сообщение от Serge_Bliznykov Посмотреть сообщение
ну, извините, коллега, ну уж очень муторно и сложно...
и главное, ради чего?!
Да я согласен на все 200!
Я ж написал "краткую историю вопроса". А когда шлея уже под хвостом - деваться некуда..

Цитата:
а ещё я косячок нашёл в вашем алгоритме
Палиндромность не определена для отрицательных чисел. То есть для них должно быть -123 = 321- , а сие нонсенс. Если условия конкретной задачи трактуют палиндромность отр.чисел как палиндромность модуля, можно сделать оболочку к этой функции.
Ошибка моя в том, что я сделал массив из integer, а не word .

Все равно спасибо за внимание. Прошу рассматривать как курьез )).
Предпочитаю на "ты".
TinMan вне форума Ответить с цитированием
Старый 04.10.2011, 16:05   #8
JUDAS
фонатик DELPHI
Форумчанин
 
Аватар для JUDAS
 
Регистрация: 14.01.2008
Сообщений: 714
По умолчанию

Artur_Seredaa. а по форуму поискать ответ на вопрос рука отвалится?
Код:
function Palindrom(x: LongInt): boolean;
var i,l : integer;
     S : string;
begin
  S:=str(x);
  result:=true;
  l:=Length(S);
  for i:=1 to (l div 2) do
  if S[i]<>S[l-i+1] then
  begin
    result:=false;
    break;
  end;
end;
95% сбоев и ошибок приложений, находится в полу метрах от монитора
JUDAS вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
найти слова палиндромы majesticx777 Паскаль, Turbo Pascal, PascalABC.NET 0 15.06.2011 13:36
Как изменить в большом масиве числа с 1 на 00001 ZanderBlack1 Microsoft Office Excel 8 19.01.2011 19:55
Простые числа как двоичные палиндромы Sasha_Smirnov Microsoft Office Word 2 30.12.2008 01:11
Числа Палиндромы в С++ grerg Помощь студентам 0 27.11.2007 11:42