Другие языки программирования и технологии

Нужна помощь в составлении программы

1) Ряд фибоначчи, показать номер числа не превосходящего 300. 2) cosx=1-x^2/2!+x^4/4!-x^6/6!+..(-1)^m x^2m/(2m)! з.ы. Паскаль*
1) Ну и задачку тебе задали!
Реккурентная формула для чисел Фибоначчи достаточно проста:
F(1) = 1, F(2) = 2, для n>2 F(n) = F(n-1) + F(n-2)
Нереккурентная формула для чисел Фибоначчи выглядит так:
F(n) = [((1+V5)/2)^n - ((1-V5)/2)^n] / V5
Здесь V5 - это квадратный корень из 5. Числа х1 = (1+V5)/2 и х2 = (1-V5)/2 являются корнями x^2-x-1=0
А тебе нужно из этой жуткой формулы выразить n через F(n), то есть написать обратную функцию.
Проще массив набить: 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233, всё, следующий член равен 377.
А потом проверять, какому элементу массива равно введенное число, и выводить номер элемента.
const F = [1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233]
var k, n, j: integer
BEGIN
k := 1;
while k > 0 do
begin
writeln ('Введите Число Фибоначчи от 1 до 233 или 0 для окончания работы программы');
readln (k);
if k = 0 then n := 0 else
for j := 1 to 12 do if F[j] := k then n := j;
writeln (n);
end;
END.

2) Еще лучше, тут заморочки с факториалами, придется отдельную функцию писать
var x, cosx, element: real
var m, k: integer
function Fact (n: integer) : integer
var i: integer
Fact := 1;
for i := 1 to n do Fact := Fact * i;
end;
BEGIN
writeln ('Введите количество элементов в ряду: ');
readln (m);
writeln ('Введите x в радианах: ');
readln (x);
cosx := 1
for k := 1 to m do
begin
element := exp (2*k*ln(x)) / Fact(2*k);
if k mod 2 = 1 then element := element*(-1);
cosx = cosx + element;
end;
END.

Где-то так.
ДВ
Денис Валиахметов
95 471
Лучший ответ