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

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

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

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

Ответ
 
Опции темы Поиск в этой теме
Старый 25.12.2011, 20:14   #11
veniside
Старожил
 
Регистрация: 03.01.2011
Сообщений: 2,508
По умолчанию

> а когда проверяю такое (уже внутри функции)

скиньте минимальный, но полный исходник, который можно прогнать у себя и увидеть ошибку.
"Когда приходит положенное время, человек перестаёт играть в пинбол. Только и всего."
veniside вне форума Ответить с цитированием
Старый 25.12.2011, 20:25   #12
Camaro Chevelle
Форумчанин
 
Регистрация: 05.11.2011
Сообщений: 102
По умолчанию

кроме функции ничего нет, но если надо то вот
Код:
function binpal(n: longint): boolean;
  var
    i, j: integer;
    s: set of 0..8*sizeof(n)-1 absolute n;
  begin
    j:=8*sizeof(n)-1;
    while not (j in s) do
      dec(j);
    i:=0;

    writeln(i<>j);    
    writeln(i in s);
    writeln(j in s);
    writeln((i in s)=(j in s));

    while (i<>j) and ((i in s)=(j in s)) do begin
      inc(i);
      dec(j);
    end;
    binpal:=(j-i)<2;
  end;

var
  k: integer;
begin
  for k:=1 to 100 do
    writeln(k, ' ', binpal(k));
  readln
end.
Camaro Chevelle вне форума Ответить с цитированием
Старый 25.12.2011, 21:42   #13
veniside
Старожил
 
Регистрация: 03.01.2011
Сообщений: 2,508
По умолчанию

ха, действительно, именно в БП они там временно сохраняют результат (i in s) в CL, а последующий вызов (j in s) успешно CL затирает. Так что да, глюк
"Когда приходит положенное время, человек перестаёт играть в пинбол. Только и всего."
veniside вне форума Ответить с цитированием
Старый 25.12.2011, 22:14   #14
Camaro Chevelle
Форумчанин
 
Регистрация: 05.11.2011
Сообщений: 102
По умолчанию

спасибо, теперь всё ясно
Camaro Chevelle вне форума Ответить с цитированием
Старый 25.12.2011, 22:20   #15
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

veniside, +1


to Camaro Chevelle
согласен, что Вы натолкнулись на глюк..
ну, в случае когда и в одном условии и в другом используется in - наблюдается косячок-с..
Не понимаю, почему Вы не хотите использовать дополнительные переменные!

Ну тогда так не пользуйтесь Turbo/Borland Pascal...
сейчас нет под рукой FPC, но я на 99.9% уверен, что там этого косячка не будет.
(в Delphi проверил - так косячка этого нет)

а ещё можно так попробовать:
Код:
    writeLn('  comparen = ', ((i in s) and (j in s) or (not(i in s) and not(j in s))));

а ещё, я совсем не понимаю, какой алгоритм Вы заложили в свой алгоритм (я бы использовал обычный цикл, две переменные N1 и N2 - сдвиги и битовые маски. это in s - это не для меня...

Последний раз редактировалось Serge_Bliznykov; 25.12.2011 в 22:23.
Serge_Bliznykov вне форума Ответить с цитированием
Старый 25.12.2011, 22:37   #16
Camaro Chevelle
Форумчанин
 
Регистрация: 05.11.2011
Сообщений: 102
По умолчанию

Цитата:
Сообщение от Serge_Bliznykov Посмотреть сообщение
а ещё, я совсем не понимаю, какой алгоритм Вы заложили в свой алгоритм (я бы использовал обычный цикл, две переменные N1 и N2 - сдвиги и битовые маски. это in s - это не для меня...
там не совсем наверно понятно. сначала ищу позицию самой крайней слева единички (это j), и потом начинаю двигать j и i навстречу друг другу пока на i-й и j-й позициях одинаковые значения. в результате если после цикла i и j стоят рядом или через одну позицию то тогда число есть палиндром.
почему начинаю с поиска самой левой единички и забиваю на самую правую? потому что в задаче сказано, что нужно искать палиндромы среди простых чисел, то есть до вызова функции binpal составные отсеятся, а у всех простых самая крайняя правая всегда 1, т. к. чётные не являются простыми (ну кроме двойки).

вот, примерно так
Camaro Chevelle вне форума Ответить с цитированием
Старый 26.12.2011, 03:45   #17
veniside
Старожил
 
Регистрация: 03.01.2011
Сообщений: 2,508
По умолчанию

> вот, примерно так

метод забавный, но, имхо, сильно замудрённый. Цикла из 2-х строчек достаточно.

http://ideone.com/CdfEd
"Когда приходит положенное время, человек перестаёт играть в пинбол. Только и всего."
veniside вне форума Ответить с цитированием
Старый 26.12.2011, 08:37   #18
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
Сообщение от veniside
метод забавный, но, имхо, сильно замудрённый. Цикла из 2-х строчек достаточно.
Красавчик!
а я бы начал мутить с побитным сравнением в цикле и прерыванием, как только симметричные биты не совпадают...
А Вы все биты исходного числа записали в новое число в обратном порядке. а потом сравнили это полученное число с исходным. совпало - значит палиндром!
Просто и изящно...
Serge_Bliznykov вне форума Ответить с цитированием
Старый 26.12.2011, 09:26   #19
Camaro Chevelle
Форумчанин
 
Регистрация: 05.11.2011
Сообщений: 102
По умолчанию

да как-то неохота лишнюю работу делать, т. е. имею в виду целиком число сравнивать, когда только половины достаточно.
и потом я делаю не для себя а одной девчонке, которая ну мягко говоря не понимает, поэтому такие слова как shl shr; not and or (в побитовом смысле) и xor (во всех смыслах) для неё тёмный лес а множество с абсолютными адресами я хоть как-то смог ей втереть
Camaro Chevelle вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
в турбо паскале natalialove Фриланс 8 31.05.2010 19:11
в турбо паскале tanyalove Помощь студентам 12 26.05.2010 20:05
турбо паскале tanyalove Помощь студентам 2 19.05.2010 20:10
турбо паскале tanyalove Паскаль, Turbo Pascal, PascalABC.NET 10 18.05.2010 20:08
в турбо паскале tanyalove Помощь студентам 17 29.04.2010 13:16