Форум программистов, компьютерный форум, киберфорум
Turbo Pascal
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.67/6: Рейтинг темы: голосов - 6, средняя оценка - 4.67
288 / 93 / 11
Регистрация: 29.05.2011
Сообщений: 2,403
1

Задача. Программа вычисления значения F(n)

21.01.2024, 01:45. Показов 1072. Ответов 13
Метки нет (Все метки)

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

F(n)=1 при n<=2;
F(n)=F(n-1)+3*F(n-2) при n>2.

Напишите программу вычисления значения функции F(n).

Мое решение:

Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
program algorithm;
var Fn, Fnm1, Fnm2, n, i: integer;
begin
    writeln('Введите аргумент функции F(n)');
    read(n);
    if n<=2 then Fn:=1
    else
        begin
            Fnm2:=1;
            Fnm1:=1;
            for i:=3 to n do
                begin
                    Fn:=Fnm1+3*Fnm2;
                    Fnm2:=Fnm1;
                    Fnm1:=Fn
                end;
        end;
    writeln('F(', n, ')=', Fn)
end.
Работает корректно. Предвижу, что код подвергнется резкой критике!)
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
21.01.2024, 01:45
Ответы с готовыми решениями:

Программа для вычисления значения функции
Составить программу для вычисления значения функции: y=sh(x) с помощью разложения функции в...

Программа для вычисления значения выражения.
Здравствуйте помогите пожалуйсто найти ошибки в программе на Паскале: сумма x=2 до 5 (x^3+1) -...

Программа для вычисления значения функции
помогите пожалуйста написать программу..

Программа для вычисления значения функции
Помогите пожалуйста!!! Срочно, умоляю молю Составить программу для вычисления значения функции...

13
Модератор
Эксперт CЭксперт С++
5175 / 2897 / 1501
Регистрация: 14.12.2018
Сообщений: 5,233
Записей в блоге: 1
21.01.2024, 06:46 2
Bazaroff, по-моему только нужно:
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
program algorithm;
var F, F1, F2, n, i: integer;
begin
    writeln('Введите аргумент функции F(n)');
    read(n);
    F1:=1; F2:=1; F:=F2;
    for i:=3 to n do
        begin
            F:=F2+3*F1;
            F1:=F2;
            F2:=F
        end;
    writeln('F(', n, ')=', F)
end.
1
Модератор
Эксперт Pascal/DelphiЭксперт NIX
7774 / 4602 / 2825
Регистрация: 22.11.2013
Сообщений: 13,083
Записей в блоге: 1
21.01.2024, 09:22 3
А можно и так (см.рекурсия):
Pascal
1
2
3
4
5
6
7
8
9
10
function f(n: Integer): Integer;
begin
  if n<3 then f:=1
  else f:=f(n-1)+3*f(n-2);
end;
var n: Integer;
begin
  Write('n: '); ReadLn(n);
  WriteLn(f(n));
end.
1
288 / 93 / 11
Регистрация: 29.05.2011
Сообщений: 2,403
21.01.2024, 09:47  [ТС] 4
bormant, ваш код работает некорректно.

Добавлено через 5 минут
Он проводит вычисления над значениями аргументов, а не над значениями функции F(n).
С момента n>=3.
Имхо.
0
vlisp
21.01.2024, 10:23
  #5

Не по теме:

оставлю это тут

Дураком быть выгодно, да очень не хочется.
Умным очень хочется, да кончится битьем...

0
Модератор
Эксперт Pascal/DelphiЭксперт NIX
7774 / 4602 / 2825
Регистрация: 22.11.2013
Сообщений: 13,083
Записей в блоге: 1
21.01.2024, 11:40 6
Цитата Сообщение от Bazaroff Посмотреть сообщение
ваш код работает некорректно
С момента n>=3.
Проверяли? Сомневаюсь.
Код
Аргумент    Результат из #1   Результат из #3   Отличие
       3                  4                 4       нет
       4                  7                 7       нет
...
Дальше сами



Добавлено через 18 минут
Цитата Сообщение от Bazaroff Посмотреть сообщение
проводит вычисления над значениями аргументов
Действительно проводит: n-1, n-2 -- это вычисление новых аргументов функции F.
Цитата Сообщение от Bazaroff Посмотреть сообщение
а не над значениями функции F(n)
Что такое f(n-1), f(n-2)? Это вызовы функции F с соответствующими аргументами => каждый вызов будет вычислен и возвратит значение, из которых и будет вычислено значение F(n) как F(n-1) + 3 * F(n-2) при n>2.
Для наглядности это можно было бы переписать так:
Pascal
1
2
3
4
5
6
7
8
9
10
function f(n: Integer): Integer;
var f1, f2: Integer;
begin
  if n<3 then f:=1
  else begin
    f1:=f(n-1);  { вычисление значения F для n-1 }
    f2:=f(n-2);  { вычисление значения F для n-2 }
    f:=f1+3*f2;  { вычисление значения F для n }
  end;
end;
1
288 / 93 / 11
Регистрация: 29.05.2011
Сообщений: 2,403
21.01.2024, 11:50  [ТС] 7
Цитата Сообщение от bormant Посмотреть сообщение
Проверяли?
Именно.

Задача. Программа вычисления значения F(n)


Как видно, F(4)=7. Ваш код утверждает, что 10.
F(6)=40. Код - 31.
F(7)=97. Код - 46.
0
288 / 93 / 11
Регистрация: 29.05.2011
Сообщений: 2,403
21.01.2024, 11:54  [ТС] 8
Мой код, по крайней мере до F(7), именно то и показывает.
0
Модератор
Эксперт Pascal/DelphiЭксперт NIX
7774 / 4602 / 2825
Регистрация: 22.11.2013
Сообщений: 13,083
Записей в блоге: 1
21.01.2024, 18:16 9
Цитата Сообщение от Bazaroff Посмотреть сообщение
Как видно, F(4)=7. Ваш код утверждает, что 10
Где?
Код
n: 4
7
Pascal
1
2
3
4
5
6
7
8
9
10
function f(n: Integer): Integer;
begin
  if n<3 then f:=1
  else f:=f(n-1)+3*f(n-2);
end;
var n: Integer;
begin
  for n:=1 to 9 do Write(' ',n:2); WriteLn;
  for n:=1 to 9 do Write(' ',f(n):2); WriteLn;
end.
Код
   1   2   3   4   5   6   7   8   9
   1   1   4   7  19  40  97 217 508
Добавлено через 9 минут
Цитата Сообщение от Bazaroff Посмотреть сообщение
Именно.
Плохо проверяли. Надо повторить.
1
288 / 93 / 11
Регистрация: 29.05.2011
Сообщений: 2,403
21.01.2024, 18:28  [ТС] 10
bormant, что за странность?

Задача. Программа вычисления значения F(n)
0
Модератор
Эксперт Pascal/DelphiЭксперт NIX
7774 / 4602 / 2825
Регистрация: 22.11.2013
Сообщений: 13,083
Записей в блоге: 1
21.01.2024, 18:43 11
Цитата Сообщение от Bazaroff Посмотреть сообщение
странность?
тривиальная опечатка.
должно быть:
Pascal
4
  else f:=f(n-1)+3*f(n-2);
А у вас? А у вас:
Pascal
4
  else f:=f(n-1)+3*(n-2);
1
288 / 93 / 11
Регистрация: 29.05.2011
Сообщений: 2,403
21.01.2024, 21:59  [ТС] 12
bormant, тыщу извинений!

Добавлено через 1 час 18 минут
bormant, не возьму в толк, а как это работает?

То есть, конструкцию f:=f(n-1)+3*f(n-2) Pascal понимает буквально точно так, как если бы это было написано на бумаге? F(n)=F(n-1)+3*F(n-2)?

В учебнике не приведено такого материала, как функцию представить рекурсивной.
0
626 / 946 / 150
Регистрация: 10.08.2015
Сообщений: 5,042
21.01.2024, 22:13 13
Цитата Сообщение от Bazaroff Посмотреть сообщение
не возьму в толк, а как это работает?
носки когда снимаешь, выворачиваешь их. вот примерно так это работает. если развернуть на плоскость, то это дерево. одна ветка для н-1, другая для н-2.
бери карандаш, садись и рисуй
0
Модератор
9875 / 5243 / 3306
Регистрация: 17.08.2012
Сообщений: 16,013
21.01.2024, 23:14 14
Bazaroff, ученье - свет, а неучёных - тьма. Грызите гранит науки. Рекурсия... Она поначалу несколько сложна для понимания. Функция, если она не может вычислить саму себя, вызывает саму себя с новыми аргументами. И вызовы происходят до тех пор, пока функция не сможет вычислить саму себя. Правда, здорово? У bormant в сообщении #2 окончательное вычисление происходит в строке #3.

Для вызова f(4) всё происходит так:
Код
f(4) [n=4]:
  if n<3 then f:=1 {не выполняется}
  else f:=
    f(n-1) [f(3)]? ->               f(3) [n=3]:
                                      if n<3 then f:=1 {не выполняется}
                                      else f:=
                                        f(n-1) [f(2)]? ->                f(2) [n=2]:
                                                                           if n<3 then f:=1
                                                                         (f(2) вычислено)
                                        +3*
                                        f(n-2) [f(1)]? ->                f(1) [n=1]:
                                                                           if n<3 then f:=1 
                                                                         (f(1) вычислено)
                                    (f(3) вычислено)
    +3*
    f(n-2) [f(2)]? ->               f(2) [n=2]:
                                      if n<3 then f:=1
                                    (f(2) вычислено)
(f(4) вычислено)
Для ясности строку 4 из сообщения #2 я разбил на части. Рекурсивный вызов я обозначил ->. Указал только те операторы, которые хоть как-то используются в вычислениях. Надеюсь, более-менее понятно нарисовал.

На самом деле, всё просто, не пугайтесь.
1
21.01.2024, 23:14
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
21.01.2024, 23:14
Помогаю со студенческими работами здесь

Программа для вычисления значения функции f (x) ее разложением в ряд Макларена: прокомментировать код
{Программа для вычисления значения функции f(x) ее разложением в ряд Макларена} объясните что да...

Программа вычисления значения
Всем привет. Я выкладываю программку и задание. Можете проверить и, если есть ошибки, то указать и...

Программа вычисления значения выражения

Программа вычисления значения функции
Ребят, сможете помочь? Составить программу вычисления значений функции, значения переменных вести...

Программа для вычисления значения
такое вот значение y=x-6/x-2, нужно написать программу для вычисления данного значения.

Не пашет программа вычисления значения функции
program SEXPARENEKIKRENDELVLAD; var x,y,e:real; begin x:=-12; while (x&gt;=-12) and (x&lt;=4) do...

Программа вычисления значения функции на отрезке.
Составить программу вычисления значения функции tg(x/2)+cos(x) на отрезке Добавлено через 14 минут...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
14
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru