Advertisement
Alchemik96

PRIR CALKI

Jan 10th, 2018
145
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.19 KB | None | 0 0
  1. // MPI_TEST.cpp: Określa punkt wejścia dla aplikacji konsoli.
  2. //
  3.  
  4. #include "stdafx.h"
  5. #include "mpi.h"
  6. #include <iostream>
  7. #include <vector>
  8. #include <stdio.h>
  9. #include <time.h>
  10. #include <Windows.h>
  11. #include <conio.h>
  12. //funkcja dla ktorej obliczamy calke
  13.  
  14. double f(const double x)
  15. {
  16. return x * sin(x);
  17. }
  18. void calkowanie_prostokaty(float xp, float xk, int n)
  19. {
  20. float calka,h;
  21.  
  22. // przedzialy
  23.  
  24.  
  25. h = (xk - xp) / (float)n;
  26.  
  27. printf( "krok: h=%f \n", h);
  28.  
  29. calka = 0;
  30.  
  31. for (int i = 1; i <= n; i++)
  32. {
  33. calka += f(xp + i*h)*h;
  34. }
  35.  
  36. printf("Wynik calkowania metoda prostokatow:%.6f \n",calka);
  37. }
  38. void calkowanie_trapezy(float xp, float xk, int n)
  39. {
  40. float calka,h;
  41.  
  42.  
  43. // przedzialy
  44.  
  45. h = (xk - xp) / (float)n;
  46.  
  47. printf("krok: h=%f \n", h);
  48.  
  49. calka = 0;
  50. for (int i = 1; i<n; i++)
  51. {
  52. calka += f(xp + i * h);
  53. }
  54. calka += f(xp) / 2;
  55. calka += f(xk) / 2;
  56. calka *= h;
  57.  
  58.  
  59. printf("Wartosc calki wynosi w przyblizeniu %.6f\n", calka);
  60.  
  61. }
  62.  
  63. int main(int argc, char *argv[])
  64. {
  65. srand(time(NULL));
  66.  
  67. int rank, size, i, n,k;
  68. float xp, xk, dx;
  69.  
  70. MPI_Status stat; // Struktura statusu wiadomości
  71.  
  72. MPI_Init(&argc, &argv); // Inicjalizowanie MPI
  73.  
  74. MPI_Comm_size(MPI_COMM_WORLD, &size); // Pobieranie liczby wszystkich wątków;
  75. MPI_Comm_rank(MPI_COMM_WORLD, &rank); // Pobieranie numeru dla danego wątku;
  76. printf("liczba watkow :%d \n",size);
  77. printf("Podaj poczatek przedzialu calkowania\n");
  78. scanf("%f", &xp);
  79.  
  80. printf("Podaj koniec przedzialu calkowania\n");
  81. scanf("%f", &xk);
  82.  
  83. printf("Podaj dokladnosc(czy to jest szerokośc przedizału to ja nie wiem) calkowania\n");
  84. scanf("%d", &n);
  85. float czasA, czasB;
  86. while (1)
  87. {
  88. printf("Podaj metode calkowania 1- trapezowa 2- prostokatna\n");
  89. scanf("%d", &k);
  90.  
  91. if (k == 1)
  92. {
  93. czasA = GetTickCount();
  94. calkowanie_trapezy(xp, xk, n);
  95. czasB = GetTickCount();
  96. printf("Wykonywanie zajęło %.6f ms\n", czasB - czasA);
  97. }
  98. if (k == 2)
  99. {
  100. czasA = GetTickCount();
  101. calkowanie_prostokaty(xp, xk, n);
  102. czasB = GetTickCount();
  103. printf("Wykonywanie zajęło %.6f ms\n", czasB - czasA);
  104. }
  105. }
  106. MPI_Finalize(); // Zamykanie MPI
  107. _getch();
  108. return (0);
  109. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement