Guest User

zad1

a guest
Dec 6th, 2019
95
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 silnia(double x)
  9. {
  10. if(x==0)
  11. return 1;
  12. else if(x==1)
  13. return 1;
  14. else
  15. return x*silnia(x-1);
  16. }
  17.  
  18. int main(){
  19.  
  20. //char *myfifo = "Katarzyna1_2";
  21. //char *mkfifo = "Katarzyna2_3";
  22. //int mkfifo(myfifo, 0666);
  23.  
  24. int fd[2];
  25. char arr[100], wynik[100];
  26.  
  27. pipe(fd);
  28.  
  29. if(fork() > 0){
  30. double X;
  31. double Eps;
  32.  
  33. close(fd[0]);
  34.  
  35. printf("X = ");
  36. scanf("%lf", &X);
  37. sprintf(arr, "%lf", X);
  38. write(fd[1], arr, 101);
  39.  
  40. printf("Eps = ");
  41. scanf("%lf", &Eps);
  42. sprintf(arr, "%lf", Eps);
  43. write(fd[1], arr, 101);
  44.  
  45. close(fd[1]);
  46. sleep(1);
  47. }
  48. else {
  49. close(fd[1]);
  50. double X, Eps;
  51. read(fd[0], wynik, 101);
  52. X=strtod(wynik, NULL);
  53.  
  54. read(fd[0], wynik, 101);
  55. Eps = strtod(wynik,NULL);
  56.  
  57. close(fd[0]);
  58.  
  59. int fd1[2];
  60. pipe(fd1);
  61.  
  62. if(fork() > 0){
  63. double i=0;
  64. double fragment;
  65.  
  66. do{
  67. fragment=pow(X,i)/silnia(i);
  68. i++;
  69. sprintf(arr, "%lf", fragment);
  70. write(fd1[1], arr, 101);
  71. printf("%lf\n ", fragment);
  72. }
  73. while(fragment >= Eps);
  74.  
  75. return 0;
  76. }
  77. else{
  78. double sum=0, tmp;
  79. close(fd1[1]);
  80.  
  81. while(read(fd1[0], wynik, 101)>0){
  82. tmp=strtod(wynik, NULL);
  83. sum += tmp;
  84. }
  85. printf("Suma: %f\n", sum);
  86. printf("Wynik = %f\n", exp(X));
  87. return 0;
  88. }
  89. }
  90. return 0;
  91. }
RAW Paste Data