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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
 
jadmax
0 / 0 / 0
Регистрация: 01.06.2014
Сообщений: 11
#1

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

15.08.2014, 21:54. Просмотров 704. Ответов 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. Код неправильно работает - C++
Надо написать код через main что бы программа просила ввести пользователя положительное число n, далее программа должна выдавать все числа...

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

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

Растолковать задание - C++
Записать выражение, зависящее от координат точки X и Y и принимающее значение TRUE (t или 1), если точка принадлежит выделенной области...

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

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

21
Issues
430 / 365 / 37
Регистрация: 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
Сообщений: 77
15.08.2014, 22:05 #4
Цитата Сообщение от John Prick Посмотреть сообщение
Так его ещё никто не называл...
это точно
0
jadmax
0 / 0 / 0
Регистрация: 01.06.2014
Сообщений: 11
15.08.2014, 22:13  [ТС] #5
Простите я просто быстро писал *Фибоначчи
0
John Prick
801 / 734 / 145
Регистрация: 27.07.2012
Сообщений: 2,107
Завершенные тесты: 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 / 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/
1
jadmax
0 / 0 / 0
Регистрация: 01.06.2014
Сообщений: 11
15.08.2014, 22:24  [ТС] #8
Цитата Сообщение от John Prick Посмотреть сообщение
1) div_t какой-то тип. Честно, я хз.
2) sizeof - оператор, вычисляющий размер типа в байтах.
3) memmove, судя по всему, какая-то функция копирования одного массива в другой.
Я понимаю что sizeof оператор но для чего он здесь?
0
John Prick
801 / 734 / 145
Регистрация: 27.07.2012
Сообщений: 2,107
Завершенные тесты: 3
15.08.2014, 22:26 #9
Цитата Сообщение от jadmax Посмотреть сообщение
Я понимаю что sizeof оператор но для чего он здесь?
Чтобы определить количество байт для копирования в memset и memmove.
0
BlackIce
310 / 172 / 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).
0
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
0
John Prick
801 / 734 / 145
Регистрация: 27.07.2012
Сообщений: 2,107
Завершенные тесты: 3
15.08.2014, 22:33 #12
Цитата Сообщение от jadmax Посмотреть сообщение
Например 6 6 12 18 30 48 78
Это уже не числа Фибоначи. Нужно точнее определить задание.
0
BlackIce
310 / 172 / 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
Это не числа Фиббоначи.
0
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
Можно и без второго числа но так вроде практичнее.
0
John Prick
801 / 734 / 145
Регистрация: 27.07.2012
Сообщений: 2,107
Завершенные тесты: 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
15.08.2014, 22:48
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
15.08.2014, 22:48
Привет! Вот еще темы с ответами:

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

Числа Фибоначчи, простые числа и делители - C++
Write a menu() function that prints the following menu and returns the selected choice: 1. Fibonacci series 2. Prime numbers 3....

Фибоначчи: почему не работает код? - C++
#include &lt;iostream&gt; using namespace std; int fib(int); int main() { for (size_t i = 0; i &lt;= 5; i++) {

Составить код для решения методом фибоначчи? - C++
1/х - Пи*cosПиX = 0 3 недели не могу понять как.


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

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

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