Форум программистов, компьютерный форум CyberForum.ru

Числа Фибоначчи - растолковать код - C++

Восстановить пароль Регистрация
 
 
jadmax
0 / 0 / 0
Регистрация: 01.06.2014
Сообщений: 11
15.08.2014, 21:54     Числа Фибоначчи - растолковать код #1
Я тут хочу попрактиковаться в С++, а именно на числах Фебиначи.
Я нашел хороший код и хочу его модифицировать, но мне нужно чтоб ктото мне объяснил что за что отвечает.
Помогите плз.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
    
 
    #include "stdafx.h"
    #include <iostream>
    #include <conio.h>
    #include <math.h>
     
    using namespace std;
     
    const int N = 220;
    int ctrl = 0;
    div_t t;
    void add(int a[N], int b[N], int c[N])
    {
      memset(c, 0, sizeof(int)*N);
      int i = 0;
      for(i = N - 1; i >= 0; i--)
      {
        if(t.quot)
            {
          c[i]++;
          if(i < ctrl) ctrl = i;
        }
        t = div((c[i] + a[i] + b[i]),10);
        c[i] = t.rem;
      }
    }
    int main()
    {
     int fib0[N];int fib1[N];int fib2[N];
     memset(fib0, 0, sizeof(int)*N);
     memset(fib1, 0, sizeof(int)*N);
     memset(fib2, 0, sizeof(int)*N);
     int n;
     cin>>n;
     fib0[N - 1] = 1;fib1[N - 1] = 1;
     ctrl = N - 1;
     if(n<2) fib2[N - 1] = 1;
     for (int i = 2;i <= n;i++)
     {
       add(fib0, fib1, fib2);
       memmove(fib0, fib1, sizeof(int)*N);
          memmove(fib1, fib2, sizeof(int)*N);
     }
     for(int i = ctrl; i < N; i++) cout<<fib2[i];
     return 0;
     system ("pause");
    }
Добавлено через 2 минуты
Больше всего интересно для чего тут div_t (12 строчка) и sizeof(15 и дальше),
еще не понимаю для чего memmove ?
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
St1f1er
2 / 2 / 0
Регистрация: 08.08.2014
Сообщений: 14
15.08.2014, 23:49     Числа Фибоначчи - растолковать код #21
Мне интересно чего вы тут парится начинаете ? С++ это не тот язык которому можно научится тупо разбираясь с кодом из интернета, пытаясь интуитивно понять что оно может делать и методом тыка менять.

Берите книгу и вперед =) Си->Память-> C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
16.08.2014, 02:13     Числа Фибоначчи - растолковать код
Еще ссылки по теме:

C++ Числа Фибоначчи
C++ Число Фибоначчи до числа n. Код неправильно работает
Числа Фибоначчи, простые числа и делители C++

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
ZaMaZaN4iK
Мой лучший друг-отладчик!
 Аватар для ZaMaZaN4iK
163 / 163 / 9
Регистрация: 24.06.2012
Сообщений: 662
Записей в блоге: 5
Завершенные тесты: 1
16.08.2014, 02:13     Числа Фибоначчи - растолковать код #22
Есть также эффективный алгоритм вычисления N-ого числа Фибоначчи за logN. Вот код, разбирайтесь:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
#include <iostream>
 
using namespace std;
 
int fib(int n)
{
    int a=1,b=1,
        c=1,d=0,
        rc=0,rd=1,
        ta,tb,tc,td;
    while(n)
    {
        if(n & 1)
        {
            tc=rc*a+rd*c;
            td=rc*b+rd*d;
            rc=tc;rd=td;
        }
        ta=a*a+b*c;
        tb=a*b+b*d;
        tc=c*a+d*c;
        td=c*b+d*d;
        a=ta;b=tb;c=tc;d=td;
        n>>=1;
    }
    return rc;
}
 
int main()
{
    int n;
    cin>>n;
    cout<<fib(n)<<endl;
    system("pause");
    return 0;
}
Yandex
Объявления
16.08.2014, 02:13     Числа Фибоначчи - растолковать код
Ответ Создать тему
Опции темы

Текущее время: 05:22. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru