Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /**
- Dawid Mocek
- Sekcja 1
- MOSIX Zadanie 2.
- Obliczyć sumę ciągu podanego wzorem. Liczba elementów ciągu wynosi n. W zadaniu należy stworzyć
- potok i k procesów potomnych. Liczby n oraz k są podawane jako parametry wywołania programu.
- W procesach potomnych należy obliczyć sumy częściowe, po czym wysłać wyniki do procesu rodzica,
- który powinien je odebrać, scalić i wyświetlić na ekranie.
- ___N___
- \ |
- S = \ (i^2 - 12)^3 / ((n^3)*(i^3))
- /
- /_______|
- i=1
- */
- #include <stdlib.h>
- #include <stdio.h>
- double equation(unsigned int i, unsigned int n) {
- int x = (n * n * n);
- int y = ((i * i) - 12);
- int gora = y * y * y;
- int dol = x * i * i * i;
- return (double)gora/(double)dol;
- }
- int main(int argc, char **argv)
- {
- // Liczba elemntow
- int n = atoi(argv[1]);
- // Liczba procesow
- int k = atoi(argv[2]);
- int i = 1;
- int j = 0;
- double suma = 0, e = 0, tmp = 0;
- int pipefd[2];
- pid_t pid;
- if(pipe(pipefd) == -1) {
- perror("Pipefd error\n");
- exit(EXIT_FAILURE);
- }
- while(i <= n) {
- for(j = 0; j < k; j++) {
- if(i > n)
- break;
- pid = fork();
- if(pid == -1) {
- perror("fork");
- exit(EXIT_FAILURE);
- }
- if(pid == 0) {
- // printf("equation(%d,%d) = %f(pid=%d)\n", i, n, equation(i, n) , (int)getpid());
- e = equation(i, n);
- write(pipefd[1], &e, sizeof(double));
- exit(EXIT_SUCCESS);
- }
- else {
- // printf("parent process(pid=%d)\n", (int)getpid());
- }
- i++;
- }
- }
- close(pipefd[1]);
- while(read(pipefd[0], &tmp, sizeof(double)))
- suma += tmp;
- printf("Suma: %f\n", suma);
- return EXIT_SUCCESS;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement