NickAndNick

Ряд Тейлора для ln ((x + 1) / (x - 1))

Dec 20th, 2012
967
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. #include <iostream>
  2. #include <iomanip>
  3.  
  4. using namespace std;
  5.  
  6. void h_line(streamsize);
  7. unsigned series(const double, const double, double &);
  8.  
  9. int main() {        
  10.     double x_beg, x_end, dx, arg = 0, eps;
  11.     cout << "x_beg?.. "; cin >> x_beg;
  12.     cout << "x_end?.. "; cin >> x_end;
  13.     cout << "dx?.. "; cin >> dx;
  14.     cout << "exp?.. "; cin >> eps;
  15.  
  16.     if (x_end > x_beg && dx > 0 && eps > 0 && eps >= 1e-14) {
  17.         unsigned q;
  18.         unsigned char v = 179;
  19.         streamsize lr = 9, c = 19, tb = lr * 2 + c + 10, acc = 16;
  20.  
  21.         cout << "\n\t\tTITLE TABLE\n";
  22.         h_line(tb);
  23.         cout << v << ' '
  24.              << setw(lr) << "Argument"
  25.              << ' ' << v << ' '
  26.              << setw(c)  << "Function"
  27.              << ' ' << v << ' '
  28.              << setw(lr) << "Quantuty"
  29.              << ' ' << v << endl;
  30.         h_line(tb);
  31.  
  32.         for (double x = x_beg; x <= x_end + dx / 2; x += dx) {
  33.             if (abs(x) > 1) {
  34.                 q = series(x, eps, arg);
  35.  
  36.                 cout << v << ' '
  37.                      << setw(lr) << x
  38.                      << ' ' << v << ' '
  39.                      << setw(c) << setprecision(acc) << arg
  40.                      << ' ' << v << ' '
  41.                      << setw(lr) << q
  42.                      << ' ' << v << endl;
  43.             } else cout << v << ' '
  44.                         << setw(lr) << x
  45.                         << ' ' << v << ' '
  46.                         << "\t Argument error!\a"
  47.                         << setw(acc - 2) << ' ' << v << endl;                
  48.             h_line(tb);
  49.         }
  50.     } else cout << "\tError!\a\n";
  51.  
  52.     cin.get(); cin.get();
  53.     return 0;
  54. }
  55. void h_line(streamsize _h) {
  56.     if (_h > 80 ) _h = 80;
  57.     unsigned char h = 196;
  58.     for (streamsize n = 0; n < _h; n++) cout << h;
  59.     cout << endl;
  60. }
  61.  
  62. unsigned series(const double _x, const double _exp, double & _arg) {    
  63.     unsigned n = 0;
  64.     int dx = 1;
  65.     double arg = log((_x + 1) / (_x - 1));
  66.     double sum = 0, temp = arg * 2;
  67.  
  68.     while (abs(abs(temp) - abs(arg)) > _exp) {
  69.         ++n;
  70.         sum += 1 / (dx * pow(_x, dx));
  71.         temp = 2 * sum;
  72.         dx += 2;
  73.     }
  74.  
  75.     _arg = temp;
  76.     return n;
  77. }
RAW Paste Data