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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 25.12.2012, 20:52   #1
Petyu
Пользователь
 
Регистрация: 04.12.2012
Сообщений: 23
Сообщение Рекурсия: проверка, является ли число простым

написал программу проверки числа на простоту
Код:
program P5a;
  var n,i:integer;
   pr:boolean;
     function f1(m,j:integer):boolean;
     begin
           result:=true;
             for j:=2 to m div 2 do
               if m mod j =0 then begin
                                      result:=false;
                                      break;
                                   end;
               if result then writeln('число',n,'- простое')else writeln('число',n,'простым не является');
    end;
    begin
    readln(n);
    write(f1(n,i));
    end.
подскажите пожалуйста как сделать эту проверку через рекурсию???
Petyu вне форума Ответить с цитированием
Старый 25.12.2012, 21:07   #2
eoln
Старожил
 
Аватар для eoln
 
Регистрация: 26.04.2008
Сообщений: 2,645
По умолчанию

http://programmersforum.ru/showthread.php?t=93531
некоторые паскали не понимают, поэтому чуть изменить надо
Код:
function Simple (Pr : Integer; i: integer ) : Boolean;
begin
  if Pr < 2 then Simple := false else//первое простое число - это 2
  if Pr = 2 then Simple := true else//если Pr=2, то сразу говорим ДА
  if Pr mod i = 0 then//делится ли число без остатка на i (первоначально i=2)
    Simple := false
  else
    if i < Pr div 2 then
      Simple := Simple(Pr, i + 1)//если не делится, то пытаемся делить на i+1
    else
      Simple := true//возникает в случае если Pr не делится ни на одно число из промежутка (2, Pr div 2]
end;
var i: byte;
begin
for i := 1 to 14 do
  if Simple(i,2) then writeln(i:3, ' yes') else writeln(i:3, ' no');
  readln
end.
eoln вне форума Ответить с цитированием
Старый 25.12.2012, 21:26   #3
Petyu
Пользователь
 
Регистрация: 04.12.2012
Сообщений: 23
По умолчанию

Цитата:
Сообщение от eoln Посмотреть сообщение
http://programmersforum.ru/showthread.php?t=93531
некоторые паскали не понимают, поэтому чуть изменить надо
Код:
function Simple (Pr : Integer; i: integer ) : Boolean;
begin
  if Pr < 2 then Simple := false else//первое простое число - это 2
  if Pr = 2 then Simple := true else//если Pr=2, то сразу говорим ДА
  if Pr mod i = 0 then//делится ли число без остатка на i (первоначально i=2)
    Simple := false
  else
    if i < Pr div 2 then
      Simple := Simple(Pr, i + 1)//если не делится, то пытаемся делить на i+1
    else
      Simple := true//возникает в случае если Pr не делится ни на одно число из промежутка (2, Pr div 2]
end;
var i: byte;
begin
for i := 1 to 14 do
  if Simple(i,2) then writeln(i:3, ' yes') else writeln(i:3, ' no');
  readln
end.
введи цикл до 15 например, начинает ерунду считать
Petyu вне форума Ответить с цитированием
Старый 25.12.2012, 22:10   #4
eoln
Старожил
 
Аватар для eoln
 
Регистрация: 26.04.2008
Сообщений: 2,645
По умолчанию

Какую ерунду? Интеграл Наполеона считает чтоль? Или анекдоты похабные печатает?
У меня всё прекрасно работает и в TP и в FP и в BP и т.п.
eoln вне форума Ответить с цитированием
Старый 25.12.2012, 22:15   #5
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
Сообщение от Petyu
введи цикл до 15 например, начинает ерунду считать
не подтверждаю!

Код работает!
вот результат работы программы для цикла for i := 1 to 15 do
Цитата:
Код:
  1 no
  2 yes
  3 yes
  4 no
  5 yes
  6 no
  7 yes
  8 no
  9 no
 10 no
 11 yes
 12 no
 13 yes
 14 no
 15 no
Petyu, Вас что-то не устраивает?!!
Serge_Bliznykov вне форума Ответить с цитированием
Старый 26.12.2012, 00:04   #6
Petyu
Пользователь
 
Регистрация: 04.12.2012
Сообщений: 23
По умолчанию

Цитата:
Сообщение от Serge_Bliznykov Посмотреть сообщение
не подтверждаю!

Код работает!
вот результат работы программы для цикла for i := 1 to 15 do

Petyu, Вас что-то не устраивает?!!
сравни результат с циклом до 14 и до 15 или число 2 к примеру не является простым а чдесь почему-то в результате работы программы оно простое.

Последний раз редактировалось Petyu; 26.12.2012 в 00:05. Причина: синтаксис
Petyu вне форума Ответить с цитированием
Старый 26.12.2012, 00:28   #7
Poma][a
Новичок
Джуниор
 
Регистрация: 11.10.2011
Сообщений: 3,882
По умолчанию

Цитата:
число 2 к примеру не является простым
Шо простите?
Число 2 делится на само себя и на 1? Так? - Так. Другие делители есть?-Нет. => Число 2 какое? Прально! Простое!
Poma][a вне форума Ответить с цитированием
Старый 26.12.2012, 09:29   #8
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
число 2 к примеру не является простым
О! Может быть, Вам стоит начать с того, что сходить на википедию Простое число, почитать определение, какие числа являются простыми.

ну или, хотя бы список чисел просмотреть:
Цитата:
Последовательность простых чисел начинается так:
2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71, 73, 79, 83, 89, 97, 101, 103, 107, 109, 113, 127, 131, 137, 139, 149, 151, 157, …
Serge_Bliznykov вне форума Ответить с цитированием
Старый 26.12.2012, 19:46   #9
Petyu
Пользователь
 
Регистрация: 04.12.2012
Сообщений: 23
По умолчанию

Цитата:
Сообщение от Serge_Bliznykov Посмотреть сообщение
О! Может быть, Вам стоит начать с того, что сходить на википедию Простое число, почитать определение, какие числа являются простыми.

ну или, хотя бы список чисел просмотреть:
мне по моему коду надо!!!!!!!!!!!!!!!!!!!!!!
Petyu вне форума Ответить с цитированием
Старый 26.12.2012, 19:47   #10
Petyu
Пользователь
 
Регистрация: 04.12.2012
Сообщений: 23
По умолчанию

Цитата:
Сообщение от Petyu Посмотреть сообщение
мне по моему коду надо!!!!!!!!!!!!!!!!!!!!!!
сделать рекурсию
Petyu вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
С++ : Определить является ли число простым harvey Помощь студентам 1 02.10.2012 16:40
Является ли число числом? Babayka94 Помощь студентам 7 19.06.2012 22:02
Рекурсивная функция, определяющая, является ли заданное натуральное число простым edikesh Помощь студентам 1 12.12.2011 00:56
Рекурсивная функция, определяющая, является ли заданное натуральное число простым edikesh Помощь студентам 2 12.12.2011 00:38
Проверка, является ли число равным одному из чисел, получаемых из запроса Adoquery Абдуллаев Рустам БД в Delphi 8 01.05.2009 17:06