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

Подсчитать количество чисел Фибоначчи

19.09.2014, 02:56. Показов 1082. Ответов 3
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
В общем, изначальный код был таков:
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
#include "stdafx.h"
#include<iostream>
#include <conio.h>
#include <sstream>
#include <locale>
 
using namespace std;
int main()
{
    setlocale(LC_ALL, "Russian");
    unsigned short num, fPrev, fCur, fNext, count = 0;
    char S[1000];
    printf("Введите последовательность чисел: \n");
        string S;
        getline(cin,S);
        istringstream iS(S);
        while(iS>>num)
    {
        fPrev = 1; fCur = 1;
        while (num >= fCur)
        {
            if (num == fCur)
            {
                count++;
                break;
            }
            fNext = fPrev + fCur;
            fPrev = fCur;
            fCur = fNext;
        }
    }
    printf("\n\nКоличество чисел Фибоначчи: ");
    printf("%i", count);
    _getch();
    return 0;
}
Но так нельзя пользоваться ООП, нужно написать ту же программу, но на языке С.
Переделал так:
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
#include "stdafx.h"
#include<iostream>
#include <conio.h>
#include <sstream>
#include <locale>
 
using namespace std;
int main()
{
    setlocale(LC_ALL, "Russian");
    int num, fPrev, fCur, fNext, count = 0;
    char S[1000];
    printf("Введите последовательность чисел: \n");
    gets_s(S);
    scanf_s("%c", &S);
    while (iS >> num)
    {
        fPrev = 1; fCur = 1;
        while (num >= fCur)
        {
            if (num == fCur)
            {
                count++;
                break;
            }
            fNext = fPrev + fCur;
            fPrev = fCur;
            fCur = fNext;
        }
    }
    printf("\n\nКоличество чисел Фибоначчи: ");
    printf("%i", count);
    _getch();
    return 0;
}
Но что с вот этой строкой делать понятия не имею.
C++
1
while (iS >> num)
Кто-то подсказал использовать strtok. Вот что вышло:
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
#include "stdafx.h"
#include<iostream>
#include <conio.h>
#include <sstream>
#include <string.h>
#include <locale>
#define _SCL_SECURE_NO_WARNINGS
 
int main()
{
    setlocale(LC_ALL, "Russian");
    int num, fPrev, fCur, fNext, count = 0;
    char S[1000]; // Массив со строкой для поиска
    char str[30] = " ";// Набор символов, которые должны входить в искомый сегмент
    // Переменная, в которую будут заноситься начальные адреса частей строки S
    char *istr;
    printf("Введите последовательность чисел: \n");
    scanf_s("%c", &S);
    istr = strtok(S, str);// Выделение первой части строки
    while (istr != NULL) // Выделение последующих частей
    {
        fPrev = 1; fCur = 1;
        while (num >= fCur)
        {
            if (num == fCur)
            {
                count++;
                break;
            }
            fNext = fPrev + fCur;
            fPrev = fCur;
            fCur = fNext;
        }
        printf("%s", istr);
        istr = strtok(NULL, str);
    }
    printf("\n\nКоличество чисел Фибоначчи: ");
    printf("%i", count);
    _getch();
    return 0;
}
Что тоже не особо правильным вариантом является + В конце всё равно выдает "error C4996: 'strtok': This function or variable may be unsafe. Consider using strtok_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details."

В общем, помогите пожалуйста. Это задание на курсовую, сижу всю ночь, не знаю, что делать.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
19.09.2014, 02:56
Ответы с готовыми решениями:

Найти количество чисел Фибоначчи в массиве
1. Используя функции сформировать с помощью ДСЧ одномерный массив и вывести его на печать....

Дан файл со строками, подсчитать количество чисел в нем(именно чисел, а не цифр)
Подскажите как организовать чтение чисел.

Определить количество первых чисел фибоначчи, таких что их сумма не превышает int
Как составить программу, которая считает сумму первых K чисел фибоначчи (K-задается пользователем)...

Подсчитать количество простых чисел в интервале от А до В
Подсчитать количество простых чисел в интервале от А до В

3
...
1906 / 1326 / 965
Регистрация: 12.02.2013
Сообщений: 2,172
19.09.2014, 07:42 2
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#include <stdio.h>
 
int isFib(const int n) {
    int a, b, c;
    for (a = 1, b = 1; b < n; c = a + b, a = b, b = c) { ; }
    return (b == n);
}
 
int main() {
    int cnt = 0, val;
    printf("digits (input 0 for exit): ");
    while ((scanf("%d", &val) == 1) && (val != 0)) {
        cnt += isFib(val);
    }
    printf("count: %d\n", cnt);
    return 0;
}
Подсчитать количество чисел Фибоначчи


P.S.: для окончания ввода задайте 0 или просто введите не числовой символ
0
430 / 384 / 200
Регистрация: 12.08.2011
Сообщений: 1,610
19.09.2014, 11:29 3
Цитата Сообщение от tyreu Посмотреть сообщение
Но так нельзя пользоваться ООП, нужно написать ту же программу, но на языке С.
Так Вы и не пользовались. А я бы, кстати, сделал так:

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
#include <stdio.h>
 
#define FIBS_MAX 93
 
unsigned long long fibs[FIBS_MAX];
 
void fibs_init(void)
{
    int i;
    fibs[0] = fibs[1] = 1;
    for( i = 2; i < FIBS_MAX; ++i ) {
        fibs[i] = fibs[i - 1] + fibs[i - 2];
    }
}
 
int is_fib(const unsigned long long n)
{
    int i;
    for( i = 1; i < FIBS_MAX && fibs[i] < n; ++i )
        ;
    return i != FIBS_MAX && fibs[i] == n;
}
 
int main(void)
{
    fibs_init();
    unsigned long long n;
    while( 1 ) {
        scanf("%llu", &n);
        if( n == 0 ) { break; }
        puts( is_fib(n)? "Yes!" : "No." );
    }
    return 0;
}
0
Заблокирован
19.09.2014, 11:38  [ТС] 4
Цитата Сообщение от anmartex Посмотреть сообщение
P.S.: для окончания ввода задайте 0 или просто введите не числовой символ
Извините, а можно сделать так, чтоб ввести последовательность, потом Enter и он показывает count? а то окончание нулём не совсем хорошо.

Добавлено через 10 секунд
Цитата Сообщение от anmartex Посмотреть сообщение
P.S.: для окончания ввода задайте 0 или просто введите не числовой символ
Извините, а можно сделать так, чтоб ввести последовательность, потом Enter и он показывает count? а то окончание нулём не совсем хорошо.
0
19.09.2014, 11:38
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
19.09.2014, 11:38
Помогаю со студенческими работами здесь

Подсчитать количество чисел в текстовом файле
Подсчитать кол-во чисел в текстовом файле.

Подсчитать количество чисел в текстовом файле
Подсчитать кол-в чисел в текстовом файле #include &lt;stdio.h&gt; #include &lt;stdlib.h&gt; #include...

Как подсчитать количество вводимых чисел?
Вводится произвольное количество целых чисел через пробел в диапазоне int. Нужно подсчитать это...

Подсчитать количество чисел в текстовом файле
Подсчитать кол-во чисел в текстовом файле. Почему этот код ничего не выводит в командную строку?...


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

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