Требовалось написать программу вычисления факториала числа n (факториал числа n есть произведение всех целых чисел от 1 до n). Программист торопился и написал программу неправильно. Ниже приведён фрагмент его программы, в котором содержится несколько ошибок:
k := 1;
f := 0;
while k < n do
f := f * k;
k := k + 1
Обсудите этот фрагмент программы в группе. Найдите ошибки. Внесите необходимые исправления, допишите программу и выполните её на компьютере. Для проверки правильности программы используйте тест: n = 5 → 5! = 120; n = 6 → 6! = 720.
По определению факториала нужно перемножить числа от n включительно. Переменная f хранит накопленное произведение, поэтому её начальное значение должно быть k < n пропускает множитель n; меняем его на k <= n. В Паскале после while без begin ... end повторяется только одна команда. Следовательно, и умножение, и увеличение k нужно заключить в тело цикла. Иначе k не меняется внутри цикла, и он зацикливается.
var n, k, f: integer;
begin
write('Введите n>>');
readln(n);
k := ;
f := ;
while k <= n do
begin
f := f * k;
k := k +
end;
writeln(n, '!=', f)
end.
Проверка: для n = переменная f последовательно равна k после последнего умножения становится n = выполняется ещё одно умножение:
Исправить f := на f := , k < n на k <= n и включить обе команды в тело цикла. Тесты: , .
