Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- MODULE fib3;
- FROM SYSTEM IMPORT ADR;
- FROM StrIO IMPORT WriteString, WriteLn;
- FROM NumberIO IMPORT WriteInt, ReadInt;
- FROM lib IMPORT fork, pipe, dup, read, write, close;
- FROM errno IMPORT geterrno;
- VAR
- pfd: ARRAY[0..1] OF INTEGER;
- pid: INTEGER;
- i, j, m, n, f: INTEGER;
- a, b, c, rez: INTEGER;
- ulaz, e: ARRAY[0..10] OF INTEGER;
- izlaz: INTEGER;
- suma, brdece : INTEGER;
- dubina, temp: INTEGER;
- BEGIN
- WriteString("Unesite n: ");
- ReadInt(n);
- m := n;
- i := 0;
- dubina := 1;
- temp := 0;
- WHILE (n > 1) AND (i < n) DO
- pipe(pfd);
- pid := fork();
- IF pid # 0 THEN
- ulaz[i] := dup(pfd[0]);
- INC(i);
- temp := i;
- ELSE
- INC(dubina);
- FOR j := 0 TO i - 1 DO
- close(ulaz[j]);
- END;
- IF n < ((m - i) + 1) THEN
- close(izlaz);
- END;
- izlaz := dup(pfd[1]);
- DEC(n, i + 1);
- temp := i;
- i := 0;
- END;
- close(pfd[0]);
- close(pfd[1]);
- END;
- IF n = 0 THEN
- rez := 1;
- ELSIF n = 1 THEN
- rez := 1;
- ELSE
- FOR f := 0 TO temp - 1 DO
- read(ulaz[f], ADR(e[f]), SIZE(e[f]));
- close(ulaz[f]);
- END;
- FOR f := 0 TO temp - 1 DO
- suma := suma + e[f];
- END;
- rez := rez + suma;
- END;
- IF n = m THEN
- WriteString("rez: "); WriteInt(rez,0); WriteLn;
- ELSE
- write(izlaz, ADR(rez), SIZE(rez));
- close(izlaz);
- END;
- END fib3.
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement