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

Объектно-ориентированная программа для расчета арифметического выражения - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Паскаль.Разработать программу для вычисления арифметического выражения и вывода полученного результата http://www.cyberforum.ru/cpp-beginners/thread949828.html
Ребят помогите Разработать программу для вычисления арифметического выражения и вывода полученного результата.Соответствующие исходные данные ввести с клавиатуры.
C++ библиотека для работы с mysql Здравствуйте, хочу научится работать в C++ Bulder XE с базами данными, не встроенными а допустим с Mysql 5.1, MS SQL Server. Хотел бы книгу найти, но не могу найти. Предложите библиотеки либо книги где все подробно рассказывается. http://www.cyberforum.ru/cpp-beginners/thread949813.html
Синтаксические ошибки C++
Всем привет !!! помогите пожалуста найти синтаксические ошибки в коде float x, y; //cout ;<< "x="; cin >> x; if(x < 0) { y = 1 / (2*x+10); cout << y; }
C++ Работа с классами (в главном классе создать указатель на экземпляр другого класса)
Недавно начал изучение С++, в частности ООП. В связи с чем у меня есть вопрос как в главном классе можно создать указатель на экземпляр другого класса, причем такой, чтоб во всех экземплярах главного класса был один и тот же указатель. То есть существует много экземпляров главного класса, все указатели которого указывают на единственный экземпляр другого класса.
C++ printf sprintf не понятно http://www.cyberforum.ru/cpp-beginners/thread949773.html
Почему в printf строка отображается нормально, а sprintf вместо строки вставляет "(null)" ? что нужно сделать со строкой что бы она нормально копировалась в sprintf? char * какая-то строка полученная с бд printf(строка) пишет "строка" sprintf(... "строка: %s.", строка) получается "строка: (null)."
C++ время жизни временного объекта можно ли передать временный объект в функцию по ссылке? void f1(int & ); ..... int main() { f1(int()); подробнее

Показать сообщение отдельно
kamre
126 / 130 / 4
Регистрация: 25.12.2011
Сообщений: 438
09.09.2013, 02:04     Объектно-ориентированная программа для расчета арифметического выражения
Цитата Сообщение от Lero4ka_ Посмотреть сообщение
написать объектно-ориентированную программу, которая принимает на вход арифметическое выражение (только сложение и вычитание с отрицательными и положительными числами), переводит все в двоичную систему, там поэлементно через массив производит вычисления и выдает ответ в двоичной и десятичной системе.
Кол-во пробелов не ограничено и не указано. При вводе отрицательных чисел ставятся скобки)))
Примерно так можно:
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
#include <string>
#include <vector>
#include <iostream>
 
using namespace std;
 
class expr {
public:
    enum operation {
        add,
        subtract
    };
    void init(int val) {
        values.clear();
        operations.clear();
        values.push_back(val);
    }
    void append(operation op, int val) {
        operations.push_back(op);
        values.push_back(val);
    }
    int calc() const {
        if (values.empty())
            return 0;
        int sum = values[0];
        for (size_t i = 0; i < operations.size(); ++i) {
            operation op = operations[i];
            int v = values[i + 1];
            sum = (op == add) ? sum + v : sum - v;
        }
        return sum;
    }
private:
    vector<int> values;
    vector<operation> operations;
};
 
class parser {
public:
    parser(const char* s) : cur(s) {}
 
    bool parse(expr& e) {
        if (!*cur)
            return false;
        int val;
        if (!number(val))
            return false;
        e.init(val);
        expr::operation op;
        while (*cur) {
            if (!operation(op))
                return false;
            if (!number(val))
                return false;
            e.append(op, val);
            skip();
        }
        return true;
    }
private:
    void skip() {
        while (*cur == ' ')
            ++cur;
    }
    bool number(int& val) {
        skip();
        bool needCloseParen = false;
        if (*cur == '(') {
            ++cur;
            skip();
            needCloseParen = true;
        }
        bool negative = false;
        if (*cur == '+' || *cur == '-') {
            negative = (*cur == '-');
            ++cur;
            skip();
        }
        if (*cur < '0' && *cur > '9')
            return false;
        val = 0;
        while (*cur >= '0' && *cur <= '9') {
            val = 10*val + (*cur - '0');
            ++cur;
        }
        if (negative)
            val = -val;
        if (needCloseParen) {
            skip();
            if (*cur != ')')
                return false;
            ++cur;
        }
        return true;
    }
    bool operation(expr::operation& op) {
        skip();
        if (*cur == '+' || *cur == '-') {
            op = (*cur == '+') ? expr::add : expr::subtract;
            ++cur;
            return true;
        }
        return false;
    }
    const char* cur;
};
 
string binary(int val) {
    string s;
    int n = sizeof(int)*CHAR_BIT;
    while(n--) {
        char c = ((1 << n) & val) ? '1' : '0';
        if (c == '1' || !s.empty())
            s += c;
    }
    return s;
}
 
void calc(const string& s) {
    expr e;
    parser p(s.c_str());
    if (!p.parse(e)) {
        cout << "Expression \"" << s << "\" is not valid!" << endl;
    } else {
        int val = e.calc();
        cout << "Value of expression \"" << s << "\" is " << val
             << " = " << binary(val) << endl;
    }
}
 
int main() {
    calc("2 + 3");
    calc("2 + (-3) ");
    calc("1 + (-5) - 3 - (-2)");
}
Цитата Сообщение от stdout
Value of expression "2 + 3" is 5 = 101
Value of expression "2 + (-3) " is -1 = 11111111111111111111111111111111
Value of expression "1 + (-5) - 3 - (-2)" is -5 = 11111111111111111111111111111011
 
Текущее время: 14:36. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru