#include #include #include #include #include #include #include std::vector read_values() { std::string line { }; std::getline(std::cin, line); std::istringstream iss { line }; std::vector result { std::istream_iterator { iss }, std::istream_iterator { } }; return result; } double evaluate(std::vector const& coefficients, double value) { std::vector values (coefficients.size()); std::iota(std::begin(values), std::end(values), 0.0); std::transform(std::begin(values), std::end(values), std::begin(values), [value](double exponent) { return std::pow(value, exponent); }); return std::inner_product(std::begin(coefficients), std::end(coefficients), std::begin(values), 0.0); } int main() { std::cout << "Enter coefficients: "; std::vector coefficients { read_values() }; auto convert { [exponent = 0](double c) mutable { std::ostringstream oss { }; oss << c; if (exponent > 0) { oss << "*x"; if (exponent > 1) { oss << "^" << exponent; } } ++exponent; return oss.str(); } }; std::ostringstream oss { }; std::transform(std::begin(coefficients), std::prev(std::end(coefficients)), std::ostream_iterator { oss, "+" }, std::ref(convert)); oss << convert(coefficients.back()); std::string polynomial { oss.str() }; std::cout << "p(x) = " << polynomial << std::endl; std::cout << "Enter values of x to evaluate: "; std::vector values { read_values() }; std::transform(std::begin(values), std::end(values), std::ostream_iterator { std::cout, "\n" }, [&coefficients](double value) { std::ostringstream oss { }; oss << "p(" << value << ") = " << evaluate(coefficients, value); return oss.str(); }); }