fork download
  1. #include <iostream>
  2. #include <cmath>
  3. #include <iomanip>
  4.  
  5. using namespace std;
  6.  
  7. // Funkcja, której pierwiastek szukamy
  8. double f(double x, double c) {
  9. return x*x - c;
  10. }
  11.  
  12. // Funkcja bisekcji
  13. double sqrt_bisekcja(double c, double eps, int &liczba_iteracji) {
  14. double a = 0; // dla c > 0 pierwiastek jest > 0
  15. double b = max(1.0, c); // górna granica przedziału
  16. double c_mid;
  17. liczba_iteracji = 0;
  18.  
  19. while ((b - a) / 2 > eps) {
  20. c_mid = (a + b) / 2.0;
  21. liczba_iteracji++;
  22.  
  23. if (fabs(f(c_mid, c)) < eps) {
  24. return c_mid; // znaleziono przybliżenie pierwiastka
  25. }
  26.  
  27. if (f(a, c) * f(c_mid, c) < 0) {
  28. b = c_mid;
  29. } else {
  30. a = c_mid;
  31. }
  32. }
  33.  
  34. // Zwracamy środek przedziału jako przybliżenie pierwiastka
  35. return (a + b) / 2.0;
  36. }
  37.  
  38. int main() {
  39. double c = 15.0; // liczba, z której szukamy pierwiastka
  40. double eps = 0.001; // dokładność
  41. int iteracje = 0;
  42.  
  43. double wynik = sqrt_bisekcja(c, eps, iteracje);
  44.  
  45. cout << fixed << setprecision(6);
  46. cout << "Przyblizona wartosc pierwiastka kwadratowego z " << c << " wynosi: " << wynik << endl;
  47. cout << "Liczba iteracji potrzebnych do uzyskania dokladnosci eps = " << eps << " : " << iteracje << endl;
  48.  
  49. return 0;
  50. }
  51.  
Success #stdin #stdout 0.01s 5284KB
stdin
Standard input is empty
stdout
Przyblizona wartosc pierwiastka kwadratowego z 15.000000 wynosi: 3.873596
Liczba iteracji potrzebnych do uzyskania dokladnosci eps = 0.001000 : 13