ulvis.paste.net

Paste Search Dynamic
Recent pastes
struct Result
  1. #include <windows.h>
  2. #include <iostream>
  3. #include <conio.h>
  4. #include <omp.h>
  5. #include <time.h>
  6. #include <math.h>
  7. #include <string>
  8.  
  9. using namespace std;
  10.  
  11. struct Result
  12. {
  13.     double square;
  14.     double time;
  15. };
  16.  
  17. void LoadParameters(bool& type, int& n, float& x1, float& x2, float& h)
  18. {
  19.     char temp;
  20.     do
  21.     {
  22.        
  23.         cout<<"Podaj sposob obliczen: \n[1]Metoda prostokatow\n[2]Metoda trapezow\n";
  24.         temp = getch();
  25.     }while(temp!='1' && temp !='2');
  26.     temp == '1' ? type = false : type = true;
  27.  
  28.     cout<<"x1 = "; cin>>x1;
  29.     do{ cout<<"x2 = "; cin>>x2; }while(x2<=x1);
  30.     do{ cout<<"n = "; cin>>n; }while(n<=0);
  31.     h = (x2-x1)/n;
  32.     cout<<"Szerokosc przedzialu: h = "<<h;
  33.     cout<<"---------------------------------\n";
  34. }
  35.  
  36. void ShowParameters(bool type, int n, float x1, float x2, float& h)
  37. {
  38.     string temp;
  39.     type == true ? temp = "trapezow" : temp = "prostokatow";
  40.     cout<<"PARAMENTRY"<<endl;
  41.     cout<<"------------------------\n";
  42.     cout<<"metoda: "<<temp<<endl;
  43.     cout<<"x1 = "<<x1<<endl;
  44.     cout<<"x2 = "<<x2<<endl;
  45.     cout<<"n = "<<n<<endl;
  46.     cout<<"h = "<<h<<endl;
  47.     cout<<"------------------------\n";
  48. }
  49.  
  50.  
  51. void ShowResult( Result* result, int n)
  52. {
  53.     cout<<endl<<endl;
  54.     cout<<"    WYNIK\n";
  55.     cout<<" -----------------------------------------------------\n";
  56.     cout<<"| L.p.|      Pole    |      Czas      | Roznica czasu |\n";
  57.     cout<<" -----------------------------------------------------\n";
  58.     for(int i=0;i<n;i++)
  59.     {
  60.     cout<<"|"<<i+1<<" | "<<result[i].square << "   |   " <<  result[i].time <<"   |  "<< result[i].time - result[0].time<< "  |\n";
  61.     }
  62.     cout<<" -----------------------------------------------------\n";
  63. }
  64.  
  65. double f(const double x)
  66. {
  67.     return x * sin(x);
  68. }
  69.  
  70. double SquaresMethod(double a, double b, double h)
  71. {
  72.     return h * f((b-a)/2);
  73. }
  74.  
  75. double TrapezoidsMethod(double a, double b, double h)
  76. {
  77.     return ((h * (f(a) + f(b)))/2);
  78. }
  79.  
  80. int main(int argc, char* argv)
  81. {
  82.     char next = 't';
  83.     float x1, x2;
  84.     int n; //liczba przedzialow
  85.     float h; //szerokośćjednego przedziału
  86.     bool type; //0-prostokaty, 1-trapezy
  87.     int thread; //liczba watkow;
  88.     Result result[10]; //10 różnych wyników
  89.     int i,j;
  90.     double buf = 0;
  91.     double start = 0;
  92.  
  93.     LoadParameters(type, n, x1, x2,h);
  94.     ShowParameters(type, n, x1, x2,h);
  95.  
  96.     if(type) //metoda trapezow
  97.     {
  98.         for(int w=0;w<10;w++)
  99.         {
  100.             start = omp_get_wtime();
  101.             #pragma omp parallel for private(i,buf) shared(result,w,,x1,x2,n,h) num_threads(w)
  102.             for(i=0;i<n;i++)
  103.             {
  104.                 buf += TrapezoidsMethod(x1+i*h,x1+(i+1)*h,h);
  105.             }
  106.             result[i].square = buf;
  107.             result[i].time = omp_get_wtime() - start;
  108.             buf = 0;
  109.         }
  110.     }
  111.     else
  112.     {
  113.         for(int w=0;w<10;w++)
  114.         {
  115.             start = omp_get_wtime();
  116.             #pragma omp parallel for private(i,buf) shared(result,w,,x1,x2,n,h) num_threads(w)
  117.             for(i=0;i<n;i++)
  118.             {
  119.                 buf += SquaresMethod(x1+i*h,x1+(i+1)*h,h);
  120.             }
  121.             result[i].square = buf;
  122.             result[i].time = omp_get_wtime() - start;
  123.             buf = 0;
  124.         }
  125.     }
  126.    
  127.     ShowResult(result, 10);
  128.  
  129.     getch();
  130.     return 0;
Parsed in 0.028 seconds