SHARE
TWEET

lab8 zad3

LazySenpai Dec 5th, 2019 82 Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. #include <stdio.h>
  2. #include <unistd.h>
  3. #include <string.h>
  4. #include <stdlib.h>
  5. #include <math.h>
  6. #include <sys/wait.h>
  7.  
  8. double frac(double x) {
  9.     if(x == 0)
  10.         return 1;
  11.     else if (x == 1)
  12.         return 1;
  13.     else
  14.         return x*frac(x-1);
  15. }
  16.  
  17. int main() {
  18.     int fd[2];
  19.     char str[100], wynik[100];;
  20.    
  21.     pipe(fd);
  22.    
  23.     if(fork() > 0) {
  24.         double X;
  25.         double Eps;
  26.  
  27.         close(fd[0]);
  28.        
  29.         printf("X = ");    
  30.         scanf("%lf", &X);
  31.         sprintf(str, "%lf", X);    
  32.         write(fd[1], str, 101);
  33.        
  34.         printf("Eps = ");
  35.         scanf("%lf", &Eps);    
  36.         sprintf(str, "%lf", Eps);  
  37.         write(fd[1], str, 101);
  38.        
  39.         close(fd[1]);
  40.         sleep(1);
  41.     }
  42.     else {
  43.        
  44.         close(fd[1]);
  45.            
  46.         double X, Eps;
  47.            
  48.         read(fd[0], wynik, 101);
  49.         X = strtod(wynik, NULL);
  50.  
  51.         read(fd[0], wynik, 101);
  52.         Eps = strtod(wynik, NULL);
  53.        
  54.         close(fd[0]);
  55.  
  56.         int fd1[2];
  57.         pipe(fd1);
  58.        
  59.         if(fork() > 0) {
  60.                    
  61.             double i = 0;
  62.             double fragment;
  63.            
  64.             do {
  65.                 fragment = (pow(-1.0, i)*pow(X,2*i))/frac(2*i);
  66.                 sprintf(str, "%lf", fragment);    
  67.                 write(fd1[1], str, 101);
  68.                 printf("%lf\n ", fragment);
  69.                 i++;
  70.             } while(fabs(fragment) >= Eps);
  71.            
  72.             return 0;
  73.         }
  74.         else {
  75.             double sum=0, tmp;
  76.             close(fd1[1]);
  77.            
  78.             while(read(fd1[0], wynik, 101)>0) {
  79.                 tmp = strtod(wynik, NULL);
  80.                 sum += tmp;
  81.             }
  82.            
  83.             printf("Suma: %f\n", sum);
  84.             printf("Wynik = %f\n", cos(X));
  85.             return 0;
  86.         }  
  87.     }
  88.     return 0;
  89. }
RAW Paste Data
We use cookies for various purposes including analytics. By continuing to use Pastebin, you agree to our use of cookies as described in the Cookies Policy. OK, I Understand
Top