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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 13.04.2011, 16:44   #1
изо
Пользователь
 
Регистрация: 14.03.2011
Сообщений: 24
По умолчанию выбор из ряда чисел простых чисел

Как изменить указанную ниже программу, которая запрашивает конкретное число Z, чтобы проверить его – простое оно или нет, так чтобы она могла проверить числовой ряд до числа N, далее, выделила (распечатала) из этого ряда все простые числа и далее, что очень важно, из выбранных простых чисел выбрала (распечатала) те числа, которые при делении на 9, имеют остаток равный d (может быть равный const: 0,1,2,...8)


Код:
program z_number; 
uses crt; 
var Number, CounterI:word; 
    Flag:boolean; 
begin 

 clrscr; 
 writeln('введите число'); 
 readln(Number); 

 Flag := false;  
for CounterI := 2 to trunc(sqrt(Number)) do 
  if (Number mod CounterI = 0) then 
  begin 
   Flag := true; 
   break; 
  end; 

if (Flag) then 
  writeln('Данное число не является простым') 
 else 
  writeln('Данное число является простым'); 

 readln;
 end.



___________
Код нужно оформлять по правилам:
тегом [CODE]..[/СODE] (это кнопочка с решёточкой #)
Не забывайте об этом!
Модератор.

Последний раз редактировалось Serge_Bliznykov; 13.04.2011 в 17:08. Причина: изменеие шрифта
изо вне форума Ответить с цитированием
Старый 13.04.2011, 16:47   #2
mss
Заблокирован
 
Регистрация: 27.05.2010
Сообщений: 1,099
По умолчанию

Реализаций "решета Эратосфена", в том числе на Паскале, в интернете пруд пруди)
К чему пыжиться и в мучениях изобретать велосипед ?
mss вне форума Ответить с цитированием
Старый 13.04.2011, 17:13   #3
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

а в чём сложности то?
решение "в лоб":
Код:
function isPrime(X: LongInt): boolean;
var i: integer;
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;

begin
   // ввод границы N и требуемого остатка от деления KK
   for i=2 to N do
    if ((i mod 9) = KK) and isPrime(i) then WriteLn(i);
end.

Последний раз редактировалось Serge_Bliznykov; 13.04.2011 в 17:15.
Serge_Bliznykov вне форума Ответить с цитированием
Старый 13.04.2011, 20:00   #4
изо
Пользователь
 
Регистрация: 14.03.2011
Сообщений: 24
По умолчанию

Уважаемый Serge Bliznukov в представленной тобой программе выдаётся ошибка: "Неизвестное имя "i" " - в самом конце программы. Пробовал разобраться, но чем больше исправлял выдаваемые ошибки, тем дальше оказывался положительный результат - программа не работала. Прошу разъяснить - в чём тут дело?

Код:
function isPrime(X: LongInt): boolean;
var i: integer;
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;

begin
   // ввод границы N и требуемого остатка от деления KK
   
for i:=2 to N do  (НЕИЗВЕСТНОЕ ИМЯ " i ") - ОШИБКА!
    
if ((i mod 9) = KK) and isPrime(i) then WriteLn(i);
end.


________
Вы почему код не оформляете?!!
Код нужно оформлять по правилам:
тегом [CODE]..[/СODE] (это кнопочка с решёточкой #)
Не забывайте об этом!
Модератор.

Последний раз редактировалось Serge_Bliznykov; 13.04.2011 в 22:54.
изо вне форума Ответить с цитированием
Старый 13.04.2011, 20:02   #5
MyLastHit
Очень суровый
Участник клуба
 
Аватар для MyLastHit
 
Регистрация: 17.12.2009
Сообщений: 1,988
По умолчанию

Потому что i - это глобальная переменная. А ее объявили как локальную.
Код:
var i: integer;
function isPrime(X: LongInt): boolean;
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;

begin
// ввод границы N и требуемого остатка от деления KK
  for i:=2 to N do (НЕИЗВЕСТНОЕ ИМЯ " i ") - ОШИБКА!
  if ((i mod 9) = KK) and isPrime(i) then WriteLn(i);
end.
Так пробуй.

изо, оформляй код специальным тегом. Вообще не читаемо.
Ненавижу быть как все, но люблю, чтобы все были как я.

Последний раз редактировалось MyLastHit; 13.04.2011 в 20:04.
MyLastHit вне форума Ответить с цитированием
Старый 13.04.2011, 22:51   #6
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

MyLastHit, в принципе Вы абсолютно правы, так как Вы предложили заработает. Но вообще-то.
имелось в виду, что в функции одна переменная. а в цикле в основном теле - другая.

Там же кроме I нужно описать N и KK.

т.е. такой код:
Код:
function isPrime(X: LongInt): boolean;
var i: integer;
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;

var
  i, N, KK : longint;
begin
   Readln(N);
   ReadLn(KK);
   for i=2 to N do
       if ((i mod 9) = KK) and isPrime(i) then 
             WriteLn(i);
end.
Serge_Bliznykov вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Первые 30 простых чисел Fantom.as Общие вопросы C/C++ 11 19.04.2015 09:10
выбор простых чисел изо Паскаль, Turbo Pascal, PascalABC.NET 2 09.04.2011 15:32
массив из простых чисел amikulia Помощь студентам 1 14.01.2011 13:07
Ввести несколько чисел (кол-во чисел запрашивать с экрана). Определить, сколько чисел, меньших заданного Lirika Помощь студентам 0 08.05.2010 21:39
Нахождение простых чисел. Lunex.08 Общие вопросы C/C++ 7 10.04.2009 17:01