Форум программистов, компьютерный форум, киберфорум
C++
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.78/9: Рейтинг темы: голосов - 9, средняя оценка - 4.78
0 / 0 / 0
Регистрация: 17.11.2019
Сообщений: 9
1

Как получить результат потоков в массиве ?

02.11.2020, 18:27. Показов 1869. Ответов 3
Метки c++ (Все метки)

Author24 — интернет-сервис помощи студентам
Доброго времени суток . Такой вопрос . Как получить массив результатов из разных потоков?
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
#include <thread>
#include <future>
#include <iostream>
using namespace std;
int Matrix_NxN(int** array, int col);
void matrixUpdate(int** mass, int** mass2, int i, int j, int col);
auto funk(int** array, int col);
 
int main(){
    system("chcp 1251");
    system("cls");
    int col, result, n;
    int** mass, int** p;
    cout << "Размер матрицы ";
    cin >> col;
    mass = new int* [col];
    for (int i = 0; i < col; i++) {
        mass[i] = new int[col];
        for (int j = 0; j < col; j++) {
            mass[i][j] = rand() % 50 + 1;
        }
    }
    p = new int* [col];
    for (int i = 0; i < col; i++)
        p[i] = new int[col];
    n = col - 1;
    for (int i = 0; i < col; i++) {
        matrixUpdate(mass, p, i, 0, col);
        result = funk(p, n);
    }
    //cout << "Определитель равен " << result;
    //cin.get();
    return 0;
}
auto funk(int** array, int col) {
    for (int i = 0; i < col; i++) {
        auto res = async(launch::async, [array, col]{
            Matrix_NxN(array,col);
         });
        return res;
    } 
}
 
int Matrix_NxN(int** array, int col) {
    int i = 0, j = 0, d = 0, k = 1, n = col - 1;
    int** pArray;
    pArray = new int* [col];
    for (int i = 0; i < col; i++)
        pArray[i] = new int[col];
    n = col - 1;
    if (col < 1)
        cout << "Определителя нет!";
    else if (col == 1){
        d = array[0][0];
        return (d);
    }
    else if (col == 2){
        d = array[0][0] * array[1][1] - (array[1][0] * array[0][1]);
        return (d);
    }
    else{
        for (i = 0; i < col; i++){
            matrixUpdate(array, pArray, i, 0, col);
            d = d + k * array[i][0] * Matrix_NxN(pArray, n);
            k = -k;
        }
    }
    return (d);
}
 
 
void matrixUpdate(int** mass, int** mass2, int i, int j, int col){
    int c1, c2, num1 = 0, num2;
    for (c1 = 0; c1 < col - 1; c1++){
        if (c1 == i)
            num1 = 1;
        num2 = 0;
        for (c2 = 0; c2 < col - 1; c2++){
            if (c2 == j)
                num2 = 1;
            mass2[c1][c2] = mass[c1 + num1][c2 + num2];
        }
    }
}
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
02.11.2020, 18:27
Ответы с готовыми решениями:

Как получить такой результат? Результат на Картинке
Как сделать так чтобы лого было по середине, а текст по бокам....все как на картинке? Что написать...

Просуммировать элементы матрицы строк размером 4*3. Результат получить в одномерном массиве размером 4
Помогите люди добрые! Завтра сдавать, а я маягко говоря не шарю, прошу профессионалов выручить...

как получить результат
Здравствуйте, нужно получить значение поля result в мейне. class Res { public: double km;...

Странный результат выполнения нескольких потоков
internal class Program { private static void Main() { int...

3
6770 / 4564 / 1843
Регистрация: 07.05.2019
Сообщений: 13,726
02.11.2020, 21:51 2
Цитата Сообщение от devilong Посмотреть сообщение
Доброго времени суток . Такой вопрос . Как получить массив результатов из разных потоков?
Что значит "из разных потоков"?
0
0 / 0 / 0
Регистрация: 17.11.2019
Сообщений: 9
03.11.2020, 12:14  [ТС] 3
ну я запускаю нахождение детерминанта в разных потоках и мне нужны результаты получить с разных потоков в массиве что б их решить
0
 Аватар для igorrr37
2862 / 2010 / 988
Регистрация: 21.12.2010
Сообщений: 3,716
Записей в блоге: 15
04.11.2020, 12:49 4
Лучший ответ Сообщение было отмечено devilong как решение

Решение

определитель многопоточно можно так вычислить
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
#include <thread>
#include <iostream>
#include <vector>
#include <utility>
#include <queue>
#include <atomic>
#include <cmath>
 
using matrix = std::vector<std::vector<int>>;
using pair = std::pair<int, matrix>;
 
int main() 
{
    matrix mtx
    {
        {2,2,3,33},
        {5,66,7,8},
        {1,2,3,4},
        {5,6,7,8},
    };
 
    std::queue<pair> que;
    que.push({1, mtx});
    std::atomic_flag af = ATOMIC_FLAG_INIT;
    std::atomic_int res = 0;
    std::atomic_int goOn = 1;
    for (int i = 1; i <= mtx.size(); ++i)
    {
        goOn = goOn * i;
    }
 
    auto lMatrixMinusOneOrder = [&que, &af, &res, &goOn]() // функция потока
    {
        while (goOn)
        {
            pair pr;
            while (goOn)
            {
                while (af.test_and_set()) {}
                if (!que.empty())
                {
                    pr = std::move(que.front());
                    que.pop();
 
                }
                af.clear();
                if (!pr.second.empty())
                {
                    break;
                }
                else
                {
                    std::this_thread::yield();
                }
            }
 
            int num = pr.first;
            matrix mtx = pr.second;
            if (mtx.size() > 1)
            {
                for (int j = 0; j < mtx[0].size(); ++j)
                {
                    matrix addMtx = mtx;
                    for (int i = 0; i < addMtx.size(); ++i)
                    {
                        addMtx[i].erase(addMtx[i].begin() + j);
                    }
                    addMtx.erase(addMtx.begin());
 
                    while (af.test_and_set()) {}
                    que.push({ (int)std::pow(-1, 2 + j) * num * mtx[0][j], addMtx });
                    af.clear();
                }
            }
            else if (mtx.size() == 1)
            {
                res += num * mtx.at(0).at(0);
                --goOn;
            }
        }
        
    };
    std::vector<std::thread> vt;
    for (int i = 0; i < 4; ++i)
    {
        vt.emplace_back(lMatrixMinusOneOrder);
    }
    for (auto& t : vt)
    {
        t.join();
    }
    std::cout << "res :" << res << std::endl;
    
}
0
04.11.2020, 12:49
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
04.11.2020, 12:49
Помогаю со студенческими работами здесь

Как получить результат в скрипте ?
Всем дорого дня ! Как прописать несколько действий в скрипте : Ввод: &lt;input type=&quot;text&quot; id=&quot;A&quot;&gt;...

Как получить результат в div js
Здравствуйте. Задача: Создайте программу, которая выводит надбавку за стаж. Пользователь вводит...

Как получить результат функции?
Написала процедуру (или функцию, я еще не сильна в терминологии), как воспользоваться ее...

Как получить результат из функции
разъясните пожалуйста по функции. задача: нужно передать в функцию строку а получить указатель...

Как получить результат запроса в переменную?
С помощью запроса получаю данные из некоего dbf-файла. Над полученными данные потом производятся...

Как получить желаемый результат селекта?
Здравствуте, есть у меня значить 2 таблицы (упрощу свой случай). первая таблица страны(country)...


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

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Новые блоги и статьи
[golang] 189. Rotate Array
alhaos 28.01.2025
Повороты рукоятки, целочисленный слайс нужно сдвинуть на целое положительное число. Мне очень нравится решение на GO / / https:/ / leetcode. com/ studyplan/ top-interview-150/ package topInterview . . .
КуМир: решение задач на матрицы
bytestream 28.01.2025
КуМир представляет собой среду для обучения программированию, которая включает в себя мощные инструменты для работы с матрицами. Матрица в программировании - это двумерный массив, состоящий из. . .
КуМир: решение задач на строки
bytestream 28.01.2025
В системе программирования КуМир работа со строковыми данными является одним из важнейших аспектов создания программ. Строки представляют собой последовательности символов, заключенные в кавычки,. . .
КуМир: решение геометрических задач
bytestream 28.01.2025
Программирование геометрических задач в среде КуМир становится всё более актуальным в обучении школьников и студентов. КуМир — это разработанная в России обучающая программная среда, предназначенная. . .
КуМир, исполнитель Водолей: Задачи и решения
bytestream 28.01.2025
КуМир — это образовательная среда для обучения программированию. Она предлагает пользователям разнообразные инструменты для разработки и отладки программ, что особенно ценно для студентов и. . .
КуМир, исполнитель Чертежник: Решение задач
bytestream 28.01.2025
КуМир (Комплект Учебных МИРов) представляет собой образовательную среду для обучения основам программирования и алгоритмизации. Исполнитель Чертежник работает на координатной плоскости, где может. . .
Rust или Go? А может C++?
hw_wired 28.01.2025
С каждой новой технологией или методологией появляются новые языки программирования, призванные решать конкретные задачи либо улучшать аспекты производительности и безопасности. Среди множества. . .
Fortran и WinAPI: как создать приложение с графическим интерфейсом
hw_wired 28.01.2025
Fortran — это один из старейших высокоуровневых языков программирования, широко используемый в науке и инженерии уже несколько десятилетий. Его название происходит от "Formula Translation" (перевод. . .
Списки в Haskell
hw_wired 28.01.2025
Haskell является функциональным языком программирования, который отличается лаконичностью синтаксиса и мощными абстракциями. Важным концептом в Haskell являются списки — упорядоченные коллекции. . .
Функции высшего порядка в Haskell
hw_wired 28.01.2025
Haskell – это современный функциональный язык программирования, который получил широкое распространение благодаря своей выразительности и мощным абстракциям. Одной из ключевых особенностей Haskell. . .
Как в цикле обойти все поля объекта в JavaScript
bytestream 28.01.2025
Объекты в JavaScript представляют собой фундаментальные структуры данных, которые позволяют хранить и организовывать связанную информацию в виде пар ключ-значение. Каждый объект можно представить как. . .
Как выбрать строки в DataFrame по значению столбца в Pandas
bytestream 28.01.2025
В области анализа данных библиотека Pandas стала незаменимым инструментом для работы с табличными данными в Python. Эта мощная библиотека предоставляет множество функций для эффективной обработки и. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru