Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <unistd.h>
- #include <sys/wait.h>
- #include <sys/types.h>
- #include <stdlib.h>
- #include <fcntl.h>
- #include <string.h>
- #include <ctype.h>
- #include <stdint.h>
- #include <math.h>
- #include <stdio.h>
- #include <stdlib.h>
- #include <errno.h>
- #include <string.h>
- int main(int argc, char *argv[]) {
- double x;
- sscanf(argv[1], "%lf", &x);
- int n;
- sscanf(argv[2], "%d", &n);
- n++;
- double dx;
- sscanf(argv[3], "%lf", &dx);
- int fd1[2];
- int fd2[2];
- pipe(fd1);
- pipe(fd2);
- if (!fork()) {
- if (!fork()) {
- close(fd1[0]);
- close(fd2[1]);
- dup2(fd2[0], 0);
- close(fd2[0]);
- double res = 0;
- double cur = 0;
- for (int i = 0; i < n; ++i) {
- dprintf(fd1[1], "%.10g\n", sin(x + i * dx));
- fflush(NULL);
- scanf("%lf", &cur);
- res += cur * cur;
- }
- close(fd1[1]);
- printf("1 %.10g\n", res);
- fflush(NULL);
- exit(0);
- }
- close(fd1[0]);
- close(fd1[1]);
- close(fd2[0]);
- close(fd2[1]);
- wait(NULL);
- exit(0);
- }
- if (!fork()) {
- if (!fork()) {
- close(fd1[1]);
- close(fd2[0]);
- dup2(fd1[0], 0);
- close(fd1[0]);
- double res = 0;
- double cur = 0;
- for (int i = 0; i < n; ++i) {
- dprintf(fd2[1], "%.10g\n", cos(x + i * dx));
- fflush(NULL);
- scanf("%lf", &cur);
- if (cur < 0) {
- cur = - cur;
- }
- res += cur;
- }
- close(fd2[1]);
- printf("2 %.10g\n", res);
- fflush(NULL);
- exit(0);
- }
- close(fd1[0]);
- close(fd1[1]);
- close(fd2[0]);
- close(fd2[1]);
- wait(NULL);
- exit(0);
- }
- close(fd1[0]);
- close(fd1[1]);
- close(fd2[0]);
- close(fd2[1]);
- wait(NULL);
- wait(NULL);
- printf("0 0\n");
- fflush(NULL);
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement