Вопрос по работе проги для нахождения простых чисел

Форум для изучающих FPC и их учителей.

Модератор: Модераторы

Вопрос по работе проги для нахождения простых чисел

Сообщение fs444 » 13.10.2008 00:51:38

Есть прога
Код: Выделить всё
Program l8_nmy8_1;
Var n,i:Integer;
Begin
  Writeln('Введите простое число');
  Readln(n);
  i:=1;
  Repeat
   Inc(i);
   Until (i > n Div 2) Or (n Mod i = 0);
   If (i > n Div 2) Then Writeln(n,' простое число')
   Else Writeln(i,' - первый делитель числа ',n);
  Readln;
End.

Если i равно половине введенного с клавиатуры числа, то это число считается простым. В любом другом случае i считается первым делителем числа. Здесь вопросов нет.

Но дальше автор книги предлагает изменить эту программу так, чтобы вместо оператора Repeat-Until применялся оператор While.
Задание для изменения программы по нахождению простых чисел.JPG

У меня получился вот такой вариант:
Код: Выделить всё
Program l8_nmy8_1;
Var n,i:Integer;
Begin
  Writeln('Введите простое число');
  Readln(n);
  i:=1;
  While (i > n Div 2) Do Begin
   Inc(i);
   If (n Mod i = 0) Then Writeln(i,' - первый делитель числа ',n);
   End;
   If (i > n Div 2) Then Writeln(n,' простое число');
  Readln;
End.

Но если вариант автора книги выдает при вводе "5"
5 простое число

а при вводе 6
2 первый делитель числа 6

То мой вариант вообще ничего не выдает. И я понимаю почему. Потому что ни одно условие, где должен быть выполнен оператор writeln, не выполняется. Но я не могу понять, как мне еще составить программу с оператором while. Подскажите пожалуйста решение.
fs444
новенький
 
Сообщения: 38
Зарегистрирован: 09.09.2008 23:55:30

Re: Вопрос по работе проги для нахождения простых чисел

Сообщение Sergei I. Gorelkin » 13.10.2008 01:45:15

While крутится, пока условие выполняется, а repeat - наоборот, пока не выполняется. У одинаковых по смыслу циклов repeat и while условия будут противоположными.
Т.е. в данном случае - while not (i > n div 2) do, или, что то же самое - while (i <= n div 2) do
Аватара пользователя
Sergei I. Gorelkin
энтузиаст
 
Сообщения: 1395
Зарегистрирован: 24.07.2005 14:40:41
Откуда: Зеленоград

Re: Вопрос по работе проги для нахождения простых чисел

Сообщение SergeySmlInf » 13.10.2008 07:50:46

Во-первых: некорректно определена тема. Вы ОПРЕДЕЛЯЕТЕ является ли число простым...
Во-вторых: самый простой и очевидный вариант использование цикла FOR от 2 до (целой части квадратного корня числа) с подсчетом количества делителей. Если делителей больше 0 то ...
В-третьих: уж если и использовать иные циклы (например для ускорения действия программы) то, как мне кажется, лучше с предварительной проверкой условия, а то ведь REPEAT один раз выполняется обязательно :shock:
SergeySmlInf
новенький
 
Сообщения: 40
Зарегистрирован: 02.10.2007 07:59:26
Откуда: Смоленск

Re: Вопрос по работе проги для нахождения простых чисел

Сообщение fs444 » 13.10.2008 17:19:10

Во-первых: некорректно определена тема. Вы ОПРЕДЕЛЯЕТЕ является ли число простым...

Да, тему я не совсем правильно обозвал.
Может и лучше использовать какие то другие циклы, но в книжке у меня приведен код с циклом Repeat-Until и дается задание переделать программу под исполользование цикла While.
fs444
новенький
 
Сообщения: 38
Зарегистрирован: 09.09.2008 23:55:30


Вернуться в Обучение Free Pascal

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 13

Рейтинг@Mail.ru