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

Числа Фибоначчи, простые числа и делители - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 10, средняя оценка - 5.00
Shushan
0 / 0 / 0
Регистрация: 23.02.2014
Сообщений: 5
20.05.2014, 21:19     Числа Фибоначчи, простые числа и делители #1
Write a menu() function that prints the following menu and returns the selected
choice:
1. Fibonacci series
2. Prime numbers
3. Divisors
4. Quit

Write a function that receives two integers and prints all Fibonacci numbers from the first integer to the second passed as arguments.

Write a function, isprime(), that receives an integer and tells if it's a prime number or not, by returning true if it is and false, if not.

Write a function that receives two integers and prints all prime numbers from the first integer to the second passed as arguments, using the isprime() function to test each integer.

Write a function that receives an integers and prints all its divisors.

Have main call the menu function and then call either Fibonacci or primes or divisors function, depending on the choice returned by menu(). Also, depending on which function was selected, main must read one (for divisors) or two integers (for Fibonacci and primes) and pass it, or them, to the required function which the function will print the required integers (Fibs, primes or divs).

After printing the numbers, the program must return to the menu and read another selection from the user and print the integers again until quit is selected.

Example:
Select the type of numbers to print:
1. Fibonacci series
2. Prime numbers
3. Divisors
4. Quit
? 1
Enter range: 0 100
0 1 1 2 3 5 8 13 21 34 55 89


Example different program:

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
#include <iostream>
#include <ctime>
using namespace std;
int get_middle(int);
void main()
{
    int num;
    cout << "Enter number of integers to generate: ";
    cin >> num;
    cout << endl << get_middle(num) << endl;
 
    system("pause");
}
int get_middle(int num)
{
    int n, return_value;
 
    srand((unsigned)time(0));
    for(int i = 0; i < num; i++)
    {
        n = rand() % 101;
        cout << n << ' ';
        if(i == num / 2)
            return_value = n;
    }
    return return_value;
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
20.05.2014, 21:19     Числа Фибоначчи, простые числа и делители
Посмотрите здесь:

Даны натуральные числа p и q. Получить все делители числа q, взаимно простые к p. C++
C++ Даны целые числа р и q. Получить все делители числа q, взаимно простые с р
Даны целые числа р и q. Получить все делители числа q, взаимно простые с р. C++
Простые делители заданного числа C++
не могу понять задачку :) Даны натуральные числа p и q. Получить все делители числа q, взаимно простые с p C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
outoftime
║XLR8║
 Аватар для outoftime
505 / 427 / 33
Регистрация: 25.07.2009
Сообщений: 2,297
20.05.2014, 23:14     Числа Фибоначчи, простые числа и делители #2
Shushan,
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 <iostream>
 
const char menuText[] = 
"Select the type of numbers to print:\n\
1. Fibonacci series\n\
2. Prime numbers\n\
3. Divisors\n\
4. Quit\n\
? ";
 
void fibonacci() { /* code */ }
void prime() { /* code */ }
void divisors() { /* code */ }
 
bool menu() {
    int choise = 0;
    
    while (choise < 1 || choise > 4) {
        std::cout << menuText;
        std::cin >> choise;
    }
    
    if (choise == 1) fibonacci();
    else if (choise == 2) prime();
    else if (choise == 3) divisors();
    else 
    {
        return false;
    }
    
    return true;
}
 
int main () {
    while (menu());
}
Bash
1
2
3
4
5
6
7
8
9
10
11
12
13
14
ruslan@TFTM-K53TA:~/Programming/c++/cyberforum$ make && ./main 
clang++ main.cpp -o main -std=c++11 -W
Select the type of numbers to print:
1. Fibonacci series
2. Prime numbers
3. Divisors
4. Quit
? 1
Select the type of numbers to print:
1. Fibonacci series
2. Prime numbers
3. Divisors
4. Quit
? 4
Shushan
0 / 0 / 0
Регистрация: 23.02.2014
Сообщений: 5
22.05.2014, 00:39  [ТС]     Числа Фибоначчи, простые числа и делители #3
outoftime,
how we will get this?

Example:
Select the type of numbers to print:
1. Fibonacci series
2. Prime numbers
3. Divisors
4. Quit
? 1
Enter range: 0 100
0 1 1 2 3 5 8 13 21 34 55 89
outoftime
║XLR8║
 Аватар для outoftime
505 / 427 / 33
Регистрация: 25.07.2009
Сообщений: 2,297
22.05.2014, 02:41     Числа Фибоначчи, простые числа и делители #4
Shushan, the same idea like in case with main menu, but it will be submenu. Also you can make your class which will take care about menu (input request and response reading, possible using templates). Any way, it's so trivial task.. I'll wait for interesting questions.

Добавлено через 1 час 15 минут
Shushan, I had try to make it using concept Predicate, but I cann't. In example below, you have template function for input customizable type with value checking.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#include <iostream>
#include <functional>
 
template <typename InputType>
InputType make_menu(const std::string& request, std::function<bool(InputType)> validator) {
    InputType response;
        
    do 
    {
        std::cout << request;
        std::cin >> response;
    } 
    while (!validator(response));
    
    return response;
}
 
int main () {
    int res = make_menu<int>("Input int in range 0..99: ", 
        [](const int& value) { return value > -1 && value < 100; });
    std::cout << res << std::endl;
}
Feels like writing own command parameters parsing.
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
#include <iostream>
#include <functional>
#include <vector>
 
template <typename T>
class menu {
public:
    typedef std::tuple<std::string, std::function<bool(T)>, 
        std::function<void()>> menu_item;
    
    menu(const std::string& caption, const std::vector<menu_item>& items, 
        const bool& recursive = false) 
        : _caption(caption), _items(items), _recursive(recursive) { }
    
    void run() {
        T response;
        
        while (_recursive) {
            do 
            {
                std::cout << _caption;
                for (const auto& tuple: _items)
                    std::cout << std::get<0>(tuple);
            
                std::cin >> response;
            } 
            while (!validate(response));
        
            for (const auto& tuple: _items)
                if (std::get<1>(tuple)(response))
                    std::get<2>(tuple)();
                    
            if (_recursive && std::get<1>(_items.back())(response))
            {
                break;
            }
        }
    }
    
private:
    bool validate(const T& response) {
        for (const auto& tuple: _items)
            if (std::get<1>(tuple)(response))
                return true;
            
        return false;
    }
 
    const std::string _caption;
    const std::vector<menu_item> _items;
    const bool _recursive;
};
 
int main () {
    menu<int> m{"Select the type of numbers to print:\n",
        {
            std::make_tuple("1. Fibonacci series\n",
                [](const int& value) { return value == 1; },
                [](){ std::cout << "Fibonacci series\n"; }
            ),
            std::make_tuple("4. Quit\n",
                [](const int& value) { return value == 4; },
                [](){}
            )
        }, 
        true
    };
    m.run();
}
Yandex
Объявления
22.05.2014, 02:41     Числа Фибоначчи, простые числа и делители
Ответ Создать тему
Опции темы

Текущее время: 07:46. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru