fork download
  1. #include <iostream>
  2. #include <fstream>
  3. #include <cmath>
  4. #include <iomanip>
  5.  
  6. using namespace std;
  7.  
  8. // Definicja funkcji
  9. double f(double x) {
  10. return 0.25 * x * x - 2;
  11. }
  12.  
  13. // Metoda bisekcji
  14. double bisekcja(double a, double b, double tol, int max_iter) {
  15. if (f(a) * f(b) >= 0) {
  16. cout << "Funkcja nie zmienia znaku na podanym przedziale." << endl;
  17. return NAN;
  18. }
  19.  
  20. double c;
  21. for (int i = 0; i < max_iter; i++) {
  22. c = (a + b) / 2;
  23. double fc = f(c);
  24.  
  25. if (fabs(fc) < tol) {
  26. return c; // znaleziono miejsce zerowe
  27. }
  28.  
  29. if (f(a) * fc < 0) {
  30. b = c;
  31. } else {
  32. a = c;
  33. }
  34. }
  35. return c; // zwróć przybliżone miejsce zerowe
  36. }
  37.  
  38. int main() {
  39. double a = 2.0;
  40. double b = 4.0;
  41. double tol = 1e-6;
  42. int max_iter = 100;
  43.  
  44. double x0 = bisekcja(a, b, tol, max_iter);
  45. cout << "Miejsce zerowe funkcji: x = " << setprecision(6) << x0 << endl;
  46.  
  47. // Generowanie danych do wykresu
  48. ofstream plik("wykres.csv");
  49. plik << "x,f(x)\n";
  50. int n = 100; // liczba punktów
  51. double dx = (b - a) / (n - 1);
  52. for (int i = 0; i < n; i++) {
  53. double x = a + i * dx;
  54. plik << x << "," << f(x) << "\n";
  55. }
  56. plik.close();
  57.  
  58. cout << "Dane do wykresu zapisane w pliku 'wykres.csv'." << endl;
  59.  
  60. return 0;
  61. }
Success #stdin #stdout 0.01s 5304KB
stdin
Standard input is empty
stdout
Miejsce zerowe funkcji: x = 2.82843
Dane do wykresu zapisane w pliku 'wykres.csv'.