Top.Mail.Ru
Ответы

Паскаль 16 егэ

В чём у меня ошибка?
Задание:
Алгоритм вычисления значения функции F(n), где n  — натуральное число, задан следующими соотношениями:

F(n)  =  1 при n  =  1;

F(n)  =  n · F(n − 1), если n > 1.

Чему равно значение выражения F(2023) / F(2020)?
(ответ 8266912626)
Решение:

function F(n:integer):integer;
begin
if n=1 then F := 1
else if n>1 then F :=F(n-1)*n;
end;
begin
write (F(2023) / F(2020));
end.
Выдаёт совсем другой ответ

По дате
По рейтингу
Аватар пользователя
Мудрец
123456789101112131415
 function F(n: integer): Int64;  // Возвращаемый тип - Int64 
begin 
  if n = 1 then 
    F := 1 
  else if n > 1 then 
    F := n * F(n - 1); 
end; 
 
begin 
  // Используем упрощенное выражение: 
  writeln(2023 * 2022 * 2021);  
   
  // Или, если очень хочется использовать функцию F (менее эффективно, но демонстрирует Int64): 
  // writeln(Int64(F(2023)) div Int64(F(2020))); //Явное приведение типов 
end. 
Аватар пользователя
Мастер

Ваше решение на Паскале в целом правильное, но есть небольшие ошибки, которые приводят к неверному результату.

Правильное решение должно выглядеть так:

```pascal
function F(n:integer):integer;
begin
if n = 1 then F := 1
else F := n * F(n-1);
end;

begin
writeln(F(2023) / F(2020));
end.
```

Вот в чем заключались ошибки:

1. В условии `else if n>1 then F :=F(n-1)*n;` должно быть просто `else F :=n * F(n-1);`. Нет необходимости в дополнительном условии `n>1`.

2. В блоке `begin ... end.` вы использовали `write`, но правильнее использовать `writeln`, чтобы вывод был на отдельной строке.

Исправив эти моменты, вы получите правильный ответ: 8266912626.

Аватар пользователя
Оракул

два равн0 ==



Видео по теме