Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 02.11.2012, 00:05   #1
abstractionhawk
Пользователь
 
Регистрация: 01.11.2012
Сообщений: 26
По умолчанию Программа на СИ (Числа Фибоначчи сравнение с массивом)

Всем доброго времени суток.
Нужно написать программу со следующими условиями:
Дан одномерный массив. Необходимо проверить если элементы массива формируют серию элементов Фибоначчи.
Целый день сегодня бьюсь над задачей, но похоже что моих обрывистых знаний не достаточно (на выходные засяду за учебники)
Программа нужна именно на СИ, а не Си++. Заранее благодарю за помощь
abstractionhawk вне форума Ответить с цитированием
Старый 02.11.2012, 02:53   #2
pproger
C++ hater
СтарожилДжуниор
 
Аватар для pproger
 
Регистрация: 19.07.2009
Сообщений: 3,333
По умолчанию

именно на C
Код:
#include <stdio.h>
 
#define TEST_ARR(a) (\
        printf("" #a " is %s\n", \
        is_fib_array(a, sizeof(a) / sizeof(a[0])) ? "fib array" : "not a fib array"))
 
int is_fib_array(int *arr, size_t len)
{
    size_t i;
    
    if (len < 3)
        return 0;
    
    for (i = 2; i < len; i++) {
        if (arr[i - 2] + arr[i - 1] != arr[i])
            return 0;
    }
    
    return 1;
}
 
int main()
{
    int arr0[] = { 1, 1 };
    int arr1[] = { 1, 1, 2, 3, 5, 8, 13 };
    int arr2[] = { 1, 1, 2, 3, 5, 8, 13, 21, 100 };
    
    TEST_ARR(arr0);
    TEST_ARR(arr1);
    TEST_ARR(arr2);
    
    return 0;
}
http://ideone.com/f6JC4X
I invented the term Object-Oriented, and I can tell you I did not have C++ in mind. (c)Alan Kay

My other car is cdr.

Q: Whats the object-oriented way to become wealthy?
A: Inheritance
pproger вне форума Ответить с цитированием
Старый 02.11.2012, 10:43   #3
Abstraction
Старожил
 
Аватар для Abstraction
 
Регистрация: 25.10.2011
Сообщений: 3,178
По умолчанию

Код:
    if (len < 3)
        return 0;
???

Вообще, хотелось бы понять "правильный ответ" для следующих последовательностей:
Код:
1
3 4 7 11 18
5 8 13 21 34
13
5 5
Мои ответы были бы - да, нет, да, да, нет.
Abstraction вне форума Ответить с цитированием
Старый 02.11.2012, 13:06   #4
pproger
C++ hater
СтарожилДжуниор
 
Аватар для pproger
 
Регистрация: 19.07.2009
Сообщений: 3,333
По умолчанию

2Abstraction
Цитата:
???
по определению, для последовательности фибоначчи нужно минимум 3 элемента
I invented the term Object-Oriented, and I can tell you I did not have C++ in mind. (c)Alan Kay

My other car is cdr.

Q: Whats the object-oriented way to become wealthy?
A: Inheritance
pproger вне форума Ответить с цитированием
Старый 02.11.2012, 13:44   #5
Abstraction
Старожил
 
Аватар для Abstraction
 
Регистрация: 25.10.2011
Сообщений: 3,178
По умолчанию

По какому именно определению? Последовательность Фибоначчи - это одна, конкретная, бесконечная числовая последовательность. Для конечного массива условие можно прочитать более чем одним способом (с учётом того, что прямого определения термина "серия элементов Фибоначчи" мне найти не удалось): то ли в массиве - подпоследовательность последовательности Фибоначчи без пропусков, то ли все элементы массива - члены последовательности Фибоначчи, то ли последовательность имеет не меньше 2 членов и члены начиная с третьего удовлетворяют рекуррентному соотношению последовательности Фибоначчи, то ли то же, но членов не меньше 3, то ли...
В общем, лично я предпочёл бы уточнить задание у ТС.
Abstraction вне форума Ответить с цитированием
Старый 02.11.2012, 14:46   #6
abstractionhawk
Пользователь
 
Регистрация: 01.11.2012
Сообщений: 26
По умолчанию

Короче говоря, я попытался кое-что написать, не без помощи конечно же и все же вот что получилось:
Код:
#include <stdio.h>
#include <stdlib.h>

void main()
{
    int i,d;
    int A[5];
    printf("Vvedite mnojestvo 1 (5 elementov)\n");
    for(i=0;i<5;i++)
        scanf("%i",&A[i]);//Вводим множество 1
    printf("Massiv 1:\n");
    for(i=0;i<5;i++)
        printf("%i ",A[i]);
    printf("\n");

    if(A[0]==0)
        {if(A[1]==1)
            {
            for(d=0,i=2;i<5;i++)
                {
              if(A[i]==A[i-1]+A[i-2])
                d++;
            else break;
                }
            if(d==3) printf("Eto read fibbonachi");
            else printf("Eto ne read fibbonachi");
            }
        else printf("Eto ne read fibbonachi");
        }
    else
            {
            if(A[0]==1)
                {if(A[1]==1 || A[1]==2)
                {
                for(d=0,i=2;i<5;i++)
                    {
                    if(A[i]==A[i-1]+A[i-2])
                    d++;
                    else break;
                    }
                if(d==3) printf("Eto read fibbonachi");
                else printf("Eto ne read fibbonachi");
                }
                else printf("Eto ne read fibbonachi");
                }
            else
                {
                    for(d=0,i=2;i<5;i++)
                    {
                    if(A[i]==A[i-1]+A[i-2])
                    d++;
                    else break;
                    }
                if(d==3) printf("Eto read fibbonachi");
                else printf("Eto ne read fibbonachi");
                }
            }

getch();
}
Но программа все равно не корретно работает. Во-первых, она работает только для последовательности из 5 членов, а во-вторых, последовательность 3 3 6 9 15 данная программа тоже считает числами Фибоначчи
abstractionhawk вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Программа на C++. Сформировать числа Фибоначчи Alex1991 Помощь студентам 11 19.01.2020 22:11
Сравнение с массивом Fezdipekla Microsoft Office Excel 1 09.01.2011 22:18
сравнение рандомного числа с массивом Artempokrowski Помощь студентам 8 08.07.2010 14:08
Числа Фибоначчи imera Паскаль, Turbo Pascal, PascalABC.NET 8 17.01.2009 22:01
Числа Фибоначчи sher_man Помощь студентам 9 20.10.2007 18:45