1. Наш канал codeby в telegram. Пишем об информационной безопасности, методах защиты информации, о программировании. Не пропускай новости с кодебай, будь в тренде ! Подробнее ...

    Скрыть объявление

Далеко не элементарщина....

Тема в разделе "С и С++", создана пользователем Mcicool, 4 май 2006.

  1. Mcicool

    Mcicool Гость

    Репутация:
    0
    Далеко не элементарщина....

    Тут я вообще не понимаю, что надо делать...
     
  2. grigsoft

    grigsoft Well-Known Member

    Репутация:
    0
    Регистрация:
    15 ноя 2005
    Сообщения:
    735
    Симпатии:
    0
    Обычная последовательность - следующий член вычисляется по предыдущим. Хочешь через рекурсию, хочешь - последовательно. Только подумать надо самому немножко.

    Посчитай сначала ручками V(5), например, для понимания о чем речь.
     
  3. ZZmiy

    ZZmiy Гость

    Репутация:
    0
    :) Это у меня глюки, или последовательности состоят из нулей ? :blink:
     
  4. grigsoft

    grigsoft Well-Known Member

    Репутация:
    0
    Регистрация:
    15 ноя 2005
    Сообщения:
    735
    Симпатии:
    0
    Гы, кстати да :blink:
     
  5. Barmutik

    Barmutik Гость

    Репутация:
    0
    По моему глюк условия...
     
  6. Mcicool

    Mcicool Гость

    Репутация:
    0
    Хмм, мдя, а может быть так и надо, чтобы программа в итоге показывала, что каждое число 0.

    Примерно хоть покажите текст программы (через рекурсию желательно), чтобы там покумекал.
     
  7. ZZmiy

    ZZmiy Гость

    Репутация:
    0
    С помощью рекурсии: (хотя, конечно, она тут абсолютно не нужна)

    Код:
    double u(int i)
    { 
    
      // тут определяются начальные значения последовательности
      if (i<3)
        return 0; 
    
      double utemp = u(i-1);// чтобы уменьшить число рекурсивных вызовов
      double vtemp = v(i-2);
    
      return (utemp-u(i-2)*vtemp-v(i-2))/(1+utemp*utemp+vtemp*vtemp);
    }
    
    double v(int i)
    {
    // тут определяются начальные значения последовательности
     if (i < 3)
       return 0;
    
     double vtemp = v(i-1););// чтобы уменьшить число рекурсивных вызовов
     return (u(i-1)+vtemp)/(abs(u(i-2)-vtemp)+1);
    }

    З.Ы. Ну и, конечно, стоит уточнить начальные условия :)
     
  8. Mcicool

    Mcicool Гость

    Репутация:
    0
    А если не через рекурсию, то как же ???
     
  9. ZZmiy

    ZZmiy Гость

    Репутация:
    0
    Хоть немножко подумав... :blink:
     
  10. Mcicool

    Mcicool Гость

    Репутация:
    0
    Да я просто совсем этой темы не понимаю... (((
     
  11. Trupik

    Trupik Гость

    Репутация:
    0
    <!--QuoteBegin-Mcicool+7:05:2006, 00:45 -->
    <span class="vbquote">(Mcicool @ 7:05:2006, 00:45 )</span><!--QuoteEBegin-->Да я просто совсем этой темы не понимаю... (((
    [snapback]35151" rel="nofollow" target="_blank[/snapback]​
    [/quote]
    Какой именно?
     
  12. ru_looking_for

    ru_looking_for Гость

    Репутация:
    0
    Вот код без рекурсии. Вместо U1, V1, U2, V2 - подставляешь начальные условия, n - до какого члена считать, а в переменные Un и Vn запишутся конечные значения. Функция вернет true если все нормально или false, если n - недопустимо.

    Код:
    #include <math.h>
    
    bool GetUnVn(double U1, double V1, double U2, double V2, int n, double &Un, double &Vn)
    {
    double Ui_1, Vi_1, Ui_2, Vi_2, Ui, Vi;
    
    Ui_1 = U2;
    Vi_1 = V2;
    Ui_2 = U1;
    Vi_2 = V1;
    
    if (n < 3)
    return false;
    
    for (int i = 3; i <= n; i++)
    {
    Ui = (Ui_1 - Ui_2*Vi_1 - Vi_2)/(1 + Ui_1*Ui_1 + Vi_1*Vi_1);
    Vi = (Ui_1 - Vi_1)/(fabs(Ui_2 + Vi_2) + 2);
    
    Ui_2 = Ui_1;
    Vi_2 = Vi_1;
    
    Ui_1 = Ui;
    Vi_1 = Vi;
    }
    
    Un = Ui;
    Vn = Vi;
    
    return true;
    }
     
  13. Mcicool

    Mcicool Гость

    Репутация:
    0
    Большое всем спасибо, тему можно завкрывать!
     
Загрузка...

Поделиться этой страницей