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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 17.03.2009, 22:53   #1
Siroga35
Пользователь
 
Регистрация: 19.01.2009
Сообщений: 17
Печаль Задача Пакаль (множества)

Имеется множество, содержащее натуральные числа из некоторого диапазона. Сформировать два множества, первое из которых содержит все простые числа из данного множества, а второе — все составные.
ПЛЗ если не влом помогите.
Siroga35 вне форума Ответить с цитированием
Старый 17.03.2009, 23:25   #2
Jean-Esther
Пользователь
 
Аватар для Jean-Esther
 
Регистрация: 15.01.2009
Сообщений: 69
Подмигивание Совет: идея

Я думаю, стоит сначала написать функцию, определяющую все простые числа диапазона. Тут есть два варианта:
• Решето Эратосфена. Удобно, красиво, быстро обрабатывает большие по объему интервалы , лежащие около начала. Недостаток: неоптимален для маленьких интервалов, лежащих далеко от начала.
• Функция определения простоты числа исходя из определения. Тут все наоборот.
Приведу второй вариант (по памяти)
Код:
function IsPrime(x:integer):boolean;
var i,lim:integer;
begin
if x=2 then IsPrime:=true else
if x mod 2=0 then IsPrime:=false else
begin
    i:=3;
    lim:=round(sqrt(x));
    while (i<=lim)and(x mod i <> 0) do i:=i+2;
    IsPrime:=(i>lim);
end;
end;
И все задача сводится к поочередному перебору всех чисел (для второго варианта) или вообще к правильному выделению диапазона для решета Эратосфена.
Код:
procedure SetUp(const low,high:integer; var prime,notprime:SSet);
begin
      prime:=[]; notprime:=[];
      for k:=low to high do
          if IsPrime(k) then include([k],prime) else include([k],notprime);
end;
Ну а граници диапазона, как я понял, определить не проблема.
Silence is of great value...
Jean-Esther вне форума Ответить с цитированием
Старый 18.03.2009, 09:07   #3
Siroga35
Пользователь
 
Регистрация: 19.01.2009
Сообщений: 17
По умолчанию

А другие варианты возможные?
Siroga35 вне форума Ответить с цитированием
Старый 18.03.2009, 10:41   #4
Siroga35
Пользователь
 
Регистрация: 19.01.2009
Сообщений: 17
По умолчанию

Ми процедури і функции ще не учили
Siroga35 вне форума Ответить с цитированием
Старый 18.03.2009, 12:07   #5
alex_fcsm
Участник клуба
 
Аватар для alex_fcsm
 
Регистрация: 10.11.2008
Сообщений: 1,502
По умолчанию

Код:
const n=100;
type MySet=set of 1..n;
var i,j,k:integer;
    s,s1:MySet;
    f:boolean;
    
begin
s:=[];s1:=[];
 for i:=1 to n do
  begin
  f:=true;
  k:=round(sqrt(i));
   for j:=2 to k do
    if i mod j=0 then f:=false;
   if f then s:=s+[i]
      else s1:=s1+[i];
  end;
  for i:=1 to n do
  if i in s then write(i,' ');
  writeln;
    for i:=1 to n do
  if i in s1 then write(i,' ');
end.
Нормальное состояние техники - нерабочее, все остальное частный случай.
alex_fcsm вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Задача на вектора (тема Множества) DELPHI 08ekhiv1 Помощь студентам 1 13.03.2009 20:00
Задача на множества innaa639 Помощь студентам 2 09.02.2009 10:32
Паскаль. задача на множества Isuzu_Rin Помощь студентам 1 24.12.2008 10:01
Множества Zid@ne Помощь студентам 16 20.01.2008 10:19
Задача на множества Mastak Паскаль, Turbo Pascal, PascalABC.NET 2 11.12.2007 18:04