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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 17.04.2017, 07:35   #1
vlad samul
Новичок
Джуниор
 
Регистрация: 17.04.2017
Сообщений: 1
По умолчанию Вычислительные операции

Добрый день, помогите составить задачу в паскаль. Её условие:
Вычислительные операции: Найти все такие простые числа, не превосходящие заданного числа n, двоичная запись которых представляет симметричную последовательность нулей и единиц (начинающуюся единицей!).
Заранее СПАСИБО!!!
vlad samul вне форума Ответить с цитированием
Старый 17.04.2017, 09:44   #2
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,238
По умолчанию

Цитата:
Сообщение от vlad samul Посмотреть сообщение
Найти все такие простые числа, не превосходящие заданного числа n, двоичная запись которых представляет симметричную последовательность нулей и единиц (начинающуюся единицей!)
не вижу другого (реального) способа кроме как просто получать простые числа и полученные числа проверять, являются ли они симметричными в двоичном виде:
Код:
for i:=3 to n do
  if isSimple(i) then
      if isBinarySymetry(i) then WriteLn(i);
Serge_Bliznykov вне форума Ответить с цитированием
Старый 22.04.2017, 10:16   #3
digitalis
Старожил
 
Аватар для digitalis
 
Регистрация: 04.02.2011
Сообщений: 4,536
По умолчанию

Вот в кои-то веки попадется в отличие от бесконечных "найдите в строке это, а это задвиньте в конец" - задание, требующее хоть минимального шевеления мозговыми извилинами, а студенту и тут никто помочь не хочет. Проверку числа "на простоту" рассматривать не будем - она и на этом форуме обсосана до косточек, а проверку бинарной симметрии я бы сделал приблизно так.
//=================
Код:
function Symmetr ( arg:word ): boolean ;
var j,uj,mask,mask1 : word ; bb : boolean ;
begin
   mask :=  $8000 ; uj := arg;
   for j := 16 downto 1 do
     if (uj and mask) = 0 then mask := mask div 2 else Break ;
   bb := True ;
   if mask > 1 then
     begin
       mask1 := 1 ;
       while (mask1<mask)  do
         begin
           j := mask1 or mask ;
           mask1 := mask1 * 2 ;
           mask := mask div 2 ;
           if (not((uj and j) = 0 )) and (not((uj and j) = j )) then
              begin
                bb:=False ;
                Break
              end ;
          end ;
     end ;
   Symmetr := bb ;
end ;
//=================
Хотя, пожалуй, все это зря - студент, махнув рукой на халявную, но не гарантированную подмогу форума дал, наверно, десятку более соображающему одногруппнику (или преподу - но уже больше), и зачет в кармане.

Последний раз редактировалось digitalis; 22.04.2017 в 17:17.
digitalis вне форума Ответить с цитированием
Старый 22.04.2017, 22:24   #4
ViktorR
Старожил
 
Регистрация: 23.10.2010
Сообщений: 2,304
По умолчанию

Изложенный тип симметрии приводит к тому, что при зеркальном отображении битов мы должны получить тоже число.
Задачу, в части проверки симметрии, можно решить так:
i -исходное простое число;
j - вспомогательное число;
Код:
function Test(n: integer): boolean
var i, j : integer;
begin
   i := n;
   j := 0;
   while i >=1 do {выполняем зеркальное отображение}
   begin
      j := j shl 1; {сдвиг влево на один бит}
      if i AND 1 = 0 then
         j := j AND $FFFE {мл. бит в 0}
      else
         j := j OR 1; {мл. бит в 1}
      i := i shr 1; {сдвиг вправо на один бит}
   end;
   if n = j then
      Test := True  {Ok}
   else
      Test := False;
   end;

...
{Программа}
If Test(k) then
  {Вывод числа};
...  {продолжение программы в части получения следующего простого числа}
Как-то так, ...

Последний раз редактировалось ViktorR; 23.04.2017 в 07:47.
ViktorR вне форума Ответить с цитированием
Старый 23.04.2017, 10:36   #5
digitalis
Старожил
 
Аватар для digitalis
 
Регистрация: 04.02.2011
Сообщений: 4,536
По умолчанию

Да, этот вариант короче. Разные методы - результат один: ТС-у это уже до фонаря.
digitalis вне форума Ответить с цитированием
Ответ


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

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Несложные задачи на Паскале.Вычислительные операции,цикл,ветвление,массивы. Herenvarno Помощь студентам 16 14.01.2010 18:21
Вычислительные методы Максимилиан123 Фриланс 3 16.11.2009 03:29
вычислительные сети Sjava Помощь студентам 1 11.05.2009 15:33
Вычислительные сети Sjava Помощь студентам 2 10.05.2009 14:40