Advertisement
Guest User

Untitled

a guest
Sep 22nd, 2019
155
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 1.45 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <unistd.h>
  4. #include <sys/wait.h>
  5. #include <math.h>
  6.  
  7. double quad( unsigned int n, double a, double b,
  8.  
  9. double (*fun)(double) )
  10.  
  11. {
  12. unsigned int k;
  13. double xk, sum;
  14. sum = fun( a ) + fun( b );
  15. for( k=1;k<n;k++ )
  16. {
  17. xk = a+ (b-a)*k/n;
  18. sum += 2.0*fun( xk );
  19. }
  20. return ( (b-a)/(2.0*n)*sum );
  21. }
  22.  
  23.  
  24. double sine( double x ){ return sin( 2*M_PI*x )*exp(-x); }
  25.  
  26.  
  27. int main( void )
  28. {
  29. int pid,status;
  30. double sine( double );
  31. double quad( unsigned int,double,double,double (*)(double));
  32. unsigned int n;
  33. double a,b,I;
  34. // Inicjujemy wartości początkowe zmiennych
  35. a=0.0; b=1.0;
  36. I=0.0;
  37. // i jeszcze ilość węzłów kwadratury
  38. n=3200;
  39.  
  40. switch( (int)fork() )
  41. {
  42. case -1:
  43. perror( "<!> błąd inicjacji potomka" ); exit( 1 ); break;
  44. case 0:
  45. // Obliczamy całkę, ale już w potomku
  46. I = quad( n,a,b,sine );
  47. // Dla pewności wyprowadzamy informację o tym co wyliczyliśmy
  48. printf( "[%d] wartość całki\t%16.6f\n",(int)getpid(),I );
  49. //... i kończymy działanie potomka
  50. exit( 0 );
  51. // Teraz kod dla procesu nadrzędnego
  52. default:
  53. // Powiedzmy, że coś tutaj ważnego się dzieje
  54. printf( "[%d] wykonuje ważne rzeczy...\n",(int)getpid() );
  55. // Oczekiwanie na wynik z potomka
  56. pid = (int)wait( &status );
  57. // ... i mamy gotowy rezultat
  58. printf( "[%d] zakończył z kodem %d\n",pid,status );
  59. printf( "[%d] otrzymał wartość\t%16.6f\n",(int)getpid(),I );
  60.  
  61. }
  62. // Na tym program kończy działanie
  63. return 0;
  64. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement