Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <math.h>
- #include <stdio.h>
- #include <unistd.h>
- #include <sys/stat.h>
- #include <sys/wait.h>
- #include <fcntl.h>
- int armstrong(int n) //является ли число числом Армстронга
- {
- int a,b=0,sum=0;
- int ntmp;
- ntmp = n;
- while(ntmp>0)
- {
- ntmp=ntmp/10;
- b++;
- }
- ntmp = n;
- while(ntmp>0)
- {
- a=ntmp%10;
- sum=sum+pow(a,b);
- ntmp=ntmp/10;
- }
- if(sum==n)
- {
- return 1;
- }
- else
- {
- return 0;
- }
- }
- int summa(int a[], int n){ //считаем сумму чисел Армстронга
- int s=0;
- for(int i=0;i<n;i++)
- {
- if(armstrong(a[i])==1)
- {s = s + a[i];}
- }
- return s;
- }
- int main()
- {
- int n,k,i; //входные данные и индекс
- int *a; //массив
- int fd[2]; //для получения дескрипторов канала
- if(pipe(fd) < 0) //если не удалось создать канал
- {
- printf("Error...\n");
- return 0;
- }
- printf("Vvedite n\n");
- scanf("%d",&n);
- a=new int[n];
- printf("Vvedite k\n");
- scanf("%d",&k);
- printf("Vvedite matr A\n");
- for(i=0;i<n;i++)
- {
- scanf("%d",&a[i]);
- }
- printf("Vvedenniy massiv\n");
- for(i=0;i<n;i++)
- {
- printf("%d",a[i]);
- printf("\n\n");
- }
- if(fork() == 0)
- {for(i = 0; i < k; i++)
- {
- int ntmp;
- ntmp = summa(a,n);
- if(ntmp>0)
- {
- fprintf(stdout,"\nPolucheno - '%d'\n", ntmp) ;
- write(fd[1], &ntmp, sizeof(ntmp)); //послать данные ntmp в канал через дескриптор для записи
- }
- else
- {
- ntmp = -1;
- write(fd[1], &ntmp, sizeof(ntmp));
- }
- // return 0;
- }
- }
- wait(NULL);
- int d;
- for(i = 0; i < k; i++)
- {
- read(fd[0], &d, sizeof(d)); //прочитать данные из канала через дескриптор для чтения
- if(d != -1)
- {
- printf("Summa chisel Armstronga %d\n", d);
- break;
- }
- }
- if(i == k)
- {
- printf("Chisel Armstronga net\n");
- }
- close(fd[0]);//закрыть дескрипторы канала
- close(fd[1]);
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement