Я предполагаю, что целые числа для поиска должны быть положительными. В этом случае тип Number
, A
, C
и X
вместо этого может быть Positive
. Если ввод не является положительным числом, то будет сгенерировано исключение CONSTRAINT_ERROR
. Это безопаснее: исключение ясно указывает, что что-то пошло не так, и это лучше, чем возвращать неверный результат.
Обратите внимание, что программа никогда не проверяет, является ли 1
действительным делителем, даже если это так. Это потому, что A
увеличивается в начале цикла; поскольку его начальное значение равно 1
, первое проверенное значение равно 2
. В любом случае, лучше использовать X
, переменную l oop. В вашей программе он принимает значения в диапазоне от 1
до Number - 1
, включая оба конца. Кроме того, X
будет вести себя как константа внутри тела l oop, что исключает риск случайного перезаписи его значения.
Значение, присвоенное C
, является результатом деления Number
свыше A
Учитывая, что эти переменные являются целыми числами, результат деления будет усечен. Для положительных чисел это эквивалентно «округлению» результата. Если Number
равномерно делится на A
, то остаток будет равен нулю, поэтому умножение приведет к исходному значению. В противном случае остаток будет потерян, поэтому значение C * A
будет меньше значения A
.
Более простой подход состоит в том, чтобы непосредственно вычислить остаток от обоих чисел, а затем проверить, является ли оно это ноль. Вот такой код:
procedure Main is
Number : Positive;
begin
Get (Number);
for A in 1 .. Number loop
if Number rem A = 0 then
Put (A);
end if;
end loop;
end Main;