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

Алгоритм сортировочной станции(вычисление по обратной польской записи). - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ mpi скиньте кто нибудь несколько примеров http://www.cyberforum.ru/cpp-beginners/thread392723.html
Скиньте кто сможет любые примеры которые по проще, например: (2+2)*(3+3) вот что бы посчитать это параллельно, буду очень признателен, а если кто нибудь подскажет хорушую литературу кроме Антонов А.С будет вообще замечательно.
C++ из Борланда в Студию уважаемые господа джуниоры и синьоры программисты. помогите мне чайнику разобраться с проблемой плиз есть проект (игра) написанная на borland c++ 5.02 и есть Visual Studio 2010 как перенести проект на VS2010? для получения исходников пишите на mikka47@gmail.com http://www.cyberforum.ru/cpp-beginners/thread392719.html
проверка C++
Даны вещественные массивы F, M.Для каждого массива определить произведение положительных элементов ,расположенных в чётных строках массива, и произведение положительных элементов, расположенных в нечётных строках массива. #include < iostream.h> #include <iomanip.h> //прототипы функций void input ( float ,char); void schetproduct (float, float *, float *); void output ( float , char ,...
проверить задачу на ошибки C++
Даны вещественные массивы F, M.Для каждого массива определить произведение положительных элементов ,расположенных в чётных строках массива, и произведение положительных элементов, расположенных в нечётных строках массива. #include < iostream.h> #include <iomanip.h> //прототипы функций void input ( float ,char); void schetproduct (float, float *, float *); void output ( float , char ,...
C++ Определить размерность массива по указателю на него http://www.cyberforum.ru/cpp-beginners/thread392680.html
Дано: template< typename T > void info( T * x ) и int a; info( a ); int b; info( b ); int c; info( c ); int d; info( d ); int e; info( e );
C++ проверить решение Даны вещественные массивы A S.Для каждого массива определить количество элементов предшествующих первому отрицательному элементу массива. #include <iostream.h> #include <iomanip.h> // прототипы функций void inputmas (int ,char); int schet (int); void outrez (int ,char ,int); void main() { подробнее

Показать сообщение отдельно
Nameless One
Эксперт С++
5767 / 3416 / 255
Регистрация: 08.02.2010
Сообщений: 7,441
27.11.2011, 15:32     Алгоритм сортировочной станции(вычисление по обратной польской записи).
Ну вот например (токены разделены пробельными символами, проверки неверного ввода нет):
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
#include <iostream>
#include <sstream>
#include <string>
#include <stack>
#include <stdexcept>
 
bool is_operator(const std::string& token)
{
    static const std::string ops[] = {"+", "-", "*", "/"};
 
    for(size_t i = 0; i < sizeof(ops) / sizeof(*ops); ++i)
    if(token == ops[i])
        return true;
 
    return false;
}
 
int add(int op1, int op2)
{
    return op1 + op2;
}
 
int sub(int op1, int op2)
{
    return op1 - op2;
}
 
int mul(int op1, int op2)
{
    return op1 * op2;
}
 
int div_(int op1, int op2) throw(std::runtime_error)
{
    if(op2 == 0)
    throw std::runtime_error("Division by zero");
 
    return op1 / op2;
}
 
int pow_(int op1, int op2) throw(std::runtime_error)
{
    if(op2 < 0)
    throw std::runtime_error("Raising to negative power: not yet implemented");
 
    int result = 1;
 
    while(op2 > 0)
    {
    if(!(op2 & 1))
    {
        op2 >>= 1;
        op1 *= op1;
    } else {
        --op2;
        result *= op1;
    }
    }
 
    return result;
}
 
typedef int (*BIN_OP) (int, int);
 
BIN_OP bin_op(const std::string token) throw(std::runtime_error)
{
    if(token == "+")
    return add;
    if(token == "-")
    return sub;
    if(token == "*")
    return mul;
    if(token == "/")
    return div_;
    if(token == "^")
    return pow_;
 
    throw std::runtime_error("No such binary operator: " + token);
    
    return NULL;
}
 
int next_number(std::stack<int>& stack) throw(std::runtime_error)
{
    if(stack.empty())
    throw std::runtime_error("Empty stack");
 
    int result = stack.top();
    stack.pop();
 
    return result;
}
 
int main(int argc, char* argv[])
{
    if(argc == 1)
    {
    std::cerr << "Usage: eval EXPR [EXPR...]" << std::endl;
    return EXIT_FAILURE;
    }
    
    
    for(int i = 1; i < argc; ++i)
    {
    std::cout << argv[i] << " = ";
        
    std::istringstream input(argv[i]);
    std::stack<int> stack;
    std::string token;
 
    try
    {
        while(input >> token)
        {
        if(is_operator(token))
        {
            int op2 = next_number(stack);
            int op1 = next_number(stack);
            
            stack.push(bin_op(token)(op1, op2));
        } else {
            stack.push(atoi(token.c_str()));
        }
        }
 
        int result = next_number(stack);
        
        if(!stack.empty())
        throw std::runtime_error("extra data provided");
 
        std::cout << result << std::endl;
    }
 
    catch(const std::exception& e)
    {
        std::cerr << "[Error: "
              << e.what() << "]" << std::endl;
    }
    }
    
    return EXIT_SUCCESS;
}
Код
[nameless@desktop cpp]$ ./eval
Usage: eval EXPR [EXPR...]
[nameless@desktop cpp]$ ./eval \
> "3 5 + 2 - 3 / 10 ^" \
> "3 /" \
> "5 2 7 + 9 - /" \
> "0 4 5 6 - + ^" \
> "42 25 14 39 - + ^ 5 *"
> "8 9 15 - ^"
3 5 + 2 - 3 / 10 ^ = 1024
3 / = [Error: Empty stack]
5 2 7 + 9 - / = [Error: Division by zero]
0 4 5 6 - + ^ = 0
42 25 14 39 - + ^ 5 * = 5
8 9 15 - ^ = [Error: Raising to negative power: not yet implemented]
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru