Форум программистов, компьютерный форум 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 ?
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Issues
429 / 364 / 37
Регистрация: 06.08.2012
Сообщений: 961
15.08.2014, 21:59     Числа Фибоначчи - растолковать код #2
Цитата Сообщение от jadmax Посмотреть сообщение
Фебиначи

http://ru.wikibooks.org/wiki/Вычисление_чисел_Фибоначчи
John Prick
15.08.2014, 21:59
  #3

Не по теме:

Цитата Сообщение от jadmax Посмотреть сообщение
Числа Фебиначи
Так его ещё никто не называл...

RussBear
 Аватар для RussBear
1 / 1 / 1
Регистрация: 06.08.2014
Сообщений: 77
15.08.2014, 22:05     Числа Фибоначчи - растолковать код #4
Цитата Сообщение от John Prick Посмотреть сообщение
Так его ещё никто не называл...
это точно
jadmax
0 / 0 / 0
Регистрация: 01.06.2014
Сообщений: 11
15.08.2014, 22:13  [ТС]     Числа Фибоначчи - растолковать код #5
Простите я просто быстро писал *Фибоначчи
John Prick
754 / 687 / 123
Регистрация: 27.07.2012
Сообщений: 1,974
Завершенные тесты: 3
15.08.2014, 22:18     Числа Фибоначчи - растолковать код #6
Цитата Сообщение от jadmax Посмотреть сообщение
Больше всего интересно для чего тут div_t (12 строчка) и sizeof(15 и дальше),
еще не понимаю для чего memmove ?
1) div_t какой-то тип. Честно, я хз.
2) sizeof - оператор, вычисляющий размер типа в байтах.
3) memmove, судя по всему, какая-то функция копирования одного массива в другой.
BlackIce
309 / 171 / 64
Регистрация: 18.01.2014
Сообщений: 387
15.08.2014, 22:22     Числа Фибоначчи - растолковать код #7
Цитата Сообщение от jadmax Посмотреть сообщение
Я нашел хороший код и хочу его модифицировать, но мне нужно чтоб ктото мне объяснил что за что отвечает.
Что именно вы хотите сделать с числами Фибоначчи? В вашем коде не С++, а сборная солянка из Си (memset, memmove) и С++ (std::cin, std::cout), хорошим его можно назвать с большой натяжкой.

Цитата Сообщение от John Prick Посмотреть сообщение
1) div_t какой-то тип. Честно, я хз.
http://www.cplusplus.com/reference/cstdlib/div_t/

Цитата Сообщение от John Prick Посмотреть сообщение
3) memmove, судя по всему, какая-то функция копирования одного массива в другой.
http://www.cplusplus.com/reference/cstring/memmove/
jadmax
0 / 0 / 0
Регистрация: 01.06.2014
Сообщений: 11
15.08.2014, 22:24  [ТС]     Числа Фибоначчи - растолковать код #8
Цитата Сообщение от John Prick Посмотреть сообщение
1) div_t какой-то тип. Честно, я хз.
2) sizeof - оператор, вычисляющий размер типа в байтах.
3) memmove, судя по всему, какая-то функция копирования одного массива в другой.
Я понимаю что sizeof оператор но для чего он здесь?
John Prick
754 / 687 / 123
Регистрация: 27.07.2012
Сообщений: 1,974
Завершенные тесты: 3
15.08.2014, 22:26     Числа Фибоначчи - растолковать код #9
Цитата Сообщение от jadmax Посмотреть сообщение
Я понимаю что sizeof оператор но для чего он здесь?
Чтобы определить количество байт для копирования в memset и memmove.
BlackIce
309 / 171 / 64
Регистрация: 18.01.2014
Сообщений: 387
15.08.2014, 22:26     Числа Фибоначчи - растолковать код #10
Цитата Сообщение от jadmax Посмотреть сообщение
Я понимаю что sizeof оператор но для чего он здесь?
C
1
memset(c, 0, sizeof(int)*N);
sizeof(int) -- размер int
N -- размер массива
sizeof(int) * N -- размер массива в байтах
memset, memove работают с байтами, чтобы обнулить, к примеру, массив из 5-и int, пусть int занимает 4 байта (sizeof(int) -> 4), мы должны передать в memset размер памяти для обнуления 20 байт (sizeof(int) * 5).
jadmax
0 / 0 / 0
Регистрация: 01.06.2014
Сообщений: 11
15.08.2014, 22:30  [ТС]     Числа Фибоначчи - растолковать код #11
Цитата Сообщение от BlackIce Посмотреть сообщение
Что именно вы хотите сделать с числами Фибоначчи? В вашем коде не С++, а сборная солянка из Си и С++ (std::cin, std::cout), хорошим его можно назвать с большой натяжкой
Спасибо за ссылки, а код я этот нашел на этом форуме.
Я хочу чтоб чтоб программа начинала считать с того числа с которого я ей задам до определенного момента.
Например 6 6 12 18 30 48 78
John Prick
754 / 687 / 123
Регистрация: 27.07.2012
Сообщений: 1,974
Завершенные тесты: 3
15.08.2014, 22:33     Числа Фибоначчи - растолковать код #12
Цитата Сообщение от jadmax Посмотреть сообщение
Например 6 6 12 18 30 48 78
Это уже не числа Фибоначи. Нужно точнее определить задание.
BlackIce
309 / 171 / 64
Регистрация: 18.01.2014
Сообщений: 387
15.08.2014, 22:33     Числа Фибоначчи - растолковать код #13
Цитата Сообщение от jadmax Посмотреть сообщение
Я хочу чтоб чтоб программа начинала считать с того числа с которого я ей задам до определенного момента.
Например 6 6 12 18 30 48 78
Приведите пример входных и выходных данных, "до определенного момента" -- понятие растяжимое. До какого определенного момента?

Цитата Сообщение от jadmax Посмотреть сообщение
Например 6 6 12 18 30 48 78
Это не числа Фиббоначи.
jadmax
0 / 0 / 0
Регистрация: 01.06.2014
Сообщений: 11
15.08.2014, 22:42  [ТС]     Числа Фибоначчи - растолковать код #14
Просто алгоритм похож на числа Фиббоначи.
Ну например я ввожу 6 и еще раз 6, программа выводит число равно сумме двух предыдущих чисел например до 34 числа последовательности.
Первое число 6
Второе число 6
Выводит 6 6 12 18 30 48 78
Можно и без второго числа но так вроде практичнее.
John Prick
754 / 687 / 123
Регистрация: 27.07.2012
Сообщений: 1,974
Завершенные тесты: 3
15.08.2014, 22:48     Числа Фибоначчи - растолковать код #15
Цитата Сообщение от jadmax Посмотреть сообщение
Ну например я ввожу 6 и еще раз 6, программа выводит число равно сумме двух предыдущих чисел например до 34 числа последовательности.
Первое число 6
Второе число 6
Выводит 6 6 12 18 30 48 78
Выделенное к чему относится? Вывеси 34 числа, или вывести числа, меньшие 34? В твоём примере ни то, ни другое.

А задача вовсе не требует того говнокода, что ты в начале накопал.
C++
1
2
3
4
5
6
7
8
9
10
11
int x1, x2 , y, max;
std::cin >> x1;
std::cin >> x2
std::cin >> max;
while (y < max)
{
    y = x1 + x2;
    std::cout << y << ' ';
    x1 = x2;
    x2 = y;
}
BlackIce
309 / 171 / 64
Регистрация: 18.01.2014
Сообщений: 387
15.08.2014, 22:59     Числа Фибоначчи - растолковать код #16
Цитата Сообщение от John Prick Посмотреть сообщение
C++
1
2
3
4
5
6
7
8
9
10
int x1, x2 , y, max;
std::cin >> x1;
std::cin >> x2;
std::cin >> max;
while (y < max) {
    y = x1 + x2;
    std::cout << y << ' ';
    x1 = x2;
    x2 = y;
}
Вы y забыли инициализировать.

C++
1
2
3
4
5
6
7
8
9
    int x1, x2, max;
    std::cin >> x1;
    std::cin >> x2;
    std::cin >> max;
    while (x1 <= max) {
        cout << x1 << ' ';
        x2 = x1 + x2;
        x1 = x2 - x1;
    }
John Prick
754 / 687 / 123
Регистрация: 27.07.2012
Сообщений: 1,974
Завершенные тесты: 3
15.08.2014, 23:01     Числа Фибоначчи - растолковать код #17
Цитата Сообщение от BlackIce Посмотреть сообщение
Вы y забыли инициализировать.
Ну да, можно и без него обойтись.
jadmax
0 / 0 / 0
Регистрация: 01.06.2014
Сообщений: 11
15.08.2014, 23:36  [ТС]     Числа Фибоначчи - растолковать код #18
Цитата Сообщение от John Prick Посмотреть сообщение
Выделенное к чему относится? Вывеси 34 числа, или вывести числа, меньшие 34? В твоём примере ни то, ни другое.
А задача вовсе не требует того говнокода, что ты в начале накопал.
Вывести 34 или 5 чисел без разницы.
А на счет говнокода, я какраз хоте со всей этой перегрузкой, массивами и тд.
John Prick
754 / 687 / 123
Регистрация: 27.07.2012
Сообщений: 1,974
Завершенные тесты: 3
15.08.2014, 23:39     Числа Фибоначчи - растолковать код #19
Цитата Сообщение от jadmax Посмотреть сообщение
А на счет говнокода, я какраз хоте со всей этой перегрузкой, массивами и тд.
Ну не понятно, зачем городить весь этот огород для плёвой задачи. Да и нет тут перегрузок никаких.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
15.08.2014, 23:44     Числа Фибоначчи - растолковать код
Еще ссылки по теме:

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

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

Или воспользуйтесь поиском по форуму:
jadmax
0 / 0 / 0
Регистрация: 01.06.2014
Сообщений: 11
15.08.2014, 23:44  [ТС]     Числа Фибоначчи - растолковать код #20
Цитата Сообщение от John Prick Посмотреть сообщение
Ну не понятно, зачем городить весь этот огород для плёвой задачи. Да и нет тут перегрузок никаких.
Just for lulz
Я просто научится хочу таким способом, а написать простой код всегда можно, наверное.
Yandex
Объявления
15.08.2014, 23:44     Числа Фибоначчи - растолковать код
Ответ Создать тему
Опции темы

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