- Код: Выделить всё
- 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.
У меня получился вот такой вариант:
- Код: Выделить всё
- 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. Подскажите пожалуйста решение.




