Comments 7
наиболее частым тестовым заданием при собеседовании на должность разработчика является программирование калькулятора
Честно говоря, не знал, но попрошу первокурсников сильнее радоваться задачке на польскую нотацию.
высокую точность вычислений, до двух знаков после запятой.
Вот это высокая точность!
UFO just landed and posted this here
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;
}
Sign up to leave a comment.
Разработка калькулятора Miracle