Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- MODULE suma;
- 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
- i, n, m, f: INTEGER;
- tdece, pid: INTEGER;
- pfd: ARRAY[0..1] OF INTEGER;
- ulaz, elementi: ARRAY[0..15] OF INTEGER;
- izlaz: INTEGER;
- BEGIN
- WriteString("Unesite broj n: ");
- ReadInt(n);
- m := n; (*n predstavlja potreban broj dece*)
- i := 0; (*i predstavlja broj dece jednog roditelja*)
- tdece := i; (*tdece predstavlja *)
- WHILE (1 < n) AND (i < n) DO
- pipe(pfd);
- pid := fork();
- IF pid # 0 THEN (*nije dete*)
- ulaz[i] := dup(pwd[0]);
- INC(i);
- tdece := i;
- ELSE
- FOR j := 0 TO i - 1 DO
- close(ulaz[i]);
- END;
- IF n < ((m - i) + 1) THEN
- close(izlaz);
- END;
- izlaz := dup(pfd[1]);
- DEC(n, i + 1);
- tdece := i;
- i := 0;
- END;
- close(pfd[0]);
- close(pfd[1]);
- END;
- (*racunanje*)
- IF n = 0 THEN
- rezultat := 1;
- ELSIF n = 1 THEN
- rezultat := 1;
- ELSE (*non triv*)
- FOR f := 0 TO tdece - 1 DO
- read(ulaz[f], ADR(elementi[f]), SIZE(elementi[f]));
- close(ulaz[f]);
- END;
- FOR f := 0 TO tdece - 1 DO
- rezultat := rezultat + elementi[f];
- END;
- END;
- (*ispis*)
- IF n = m THEN
- WriteString("rezultat: "); WriteInt(rezultat, 0);
- WriteLn();
- ELSE
- write(izlaz, ADR(rezultat), SIZE(rezultat));
- close(izlaz);
- END;
- END suma.
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement