• 🔥 Бесплатный курс от Академии Кодебай: «Анализ защищенности веб-приложений»

    🛡 Научитесь находить и использовать уязвимости веб-приложений.
    🧠 Изучите SQLi, XSS, CSRF, IDOR и другие типовые атаки на практике.
    🧪 Погрузитесь в реальные лаборатории и взломайте свой первый сайт!
    🚀 Подходит новичкам — никаких сложных предварительных знаний не требуется.

    Доступ открыт прямо сейчас Записаться бесплатно

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

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

Mcicool

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

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

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

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

Код:
int fenob()
{
static int f=1;
static int s=1;
int t=f+s;
f=s;
s=t;
return t;
}

такой вот набросок. не совсем правильный так как выдает члены начиная с третьего, но думаю суть понятна
 
Опана - тут я и накололся - действительно так возможно, но статические переменные - те же глобальные, только у них область видимости ограничена телом функции. А я и забыл про них - спасибо за напоминание :)))
 
Привет, посмотри этот код - может быть подойдёт :
#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));
}
 
Код, конечно, работает, но, к сожалению, не проходит по условию задачи - нужно было написать функцию без параметров. То, что проходит по условию уже привел г-н Kmet. Спасибо ему большое.
 
Спасибо всем большое ) Я, правда уже сам все давно сделал ))
 
Мы в соцсетях:

Взломай свой первый сервер и прокачай скилл — Начни игру на HackerLab