Diskuse:C++ Bc. 13
Dobry den, prohlizel jsem si priklady pro bakalare vcetne Vaseho vypracovani a u prikladu cislo 13 jsem pravdepodobne narazil na chybu. V tomto zadani je ukolem napsat vypocet polynomu pomoci Hornerova schema a dale napsat funkci scitajici dva polynomy. U obou vypoctu je pro standartni vystup uvedeno: for (double x=0; x<1.05; x+=0.1) { cout << x << "\t" << polynom(x, p) << endl; } Pri tomto reseni je 2x vypsano reseni polynomu, ale podruhe je ovlivneno funkci souctu. Myslim si, ze u druheho vypoctu by bylo vhodne napr. toto: for (int i = p.size()-1; x > -1; x--) { cout << p[i] << " | "; } cout <<endl; S pozdravem Stepancic Petr G2-63
Děkuji za připomínku. Nemyslím, že jde o chybu, to je věc názoru. Příklady ve sbírce a hlavně programky pro demonstraci výsledků řešení se snažím uvádět co možná nejjednodušší. Pokud bych vypisoval koeficienty součtu, pak bych měl vypsat i koeficienty sčítaných polynomů a napsat funkci pro výpis koeficinetů zadaného polynomu (viz následující ukázka). Ponechávám zadání v původním tvaru
AČ
#include <iostream> #include <vector> #include <cmath> double polynom(double x, const std::vector<double>& a); void soucet (const std::vector<double>& q, const std::vector<double>& r, std::vector<double>& p); void tisk(const char* n, const std::vector<double>& t) { std::cout << n << "(x) = "; for (int i=t.size()-1; i>=0; i--) { std::cout << std::abs(t[i]); if (i) { std::cout << ".x"; if (i > 1) std::cout << "^" << i; if (t[i-1] >= 0) std::cout << " + "; else std::cout << " - "; } else std::cout << std::endl; } } int main() { using namespace std; vector<double> p, q, r, s; p.push_back(9); p.push_back(2); p.push_back(5); p.push_back(2); p.push_back(7); q.push_back( 3); q.push_back(-1); q.push_back( 2); r.push_back(6); r.push_back(3); r.push_back(3); r.push_back(2); r.push_back(7); soucet(q, r, s); tisk("p", p); tisk("q", q); tisk("r", r); tisk("s", s); cout << "\n x \t p(x) \t s(x)\n"; for (double x=0; x<1.05; x+=0.1) { cout << x << "\t" << polynom(x, p) << "\t" << polynom(x, s) << endl; } } double polynom(double x, const std::vector<double>& a) { int n = a.size(); double h = a[--n]; do { h *= x; h += a[--n]; } while (n); return h; } void soucet (const std::vector<double>& q, const std::vector<double>& r, std::vector<double>& p) { // ve vystupnim kontejneru 'p' musime nejprve zrusit vsechny jeho prvky p.clear(); const int nq = q.size(); const int nr = r.size(); const int max = std::max(nq, nr); for (int i=0; i<max; i++) { double s = 0; if (i < nq) s += q[i]; if (i < nr) s += r[i]; p.push_back(s); } }
p(x) = 7.x^4 + 2.x^3 + 5.x^2 + 2.x + 9 q(x) = 2.x^2 - 1.x + 3 r(x) = 7.x^4 + 2.x^3 + 3.x^2 + 3.x + 6 s(x) = 7.x^4 + 2.x^3 + 5.x^2 + 2.x + 9 x p(x) s(x) 0 9 9 0.1 9.2527 9.2527 0.2 9.6272 9.6272 0.3 10.1607 10.1607 0.4 10.9072 10.9072 0.5 11.9375 11.9375 0.6 13.3392 13.3392 0.7 15.2167 15.2167 0.8 17.6912 17.6912 0.9 20.9007 20.9007 1 25 25