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

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

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 05.06.2011, 21:23   #1
krab777
Новичок
Джуниор
 
Регистрация: 05.06.2011
Сообщений: 1
По умолчанию Проверка чисел на простоту. Не работает условие.

Проверяю число на простоту.

Код:
var
a,i,N:integer;

begin

a:=strtoint(edit1.text);


for  i:=2 to 10 do

begin

if ((a mod i<>0) and (a>i)) then  


edit2.text:='простое' else edit2.text:='составное';


end;
end;
end.
a mod i<>0 - т.е. как вы поняли, если каждое деление на такое i имеет остаток, то число простое (или есть ли есть хоть 1 остаток НОЛЬ от деления на число, то оно составное).

Весь прикол в том, что когда я написал такое условие, то программа смотрит как будто только ВТОРУЮ ЧАСТЬ (a>i). Т.е. если я например ввожу число 11, то т.к. оно больше i (10), то прога выдает что число простое, а если ввожу 12, то оно тоже простое, хотя на самом деле оно СОСТАВНОЕ. Если ввожу 9, то пишет что составное (т.к. не соблюдено a>i).

А когда меняю условие (a mod i<>0) на (a mod 5<>0) то программа все хорошо обдумывает.

непонятно...

я даже сделал поле memo чтобы вывести все остатки от деления и всё работает. а с условием не пашет. помогите плиз. спасибо.



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

Последний раз редактировалось Serge_Bliznykov; 06.06.2011 в 09:01.
krab777 вне форума Ответить с цитированием
Старый 06.06.2011, 09:09   #2
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Вы не понимаете, что у Вас происходит в цикле!
ПОСЛЕ КАЖДОЙ ПРОВЕРКИ значения edit2.Text изменяются.
Т.е. сначала (вначале цикла) I равно 2 - проверятся условие и в Edit2.Text записывается либо 'простое' либо 'составное'
после этого условие цикла становится 3, проверюются условия и
и в Edit2.Text записывается либо 'простое' либо 'составное'
и т.д. пока i не станет 10...
в результате ВЕСЬ Ваш цикл делает тоже самое что:
Код:
i:=10;
if ((a mod i<>0) and (a>i)) then  
  edit2.text:='простое' else edit2.text:='составное';
да, чтобы убедится, что за ужас у Вас происходит внутри цикла, можете анимировать цикл, например, так:
Код:
for  i:=2 to 10 do
begin
  if ((a mod i<>0) and (a>i))
     then edit2.text:=IntToStr(i)+': простое'
     else edit2.text:=IntToStr(i)+': составное';
  sleep(400);
  Application.ProcessMessages;
end;
на форуме неоднократно выкладывались рабочие примеры функций для проверки числа на простоту. Поиском Вы их легко найдёте!
Serge_Bliznykov вне форума Ответить с цитированием
Старый 06.06.2011, 09:33   #3
Sparkman
220400
Форумчанин
 
Аватар для Sparkman
 
Регистрация: 21.05.2010
Сообщений: 726
По умолчанию

Код:
var a,i,N:integer;
    b:boolean;
begin
     a:=strtoint(edit1.text);
     b:=true;
     for  i:=2 to 10 do
     if not((a mod i<>0) and (a>i)) then b:=false;
     if b or (a=1) then
     edit2.text:='простое' else edit2.text:='составное';
end;
Cерьёзной помощи не ждите - помогаю в перерывах на "перекур".
Не существует ничего невозможного для человека, который не собирается ничего делать сам.
Не учите человека, если вы не его учитель.
Sparkman вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Не срабатывает условие сравнения чисел. Solvinder Помощь студентам 1 28.04.2011 23:01
[запрос к Бд] не работает условие nuevegramodelamor PHP 2 26.04.2011 14:17
существования перменной не работает условие Pein95 PHP 1 18.04.2011 08:30
Проверка большого нат. числа на простоту PastoriXx Общие вопросы .NET 5 30.05.2010 21:04
Проверка на условие (математическое) и составление списка robbe Microsoft Office Excel 13 02.02.2010 18:06