Форум программистов, компьютерный форум CyberForum.ru
Наши страницы

Запись в канал - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Составить программу, которая находит наибольшее сторону треугольника, если заданы координаты вершин. (x1,y1),(x2,y2),(x3,y3) http://www.cyberforum.ru/cpp-beginners/thread893399.html
Составить программу, которая находит наибольшее сторону треугольника, если заданы координаты вершин. (x1,y1),(x2,y2),(x3,y3).Вычисление расстояния между двумя точками оформить в виде функции по...
C++ Сравнить знаки элементов двух массивов и поместить результаты в третий массив Даны два массива одного размера, в которых нет нулевых элементов.Получить третий массив, каждый элемент которого равен 1, если элементы заданных массивов с тем же номером имеют одинаковый знак, и... http://www.cyberforum.ru/cpp-beginners/thread893392.html
Дана прямоугольная матрица А размером N × M. Составить программу, которая преобразует матрицу следующим образом: поэлементно вычитает первый столбец C++
Дана прямоугольная матрица А размером N × M. Составить программу, которая преобразует матрицу следующим образом: поэлементно вычитает первый столбец из всех столбцов, кроме первого Добавлено через...
C++ Составить программу для подсчета суммы положительных элементов квадратной таблицы В, состоящей из N × N целых чисел
Составить программу для подсчета суммы положительных элементов квадратной таблицы В, состоящей из N × N целых чисел, расположенных на побочной диагонали. Сформировать матрицу с помощью генератора...
C++ деление на больше число =\ http://www.cyberforum.ru/cpp-beginners/thread893352.html
Раньше не сталкивался, однако теперь... как число (допустим 7, формата флоат) поделить на 10, что бы получить 0.7?...
C++ Простое однократное слияние и работа с указателем Не могу понять что тут нужно делать, буду благодарен за какой-либо совет или вариант решения 1.Простое однократное слияние. Разделить массив на п частей и отсортировать их произвольным методом.... подробнее

Показать сообщение отдельно
Apelsin199
11 / 11 / 1
Регистрация: 04.11.2012
Сообщений: 127

Запись в канал - C++

06.06.2013, 15:52. Просмотров 203. Ответов 0
Метки (Все метки)

Дикая проблема... Уже устал мучаться с ней... Дело вот в чем:
Пытаюсь записать в канал массив, но ничего не выходит... вот как я это делаю, в чем ошибка, подскажите пожалуйста...
Записываю в main поэтому можете сразу перелистывать на функцию main()
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
#include<clocale>
#include <stdio.h>
#include <unistd.h>
#include <unistd.h>
#include <iostream>
#include <cstdlib>
#include <sys/types.h>
#include <sys/wait.h>
 
using namespace std;
 
//Функция введения промежутка
void entry_period(int &A, int &B)
{
    printf("Введите промежуток од А до B: ");
    scanf("%d%d", &A,&B);
}
 
//функция ввода С-элементов
int *input_C_elements(const int c, int A, int B, int &amount)
{
    int *C;
    C = new int[c];
    printf("\nВведите С-элементы:\n");
    for(int i=0; i<c; i++)
    {
        printf("Введите %d С-элемент ", i+1);
        scanf("%d", &C[i]);
        if(C[i]>=A && C[i]<=B)
            amount++;
    }
    printf("\n\n\n %d \n\n\n", amount);
    return C;
}
 
//Функция вывода исключений
void withdrawal_exemptions(int A, int B, int *C, int c)
{
    printf("\nВведите элементы массива удовлетворяющие следующим свойствам:");
    printf("\n1. Элементы массива должны находится в промежудке от %d до %d", A,B);
    printf("\n2. Элеменами массива не могут быть следующие числа: ");
    for(int i=0;i<c;i++)
        printf("%d ",C[i]);
}
 
//ввод заключительного массива
int *input_array(int A, int B, int *C, int c, int amount)
{
    int buf;
    printf("\nРазмер массива = %d", (B-A-amount));
    int *mas;
    mas=new int[B-A-amount];
    for(int i=0;i<(B-A-amount);i++)
    {
        printf("\nВведите %d элемент массива ",i+1);
        scanf("%d",&buf);
        for(int j=0;j<c;j++)
        {
            if(buf==C[j])
            {
                printf("\nВведенное число равно запрещенному числу! а именно %d", C[j]);
                printf("\n****************Повторите ввод!****************\n");
                if(i==-1)
                {
                    i=-1;
                }
                else
                {
                    i--;
                }
                break;
            }
        }
        if(buf<A || buf>B)
        {
            printf("\nВведенное число не входит в промежуток от %d до %d", A,B);
            printf("\n****************Повторите ввод!****************\n");
            i--;
        }
        else
        {
            mas[i]=buf;
        }
    }
    printf("\n\n*********************Полученный массив:*********************\n");
    for(int i=0;i<(B-A-amount);i++)
    {
        printf("%d ", mas[i]);
    }
    return mas;
}
 
//нахождение среднего арифметического
int find_arithmetic_mean(int A, int B, int amount, int *mas)
{
    float sr=0;
    printf("\n\n*************Нахождение среднего арифмитического************\n");
    for(int i=0;i<(B-A-amount);i++)
    {
        sr=sr+mas[i];
    }
    sr=sr/(B-A-amount);
    return sr;
}
 
int main()
{
//  setlocale(LC_ALL,"rus");
    int A=0,B=0;
    int c;
    int *C;
    int amount=0;
    int fd[2];
    char s[100];
    if(pipe(fd)<0)
    {
        printf("Не удалось создать кaнал!");
        return 0;
    }
    if(fork()==0)
    {
        entry_period(A,B);
        write(fd[1],&A,sizeof(int));
        write(fd[1],&B,sizeof(int));
        return 1;
    }
    wait(0);
    read(fd[0],&A,sizeof(int));
    read(fd[0],&B,sizeof(int));
    
    printf("\nВведите колличество С-элементов ");
    scanf("%d",&c);
    if(fork()==0)//Тут начинается процесс, в котором записываю в канал массив
    {
        C=input_C_elements(c,A,B,amount);
        write(fd[1],&amount, sizeof(int));
        write(fd[1], C, sizeof(int));//непосредственная запись
        return 1;
    }
    wait(0);
    read(fd[0],&amount,sizeof(int));
    read(fd[0],C,sizeof(int)*amount);//и считывание записанного
/*
    if((B-A)<=amount)
    {
        printf("Аварийный выход!\n");
        return 0;
    }
    int *mas;
    if(fork()==0)
    {
        withdrawal_exemptions(A,B,C,c);
        return 0;
    }
    wait(0);
    if(fork()==0)
    {
        mas=input_array(A,B,C,c,amount);
        return 0;
    }
    wait(0);
    float sr;
    sr=find_arithmetic_mean(A,B,amount,mas);
    printf("\nСреднее арифмитическое равно: %f\n\n", sr);
 
    close(fd[0]); close(fd[1]);
*/
    return 0;
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru