C++ Bc. 29 cpp: Porovnání verzí
Bez shrnutí editace |
m +kategorie programovani, c++ |
||
(Nejsou zobrazeny 2 mezilehlé verze od 2 dalších uživatelů.) | |||
Řádek 46: | Řádek 46: | ||
do | do | ||
{ | { | ||
x = ( | x = (b*fa - a*fb)/(fa - fb); | ||
fx = f(x); | fx = f(x); | ||
Řádek 65: | Řádek 65: | ||
} | } | ||
[ [[C | [ [[C++ Bc. 29| Zpět]] ] | ||
[[Kategorie:Programování]] | |||
[[Kategorie:C++]] |
Aktuální verze z 2. 9. 2006, 11:02
#include <iostream> #include <cmath> #include <string> struct Chyba { template <typename T> Chyba(T t) : text(t) {} std::string text; }; typedef double (*Funkce)(double); double tetivy(Funkce f, double a, double b, double tol=1e-12) throw (Chyba); double test(double x) { return std::sin(4*x*x - x - 0.3); } int main() { try { double d =tetivy(test, -1, 1); std::cout << "Aproximace korene x = " << d << " f(x) = " << test(d) << "\n"; } catch(Chyba chyba) { std::cout << chyba.text << "\n"; } } double tetivy(Funkce f, double a, double b, double tol) throw (Chyba) { double fa = f(a); double fb = f(b); double x, fx; if (fa*fb > 0) throw Chyba("Neni splnena podminka f(a)*f(b) < 0\n"); if (std::abs(a - b) < tol) return a; do { x = (b*fa - a*fb)/(fa - fb); fx = f(x); if (fa*fx > 0) { a = x; fa = fx; } else { b = x; fb = fx; } } while (std::abs(fx) > tol && std::abs(a - b) > tol); return x; }
[ Zpět ]