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