Форум программистов, компьютерный форум, киберфорум
Наши страницы
C для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 5.00/9: Рейтинг темы: голосов - 9, средняя оценка - 5.00
andrey3
0 / 0 / 0
Регистрация: 30.09.2011
Сообщений: 59
1

Вычисление чисел последовательности Фибоначчи

04.06.2012, 09:30. Просмотров 1569. Ответов 1
Метки нет (Все метки)

По заданию программа, выполняет вычисление 500 первых чисел последовательности Фибоначчи. Элементы последовательности Фибоначчи вычисляются по следующему рекуррентному соотношению:
ai=ai-1+ai-2,a1=1,a2=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
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
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
#include <stdio.h> // Подключаем стандартный ввод вывод
#include <conio.h> // Это модуль, который поддерживает функцию _getch()
#include <stdlib.h>
#include <string.h>
 
#define NUMMAX 1000 //длина массива
#define NUMBASE 1000000000 // длинна одной ячейки массива
#define NUMLEN(n) ((n)[0])
typedef int number_t[NUMMAX+1]; //тип массив из 1001 целого числа
 
void numzero (number_t lhs) // функция заменяет число, состоящее из
    // массива чисел на 0
{
    lhs[0]=1;
    lhs[1]=0;
}
 
void numassgns (number_t lhs, unsigned long long int rhs)
/*  функция записывает число от 0 до (2^64–1) в массив чисел
*/
{
    lhs[0]=0;
    while (rhs)
    {
        lhs[++lhs[0]]=rhs % NUMBASE;
        rhs /= NUMBASE;
    }
}
 
void numassgn (number_t lhs, const number_t rhs)
{
    int i;
    lhs[0]=rhs[0];
    for(i=1;i<=NUMLEN (rhs);++i)
        lhs[i]=rhs[i];
}
 
void numprint(const number_t lhs)
{
    int i;
    printf ("%d", NUMLEN(lhs) ? lhs[NUMLEN (lhs)]:0);
    for (i=NUMLEN(lhs)-1;i>0;--i)
        printf("%09d",lhs[i]);
}
 
void numadd(number_t res, const number_t lhs, const number_t rhs)
{
    int i=0, c=0;
    const int *sn=NUMLEN (lhs) < NUMLEN (rhs) ? lhs:rhs;
    const int *ln=sn==lhs ? rhs:lhs;
    while (i<NUMLEN (sn))
    {
        ++i;
        res[i]=c+sn[i]+ln[i];
            c=res[i]>NUMBASE?1:0;
            if (c) res[i]-=NUMBASE;
    }
    while (i<NUMLEN(ln))
    {
        ++i;
        res[i]=c+ln[i];
        c=res[i]>NUMBASE?1:0;
        if (c) res[i]-=NUMBASE;
    }
    if (c) res[++i]=c;
    res[0]=i;
}
// Задание 1
void numtoa(const number_t num, char *str) {
    int i;
    char podstr[10];    
    str[0]='\0';
    i=num[0];
    for(;i>0;i--) {
    itoa(num[i],podstr,10); 
    strcat(str,podstr);
    }   
}
// Задание 2
void atonum(const char *str, number_t num) {
    int len,shet, k, i;
    char podstr[10];
    
    len=strlen(str);
    k=len-9;
    if (len % 9 !=0) {
        num[0]=len/9+1;
        shet=len % 9;
    }
    else {
        num[0]=len/9;   
        shet=9;
    }   
 
    podstr[0]='\0';
    strncat(podstr, str, shet );    
    num[num[0]]=atoi(podstr);
 
    shet=1;
    while(shet<num[0]) {
    podstr[0]='\0';
    for (i=0;i<9;i++) {
    podstr[i]=str[k+i]; 
    }
    podstr[i]='\0';
    num[shet]=atoi(podstr);
    k-=9;
    shet++;
    }
        
}
// 3-е задание
void fibonachi() {
    //определяем первое число = 1
    FILE *fp;
    number_t f1, f2, f3;
    int i=2;
    f1[0]=1;
    f1[1]=1;
    //определяем второе число = первому числу
    numassgn(f2, f1);
    numprint(f1);
    printf("\n");
    numprint(f2);
    printf("\n");
    for(;i<=298;i++) {
        numadd(f3, f1, f2);
        numassgn(f1, f2);
        numassgn(f2, f3);
        numprint(f2);
        printf("\n");
    }
 
 
}
int main()
{
    number_t dlchislo;
    unsigned long long int first=12345678910111213141;
    char *st, c[255];
    int i;  
    
    numassgns(dlchislo, first); 
    // преобразование длинного числа в строку
    st=(char*)malloc(9*dlchislo[0]+1);
    numtoa(dlchislo, st);
    printf("%s - eto stroka \n", st);
    free(st);
    // преобразование строки в длинное число
    printf("\n\nVvedite sroku iz tsifr\n");
    scanf("%s/n", &c);
    atonum(c,dlchislo);
    numprint(dlchislo);
 
    printf("\n\n chisla fibonachi\n");
    fibonachi();
    _getch();
    return 1;
}
В этом случае программа вычисляет только 298 чисел
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
04.06.2012, 09:30
Ответы с готовыми решениями:

Вычисление последовательности Фибоначчи
Последовательность Фибоначчи образуется так: первый и второй член последовательности равны 1,...

Вычисление чисел Фибоначчи
Последовательность чисел Фибоначчи 0, 1, 1, 2, 3, 5, 8, 13, 21 ... начинается с цифр 0 и 1 и имеет...

Найти N-й элемент последовательности чисел Фибоначчи
Описать функцию Fib(N) целого типа, вычисляющую N-й элемент последовательности чисел Фибоначчи FK,...

Подсчет количества чисел Фибоначчи в заданной числовой последовательности.
Дано 100 чисел от 1 до 50. Определить, сколько среди них чисел Фибоначчи и сколько чисел, первая...

Описать рекурсивную функцию Fib2(N) целого типа, вычисляющую N-й элемент последовательности чисел Фибоначчи
Recur5°. Описать рекурсивную функцию Fib2(N) целого типа, вычисляющую N-й элемент...

1
Joker7
24 / 24 / 8
Регистрация: 13.04.2012
Сообщений: 56
04.06.2012, 12:16 2
Цикл
C
1
for(;i<=298;i++) {
меняем до 500 и всё
1
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
04.06.2012, 12:16

Вычисление чисел элементов в монотонной последовательности
Здравствуйте! Никак не могу составить данную программу, помогите пожалуйста, вычислить число...

Для последовательности Фибоначчи найти k-й член последовательности
Для последовательности Фибоначчи: 1) Найти k-й член последовательности 2) Получить первые n...

Написать рекурсивную функцию вычисления K-го члена последовательности Фибоначчи
написать рекурсивную функцию вычисления K-го члена последовательности Фибоначчи (1 и 2 члены равны...


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

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

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