SaveText.Ru

346346
  1. // ConsoleApplication2.cpp: определяет точку входа для консольного приложения.
  2. //
  3.  
  4. // ConsoleApplication1.cpp: определяет точку входа для консольного приложения.
  5. //
  6.  
  7. #include "stdafx.h"
  8. #include <iostream>
  9. #include <math.h>
  10. #include <iomanip>
  11. #include <omp.h>
  12. #include <time.h>
  13. #include <stdio.h>
  14. #include <cmath>
  15. #include <cstdlib>
  16.  
  17.  
  18. using namespace std;
  19.  
  20. void parallel_method(double a, double b, double n, double h, double x);
  21. void unparallel_method(double a, double b, double n, double h, double x);
  22. //typedef double(*pointFunc)(double);
  23.  
  24. double f(double x) {
  25.         double f;
  26.         f = cos(2.0 / x) - 2.0*sin(1.0 / x) + 1.0 / x;
  27.         return f;
  28. }
  29.  
  30.  
  31.  
  32. int main()
  33. {
  34.         double a, b, n, h, x=0;
  35.         int k;
  36.         time_t start, end, start2, end2;
  37.         a = 1; b = 2; n = 20;
  38.         h = (b - a) / n;
  39.         cout << "a=" << a << endl;
  40.         cout << "b=" << b << endl;
  41.         cout << "n=" << n << endl;
  42.         cout << "h=" << h << endl;
  43.         cout << setw(15) << "x" << setw(15) << "f(x)" << endl;
  44.  
  45.      time(&start);
  46.          parallel_method(a, b, n, h, x);
  47.          time(&end);
  48.          time(&start2);
  49.          unparallel_method(a, b, n, h, x);
  50.          
  51.          time(&end2);
  52.          cout << "time parallel: " << difftime(end, start) << endl;
  53.          cout << "time unparallel: " << difftime(end2, start2) << endl;
  54.         system("pause");
  55.         return 0;
  56. }
  57.  
  58. void parallel_method(double a, double b, double n, double h, double x) {
  59.         int k = 0;
  60.         x = a;
  61. #pragma omp parallel shared(x, a , b , h, f) num_threads(threads)
  62. {
  63. #pragma omp for
  64.         for (int i = 0; i <= n; i++) {
  65.  
  66.                 for (x = a; x <= b; x = x + h) {
  67.  
  68.                         cout << setw(15) << x << setw(15) << f(x);
  69.                         if (x < b && f(x)*f(x + h) < 0) {
  70.                                 cout << "    isolation " << x << " ; " << x + h << endl;
  71.                                 k++;
  72.                         }
  73.                         else {
  74.                                 cout << endl;
  75.                         }
  76.                
  77.                 }
  78.         }
  79. }
  80. cout << "parallel: root count:" << k << endl;
  81. }
  82.  
  83. void unparallel_method(double a, double b, double n, double h, double x) {
  84.         int k = 0;
  85.  
  86.                 for (int i = 0; i <= n; i++) {
  87.  
  88.                         for (x = a; x <= b; x = x + h) {
  89.  
  90.                                 cout << setw(15) << x << setw(15) << f(x);
  91.                                 if (x < b && f(x)*f(x + h) < 0) {
  92.                                         cout << "    isolation " << x << " ; " << x + h << endl;
  93.                                         k++;
  94.                                 }
  95.                                 else {
  96.                                         cout << endl;
  97.                                 }
  98.  
  99.                         }
  100.                 }
  101.        
  102.                 cout << "unparallel: root count:" << k << endl;
  103. }

Share with your friends:

Print