Facebook
From MK, 5 Years ago, written in Plain Text.
Embed
Download Paste or View Raw
Hits: 225
  1. #include <stdlib.h>
  2. #include <stdio.h>
  3. #include <math.h>
  4. #include <signal.h>
  5.  
  6. double f(double x){
  7.     return 8*pow(x, 5.0) - 2*pow(x, 4.0) + 15*pow(x,2.0) - 24*x + 18;
  8. }
  9.  
  10. double area_f(int a, int b, int n){
  11.    
  12.  
  13.     printf("DANE WEJ %i, %i, %i\n", a, b, n);
  14.     double h = (b - a) / (double)n;
  15.     double s = 0.0;
  16.     double floor_a = f(a), floor_b;
  17.     int i;
  18.    
  19.     for(i = 1; i <=n; i++){
  20.         floor_b = f(a + h * i);
  21.         s += (floor_a + floor_b);
  22.         floor_a = floor_b;
  23.     }
  24.    
  25.  
  26.     printf("SMALL STUFF %f\n", (s * 0.5 * h));
  27.    
  28.     return s * 0.5 * h;
  29.    
  30. }
  31.  
  32. int main(int argc, char *argv[]){
  33.    
  34.     int pip[2];
  35.     pipe(pip);
  36.     int pid = 10;
  37.     int iter = 0;
  38.     int k = 3;
  39.     int max_a = -15;
  40.     int max_b = 15;
  41.     int range = abs(max_a - max_b) / k;
  42.     int current_a = max_a;
  43.     int a;
  44.     int b;
  45.     int n = 1000;
  46.    
  47.     double area = 0.0;
  48.     double temp_area = 0.0;
  49.     int read_k_times = 0;
  50.  
  51.     int l = 0;
  52.     int first = 0;
  53.  
  54.     for(l = 0; l < k; l++){
  55.         if(pid>0){
  56.             if(first == 0){
  57.                 a = -15;
  58.                 b = -5;
  59.                 first=1;
  60.             }else{
  61.                 a = b;
  62.                 b += range;
  63.             }
  64.             pid = fork();
  65.            
  66.         }
  67.     }
  68.        
  69.        
  70.         if(pid == 0){
  71.  
  72.             double calc_area = area_f(a, b, n);
  73.             printf("calc_area %f\n", calc_area);
  74.             close(pip[0]);
  75.             write(pip[1], &calc_area, sizeof(calc_area));
  76.            
  77.            
  78.             //kid
  79.         }else{
  80.             printf ("ITER %i\n", iter);
  81.             int m = 0;
  82.             for(m = 0; m < k; m++){
  83.                 close(pip[1]);
  84.                 printf("I AM READING STUFF");
  85.                 read(pip[0], &temp_area, sizeof(temp_area));
  86.                 area += temp_area;
  87.                 read_k_times++;
  88.             }
  89.            
  90.            
  91.            
  92.             printf("FINAL AREA %f\n", area);
  93.            
  94.            
  95.             kill(0, SIGKILL);
  96.                 exit(0);
  97.            
  98.            
  99.             //parent
  100.         }
  101.    
  102.    
  103.    
  104.    
  105.     return (0);
  106.    
  107.    
  108.  
  109.  
  110. }