#include #include #include #include double f(double x){ return 8*pow(x, 5.0) - 2*pow(x, 4.0) + 15*pow(x,2.0) - 24*x + 18; } double area_f(int a, int b, int n){ printf("DANE WEJ %i, %i, %i\n", a, b, n); double h = (b - a) / (double)n; double s = 0.0; double floor_a = f(a), floor_b; int i; for(i = 1; i <=n; i++){ floor_b = f(a + h * i); s += (floor_a + floor_b); floor_a = floor_b; } printf("SMALL STUFF %f\n", (s * 0.5 * h)); return s * 0.5 * h; } int main(int argc, char *argv[]){ int pip[2]; pipe(pip); int pid = 10; int iter = 0; int k = 3; int max_a = -15; int max_b = 15; int range = abs(max_a - max_b) / k; int current_a = max_a; int a; int b; int n = 1000; double area = 0.0; double temp_area = 0.0; int read_k_times = 0; int l = 0; int first = 0; for(l = 0; l < k; l++){ if(pid>0){ if(first == 0){ a = -15; b = -5; first=1; }else{ a = b; b += range; } pid = fork(); } } if(pid == 0){ double calc_area = area_f(a, b, n); printf("calc_area %f\n", calc_area); close(pip[0]); write(pip[1], &calc_area, sizeof(calc_area)); //kid }else{ printf ("ITER %i\n", iter); int m = 0; for(m = 0; m < k; m++){ close(pip[1]); printf("I AM READING STUFF"); read(pip[0], &temp_area, sizeof(temp_area)); area += temp_area; read_k_times++; } printf("FINAL AREA %f\n", area); kill(0, SIGKILL); exit(0); //parent } return (0); }