Задача на фибоначчи. помогите решить.

  • Автор темы Mcicool
  • Дата начала
M

Mcicool

#1
Написать функцию без параметров, без массивов в теле функции
и без глобальных переменных, возвращающую при каждом обращении
ссылку на переменную, содержащую значение очередного члена ряда
Фибоначчи:
a[0]=1, a[1]=1,..., a=a[i-1]+a[1-2] для i>1.
В основной программе ввести с клавиатуры размер динамически
формируемого массива и определить массив. Используя функцию,
присвоить элементам массива значения членов ряда Фибоначчи и
вывести их в обратном порядке, определив соответствующий
макрос.
Написать вторую функцию, "разыскивающую" в массиве "самый левый"
элемент с заданным свойством. Свойство выберите самостоятельно.
Функция должна возвращать указатель (адрес) на найденный элемент
либо 0, если элементов с заданным свойством в массиве нет.
Используя функцию, так измените значения найденных элементов
в созданном ранее массиве, чтобы они утратили искомое свойство.
Выведите измененный массив.
 
P

pushkin

#2
Условие задачи очень "пахнет" олимпиадностью. По крайней мере мне пока не очень понятно, как можно выдавать каждый раз разные значения на выходе из функции (Random я не рассматриваю), если негде хранить промежуточные данные (два предыдущих числа из последовательности). Конечно, можно извратнуться и хранить эти два числа в файле или передавать их Web сервису, написанному специально для этой цели - в этих случаях все условия будут соблюдены.

Словом, все вышеперечисленное заставляет меня усомниться в корректности условия задачи. Может быть имелось в виду, что нужно написать функцию-член класса, среди полей которого могут быть переменные (в таком случае они уже не будут глобальными).

Короче, я пока пас. Если что-нить придумаю - обязательно сюда напишу.

P. S. Все остальные требования вообще простые относительно первого: функция без параметров, без массивов в теле (без возвращаемого значения:)), которая при каждом обращении возвращает следующее число в последовательности Фибоначи.
 

Kmet

Java Team
25.05.2006
1 036
8
#3
Задача совсем не олимпиадная, скорее на знание языка. Скорее всего предпологается использование статических переменных(для не реитерабельной функции)

Код:
int fenob()
{
static int f=1;
static int s=1;
int t=f+s;
f=s;
s=t;
return t;
}
такой вот набросок. не совсем правильный так как выдает члены начиная с третьего, но думаю суть понятна
 
P

pushkin

#4
Опана - тут я и накололся - действительно так возможно, но статические переменные - те же глобальные, только у них область видимости ограничена телом функции. А я и забыл про них - спасибо за напоминание :)))
 
S

Slavon76

#5
Привет, посмотри этот код - может быть подойдёт :
#include <conio.h>
#include <stdio.h>

long fib (int n)
{
if ((n == 0) || (n ==1))
return 1;
else
return (fib (n-1) + fib (n-2));
}

void main()
{
int n = 0;
for ( ; n <= 20; n++)
printf ("Fibunachi (%d): %ld\n\r", n, fib(n));
}
 
P

pushkin

#6
Код, конечно, работает, но, к сожалению, не проходит по условию задачи - нужно было написать функцию без параметров. То, что проходит по условию уже привел г-н Kmet. Спасибо ему большое.
 
M

Mcicool

#7
Спасибо всем большое ) Я, правда уже сам все давно сделал ))