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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 17.02.2012, 07:35   #1
DeadWind
Пользователь
 
Регистрация: 17.12.2011
Сообщений: 14
По умолчанию процедуры и функции

пожалуйста помогите решить не могу решить.

Даны три натуральных числа . Выяснить являются ли хоть одно из них палинромом ("перевертышем"),т.е. таким числом, десятичная запись которого читается одинаково слева направо и справа налево.
DeadWind вне форума Ответить с цитированием
Старый 17.02.2012, 08:36   #2
deathNC
Пользователь
 
Аватар для deathNC
 
Регистрация: 10.01.2010
Сообщений: 44
По умолчанию

Код:
function IsPalindrom(num: Integer): Boolean;
var
  digits: Array[1..24] of Byte;
  i, n: Integer;
  rs: Boolean;
begin
  n := 0;
  While num > 0 do
    begin
      inc(n);
      digits[n] := num mod 10;
      num := num div 10;
    end;
  rs := true;
  for i := 1 to (n div 2) do
    rs := rs and (digits[i] = digits[n - i + 1]);
  IsPalindrom := rs;
end;
Вот, функцию накалякал... оно определяет, является ли число палиндромом
deathNC вне форума Ответить с цитированием
Старый 17.02.2012, 08:43   #3
denisbrain
Форумчанин
 
Регистрация: 29.05.2011
Сообщений: 449
По умолчанию

Цитата:
Сообщение от deathNC Посмотреть сообщение
Код:
function IsPalindrom(num: Integer): Boolean;
var
  digits: Array[1..24] of Byte;
  i, n: Integer;
  rs: Boolean;
begin
  n := 0;
  While num > 0 do
    begin
      inc(n);
      digits[n] := num mod 10;
      num := num div 10;
    end;
  rs := true;
  for i := 1 to (n div 2) do
    rs := rs and (digits[i] = digits[n - i + 1]);
  IsPalindrom := rs;
end;
Вот, функцию накалякал... оно определяет, является ли число палиндромом
.. если массив юзать можно и через строки решить ..

delphi
Код:

var s:string;
x,i:integer;
   s1:string;
   s2:string;
begin
I:=12321;
s:=inttostr(i);
s1:=inttostr(i);
for x:=length(s) downto 1 do s2:=s2+s[x];
if s2=s1 then
showmessage(s2+'='+s1)
else showmessage('Не полином!')
задания на pascal/delphi ICQ 368254335
Tel +79177425326 mail denis-naymov1985(at)mail.ru login skype denis.new.skype
denisbrain вне форума Ответить с цитированием
Старый 17.02.2012, 08:45   #4
deathNC
Пользователь
 
Аватар для deathNC
 
Регистрация: 10.01.2010
Сообщений: 44
По умолчанию

Цитата:
если массив юзать можно и через строки решить
Зачем строки? Это как-то странно, работа-то с числами...
Цитата:
delphi
Это раздел паскаля, к сожалению

хотя через строки короче получается,
но логичнее по-моему через массив цифр

Последний раз редактировалось Stilet; 17.02.2012 в 11:42.
deathNC вне форума Ответить с цитированием
Старый 17.02.2012, 13:11   #5
Вадим Мошев

Старожил
 
Аватар для Вадим Мошев
 
Регистрация: 12.11.2010
Сообщений: 8,568
По умолчанию

Цитата:
for i := 1 to (n div 2) do
rs := rs and (digits[i] = digits[n - i + 1]);
Можно ускорить процесс проверки на паллиндром. Я бы написал так:

Код:
rs:=true;

for i := 1 to (n div 2) do
    			if (digits[i] <> digits[n - i + 1]) then
								begin
								 rs:=false;
								 exit;
								end;
Вадим Мошев вне форума Ответить с цитированием
Старый 18.02.2012, 00:37   #6
deathNC
Пользователь
 
Аватар для deathNC
 
Регистрация: 10.01.2010
Сообщений: 44
По умолчанию

Вадим Мошев, верно спасибо!
deathNC вне форума Ответить с цитированием
Старый 18.02.2012, 18:00   #7
DeadWind
Пользователь
 
Регистрация: 17.12.2011
Сообщений: 14
По умолчанию

спасибо большое))))
DeadWind вне форума Ответить с цитированием
Старый 18.02.2012, 23:00   #8
ViktorR
Старожил
 
Регистрация: 23.10.2010
Сообщений: 2,309
По умолчанию

Но можно и без массивов
Код:
function IsPalindrom(num: Integer): Boolean;
var
  n, rn, m: Integer;
begin
    n := num;  {исходноное число}
   rn := 0;      {перевертыш}
  While n > 0 do begin
         m := n mod 10; {выделим младший разряд числа}
         n := n div 10;   {удалим разряд числа}
        rn := rn * 10 + m; {формируем перевертыш}
  end;
  IsPalindrom := num = rnum; {сравним число и перевертыш}
end;
Да и в одном цикле

Как то так ...
Как-то так, ...
ViktorR вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Процедуры и функции yanevforme Помощь студентам 2 12.01.2011 14:30
процедуры и функции allegri Помощь студентам 2 09.01.2011 21:16
Процедуры и функции Алёна25 Помощь студентам 0 07.12.2010 22:47
Процедуры и функции GOSHA24Rus Помощь студентам 0 20.12.2009 06:56
Процедуры и функции 11111 Помощь студентам 10 26.11.2007 15:06