Advertisement
Bkmz

Untitled

Mar 15th, 2012
92
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.42 KB | None | 0 0
  1. #include <math.h>
  2. #include <stdio.h>
  3. #include <unistd.h>
  4. #include <sys/stat.h>
  5. #include <sys/wait.h>
  6. #include <fcntl.h>
  7.  
  8. int armstrong(int n) //является ли число числом Армстронга
  9. {
  10.     int a,b=0,sum=0;
  11.     int ntmp;
  12.    ntmp = n;
  13.    while(ntmp>0)
  14.    {
  15.       ntmp=ntmp/10;
  16.       b++;
  17.    }
  18.  ntmp = n;
  19.     while(ntmp>0)
  20.    {
  21.        a=ntmp%10;
  22.        sum=sum+pow(a,b);
  23.        ntmp=ntmp/10;
  24.    }
  25.  
  26.     if(sum==n)
  27.     {
  28.         return 1;
  29.          
  30.     }
  31.     else
  32.     {
  33.         return 0;
  34.      
  35.     }
  36. }
  37.  
  38. int summa(int a[], int n){  //считаем сумму чисел Армстронга
  39.     int s=0;
  40.     for(int i=0;i<n;i++)
  41.     {
  42.       if(armstrong(a[i])==1)
  43.       {s = s + a[i];}
  44.      
  45.     }
  46.     return s;
  47. }
  48.  
  49. int main()
  50. {
  51.     int n,k,i;  //входные данные и индекс
  52.     int *a;     //массив
  53.     int fd[2];  //для получения дескрипторов канала
  54.    
  55.    if(pipe(fd) < 0) //если не удалось создать канал
  56.     {
  57.     printf("Error...\n");
  58.     return 0;
  59.     }    
  60.    
  61.     printf("Vvedite n\n");
  62.     scanf("%d",&n);
  63.     a=new int[n];
  64.     printf("Vvedite k\n");
  65.     scanf("%d",&k);
  66.     printf("Vvedite matr A\n");
  67.    for(i=0;i<n;i++)
  68.    {
  69.     scanf("%d",&a[i]);
  70.    }
  71.  
  72.    printf("Vvedenniy massiv\n");
  73.    for(i=0;i<n;i++)
  74.     {  
  75.         printf("%d",a[i]);      
  76.     printf("\n\n");
  77.     }
  78.    
  79.     if(fork() == 0)
  80.    {for(i = 0; i < k; i++)
  81.        {          
  82.             int ntmp;
  83.             ntmp = summa(a,n);
  84.         if(ntmp>0)
  85.         {              
  86.      
  87.              fprintf(stdout,"\nPolucheno - '%d'\n", ntmp) ;
  88.              write(fd[1], &ntmp, sizeof(ntmp));  //послать данные ntmp в канал через дескриптор для записи
  89.         }
  90.         else
  91.         {
  92.         ntmp = -1;
  93.         write(fd[1], &ntmp, sizeof(ntmp));
  94.         }
  95.        // return 0;
  96.         }
  97.        
  98.     }  
  99.     wait(NULL);
  100.     int d;
  101.    
  102.     for(i = 0; i < k; i++)
  103.     {
  104.     read(fd[0], &d, sizeof(d));  //прочитать данные из канала через дескриптор для чтения
  105.     if(d != -1)
  106.     {
  107.         printf("Summa chisel Armstronga %d\n", d);
  108.         break;
  109.     }
  110.     }
  111.    
  112.     if(i == k)
  113.     {
  114.     printf("Chisel Armstronga net\n");
  115.     }
  116.  
  117.                    
  118.     close(fd[0]);//закрыть дескрипторы канала
  119.     close(fd[1]);
  120.  
  121. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement