Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.98/47: Рейтинг темы: голосов - 47, средняя оценка - 4.98
0 / 0 / 0
Регистрация: 14.03.2018
Сообщений: 120

Параллельное программирование на С++

02.12.2020, 00:28. Показов 10028. Ответов 87
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Всем доброго времени суток!
У меня есть вопросы относительно лабораторной
Вот постановка задачи:
Создать двумерный массив размерности n×m. Найти сумму элементов массива.
Но с использованием параллелизма, параллельного программирования,
Вот мой код:
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
#include <iostream>
#include <thread> 
#include <chrono> 
 
using namespace std;
 
int n,m,**a;
int sum = 0;
 
void get_Matrix()
{   
    cout << "Введите размерность матрицы (n x m) : " << endl;
        cin >> n >> m;
        cout << "Введите матрицу : "<< endl;
        a = new int *[n];
        for(int i = 0; i < n; i++)
        {
            a[i] = new int[n];
            for(int j = 0; j < m; j++)
            {
                cout << "[" << i+1 << "]["<< j+1 << "] : ";
                cin >> a[i][j];
            }
        }
        cout << "\n";
        //this_thread::sleep_for(chrono::milliseconds(2000));
        cout << "Ваша матрица А : " << endl;
        for(int i = 0; i < n; i++)
        {
            cout << "\n";
            for(int j = 0; j < m; j++)
            {
                cout << "\t";
                cout << a[i][j];
            }
        }
        
        cout << "\n";
        
}
 
 
 
void get_Sum()
    {
        cout << "Сумма элементов в матрице А : " << endl;
        for(int i = 0; i < n; i++)
        {
            for(int j = 0; j < m; j++)
            {
                sum += a[i][j]; 
            }
        }
        cout << sum << endl;    
    }
    
 
int main()
{
    setlocale(LC_ALL, "rus");
    system("color 0B");
    
 
    
    thread th1(get_Matrix); 
    th1.join(); 
    
 
    this_thread::sleep_for(chrono::milliseconds(2000));
    
 
    thread th2(get_Sum);        
    th2.join(); 
    
    
    
    return 0;
}
Я использовал thread, программа работает, все считает, но мне сказали, что эта программа она не использует параллелизм, а просто работает последовательно...

Буду очень всем Вам благодарен за совет, относительно того, как можно подкорректировать мой код, чтобы программа все же работала параллельно
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
02.12.2020, 00:28
Ответы с готовыми решениями:

Параллельное программирование
Подскажите учебник с помощью которого можно научиться параллельному программированию

Параллельное программирование на C++
Вот например происходит какое то действие, это действие длится 5 минут. И вот я запускаю это действие и жду, жду, жду, и тут мне надоело...

Параллельное программирование
Всем доброго времени суток! Не нашла на сайте ни одной темы с параллельным программированием. Хотела узнать есть ли здесь люди знакомые с...

87
0 / 0 / 0
Регистрация: 14.03.2018
Сообщений: 120
12.01.2021, 00:32  [ТС]
Студворк — интернет-сервис помощи студентам
Вот код:
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
#include <iostream>
#include <ctime>
#include <future>
#include <thread>
#include <algorithm>
 
using namespace std;
 
int main()
{
    setlocale(LC_ALL, "rus");   
    int randarr1[5] {};
    int randarr2[5] {};
    int randarr3[5] {};
    
    srand(time(NULL));
 
    std::thread thread1([&]()
    {
        for(int i=0; i < 5; i++)
            randarr1[i] = 1 + rand()%5; // Генерация массива от 1 до 5
        printf("Операция с первым массивом - (элементы массива умножить на 2): \n");
        for(int i = 0; i < 5; i++)
            randarr1[i] *= 2;
    });
/*  
    cout << "Случайный массив 1:" << endl;
    for(int i = 0; i < 5; i++)
    {
        cout <<" "<<randarr1[i];
    }
    cout<<"\n";
    
    cout << "Случайный массив 2:" << endl;
    for(int i = 0; i < 5; i++)
    {
        cout <<" "<<randarr2[i];
    }
    cout<<"\n";
    
    cout << "Случайный массив 3:" << endl;
    for(int i = 0; i < 5; i++)
    {
        cout <<" "<<randarr3[i];
    }
    cout<<"\n" << endl;
*/  
    std::thread thread2([&]()
    {
        for(int i=0; i < 5; i++)
            randarr2[i] = 1 + rand()%5;
       printf("Операция со вторым массивом - (оставить только парные элементы): \n");
        for(int i = 0; i < 5; i++)
        {
            if(randarr2[i]%2 == 0)
            {
                cout << " " << randarr2[i]; 
            }
    
        }   
        
    });
    cout << "\n";
    std::thread thread3([&]()
    {
        for(int i=0; i < 5; i++)
            randarr3[i] = 1 + rand()%5;
      printf("Операция над третьим массивом - (оставить элементы в диапазоне от 0.4 до 0.6 максимального значения): \n");
       int max = randarr3[0];
        for(int i = 0; i < 5; i++)
        {                   
            if (randarr3[i] > max) 
            {
                max = randarr3[i];        
              
            }
        }
        printf("Максимальный элемент массива = ", max);
        auto end = std::remove_if(randarr3, randarr3 + 5, [&](auto x)
        {
            return x < 0.4 * max || x > 0.6 * max;
        });
        cout << "\nЭлементы, которые остались: ";
        for (auto *p = randarr3; p != end; ++p)
            cout << *p << " ";
           cout  <<endl;      
 
    });
    
    thread1.join();
    thread2.join();
    thread3.join();  
    
    /* Осталось сделать:
      2) Отсортировать массивы и слить в один массив элементы. отсортированный массив в 
         котором есть элементы которые входят во второй и третий массив и не входят в первый;
      3) Реализовать параллельный алгоритм с использованием механизмов асинхронных вычислений.
    */
    
    return 0;
}
Он работает, но как-то криво(
Мне нужно, чтобы видно было какие массивы сгенерировались, и какие операции над ними проводились
Миниатюры
Параллельное программирование на С++  
0
6772 / 4565 / 1844
Регистрация: 07.05.2019
Сообщений: 13,726
12.01.2021, 00:32
И - не нужно распечатывать массивы в потоках, распечатывай их после завершения
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
size_t n3 = 0;
std::thread thread3([&]()
{
    printf("Операция над третьим массивом - (оставить элементы в диапазоне от 0.4 до 0.6 максимального значения): \n");
    for(int i=0; i < 5; i++)
        randarr3[i] = 1 + rand()%5; // Генерация массива от 1 до 5
 
    int max = randarr3[0];
    for(int i = 0; i < 5; i++)
        if (randarr3[i] > max) 
            max = randarr3[i];        
 
    auto end = std::remove_if(randarr3, randarr3 + 5, [&](auto x)
    {
        return x < 0.4 * max || x > 0.6 * max;
    });
 
    n3 = end - randarr3;
});
 
thread1.join();
thread2.join();
thread3.join();
.............
for (size_t i = 0; i < n3; ++i)
    std::cout << randarr3[i] << " ";
std::cout << std::endl;
0
0 / 0 / 0
Регистрация: 14.03.2018
Сообщений: 120
12.01.2021, 00:33  [ТС]
Аа, мы не выводим на экран массивы...
0
6772 / 4565 / 1844
Регистрация: 07.05.2019
Сообщений: 13,726
12.01.2021, 00:36
Цитата Сообщение от uzer_srm34 Посмотреть сообщение
Аа, мы не выводим на экран массивы...
Экран у тебя один. Соответственно, если ты в нескольких потоках что-то печатаешь без синхронизации, то всё перемешается.
0
0 / 0 / 0
Регистрация: 14.03.2018
Сообщений: 120
12.01.2021, 00:41  [ТС]
Можно Вас попросить подкорректировать наш код?
Я что то запутался в этих потоках и синхронизации

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
#include <iostream>
#include <ctime>
#include <future>
#include <thread>
#include <algorithm>
 
using namespace std;
 
int main()
{
    setlocale(LC_ALL, "rus");   
    int randarr1[5] {};
    int randarr2[5] {};
    int randarr3[5] {};
    
    srand(time(NULL));
 
    std::thread thread1([&]()
    {
        for(int i=0; i < 5; i++)
            randarr1[i] = 1 + rand()%5; // Генерация массива от 1 до 5
        printf("Операция с первым массивом - (элементы массива умножить на 2): \n");
        for(int i = 0; i < 5; i++)
            randarr1[i] *= 2;
    });
/*  
    cout << "Случайный массив 1:" << endl;
    for(int i = 0; i < 5; i++)
    {
        cout <<" "<<randarr1[i];
    }
    cout<<"\n";
    
    cout << "Случайный массив 2:" << endl;
    for(int i = 0; i < 5; i++)
    {
        cout <<" "<<randarr2[i];
    }
    cout<<"\n";
    
    cout << "Случайный массив 3:" << endl;
    for(int i = 0; i < 5; i++)
    {
        cout <<" "<<randarr3[i];
    }
    cout<<"\n" << endl;
*/  
    std::thread thread2([&]()
    {
        for(int i=0; i < 5; i++)
            randarr2[i] = 1 + rand()%5;
       printf("Операция со вторым массивом - (оставить только парные элементы): \n");
        for(int i = 0; i < 5; i++)
        {
            if(randarr2[i]%2 == 0)
            {
                cout << " " << randarr2[i]; 
            }
    
        }   
        
    });
    cout << "\n";
    std::thread thread3([&]()
    {
        for(int i=0; i < 5; i++)
            randarr3[i] = 1 + rand()%5;
      printf("Операция над третьим массивом - (оставить элементы в диапазоне от 0.4 до 0.6 максимального значения): \n");
       int max = randarr3[0];
        for(int i = 0; i < 5; i++)
        {                   
            if (randarr3[i] > max) 
            {
                max = randarr3[i];        
              
            }
        }
        printf("Максимальный элемент массива = ", max);
        auto end = std::remove_if(randarr3, randarr3 + 5, [&](auto x)
        {
            return x < 0.4 * max || x > 0.6 * max;
        });
        cout << "\nЭлементы, которые остались: ";
        for (auto *p = randarr3; p != end; ++p)
            cout << *p << " ";
           cout  <<endl;      
 
    });
    
    thread1.join();
    thread2.join();
    thread3.join();  
    
    /* Осталось сделать:
      2) Отсортировать массивы и слить в один массив элементы. отсортированный массив в 
         котором есть элементы которые входят во второй и третий массив и не входят в первый;
      3) Реализовать параллельный алгоритм с использованием механизмов асинхронных вычислений.
    */
    
    return 0;
}
0
6772 / 4565 / 1844
Регистрация: 07.05.2019
Сообщений: 13,726
12.01.2021, 00:47
Цитата Сообщение от uzer_srm34 Посмотреть сообщение
Можно Вас попросить подкорректировать наш код?
thread3 и randarr3 я тебе вроде показал

Цитата Сообщение от uzer_srm34 Посмотреть сообщение
Я что то запутался в этих потоках и синхронизации
Здесь нет никакой особой синхронизации, только самая примитивная работа с потоками.
Отдохни, завтра доделаешь всё примерно за полчаса.
1
0 / 0 / 0
Регистрация: 14.03.2018
Сообщений: 120
12.01.2021, 00:50  [ТС]
Хорошо, большое спасибо!
Если вдруг возникнут вопросы, можно Вам написать?
0
6772 / 4565 / 1844
Регистрация: 07.05.2019
Сообщений: 13,726
12.01.2021, 01:00
Цитата Сообщение от uzer_srm34 Посмотреть сообщение
Если вдруг возникнут вопросы, можно Вам написать?
Пиши лучше здесь. Я точно так же отвечу.
0
0 / 0 / 0
Регистрация: 14.03.2018
Сообщений: 120
12.01.2021, 14:40  [ТС]
Здравствуйте! Спасибо Вам большое. Код работает)
Вот он:

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
#include <iostream>
#include <ctime>
#include <algorithm>
#include <thread>
#include <chrono>
using namespace std;
 
int main()
{
    setlocale(LC_ALL, "rus");
    int randarr1[5]{};
    int randarr2[5]{};
    int randarr3[5]{};
 
    srand(time(NULL));
 
    thread thread1([&]()
    {
        cout << "Случайный массив 1: " << endl;
        for (int i = 0; i < 5; i++)
        {
            randarr1[i] = 1 + rand() % 5; // Генерация массива от 1 до 5
            cout <<" "<< randarr1[i];
        }
        cout << "\n";
        printf("Операция с первым массивом - (элементы массива умножить на 2): \n");
        for(int i = 0; i < 5; i++)
        {
        
            int multiplication = 2*randarr1[i];
            cout<<" "<<multiplication;
        }
    });
    this_thread::sleep_for(chrono::milliseconds(1000));
    cout << "\n";
    thread thread2([&]()
    {
        cout << "Случайный массив 2: " << endl;
        for (int i = 0; i < 5; i++)
        {
            randarr2[i] = 1 + rand() % 5; // Генерация массива от 1 до 5
            cout << " " << randarr2[i];
        }
        cout << "\n";
        printf("Операция со вторым массивом - (оставить только парные элементы): \n");
        for (int i = 0; i < 5; i++)
        {
            if (randarr2[i] % 2 == 0)
            {
                cout << " " << randarr2[i];
            }
        }
        cout << "\n";
    });
    cout << "\n";
    this_thread::sleep_for(chrono::milliseconds(1000));
    thread thread3([&]()
    {
        cout << "Случайный массив 3: " << endl;
        for (int i = 0; i < 5; i++)
        {
            randarr3[i] = 1 + rand() % 5; // Генерация массива от 1 до 5
            cout << " " << randarr3[i];
        }
        cout << "\n";
        printf("Операция над третьим массивом - (Оставить элементы в диапазоне от 0.4 до 0.6 максимального значения): \n");
        
        int max = randarr3[0];
        for (int i = 0; i < 5; i++)
        {
            if (randarr3[i] > max)
            {
                max = randarr3[i];
            }
        }
        cout <<"Максимальный элемент массива =  " << max;
 
        auto end = std::remove_if(randarr3, randarr3 + 5, [&](auto x)
        {
            return x < 0.4 * max || x > 0.6 * max;
        });
        cout << "\nЭлементы, которые остались: ";
        for (auto *p = randarr3; p != end; ++p)
        {
            cout << *p << " ";
        }
        cout << endl;
    });
    
    this_thread::sleep_for(chrono::milliseconds(1000));
    
    thread1.join();
    thread2.join();
    thread3.join();
    
    return 0;
}
Вот его выполнение:


Осталось только провести сортировку массивов,
Тут так интересно сформулирована условие сортировки:

Отсортировать массивы и слить в один массив элементы отсортированный массив в котором есть элементы которые входят во второй и третий массив и не входят в первый.

Получается, нужно отсортировать уже массивы с которыми были совершены операции, и использовать элементы дискретной математики:
randarr2[i] union (объединить с randarr3[i]) difference randarr1[i].

т.е. Если брать данные массивы с скриншота у меня есть:
1-й выходной массив : 10, 8, 2, 10, 6
2-й выходной массив : 2, 2, 2
3-й выходной массив : 2, 2.

Проводим операцию: {2, 2, 2}union {2, 2} difference {10, 8, 2, 10, 6} = 2.
Получается, что будет только один элемент в массиве, и он равен 2,

Верно?
Миниатюры
Параллельное программирование на С++  
0
6772 / 4565 / 1844
Регистрация: 07.05.2019
Сообщений: 13,726
12.01.2021, 14:45
Цитата Сообщение от uzer_srm34 Посмотреть сообщение
Получается, нужно отсортировать уже массивы с которыми были совершены операции, и использовать элементы дискретной математики:
randarr2[i] union (объединить с randarr3[i]) difference randarr1[i].
Сортировку сделай в потоках. В конце каждого
C++
1
2
3
4
5
6
thread thread1([&]()
{
...............................
 
    std::sort(randarr1, randarr1 + 5);
});
Добавлено через 1 минуту
C++
1
2
3
4
5
6
7
8
9
        cout << "\nЭлементы, которые остались: ";
        for (auto *p = randarr3; p != end; ++p)
        {
            cout << *p << " ";
        }
        cout << endl;
 
 
std::sort(randarr3, end);
1
0 / 0 / 0
Регистрация: 14.03.2018
Сообщений: 120
12.01.2021, 14:50  [ТС]
Вот исправил, но что то он не от сортировался(

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
#include <iostream>
#include <ctime>
#include <algorithm>
#include <thread>
#include <chrono>
using namespace std;
 
int main()
{
    setlocale(LC_ALL, "rus");
    int randarr1[5]{};
    int randarr2[5]{};
    int randarr3[5]{};
 
    srand(time(NULL));
 
    thread thread1([&]()
    {
        cout << "Случайный массив 1: " << endl;
        for (int i = 0; i < 5; i++)
        {
            randarr1[i] = 1 + rand() % 5; // Генерация массива от 1 до 5
            cout <<" "<< randarr1[i];
        }
        cout << "\n";
        printf("Операция с первым массивом - (элементы массива умножить на 2): \n");
        for(int i = 0; i < 5; i++)
        {
        
            int multiplication = 2*randarr1[i];
            cout<<" "<<multiplication;
        }
        std::sort(randarr1, randarr1 + 5);
    });
    this_thread::sleep_for(chrono::milliseconds(1000));
    cout << "\n";
    thread thread2([&]()
    {
        cout << "Случайный массив 2: " << endl;
        for (int i = 0; i < 5; i++)
        {
            randarr2[i] = 1 + rand() % 5; // Генерация массива от 1 до 5
            cout << " " << randarr2[i];
        }
        cout << "\n";
        printf("Операция со вторым массивом - (оставить только парные элементы): \n");
        for (int i = 0; i < 5; i++)
        {
            if (randarr2[i] % 2 == 0)
            {
                cout << " " << randarr2[i];
            }
        }
        cout << "\n";
        std::sort(randarr2, randarr2 + 5);
    });
    cout << "\n";
    this_thread::sleep_for(chrono::milliseconds(1000));
    thread thread3([&]()
    {
        cout << "Случайный массив 3: " << endl;
        for (int i = 0; i < 5; i++)
        {
            randarr3[i] = 1 + rand() % 5; // Генерация массива от 1 до 5
            cout << " " << randarr3[i];
        }
        cout << "\n";
        printf("Операция над третьим массивом - (Оставить элементы в диапазоне от 0.4 до 0.6 максимального значения): \n");
        
        int max = randarr3[0];
        for (int i = 0; i < 5; i++)
        {
            if (randarr3[i] > max)
            {
                max = randarr3[i];
            }
        }
        cout <<"Максимальный элемент массива =  " << max;
 
        auto end = std::remove_if(randarr3, randarr3 + 5, [&](auto x)
        {
            return x < 0.4 * max || x > 0.6 * max;
        });
        cout << "\nЭлементы, которые остались: ";
        for (auto *p = randarr3; p != end; ++p)
        {
            cout << *p << " ";
        }
        cout << endl;
        
        [B]std::sort(randarr3, end);[/B]
    });
    
    this_thread::sleep_for(chrono::milliseconds(1000));
    
    thread1.join();
    thread2.join();
    thread3.join();
    
    return 0;
}
Миниатюры
Параллельное программирование на С++  
0
6772 / 4565 / 1844
Регистрация: 07.05.2019
Сообщений: 13,726
12.01.2021, 14:52
Цитата Сообщение от uzer_srm34 Посмотреть сообщение
Вот исправил, но что то он не от сортировался(
Потому что ты его печатаешь до сортировки. Убери вообще вывод массивов на экран из потоков. Сделай его после join-ов
0
0 / 0 / 0
Регистрация: 14.03.2018
Сообщений: 120
12.01.2021, 14:55  [ТС]
Цитата Сообщение от oleg-m1973 Посмотреть сообщение
Потому что ты его печатаешь до сортировки. Убери вообще вывод массивов на экран из потоков. Сделай его после join-ов
Тогда он как-то работает коряво
непонятно что к чему...
0
6772 / 4565 / 1844
Регистрация: 07.05.2019
Сообщений: 13,726
12.01.2021, 14:57
C++
1
2
3
4
5
6
7
8
9
10
    thread thread1([&]()
    {
        for (int i = 0; i < 5; i++)
            randarr1[i] = 1 + rand() % 5; // Генерация массива от 1 до 5
 
        for(int i = 0; i < 5; i++)
            randarr1[i] *= 2;
 
        std::sort(randarr1, randarr1 + 5);
    });
0
0 / 0 / 0
Регистрация: 14.03.2018
Сообщений: 120
12.01.2021, 15:07  [ТС]
Я ж говорил что будет коряво...
Миниатюры
Параллельное программирование на С++  
0
0 / 0 / 0
Регистрация: 14.03.2018
Сообщений: 120
12.01.2021, 15:07  [ТС]
Как тогда провести сортировку?
0
0 / 0 / 0
Регистрация: 14.03.2018
Сообщений: 120
12.01.2021, 15:10  [ТС]
Мне нужно, чтобы было вот так,
И внизу ещё была видна сортировка
Миниатюры
Параллельное программирование на С++  
0
6772 / 4565 / 1844
Регистрация: 07.05.2019
Сообщений: 13,726
12.01.2021, 15:17
Цитата Сообщение от uzer_srm34 Посмотреть сообщение
Я ж говорил что будет коряво...
У тебя неправильно сделано второе задание

Добавлено через 3 минуты
Цитата Сообщение от uzer_srm34 Посмотреть сообщение
Мне нужно, чтобы было вот так,
И внизу ещё была видна сортировка
Для начала сделай функцию вывода массива на экран
C++
1
2
3
4
5
6
7
8
9
10
11
static std::mutex mx;
static void print_array(const std::string &name, const int *arr, size_t n)
{
    std::lock_guard lock(mx);
 
    std::cout << name << ": ";
    for (size_t i = 0; i < n; ++i)
        std::cout << arr[i] << " ";
 
    std::cout << std::endl;
}
Добавлено через 1 минуту
Тогда
C++
1
2
3
4
5
6
7
8
9
10
11
12
thread thread1([&]()
{
    for (int i = 0; i < 5; i++)
        randarr1[i] = 1 + rand() % 5; // Генерация массива от 1 до 5
 
    print_array("Array #1", randarr1, 5);
    for(int i = 0; i < 5; i++)
        randarr1[i] *= 2;
 
    std::sort(randarr1, randarr1 + 5);
    print_array("Sorted Array #1", randarr1, 5);
});
0
0 / 0 / 0
Регистрация: 14.03.2018
Сообщений: 120
12.01.2021, 15:20  [ТС]
Цитата Сообщение от oleg-m1973 Посмотреть сообщение
static std::mutex mx;
static void print_array(const std::string &name, const int *arr, size_t n)
{
    std::lock_guard lock(mx);
std::cout << name << ": ";
    for (size_t i = 0; i < n; ++i)
        std::cout << arr[i] << " ";
std::cout << std::endl;
}
И куда мне это приписать?

Добавлено через 28 секунд
Цитата Сообщение от oleg-m1973 Посмотреть сообщение
У тебя неправильно сделано второе задание
Почему? Видь он находит парные элементы
0
6772 / 4565 / 1844
Регистрация: 07.05.2019
Сообщений: 13,726
12.01.2021, 15:21
Цитата Сообщение от uzer_srm34 Посмотреть сообщение
Почему? Видь он находит парные элементы
Тебе нужно не находить их, а удалить из массива все другие элементы

Добавлено через 20 секунд
Цитата Сообщение от uzer_srm34 Посмотреть сообщение
И куда мне это приписать?
Выше main
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
12.01.2021, 15:21

Параллельное программирование
Есть задача, которая хорошо распараллеливается. Ее текущий вариант выполняется неприлично долго: условно около суток. Для ее решения мне...

параллельное программирование
Клиент серверное приложение. Суть - в реализации обычного чата. Оба устройства коннекятся через клиент-серверный сокет. Всё работает ок. Но...

Параллельное программирование
На языке С/С++ стандартными средствами используемой системы программирования написать параллельное приложение, создающее 2 дополнительных...

Параллельное программирование в С++
Здравствуйте! я новичок в параллельном программировании. Помогите пожалуйста с задачкой!! Есть одна глобальная переменная, которая должна...

Параллельное программирование
Как составить параллельную программу вычисления среднего арифметического элементов вектора?


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
60
Ответ Создать тему
Новые блоги и статьи
сукцессия 14. Обновленная схема модели
anaschu 28.06.2026
ГЛОБАЛЬНАЯ ОПИСАТЕЛЬНАЯ СПЕЦИФИКАЦИЯ ЭКОСИСТЕМНОЙ МОДЕЛИ «SOIL CHEMISTRY & MYCORRHIZA 2. 0» https:/ / ibb. co/ NnkGpfMd Представленная интегрированная схема описывает непрерывную нелинейную. . .
сукцессия 13. Питон модель трехзонного мицелия, пока что в основном арбускулярного
anaschu 28.06.2026
## Разработка агентной модели микоризной сукцессии: от выявления артефактов к созданию комплексной системы ### Аннотация Представлено исследование по разработке агентной модели микоризной. . .
сукцессия 12. краткий список проверок модели перед запуском.
anaschu 27.06.2026
Скрытые отказы в моделях систем динамики (SD-models) экологических систем: два случая из практики Контекст Разбирался прототип модели систем динамики (SD-модели) микоризной сукцессии: пять. . .
Сукцессия 11. Проверка орудий перед войной: разработка через тестирование
anaschu 27.06.2026
Как не дать модели соврать самой себе: проверки для симуляции микоризной сукцессии Введение Когда вы строите математическую модель живой системы — грибов, растений, почвы — главная опасность. . .
10 сукцессия. Питон код войны грибов и растений
anaschu 27.06.2026
import numpy as np class PlantAgent: def __init__(self, name, strategy, initial_biomass): self. name = name self. strategy = strategy # "greedy" (широколиственные) или. . .
сукцессия 9. Математика подлости: как растения предали грибных друзей
anaschu 27.06.2026
Статья 2. Глобальная фосфорная война: эволюционно-экономические механизмы распределения биомов Земли Введение: Экологический рынок как игра с нулевой суммой Традиционная экология долгое время. . .
сукцессия 8. Как я спорил с ИИ, которые - агенты растений и ненавистники грибов!
anaschu 27.06.2026
Статья 1. Хроники грибного восстания: как Сократов диалог разрушил академические догмы ИИ Введение: Синдром «цифрового учебника» Современные большие языковые модели (LLM) обладают колоссальным. . .
Главный вопрос моделирования сукцессии
anaschu 27.06.2026
главный вопрос. Если эктомикориза лучше добывает недоступный фосфор. И ее масса максимальна из всех. А широколиственный лес тоже имеет самую крутую биомассу. То почему не возникло их симбиоза? Это. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru