Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.57/7: Рейтинг темы: голосов - 7, средняя оценка - 4.57
0 / 0 / 0
Регистрация: 23.01.2014
Сообщений: 6
1

Для каждого из некоторого количества натуральных чисел указать, является ли оно числом Фибоначчи

23.01.2014, 19:35. Показов 1261. Ответов 11
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
для каждого из некоторого количества натуральных чисел указать, является ли оно числом Фибоначчи. если да, то каким по счету. последовательность чисел Фибоначчи {Fi} задается рекуррентным соотношением: F0=1, F1=1, Fi=Fi-1+Fi-2 для i>1
помогите, пожалуйста, написать программу (желательно с комментариями) на С++
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
23.01.2014, 19:35
Ответы с готовыми решениями:

Из некоторого количества значений натурального N, получаемых от пользователя, указать является ли простым числом число
Для каждого из некоторого количества значений натурального N, получаемых от пользователя, указать...

Для каждого из некоторого количества натуральных чисел найти простой делитель наибольшой кратности
для каждого из некоторого количества натуральных чисел найти простой делитель наибольшой кратности ...

Дано число k. Определить, является ли оно числом Фибоначчи
Дано число k. Определить, является ли оно числом Фибоначчи. без ввода данных пользователем

Ввести число и определить, является ли оно числом Фибоначчи
Доброго времени суток всем! Необходима помощь в решении задачи: Последовательность ряда...

11
290 / 193 / 23
Регистрация: 03.08.2011
Сообщений: 2,824
Записей в блоге: 12
23.01.2014, 20:25 2
Цитата Сообщение от Valentina1302 Посмотреть сообщение
помогите, пожалуйста, написать программу
ваши наработки? вопросы по заданию?
0
235 / 31 / 11
Регистрация: 04.06.2010
Сообщений: 293
23.01.2014, 22:03 3
Valentina1302, если есть вопросы по коду - спрашивайте
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
#include <iostream>
#include <stdlib.h>
 
using namespace std;
int Fib1(int n);
int main()
{
    setlocale(LC_ALL,"Russian");
    int i,n;
    cout << "Введите количество натуральных чисел: ";
    cin >> n;
    int nat[n];
    cout << "Введите эти натуральные числа: ";
    for (i=0; i<n; i++)
        cin  >> nat[i];
    for (i=0; i<n; i++)
    {
    cout << "Число ряда Фибоначчи: " << Fib1(i+1);
    if (nat[i]==Fib1(i+1)) cout << "+" << "\n";
        else cout << "-" << "\n";
    }
    system("PAUSE");
    return 0;
}
int Fib1(int n)
{
    if ((n==1)||(n==2)) return(1);
    return(Fib1(n-2)+Fib1(n-1));
}
Добавлено через 14 минут
Сделал без прототипа функции.. Вот, немного поправил.
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
#include <iostream>
using namespace std;
int Fib1(int n)
{
    if ((n==1)||(n==2)) return(1);
    return(Fib1(n-2)+Fib1(n-1));
}
int main()
{
    setlocale(LC_ALL,"Russian");
    int i,n;
    cout << "Введите количество натуральных чисел: ";
    cin >> n;
    int nat[n];
    cout << "Введите эти натуральные числа: ";
    for (i=0; i<n; i++)
        cin  >> nat[i];
    for (i=0; i<n; i++)
    {
    cout << "Число ряда Фибоначчи: " << Fib1(i+1);
    if (nat[i]==Fib1(i+1)) cout << "+" << "\n";
        else cout << "-" << "\n";
    }
    return 0;
}
0
434 / 299 / 82
Регистрация: 11.12.2010
Сообщений: 1,209
23.01.2014, 22:24 4
мой более громозкий вариант
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
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
#include "stdafx.h"
#include <iostream>
#include <conio.h>
#include <math.h>
#include <vector>
using namespace std;
 
/// Генерирует массив содержащий члены фибоначчи
/// число до которого генерируем ряд
/// count - колличество членов в ряду фибоначчи
int* GetFibanachi(int maxFibNumber, int &fibCount){
    if (maxFibNumber <= 2){
        fibCount = 3;
        return new int[3]{1, 1, 2};
    }
    int* fibList = new int[maxFibNumber];// массив с числами фибоначчи которых будет дофига
    fibList[0] = 1; fibList[1] = 1;
    int* returnFibList;//массив который мы вернём из функции и чисел в нем будет много меньше :)
    for (fibCount = 2; fibCount < maxFibNumber; fibCount++)
    {
        fibList[fibCount] = fibList[fibCount - 2] + fibList[fibCount - 1];//F0=1, F1=1, Fi=Fi-1+Fi-2 
        if (fibList[fibCount]>maxFibNumber)//если число фибоначчи уже больше максимума в массиве то прекращаем генерировать
            break;
    }
    returnFibList = new int[fibCount];//создаём более мелкий массив
    for (int i = 0; i < fibCount; i++)
    {
        returnFibList[i] = fibList[i];
    }
    return returnFibList;
}
 
/// Производит чтение массива с консоли
int* enterArray(int lenght)
{
    int* outPut = new int[lenght];
    for (int i = 0; i < lenght; i++)
        scanf_s("%i", &outPut[i]);
    return outPut;
}
 
/// Ищет максимальное число в массиве
/// inputArray - массив для поиска максимум
/// lenght - длина массива
int getMax(int* inputArray, int lenght)
{
    int maxNumber = inputArray[0];
    for (int i = 0; i < lenght; i++)
    if (maxNumber < inputArray[i]) maxNumber = inputArray[i];
    return maxNumber;
}
 
bool check(int inputNum, int* fibArray, int arrayCount, int &fibNum){
    for (int i = 0; i < arrayCount; i++)
    {
        if (fibArray[i] == inputNum)
        {
            fibNum = i;
            return true;
        }
    }
    return false;
}
 
int main()
{
    int count, currenNum = 0;;//currenNum - номер числа фибоначчи
    printf("Input count\r\n");
    cin >> count;
    int* inputArray = enterArray(count);
    int fibArrayLenght = 0;
    int* fibList = GetFibanachi(getMax(inputArray, count), fibArrayLenght);//до максимума в списке чисел из массива
    printf("Total generated Fibonacci numbers: %i \r\n", fibArrayLenght);
    for (int i = 0; i < count; i++)
    {
        if (check(inputArray[i], fibList, fibArrayLenght, currenNum))
        {
            printf("Number %i is %i to account Fibonacci numbers.", inputArray[i], currenNum);
        }
        else
        {
            printf("Number %i is not a Fibonacci number.\r\n", inputArray[i]);
        }
    }
    system("Pause");
    return 0;
}
0
Бедел
23.01.2014, 22:27
  #5

Не по теме:

Цитата Сообщение от Kill100 Посмотреть сообщение
мой более громозкий вариант
ухх.. :D

0
434 / 299 / 82
Регистрация: 11.12.2010
Сообщений: 1,209
23.01.2014, 22:29 6
Цитата Сообщение от Бедел Посмотреть сообщение
int nat[n];
может
C++
1
int* nat = new int[n];
0
235 / 31 / 11
Регистрация: 04.06.2010
Сообщений: 293
23.01.2014, 22:44 7
Цитата Сообщение от Kill100 Посмотреть сообщение
может
Код C++
1 int* nat = new int[n];
Если у вас ругается на такое задание массива, то выделяйте память под него динамически) У меня компилятор GNU gcc, он не ругается.. Уже несколько раз сталкиваюсь с такой проблемой. На днях создам тему по этому вопросу..
0
290 / 193 / 23
Регистрация: 03.08.2011
Сообщений: 2,824
Записей в блоге: 12
24.01.2014, 14:21 8
Цитата Сообщение от Бедел Посмотреть сообщение
Если у вас ругается на такое задание массива, то выделяйте память под него динамически)
а что у вас стэк бездонный ? тут либо идёт автоматическая подстановка
C++
1
int* nat = new int[n];
либо выделяется такое количество элементов, которое указанна в константе компилятора
0
0 / 0 / 0
Регистрация: 23.01.2014
Сообщений: 6
24.01.2014, 15:26  [ТС] 9
1ая программа считает неправильно числа фибоначчи. (числа фибоначчи: 1, 1, 2, 3, 5, 8, 13, 21)
2 ая программа не запускается вообще
0
1130 / 789 / 232
Регистрация: 12.04.2010
Сообщений: 2,012
24.01.2014, 18:02 10
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
bool IsFib( const long n )
{
    if( 1 == n ) return true;
 
    // два последних числа, которые мы вычислили 
    long fib1 = 1, fib2 = 1;
 
    // вычисляем числа Фибоначчи, пока не достигнем числа n 
    while( fib1 < n - fib2 )
    {
        long next = fib1 + fib2;
        fib1 = fib2;
        fib2 = next;
    }
 
    return ( n == fib1 + fib2 );
}
Добавлено через 51 минуту
Дополнительное замечание. Будет ошибкой написать while( fib1 + fib2 < n ) При n == 0x7FFFFFFF это приведёт к зацикливанию.
Что касается номера числа, добавим счётчик в функцию.
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
// если n является числом Фибоначчи, то IsFib() возвращает true, 
// count содержит номер числа 
//
// если n не является числом Фибоначчи, то IsFib() возвращает false, 
// count==0 
bool IsFib( const long n, long& count )
{
    if( 1 == n )
    {
        count = 1; return true;
    }
 
    // два последних числа, которые мы вычислили 
    long fib1 = 1, fib2 = 1;
 
    // вычисляем числа Фибоначчи, пока не достигнем числа n 
    count = 2;
    while( fib1 < n - fib2 )
    {
        long next = fib1 + fib2;
        ++count;
 
        fib1 = fib2;
        fib2 = next;
    }
 
    if( n == fib1 + fib2 )
    {
        return true;
    }
    else
    {
        count = 0; return false;
    }
}
0
434 / 299 / 82
Регистрация: 11.12.2010
Сообщений: 1,209
24.01.2014, 19:59 11
Цитата Сообщение от Valentina1302 Посмотреть сообщение
2 ая программа не запускается вообще
У вас какой компилятор?
Возможно придется избавится от
C++
1
#include "stdafx.h"
и/или
C++
1
using namespace std;
0
235 / 31 / 11
Регистрация: 04.06.2010
Сообщений: 293
24.01.2014, 23:27 12
Цитата Сообщение от Van111 Посмотреть сообщение
а что у вас стэк бездонный ? тут либо идёт автоматическая подстановка
Да, скорее всего, Вы правы. Компилятор сам оптимизиурет такое задание массива в
C++
1
int* nat = new int[n];
0
24.01.2014, 23:27
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
24.01.2014, 23:27
Помогаю со студенческими работами здесь

Дано число N. Определить, является ли оно числом, принадлежащим последовательности Фибоначчи
Дано число N. Определить, является ли оно числом, принадлежащим последовательности Фибоначчи, и...

Дан массив целых чисел,произвести для него следующие операции: для каждого из чисел ,входящего в массив,указать,сколько раз оно входит в массив...
помогите!!!((( дан массив целых чисел,произвести для него следующие операции: для каждого из чисел...

Нужно подчеркнуть Participle 1 и 2, установить функции каждого из них, т.е. указать является ли оно
Помогите, пожалуйста, кто разбирается в английском!!! Следует подчеркнуть Participle 1 и 2,...

Определить, является ли оно числом Фибоначчи. Без ввода данных пользователем и Без массива
Дано число k. Определить, является ли оно числом Фибоначчи. без ввода данных пользователем И Без...


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

Или воспользуйтесь поиском по форуму:
12
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru