Advertisement
cesarcardinale

TP8 Exo 4 - Aix

May 24th, 2018
203
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.50 KB | None | 0 0
  1. #include <iostream>
  2. #include <cmath>               // cos(), sin(), M_PI_2
  3.  
  4. using namespace std;
  5.  
  6. namespace{
  7.  
  8.     template <typename T, typename TRes>
  9.     class IUnaryFunction{
  10.       public :
  11.         virtual ~IUnaryFunction (void) {}
  12.         virtual TRes operator () (const T &) const noexcept = 0;
  13.  
  14.     }; // IUnaryFunction
  15.  
  16.     typedef IUnaryFunction <double, double> TypeFunctor;
  17.  
  18.     class FctorSin: public TypeFunctor{
  19.       public :
  20.         virtual ~FctorSin (void) {}
  21.         virtual double operator () (const double & T) const noexcept { return sin (T);}
  22.     }; // FctorSin
  23.  
  24.     class CFctorCos: public TypeFunctor{
  25.       public :
  26.         virtual ~CFctorCos (void) {}
  27.         virtual double operator () (const double & T) const noexcept { return cos (T);}
  28.     }; // CFctorCos
  29.     double integrTrapezes (const TypeFunctor & f, double a, double b, unsigned n){
  30.         double s     = (f (a) + f (b)) / 2.0;
  31.         double delta = (b - a) / double (n);
  32.  
  33.         for ( ; --n; ) s += f (a += delta);
  34.  
  35.         return s * delta;
  36.  
  37.     } // integrTrapezes
  38.  
  39.     void testIntegrTrapezes (void){
  40.  
  41.         cout << "IntegrTrapezes : \n\n";
  42.  
  43.         cout << "Methode des trapezes : \n";
  44.  
  45.         cout << "S (cos (x)) entre 0 et +Pi/2  avec   5 intervalles = "
  46.              << integrTrapezes (CFctorCos(), 0, M_PI_2,   5) << '\n';
  47.  
  48.         cout << "S (cos (x)) entre 0 et +Pi/2  avec  10 intervalles = "
  49.              << integrTrapezes (CFctorCos(), 0, M_PI_2,  10) << '\n';
  50.  
  51.         cout << "S (cos (x)) entre 0 et +Pi/2  avec  50 intervalles = "
  52.              << integrTrapezes (CFctorCos(), 0, M_PI_2,  50) << '\n';
  53.  
  54.         cout << "S (cos (x)) entre 0 et +Pi/2  avec 100 intervalles = "
  55.              << integrTrapezes (CFctorCos(), 0, M_PI_2, 100) << '\n';
  56.  
  57.         cout << '\n';
  58.  
  59.         cout << "S (sin (x)) entre -Pi/2 et 0  avec   5 intervalles = "
  60.              << integrTrapezes (FctorSin(), -M_PI_2, 0,   5) << '\n';
  61.  
  62.         cout << "S (sin (x)) entre -Pi/2 et 0  avec  10 intervalles = "
  63.              << integrTrapezes (FctorSin(), -M_PI_2, 0,  10) << '\n';
  64.  
  65.         cout << "S (sin (x)) entre -Pi/2 et 0  avec  50 intervalles = "
  66.              << integrTrapezes (FctorSin(), -M_PI_2, 0,  50) << '\n';
  67.  
  68.         cout << "S (sin (x)) entre -Pi/2 et 0  avec 100 intervalles = "
  69.              << integrTrapezes (FctorSin(), -M_PI_2, 0, 100) << '\n';
  70.  
  71.     } // TestIntegrTrapezes()
  72.  
  73. } // namespace anonyme
  74.  
  75. int main (void){
  76.     testIntegrTrapezes ();
  77.  
  78.     return 0;
  79.  
  80. } // main()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement