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

Найти произведение минимальных элементов каждой строки матрицы - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Подсчитать количество символов а над третьей строкой матрицы и... http://www.cyberforum.ru/cpp-beginners/thread588162.html
Дана матрица 5x7, элементами которой являются значения символьного ти¬па. Составить одномерный массив, содержащий количество символов m в каждом из ее столбцов. Подсчитать количество символов а над третьей строкой матрицы и общее количество символов b и z под третьей строкой.
C++ Матрица В прямоугольной матрице определить элемент, который по модулю наименее отличается от среднего арифметического всех элементов матрицы. Помогите решить!!!! http://www.cyberforum.ru/cpp-beginners/thread588161.html
C++ Функции с переменным количеством параметров. Функция, как тип данных
Добрый день, уважаемые программисты! Прошу немного помощи задание: Разработать функцию с переменным количеством параметров. Для извлечения параметров из списка использовать технологию программирования областей памяти переменного формата. 9. Последовательность вещественных массивов. Сначала идет целый параметр - размерность массива (int), затем непосредственно последовательность...
Динамическая структура данных очередь C++
Помогите допписать программу на с++ пожалуйста,а то я не могу разобраться немного,как сделать Мне необходимо написать динамическую структуру очередь с исключением по приоритету Вот текст уже готовой программы #include<iostream.h> #include<conio.h> #include<stdlib.h> #include<stdio.h> #include<string.h> #include<ctype.h>
C++ сделать уравнение методом Ньютона http://www.cyberforum.ru/cpp-beginners/thread588144.html
дано уравнение 3x – 4 ln x – 5 = 0 сделать методом Ньютона Приближенное значение корня 3,2300
C++ Запись в файл /* 6. В исходном файле находится текст программы на языке С++. Создать файл, в который переписать содержимое исходного файла без однострочных комментариев. */ #include <locale.h> #include <stdio.h> #include <conio.h> #include <stdlib.h> подробнее

Показать сообщение отдельно
-=ЮрА=-
Заблокирован
Автор FAQ
20.06.2012, 14:19     Найти произведение минимальных элементов каждой строки матрицы
z0rde, c MPI я не работал а вот распараллелить вычисления могу, например через Критическую секцию
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
#include <windows.h>
#include <process.h>
#include <iostream>
#include <iomanip>
#include <ctime>
using namespace std;
 
CRITICAL_SECTION cs;//Объявляем критическую секцию
//распараллеливать работу будет через неё
 
//структура для передачи параметров в thread-нить
struct RowThreadData
{
    int n;
    double * pRow;
    double minElem;
    bool bFinish;
};
 
//Сама thread-нить организующая вычисление мин элемента в строке
void getMinElem(void * lpParam);
 
int main()
{
    int i,j;//Счётчики
    int m;//будет содержать число строк матрицы
    int n;//будет содержать число стобцов матрицы
    double ** arr;//указатель на саму матрицу
    RowThreadData * pData;//Указатель на массив структур thread-нитей
    InitializeCriticalSection(&cs);//Организуем критическую секцию
    cout<<"m = ";cin>>m;
    cout<<"n = ";cin>>n;
    //выделяем память 
    arr   = new double*[m];//под указатели на строки матрицы
    pData = new RowThreadData[m];//Под вектор структур для thread-нитей
    //Рандомно гененрируем, печатаем элементы матрицы
    srand(time(0));//устанавливаем нач значение генератора случ чисел
    for(i = 0; i < m; i++)
    {
        arr[i] = new double[n];//Выделяем память под элементы i-й строки
        for(j = 0; j < n; j++)
            //генерирем числа от 0.1 до 10.0
            cout<<setw(4)<<(arr[i][j] = 0.1*(rand()%99) + 0.1)<<" ";
        cout<<endl;
        //Организуем thread-нить
        pData[i].n       = n;
        pData[i].pRow    = arr[i];
        pData[i].minElem = arr[i][0];
        pData[i].bFinish = false;
        _beginthread(getMinElem,0,&pData[i]);//Делаем дочерний поток
    }
    bool bFinish = false;
    //рослушиваем все потоки на завершение их работы
    while(!bFinish)
    {
        for(i = 0; i < m; i++)
        {
            EnterCriticalSection(&cs);
            if(pData[i].bFinish)
                bFinish = true;
            LeaveCriticalSection(&cs);
        }
    }
    double minMult = 1;//Будет содержать произведение мин элементов
    //Считываем результаты расчётов потоков 
    //+ чистим память под arr
    for(i = 0; i < m; i++)
    {
        minMult *= pData[i].minElem;
        delete [] arr[i];
    }
    //Дочищаем память
    delete [] arr;
    delete [] pData;
    cout<<"Calculations stoped answer is : "<<minMult<<endl;
    DeleteCriticalSection(&cs);//Удаляем критическую секцию
    system("pause");
    return 0;
}
    
void getMinElem(void * lpParam)
{   
    RowThreadData *pData = (RowThreadData *)lpParam;
    while(!pData->bFinish && pData->n)
    {
        if(pData->minElem < pData->pRow[pData->n - 1])
            pData->minElem = pData->pRow[pData->n - 1];
        if(!(pData->n = pData->n - 1))
            pData->bFinish = true;
    }
    _endthread();
}
Миниатюры
Найти произведение минимальных элементов каждой строки матрицы  
Вложения
Тип файла: rar ParallelCalcMult.exe.rar (49.4 Кб, 13 просмотров)
Тип файла: rar ParallelCalcMult_poject.rar (7.5 Кб, 13 просмотров)
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru