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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
павел11
Сообщений: n/a
#1

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

16.08.2010, 23:54. Просмотров 690. Ответов 2
Метки нет (Все метки)

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
#include "stdafx.h"
#include <Windows.h>
#include <iostream>
#include <conio.h>
 
using namespace std;
 
int *Mas;
struct ParamData{
        int id;
        int Size;
        int **mas;
    };
 
void find_func(LPVOID Param)
{
 
    ParamData *tmp = (ParamData *) Param;
    int Max = tmp->mas[tmp->id][0];
    for(int i = 1; i < tmp->Size; i++)
    {
        if(tmp->mas[tmp->id][i] > Max)
            Max = tmp->mas[tmp->id][i];
    }
    Mas[tmp->id] = Max;
    cout << Max;
}
 
int _tmain(int argc, _TCHAR* argv[])
{
    int n;
    cout << "Enter the array size:";
    cin >> n;
    cout << n;
    ParamData *Param = new ParamData;
    Param->Size = n;
    Param->mas = new int*[n];
    for(int i = 0; i < n; i++)
    {
        Param->mas[i] = new int[n];
        for(int j = 0; j < n; j++)
        {
            Param->mas[i][j] = (rand()%100);
            cout << Param->mas[i][j] << "  ";
        }
        cout << endl;
    }
    Mas = new int[n];
 
    HANDLE *Threads = new HANDLE[n];
    for(int i = 0; i < n; i++)
    {
        Param->id = i;
        Threads[i] = CreateThread(NULL,
                                                                           0,
                           (LPTHREAD_START_ROUTINE)find_func,
                           (LPVOID *)Param,
                           0,
                           0);
    }
    DWORD wait = WaitForMultipleObjects(            
                    n,  
                    Threads,
                    false, 
                    INFINITE
                    );
    int tmp = Mas[0];
    for (int j = 1; j<n; j++)
                {
        cout << tmp;
        if(Mas[j]>tmp) 
            tmp = Mas[j];
                } 
    cout << endl << tmp;
    _getch();
    return 0;
}
Итак, вот код, который я написал. Приложение должно создавать потоки для поиска по строкам матрицы наибольшего их элемента, а из полученных наибольших значений выбрать также максимальное. Проблема в том, что находится только наибольшее значение последней строки, а значения для предыдущих даже и не заполняются. Есть подозрения, что я каким-то образом неправильно передаю параметры в функцию потока. У кого есть идеи? Заранее спасибо.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
16.08.2010, 23:54
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Максимальный элемент матрицы с использованием потоков (C++):

Необходимо найти максимальный элемент матрицы, используя несколько потоков - C++
Добрый день программисты, необходимо выполнить поиск наименьшего элемента матрицы используя количество потоков равное количеству строк...

Максимальный элемент матрицы заменить на нуль и вывести на печать угол матрицы, в котором расположен этот максимальный элемент - C++
Помогите, пожалуйста, добить программу: -Максимальный элемент матрицы заменить на нуль и вывести на печать угол матрицы, в котором...

Максимальный элемени матрицы заменить на нуль и вывести на печать угол матрицы, в котором расположен этот максимальный элемент - C++
собственно сабж. буду очень благодарен тому кто поможет,а то я на грани отчисления,а уроки по c++ пролежал дома с переломом ноги =(

Каждый элемент матрицы умножить на максимальный элемент у поточному рядку. Вывести на экран начальную та полученную матрицы - C++
Здравствуйте! Дано задание: Каждый элемент матрицы умножить на максимальный элемент у поточному рядку. Вывести на экран начальную та...

Найти минимальный элемент каждой строки и максимальный элемент каждого столбца матрицы - C++
как найти минимальный элемент каждой строки и максимальный элемент каждого столбца матрицы на с++ Добавлено через 6 минут ...

Поменять местами столбцы матрицы: столбец, содержащий максимальный элемент матрицы, и столбец, содержащий минимальный элемент матрицы. - C++
В матрице, состоящей из положительных действительных чисел поменять местами два столбца: столбец, содержащий максимальный элемент...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
easybudda
Модератор
Эксперт CЭксперт С++
9530 / 5523 / 932
Регистрация: 25.07.2009
Сообщений: 10,602
17.08.2010, 01:43 #2
скорее всего говнокод, но работает
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
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <windows.h>
    
#define ARRAY_SIZE 10
 
int max_value(int * arr, size_t cnt){
    int max = *arr++;
    while ( --cnt ){
        if ( *arr > max )
            max = *arr;
        ++arr;
    }
    return max;
}
 
typedef struct {
    int * pData;
    int * pResult;
    size_t nDataSize;
} param_t;
 
DWORD WINAPI get_max_value(LPVOID lpParam){
    param_t * p = (param_t*)lpParam;
    *(p->pResult) = max_value(p->pData, p->nDataSize);
    return 0;
}
 
int main(void){
    int matrix[ARRAY_SIZE][ARRAY_SIZE], array[ARRAY_SIZE], i, j;
    DWORD dwThreadIdArray[ARRAY_SIZE];
    HANDLE hThreadArray[ARRAY_SIZE];
    param_t params[ARRAY_SIZE];
    
    srand(time(NULL));
    
    for ( i = 0; i < ARRAY_SIZE; ++i ){
        for ( j = 0; j < ARRAY_SIZE; ++j )
            matrix[i][j] = rand() % 100;
        params[i].pData = &matrix[i][0];
        params[i].pResult = &array[i];
        params[i].nDataSize = ARRAY_SIZE;
    }
    
    for ( i = 0; i < ARRAY_SIZE; ++i ){
        hThreadArray[i] = CreateThread(NULL, 0, get_max_value, (LPVOID)&params[i], 0, &dwThreadIdArray[i]);
        if ( hThreadArray[i] == NULL ){
            fprintf(stderr, "Can't create thread!\n");
            ExitProcess(1);
        }
    }
    WaitForMultipleObjects(ARRAY_SIZE, hThreadArray, TRUE, INFINITE);
    for ( i = 0; i < ARRAY_SIZE; ++i )
        CloseHandle(hThreadArray[i]);
    
    printf("Matrix:\n");
    for ( i = 0; i < ARRAY_SIZE; ++i ){
        for ( j = 0; j < ARRAY_SIZE; ++j )
            printf("%02d ", matrix[i][j]);
        printf(" MAX: %02d\n", array[i]);
    }
    printf("The biggest value is %d\n", max_value(array, ARRAY_SIZE));
    
    ExitProcess(0);
}
павел11
Сообщений: n/a
17.08.2010, 08:26 #3
Да, спасибо за помощь!)

Попробую разобраться, в чём моя проблема была. Спасибо ещё раз!
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
17.08.2010, 08:26
Привет! Вот еще темы с ответами:

Дана матрица вещественных чисел. Найти максимальный элемент и наиболее удалённый от него (по значению) элемент матрицы. - C++
Дана матрица вещественных чисел. Найти максимальный элемент и наиболее удалённый от него (по значению) элемент матрицы. Поиск осуществлять...

Поменять местами максимальный элемент матрицы и элемент А[1][1] - C++
Здравствуйте. Задача состоит в том, чтобы поменять местами максимальный элемент и элемент А. Но не могу понять почему у меня не меняет...

Матрицы. Программа, которая удаляет столбец матрицы, содержащий максимальный ее элемент - C++
Я новичок в с++...поэтому оооочень нужна Ваша помощь!!! Необходимо написать программу, которая удаляет столбец матрицы, содержащий...

Если в заданной строке матрицы содержится ее максимальный отрицательный элемент, то ко всем элементам матрицы - C++
Дана целая A. Если в заданной строке матрицы содержится ее максимальный отрицательный элемент, то ко всем элементам матрицы из...


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

Или воспользуйтесь поиском по форуму:
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru