Документ взят из кэша поисковой машины. Адрес оригинального документа : http://wasp.phys.msu.ru/forum/lofiversion/index.php?t6019.html
Дата изменения: Unknown
Дата индексирования: Mon Apr 11 11:34:50 2016
Кодировка: Windows-1251
Студенческий форум Физфака МГУ > Помогите пожалуйста
Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Помогите пожалуйста
Студенческий форум Физфака МГУ > Наука физика > Другое
Marizza
Помогите пожалуйста решить задачу по Си++
Написать функцию без параметров, без массивов в теле функции и без глобальных переменных, возвращающую при каждом обращении ссылку на переменную, содержащую значение очередного члена ряда Фибоначчи: a[0]=1, a[1]=1,..., a[i]=a[i-1]+a[1-2] для i>1.В основной программе ввести с клавиатуры размер динамически формируемого массива и определить массив. Используя функцию,
присвоить элементам массива значения членов ряда Фибоначчи и вывести их в обратном порядке, определив соответствующий макрос. Написать вторую функцию, "разыскивающую" в массиве "самый левый" элемент с заданным свойством. Свойство выберите самостоятельно. Функция должна возвращать указатель (адрес) на найденный элемент либо 0, если элементов с заданным свойством в массиве нет. Используя функцию, так измените значения найденных элементов в созданном ранее массиве, чтобы они утратили искомое свойство. Выведите измененный массив.

Очень надо...а у меня ничего не выходит...помогите пожалуйста... cry2.gif cry2.gif cry2.gif
M_T
Обычно в таких случаях принято писать, что именно не выходит или не получается. Потому как "ничего не получается" может означать "сделайте, пожалуйста, вместо меня эту задачу".
Задача, прямо скажем, уродская. Я так понимаю, это на использование static-переменных, которые как раз считаются плохим тоном, и вместо них принято использовать параметры функций или еще что-нибудь.
Так вот, если проблема была в том, как застаить функцию "помнить", что она уже считала, а что -- нет, то это делается так:
Код
int the_function_with_no_parameters()
{
    static int a=1;
    static int b=1;
    int temp=b;
    b=a;
    a+=temp;
    return a;
}

При каждом следующем вызове это даст Фибоначчи. Но... начиная с третьего члена. А нам нужно с первого, поэтому красивую функцию придется слегка подправить. Например, так:
Код
int the_function_with_no_parameters()
{
    static int a=0;
    static int b=0;
    if ((a==0) && (b==0))
    {
        // first time
        b=1;
        return 1;
    }
    else if ((a==0) && (b==1))
    {
        // second time
        a=1;
        return 1;
    }
    else
    {
        int temp=b;
        b=a;
        a+=temp;
        return a;
    }
}
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Русская версия IP.Board © 2001-2016 IPS, Inc.