Модераторы: bsa
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> рекурсия вроде 
V
    Опции темы
Vicipi
Дата 16.1.2009, 22:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 39
Регистрация: 13.2.2008

Репутация: нет
Всего: нет



как это сделать?(С++)
формирование двоичной псевдослучайной последовательности {φi} с помощью алгоритма φi = (φi-8 + φi-4 + φi-3 + φi-2) mod 2, φ0=1, φi=0 для i<0;     i - 96 штук 
PM MAIL   Вверх
pan2004
Дата 16.1.2009, 22:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 357
Регистрация: 28.7.2007

Репутация: 2
Всего: 9



Цитата(Vicipi @  16.1.2009,  22:19 Найти цитируемый пост)
как это сделать?

написать функцию int fi(int index), реализующая указанный алгоритм(надеюсь, в математических понятиях и символах разбираешься). Функция возвращает index-ный элемент последовательности (0 или 1). mod 2 на C будет %2.


--------------------
Qt4/C++ fan
WinXP SP3: MSVC++2005 Qt4.5.1 Boost1.39
сыграем в дурака?
PM MAIL   Вверх
Vicipi
Дата 16.1.2009, 22:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 39
Регистрация: 13.2.2008

Репутация: нет
Всего: нет



это я понимаю, меня смущает φi=0 для i<0, как сделать проверку?
PM MAIL   Вверх
pan2004
Дата 16.1.2009, 22:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 357
Регистрация: 28.7.2007

Репутация: 2
Всего: 9



Цитата(Vicipi @  16.1.2009,  22:39 Найти цитируемый пост)
меня смущает φi=0 для i<0

чем?
Цитата(Vicipi @  16.1.2009,  22:39 Найти цитируемый пост)
как сделать проверку?

так же как и остальные, через if:
Код

if (index < 0) return 0;



--------------------
Qt4/C++ fan
WinXP SP3: MSVC++2005 Qt4.5.1 Boost1.39
сыграем в дурака?
PM MAIL   Вверх
Vicipi
Дата 16.1.2009, 22:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 39
Регистрация: 13.2.2008

Репутация: нет
Всего: нет



не пойму я как этот алгоритм записать, можешь код привести 
PM MAIL   Вверх
pan2004
Дата 16.1.2009, 22:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 357
Регистрация: 28.7.2007

Репутация: 2
Всего: 9



пример вычисление чисел фиббоначчи:
Код

int fib(int index)
{
   if (index <= 2) return 1;
   return fib(index-1) + fib(index-2);
} 

твоя функция делается аналогично.


--------------------
Qt4/C++ fan
WinXP SP3: MSVC++2005 Qt4.5.1 Boost1.39
сыграем в дурака?
PM MAIL   Вверх
Lamak
Дата 17.1.2009, 00:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 204
Регистрация: 8.5.2005
Где: Украина,Одесса

Репутация: нет
Всего: 7



вот код, без какой-либо рекурсии
Код

#include "iostream"

using namespace std;

//φi = (φi-8 + φi-4 + φi-3 + φi-2) mod 2, φ0=1, φi=0 для i<0;     i - 96 

const int n=96;
long fi[n];

long get_fi(int i)
{
    if(i<0)
        return 0;
    else
        return fi[i];
}

long find_fi()
{
    for(int i=2;i<n;i++)
    {
        fi[i]=(fi[i-8]+fi[i-4]+fi[i-3]+fi[i-2])%2;
    }
    return fi[n-1];
}

void main()
{
    fi[0]=1;
    cout<<"f"<<n-1<<"="<<find_fi()<<endl;
    system("pause");
}

только проверь условие, потому как получается ряд состоящий из одних нулей  

Это сообщение отредактировал(а) Lamak - 17.1.2009, 00:13
--------------------
Роботы - это интересно и увлекательно! 
PM MAIL   Вверх
Vicipi
Дата 17.1.2009, 07:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 39
Регистрация: 13.2.2008

Репутация: нет
Всего: нет



я вот так записал, только почему не возвращает se[i] в функции, как это исправить?
Код

int fi(int i)
{
      if(i<0)
        return 0;
    else
        return se[i];

}  

int se[96]={1,0};
     cout << se[0];
    for(i=1;i<96;i++)
   { se[i]=(fi(i-8)+fi(i-4)+fi(i-3)+fi(i-2))%2;
       cout << se[i];}
    

PM MAIL   Вверх
mes
Дата 17.1.2009, 12:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


Профиль
Группа: Участник Клуба
Сообщений: 7954
Регистрация: 14.1.2006

Репутация: 79
Всего: 250



Цитата(Lamak @  16.1.2009,  23:09 Найти цитируемый пост)
    for(int i=2;i<n;i++)
    {
        fi[i]=(fi[i-8]+fi[i-4]+fi[i-3]+fi[i-2])%2;

тут выход за границу (забыто get_)


--------------------
PM MAIL WWW   Вверх
pan2004
Дата 17.1.2009, 12:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 357
Регистрация: 28.7.2007

Репутация: 2
Всего: 9



Цитата(Lamak @  17.1.2009,  00:09 Найти цитируемый пост)
только проверь условие, потому как получается ряд состоящий из одних нулей

get_fi() есть, но не используется. find_fi смотрит за пределы массива.
Цитата(Vicipi @  17.1.2009,  07:40 Найти цитируемый пост)
 почему не возвращает se[i] в функции, как это исправить?

да что то у тебя функции вообще не видно, кроме fi(...)
а для возврата есть оператор return.
return se[i];


--------------------
Qt4/C++ fan
WinXP SP3: MSVC++2005 Qt4.5.1 Boost1.39
сыграем в дурака?
PM MAIL   Вверх
mes
Дата 17.1.2009, 12:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


Профиль
Группа: Участник Клуба
Сообщений: 7954
Регистрация: 14.1.2006

Репутация: 79
Всего: 250



вот вариация вышепредставленного варианта с предрасчетом :
Код

int fi_[96]={1,0};

int fi(int i)
{
    return (i<0) ? 0 : fi_[i];
}

void fi_init ()
{
     for(int i=1;i<96;i++) fi_[i]=(fi(i-8)+fi(i-4)+fi(i-3)+fi(i-2))%2;
}

int main()
{
   fi_init();

   for(int i=1;i<96;i++) std::cout<<fi(i) << " ";

   system("pause");
    return 0;
}


Это сообщение отредактировал(а) mes - 17.1.2009, 12:37


--------------------
PM MAIL WWW   Вверх
Lamak
Дата 17.1.2009, 17:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 204
Регистрация: 8.5.2005
Где: Украина,Одесса

Репутация: нет
Всего: 7



дам ступил
видно очень уж сонным был smile 
вот исправил  smile 
Код

#include "iostream"

using namespace std;

//φi = (φi-8 + φi-4 + φi-3 + φi-2) mod 2, φ0=1, φi=0 для i<0;     i - 96 

const int n=96;
long fi[n];

long get_fi(int i)
{
    if(i<0)
        return 0;
    else
        return fi[i];
}

void find_fi()
{
    for(int i=1;i<n;i++)
    {
        fi[i]=(get_fi(i-8)+get_fi(i-4)+get_fi(i-3)+get_fi(i-2))%2;
    }
}

void main()
{
    fi[0]=1;
    find_fi();
    for(int i=1; i<96; i++) 
    {
        cout<<fi[i]<<" ";
    }
    cout<<endl;
    system("pause");
}

--------------------
Роботы - это интересно и увлекательно! 
PM MAIL   Вверх
Vicipi
Дата 17.1.2009, 22:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 39
Регистрация: 13.2.2008

Репутация: нет
Всего: нет



ок, спасибо всем)))
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Для новичков"
JackYF
bsa

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.0610 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.