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

РЕКУРСИВНЫЕ АЛГОРИТМЫ - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Бинарный файл, обработка файла(сумма чисел) http://www.cyberforum.ru/cpp-beginners/thread182243.html
Создать бинарный файл f и записать в него целые числа. Организовать просмотр бинарного файла и его обработку: найти сумму чисел, предшествующих первому отрицательному числу в файле. Результат сохранить в текстовом файле. Не могу составить программу в плане функции обработки бинарного файла(про сумму чисел и т.п.) Подкиньте идею кто смыслит в этом пож.
C++ Протые множители Помогите решить задачу Задача: разложить данное число на простые множители http://www.cyberforum.ru/cpp-beginners/thread182236.html
работа с блоками C++
// This program demonstrates a block of code. #include <iostream> using namespace std; int main() { int a, b; cout << "Enter first number: ";
C++ Упорядочить строки матрицы по не убыванию наибольших элементов
Дана вещественная матрица размером 3 x 4. Упорядочить ее строки по не убыванию наибольших элементов в строках матрицы. в С. Завта лабу здавать очень нужно!
C++ Дан символ С. Вывести два символа, первый из которых предшествует символу С в кодовой таблице, а второй следует за символом С http://www.cyberforum.ru/cpp-beginners/thread182219.html
Дан символ С. Вывести два символа, первый из которых предшествует символу С в кодовой таблице, а второй следует за символом С
C++ Найти номер строки матрицы с наибольшей суммой элементов Дана матрица размера МхН.Найти номер ее строки с наибольшей суммой элементов и вывести данный номер, а также значение наибольшей суммы. подробнее

Показать сообщение отдельно
silent_1991
Эксперт С++
4960 / 3036 / 149
Регистрация: 11.11.2009
Сообщений: 7,027
Завершенные тесты: 1
26.11.2010, 15:55     РЕКУРСИВНЫЕ АЛГОРИТМЫ
Суть в том, чтобы посчитать значение примерно такого выражения:
M(1, 2, m(M(1, 2, 3), 4, 2), 2, m(1, 9)) = 2
Т.е. выражение с любой вложенностью функций m и M (по сути нечто вроде своеобразного калькулятора).
Вечером попробую написать, пока занят.

Добавлено через 3 часа 5 минут
Вот, что-то в этом роде.

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
#include <iostream>
#include <vector>
 
int expression();
int arguments(char);
 
int number();
 
int m(const std::vector< int > &);
int M(const std::vector< int > &);
 
void check(char);
 
int main()
{
    setlocale(LC_ALL, "Rus");
 
    int result;
 
    std::cout << "Введите выражение: ";
 
    result = expression();
 
    std::cout << "Результат вычисления: " << result << std::endl;
 
    return 0;
}
 
int expression()
{
    char c = std::cin.get();
 
    if (c >= '0' && c <= '9')
        return c - '0';
    else
    {
        switch (c)
        {
        case 'm':
            check('(');
 
            return arguments('m');
        case 'M':
            check('(');
 
            return arguments('M');
        default:
            std::cout << "Синтаксическая ошибка!" << std::endl;
            exit(-1);
        }
    }
}
 
int arguments(char f)
{
    std::vector< int > result;
    char c;
 
    while (true)
    {
        result.push_back(expression());
 
        if ((c = std::cin.get()) != ')')
        {
            std::cin.putback(c);
            check(',');
            check(' ');
        }
        else
            break;
    }
 
    switch (f)
    {
    case 'm':
        return m(result);
    case 'M':
        return M(result);
    default:
        std::cout << "Синтаксическая ошибка!" << std::endl;
        exit(-1);
    }
}
 
int m(const std::vector< int > &arr)
{
    unsigned int size = arr.size();
    int min = arr[0];
 
    for (unsigned int i = 1; i < size; i++)
        if (min > arr[i])
            min = arr[i];
 
    return min;
}
 
int M(const std::vector< int > &arr)
{
    unsigned int size = arr.size();
    int max = arr[0];
 
    for (unsigned int i = 1; i < size; i++)
        if (max < arr[i])
            max = arr[i];
 
    return max;
}
 
void check(char c)
{
    if (std::cin.get() != c)
    {
        std::cout << "Синтаксическая ошибка!" << std::endl;
        exit(-1);
    }
}
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru