Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
 
jadmax
0 / 0 / 1
Регистрация: 01.06.2014
Сообщений: 11
#1

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

15.08.2014, 21:54. Просмотров 795. Ответов 21
Метки нет (Все метки)

Я тут хочу попрактиковаться в С++, а именно на числах Фебиначи.
Я нашел хороший код и хочу его модифицировать, но мне нужно чтоб ктото мне объяснил что за что отвечает.
Помогите плз.
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 ?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
15.08.2014, 21:54
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Числа Фибоначчи - растолковать код (C++):

Число Фибоначчи до числа n. Код неправильно работает
Надо написать код через main что бы программа просила ввести пользователя...

Числа Фибоначчи в длинной арифметике (код почти готов, но я застолбил)
Здравствуйте, дорогие форумчане. Есть такое задание, как написать код для 100...

По заданному числу Фибоначчи найти предыдущее и следующее числа Фибоначчи
Дано целое число N(&gt;1), которое является числом Фибоначчи: N=Fk. Найти целые...

Набрать с чисел Фибоначчи в интервале от 1 до 100, только просто числа, а также их порядковые номера в ряду Фибоначчи
Помогите с задачкой Набрать с чисел Фибоначчи в интервале от 1 до 100,...

Вывести на экран все числа, номера которых есть числа Фибоначчи
Вывести на экран все числа заданной последовательности, номера которых есть...

Растолковать задание
Записать выражение, зависящее от координат точки X и Y и принимающее значение...

21
Issues
430 / 365 / 149
Регистрация: 06.08.2012
Сообщений: 961
15.08.2014, 21:59 #2
Цитата Сообщение от jadmax Посмотреть сообщение
Фебиначи

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

Не по теме:

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

0
RussBear
1 / 1 / 1
Регистрация: 06.08.2014
Сообщений: 68
15.08.2014, 22:05 #4
Цитата Сообщение от John Prick Посмотреть сообщение
Так его ещё никто не называл...
это точно
0
jadmax
0 / 0 / 1
Регистрация: 01.06.2014
Сообщений: 11
15.08.2014, 22:13  [ТС] #5
Простите я просто быстро писал *Фибоначчи
0
John Prick
831 / 764 / 256
Регистрация: 27.07.2012
Сообщений: 2,176
Завершенные тесты: 3
15.08.2014, 22:18 #6
Цитата Сообщение от jadmax Посмотреть сообщение
Больше всего интересно для чего тут div_t (12 строчка) и sizeof(15 и дальше),
еще не понимаю для чего memmove ?
1) div_t какой-то тип. Честно, я хз.
2) sizeof - оператор, вычисляющий размер типа в байтах.
3) memmove, судя по всему, какая-то функция копирования одного массива в другой.
0
BlackIce
310 / 172 / 73
Регистрация: 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/
1
jadmax
0 / 0 / 1
Регистрация: 01.06.2014
Сообщений: 11
15.08.2014, 22:24  [ТС] #8
Цитата Сообщение от John Prick Посмотреть сообщение
1) div_t какой-то тип. Честно, я хз.
2) sizeof - оператор, вычисляющий размер типа в байтах.
3) memmove, судя по всему, какая-то функция копирования одного массива в другой.
Я понимаю что sizeof оператор но для чего он здесь?
0
John Prick
831 / 764 / 256
Регистрация: 27.07.2012
Сообщений: 2,176
Завершенные тесты: 3
15.08.2014, 22:26 #9
Цитата Сообщение от jadmax Посмотреть сообщение
Я понимаю что sizeof оператор но для чего он здесь?
Чтобы определить количество байт для копирования в memset и memmove.
0
BlackIce
310 / 172 / 73
Регистрация: 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).
0
jadmax
0 / 0 / 1
Регистрация: 01.06.2014
Сообщений: 11
15.08.2014, 22:30  [ТС] #11
Цитата Сообщение от BlackIce Посмотреть сообщение
Что именно вы хотите сделать с числами Фибоначчи? В вашем коде не С++, а сборная солянка из Си и С++ (std::cin, std::cout), хорошим его можно назвать с большой натяжкой
Спасибо за ссылки, а код я этот нашел на этом форуме.
Я хочу чтоб чтоб программа начинала считать с того числа с которого я ей задам до определенного момента.
Например 6 6 12 18 30 48 78
0
John Prick
831 / 764 / 256
Регистрация: 27.07.2012
Сообщений: 2,176
Завершенные тесты: 3
15.08.2014, 22:33 #12
Цитата Сообщение от jadmax Посмотреть сообщение
Например 6 6 12 18 30 48 78
Это уже не числа Фибоначи. Нужно точнее определить задание.
0
BlackIce
310 / 172 / 73
Регистрация: 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
Это не числа Фиббоначи.
0
jadmax
0 / 0 / 1
Регистрация: 01.06.2014
Сообщений: 11
15.08.2014, 22:42  [ТС] #14
Просто алгоритм похож на числа Фиббоначи.
Ну например я ввожу 6 и еще раз 6, программа выводит число равно сумме двух предыдущих чисел например до 34 числа последовательности.
Первое число 6
Второе число 6
Выводит 6 6 12 18 30 48 78
Можно и без второго числа но так вроде практичнее.
0
John Prick
831 / 764 / 256
Регистрация: 27.07.2012
Сообщений: 2,176
Завершенные тесты: 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;
}
0
BlackIce
310 / 172 / 73
Регистрация: 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;
    }
0
John Prick
831 / 764 / 256
Регистрация: 27.07.2012
Сообщений: 2,176
Завершенные тесты: 3
15.08.2014, 23:01 #17
Цитата Сообщение от BlackIce Посмотреть сообщение
Вы y забыли инициализировать.
Ну да, можно и без него обойтись.
0
jadmax
0 / 0 / 1
Регистрация: 01.06.2014
Сообщений: 11
15.08.2014, 23:36  [ТС] #18
Цитата Сообщение от John Prick Посмотреть сообщение
Выделенное к чему относится? Вывеси 34 числа, или вывести числа, меньшие 34? В твоём примере ни то, ни другое.
А задача вовсе не требует того говнокода, что ты в начале накопал.
Вывести 34 или 5 чисел без разницы.
А на счет говнокода, я какраз хоте со всей этой перегрузкой, массивами и тд.
0
John Prick
831 / 764 / 256
Регистрация: 27.07.2012
Сообщений: 2,176
Завершенные тесты: 3
15.08.2014, 23:39 #19
Цитата Сообщение от jadmax Посмотреть сообщение
А на счет говнокода, я какраз хоте со всей этой перегрузкой, массивами и тд.
Ну не понятно, зачем городить весь этот огород для плёвой задачи. Да и нет тут перегрузок никаких.
0
jadmax
0 / 0 / 1
Регистрация: 01.06.2014
Сообщений: 11
15.08.2014, 23:44  [ТС] #20
Цитата Сообщение от John Prick Посмотреть сообщение
Ну не понятно, зачем городить весь этот огород для плёвой задачи. Да и нет тут перегрузок никаких.
Just for lulz
Я просто научится хочу таким способом, а написать простой код всегда можно, наверное.
0
15.08.2014, 23:44
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
15.08.2014, 23:44
Привет! Вот еще темы с решениями:

Составьте программу, позволяющую найти все числа Фибоначчи, меньшие заданного числа N
Помогите, пожалуйста. Вот сама задача: Пара кроликов каждый месяц дает...

Числа фибоначчи. Не понятно почему выбраны числа 1 и 2
Есть код фибоначчи: unsigned int fibonacci( unsigned int n ) { return n...

Числа Фибоначчи: с какого числа начинается ряд?
Недавно столкнулся с такой проблемой: Некоторые источники утверждают(например...

Числа Фибоначчи, простые числа и делители
Write a menu() function that prints the following menu and returns the selected...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru