Advertisement
Guest User

Untitled

a guest
May 30th, 2016
78
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. /ZAD 1
  2. Stworzyæ n procesów potomnych i 2 potoki.Rodzic wysy³a do potoku zestaw liczb. Potomek odbiera, znajduje najwiêkszy ca³kowity dzielnik danej lb i wysy³a drugim potokiem wynik do rodzica.
  3. Rodzic po wys³aniu wszystkich lb przechodzi w stan odbierania. Sumuje wyniki i wyœwietla na ekran.
  4. #include <stdio.h>
  5. #include <stdlib.h>
  6. #include <math.h>
  7. #include <time.h>
  8.  
  9. int main(int argc, char *argv[]) {
  10.     int n = atoi(argv[1]);
  11.     int N = 50;
  12.     int p = 1;
  13.     int a = 1;
  14.     int liczba;
  15.     int d;
  16.     int suma = 0;
  17.     int tmp;
  18.     int i, j;
  19.     int Wpotok[2], Zpotok[2];
  20.     int t[N];
  21.     pipe(Wpotok);
  22.     pipe(Zpotok);
  23.     srand(time(NULL));
  24.  
  25.     for (i=0; i<(N-1); i++){
  26.         t[i] = 1+(int)(rand()%100);
  27.         write(Wpotok[1], &t[i], sizeof(i));
  28.     }  
  29.    
  30.     for (i=0; i<n; i++) {
  31.         if (p!=0)
  32.             p=fork();
  33.            
  34.         if (p==0)
  35.             while (a==1) {
  36.                 read(Wpotok[0], &liczba, sizeof(a));
  37.                 if (liczba!=0) {
  38.                     d = (liczba/2);
  39.                     while (d>0)
  40.                         if ((liczba % d)==0) {
  41.                             write(Zpotok[1], &d, sizeof(a));
  42.                             break;
  43.                         }
  44.                         else
  45.                             d--;                   
  46.                 }
  47.                 else
  48.                     exit(0);   
  49.                 }
  50.     }
  51.    
  52.     if (p!=0) {
  53.         for (i=0; i<(N-1); i++) {
  54.             read(Zpotok[0], &tmp, sizeof(i));
  55.             suma = suma + tmp;
  56.         }
  57.         for (i=0; i<n; i++) {
  58.             j=0;
  59.             write(Wpotok[1], &tmp, sizeof(j));
  60.         }
  61.         printf("suma: %d\n", suma);
  62.     }
  63. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement