Advertisement
Guest User

sumaunix

a guest
Jun 6th, 2016
130
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. MODULE suma;
  2.  
  3.     FROM SYSTEM IMPORT ADR;
  4.     FROM StrIO IMPORT WriteString, WriteLn;
  5.     FROM NumberIO IMPORT WriteInt, ReadInt;
  6.     FROM lib IMPORT fork, pipe, dup, read, write, close;
  7.     FROM errno IMPORT geterrno;
  8.    
  9. VAR
  10.     i, n, m, f: INTEGER;
  11.     tdece, pid: INTEGER;
  12.     pfd: ARRAY[0..1] OF INTEGER;
  13.     ulaz, elementi: ARRAY[0..15] OF INTEGER;
  14.     izlaz: INTEGER;
  15. BEGIN
  16.    
  17.     WriteString("Unesite broj n: ");
  18.     ReadInt(n);
  19.    
  20.    
  21.    
  22.     m := n; (*n predstavlja potreban broj dece*)
  23.     i := 0; (*i predstavlja broj dece jednog roditelja*)
  24.     tdece := i; (*tdece predstavlja *)
  25.     WHILE (1 < n) AND (i < n) DO
  26.        
  27.         pipe(pfd);
  28.         pid := fork();
  29.            
  30.         IF pid # 0 THEN (*nije dete*)
  31.            
  32.             ulaz[i] := dup(pwd[0]);
  33.             INC(i);
  34.             tdece := i;
  35.            
  36.         ELSE
  37.            
  38.             FOR j := 0 TO i - 1 DO
  39.                 close(ulaz[i]);
  40.             END;
  41.            
  42.             IF n < ((m - i) + 1) THEN
  43.                 close(izlaz);
  44.             END;
  45.            
  46.             izlaz := dup(pfd[1]);
  47.            
  48.             DEC(n, i + 1);
  49.            
  50.             tdece := i;
  51.             i := 0;
  52.            
  53.         END;
  54.        
  55.         close(pfd[0]);
  56.         close(pfd[1]);
  57.     END;
  58.    
  59.     (*racunanje*)
  60.     IF n = 0 THEN
  61.         rezultat := 1;
  62.     ELSIF n = 1 THEN
  63.         rezultat := 1;
  64.     ELSE (*non triv*)
  65.        
  66.         FOR f := 0 TO tdece - 1 DO
  67.             read(ulaz[f], ADR(elementi[f]), SIZE(elementi[f]));
  68.             close(ulaz[f]);
  69.         END;
  70.        
  71.         FOR f := 0 TO tdece - 1 DO
  72.             rezultat := rezultat + elementi[f];
  73.         END;
  74.        
  75.     END;
  76.    
  77.     (*ispis*)
  78.     IF n = m THEN  
  79.         WriteString("rezultat: "); WriteInt(rezultat, 0);
  80.         WriteLn();
  81.     ELSE
  82.         write(izlaz, ADR(rezultat), SIZE(rezultat));
  83.         close(izlaz);
  84.     END;
  85. END suma.
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement