Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdio.h>
- #include <stdlib.h>
- #include <unistd.h>
- #include <sys/wait.h>
- #include <math.h>
- double quad( unsigned int n, double a, double b,
- double (*fun)(double) )
- {
- unsigned int k;
- double xk, sum;
- sum = fun( a ) + fun( b );
- for( k=1;k<n;k++ )
- {
- xk = a+ (b-a)*k/n;
- sum += 2.0*fun( xk );
- }
- return ( (b-a)/(2.0*n)*sum );
- }
- double sine( double x ){ return sin( 2*M_PI*x )*exp(-x); }
- int main( void )
- {
- int pid,status;
- double sine( double );
- double quad( unsigned int,double,double,double (*)(double));
- unsigned int n;
- double a,b,I;
- // Inicjujemy wartości początkowe zmiennych
- a=0.0; b=1.0;
- I=0.0;
- // i jeszcze ilość węzłów kwadratury
- n=3200;
- switch( (int)fork() )
- {
- case -1:
- perror( "<!> błąd inicjacji potomka" ); exit( 1 ); break;
- case 0:
- // Obliczamy całkę, ale już w potomku
- I = quad( n,a,b,sine );
- // Dla pewności wyprowadzamy informację o tym co wyliczyliśmy
- printf( "[%d] wartość całki\t%16.6f\n",(int)getpid(),I );
- //... i kończymy działanie potomka
- exit( 0 );
- // Teraz kod dla procesu nadrzędnego
- default:
- // Powiedzmy, że coś tutaj ważnego się dzieje
- printf( "[%d] wykonuje ważne rzeczy...\n",(int)getpid() );
- // Oczekiwanie na wynik z potomka
- pid = (int)wait( &status );
- // ... i mamy gotowy rezultat
- printf( "[%d] zakończył z kodem %d\n",pid,status );
- printf( "[%d] otrzymał wartość\t%16.6f\n",(int)getpid(),I );
- }
- // Na tym program kończy działanie
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement