Хабр Курсы для всех
РЕКЛАМА
Практикум, Хекслет, SkyPro, авторские курсы — собрали всех и попросили скидки. Осталось выбрать!
наиболее частым тестовым заданием при собеседовании на должность разработчика является программирование калькулятора
Честно говоря, не знал, но попрошу первокурсников сильнее радоваться задачке на польскую нотацию.
высокую точность вычислений, до двух знаков после запятой.
Вот это высокая точность!
undo stress :)
В принципе, на junior тянет, "пойдёть... куры не улетять" )
Какой-то оверинженеринг для такой задачи.
Вот когда-то писал в 30 строк (без #include и main). Рекурсивного спуска, без синтаксических деревьев и пр.
#include <iostream>
#include <string>
#include <map>
#include <sstream>
#include <functional>
using namespace std;
typedef function<double(double,double)> Op;
map<char, Op> operators[] = {
{
{'+', [](double a, double b) { return a+b; } },
{'-', [](double a, double b) { return a-b; } }
},{
{'*', [](double a, double b) { return a*b; } },
{'/', [](double a, double b) { return a/b; } }
}
};
double expr(istringstream &src, int pri) {
double a, b;
if(pri >= size(operators)) {
src >> a;
return a;
}
char r;
auto op = operators[pri];
a = expr(src, pri+1);
src >> r;
while(op[r]) {
b = expr(src, pri+1);
a = op[r](a,b);
src >> r;
if(src.eof()) return a;
}
src.putback(r);
return a;
}
int main() {
istringstream src("2 + 2 * 3");
cout << src.str() << " = " << expr(src, 0) << '\n';
return 0;
}
Разработка калькулятора Miracle