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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 07.09.2010, 23:22   #1
Koko Shanel'
Новичок
Джуниор
 
Регистрация: 07.09.2010
Сообщений: 1
Смущение простые числа

begin
r := 2;
repeat
j := n mod r;
if j <> 0 then r := r+1
until j=0;
if r=n then prost := true
else prost := false;
end;

Помогите пожалуйста нужно видоизменить эту программу,на основе нее создать функцию аргумент кот будет двухбайтное целое число,значение фун-ции истина если аргумент простое число в противном ложь.
создать программу вывода в поле мемо простые числа от 0 до заданного.
Koko Shanel' вне форума Ответить с цитированием
Старый 07.09.2010, 23:52   #2
Arigato
Высокая репутация
СуперМодератор
 
Аватар для Arigato
 
Регистрация: 27.07.2008
Сообщений: 15,865
По умолчанию

Код:
function prost (n: SmallInt): Boolean;
...
begin
  r := 2;
  repeat
    j := n mod r;
    if j <> 0 then r := r+1
  until j=0;
  if r=n then prost := true
    else prost := false;
end;
Для вывода просто в цикле перебираем все числа:
Код:
for I := 0 to Lim do
  if prost (I) then // тут добавляем I в мемо
При добавлении в мемо пригодится функция IntToStr - переводит из числа в строку.
Arigato вне форума Ответить с цитированием
Старый 08.09.2010, 01:13   #3
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

to Koko Shanel'

алгоритм определения простоты числа, просто жуткий!
При n=1 из цикла выходит только за счёт переполнения r

Это уже не говоря о том, что функция определения простоты числа просто неоптимальная (грубо говоря, Вы считаете сколько чисел не делится нацело...)

Хотя, это и будет работать...

я бы, например, предложил такую функцию определения простоты числа
Код:
function isPrime(X: word): boolean;
var i: word;
Begin
     isPrime:=false;
     if x<2 then Exit;
     if not odd(x) and (x<>2) { проверяем на чётность  }
          then exit;
     i:=3;
     while i <= sqrt(x) do { проверяем только нечётные }
     begin
          if x mod i = 0 then Exit;
          inc(i,2);
     end;
     isPrime:=true;
End;
выделенные красным типы данных задают двухбайтовый тип целых положительных чисел. для учебной задачи.
В реальной задаче, разумеется, их лучше заменить на LongInt

Последний раз редактировалось Serge_Bliznykov; 08.09.2010 в 01:19.
Serge_Bliznykov вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Простые числа. С++ mephistophel Помощь студентам 3 03.02.2011 22:12
Простые числа anksunamun Паскаль, Turbo Pascal, PascalABC.NET 5 16.10.2009 20:03
Простые числа Verochka Помощь студентам 14 02.12.2008 20:30
простые числа Акашаев Нурлан Паскаль, Turbo Pascal, PascalABC.NET 2 05.12.2007 12:23