fork download
  1. #include <iostream>
  2. #include <cmath>
  3. #include <iomanip>
  4.  
  5. using namespace std;
  6.  
  7. // Funkcja, której pierwiastek chcemy znaleźć
  8. double f(double x, double N) {
  9. return x*x - N;
  10. }
  11.  
  12. // Metoda bisekcji
  13. double sqrt_bisekcja(double N, double tol=1e-6, int max_iter=100) {
  14. if (N < 1) {
  15. cout << "Liczba musi być większa od 1!" << endl;
  16. return NAN;
  17. }
  18.  
  19. double a = 1.0;
  20. double b = N;
  21. double c;
  22.  
  23. for (int i = 0; i < max_iter; i++) {
  24. c = (a + b) / 2.0;
  25. double fc = f(c, N);
  26.  
  27. if (fabs(fc) < tol) {
  28. return c; // znaleziono pierwiastek
  29. }
  30.  
  31. if (f(a, N) * fc < 0) {
  32. b = c;
  33. } else {
  34. a = c;
  35. }
  36. }
  37.  
  38. return c; // zwróć przybliżony pierwiastek
  39. }
  40.  
  41. int main() {
  42. double N;
  43. cout << "Podaj liczbe rzeczywista większa od 1: ";
  44. cin >> N;
  45.  
  46. double wynik = sqrt_bisekcja(N);
  47.  
  48. if (!isnan(wynik)) {
  49. cout << fixed << setprecision(6);
  50. cout << "Przybliżona wartosc pierwiastka kwadratowego z " << N << " wynosi: " << wynik << endl;
  51. }
  52.  
  53. return 0;
  54. }
  55.  
Success #stdin #stdout 0.01s 5292KB
stdin
9
stdout
Podaj liczbe rzeczywista większa od 1: Przybliżona wartosc pierwiastka kwadratowego z 9.000000 wynosi: 3.000000