Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.50/4: Рейтинг темы: голосов - 4, средняя оценка - 4.50
4 / 1 / 0
Регистрация: 09.10.2015
Сообщений: 204
1

Заменить статические массивы на глобальные и heapalloc на new.WinApi

08.03.2017, 16:54. Показов 769. Ответов 3
Метки нет (Все метки)

Есть программа,перемножающие два многочлена с помощью потоков.
Коэффиценты задаются в массивах A и B n,m-их разномерность.
Они у меня статические .а нужно сделать их глобальными.
В процессе переделывания выходит кучу ошибок,не понимаю как исправить.
также нужно heapalloc заменить на new
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
170
171
#include "stdafx.h"
#include <iostream>
#include <windows.h>
#include <tchar.h>
#include <strsafe.h>
#include <cstdlib>
#include <ctime>
 
 
#define BUF_SIZE 255
 
using namespace std; 
 
DWORD WINAPI MyThreadFunction( LPVOID lpParam );
 
 
class Arrays{
public:
    int* Arr1;
    int* Arr2;
    int Size1;
    int Size2;
    Arrays(int* A, int a,int* B, int b)
    {
        Size1=a;
        Size2=b;
        Arr1=A;
        Arr2=B;
    }
    
    void PrintPolynom(char ch[], int* C, int k)
{
    printf(ch);
    for (int j = k - 1; j >= 0; j--)
    {
        if (C[j] >= 0 && j != k - 1)
        {
            printf("+");
        }
        printf("%dx^%d ", C[j], j);
    }
    printf("\n");
}
void CalArr(int* C, int c)
{
    for (int z = max(0, c - Size2); z <= min(c, Size1); z++)
    {
        C[c] += Arr1[z] * Arr2[c - z];
    }
}
 
    Arrays()
    {
        Arr1=0;
        Arr2=0;
        Size1=0;
        Size2=0;
    }
    ~Arrays()
    {
        delete[] Arr1;
        delete[] Arr2;
    }
};
 
typedef class DataArray {
public:
    Arrays* Arr;
    int num;
    DataArray()
    {
        num=0;
        Arr=0;
    }
    ~DataArray()
    {
        delete[] Arr;
    }
}ARRAY, *PARRAY;
int* ResultArray;
 
 
int _tmain()
{   
    int a,b;
    srand (GetTickCount());  
 
    printf("Degree of polynomial A: ");
    scanf_s("%d",&a);
 
    int* A=new int[a+1];
 
    for (int j = 0; j < a+1; j++)
    {
        A[j]=rand() % 8 + 1;
    }
 
    printf("Degree of polynomial B: ");
    scanf_s("%d",&b);
 
    int* B=new int[b+1];
 
    for (int j = 0; j < b+1; j++)
    {
        B[j]=rand() % 7 + 1;
    }
 
    const int MAX_THREADS=a+b+1;
 
    Arrays* arr1= new Arrays(A,a,B,b);
 
    PARRAY* pDataArray=new PARRAY[MAX_THREADS];
    HANDLE*  hThreadArray=new HANDLE[MAX_THREADS];
 
    ResultArray=new int[MAX_THREADS];
    for(int j=0;j<MAX_THREADS;j++)
    {
        ResultArray[j]=0;
    }
 
    for( int i=0; i<MAX_THREADS; i++)
    {
        pDataArray[i]=(PARRAY)HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY,sizeof(ARRAY));
        pDataArray[i]->num=i;
        pDataArray[i]->Arr=arr1;
 
        hThreadArray[i] = CreateThread(0, 0, MyThreadFunction,pDataArray[i], 0, 0);
    }
 
    WaitForMultipleObjects(MAX_THREADS, hThreadArray, TRUE, INFINITE);
 
    for(int i=0; i<MAX_THREADS; i++)
    {
        CloseHandle(hThreadArray[i]);
        if (pDataArray[i] != NULL)
        {
            HeapFree(GetProcessHeap(), 0, pDataArray[i]);
            pDataArray[i] = NULL;
        }
    }
 
    arr1->PrintPolynom("First polynom: ",A,a+1);
    arr1->PrintPolynom("Second polynom: ",B,b+1);
    arr1->PrintPolynom("Resulting polynom: ",ResultArray,MAX_THREADS);
 
    
 
    delete[] pDataArray;
    delete[] hThreadArray;
    delete[] ResultArray;
 
    system("pause");
    return 0;
}
 
 
DWORD WINAPI MyThreadFunction( LPVOID lpParam ) 
{ 
    HANDLE hStdout;
    PARRAY pDataArray;
    TCHAR msgBuf[BUF_SIZE];
    size_t cchStringSize;
    DWORD dwChars;
    hStdout = GetStdHandle(STD_OUTPUT_HANDLE);
    if( hStdout == INVALID_HANDLE_VALUE ) {return 1;}
    pDataArray = (PARRAY)lpParam;
    pDataArray->Arr->CalArr(ResultArray,pDataArray->num);
    StringCchLength(msgBuf, BUF_SIZE, &cchStringSize);
    WriteConsole(hStdout, msgBuf, (DWORD)cchStringSize, &dwChars, NULL);
    return 0;
}
Добавлено через 11 минут
a и b их размеры
0
Заказывайте контрольные, курсовые и дипломы здесь.
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
08.03.2017, 16:54
Ответы с готовыми решениями:

Глобальные и статические глобальные переменные
Скажите, чем отличаются глобальные переменные от статических глобальных переменных?

Заменить все статические массивы на динамические
Отсортировать по воз- растанию только чет- ные элементы масси- ва. #include &lt;algorithm&gt;...

Взять статические строки заменить на динамические массивы и распечатать
нужно решить задачу Взять статические строки заменить на динамические массивы и распечатать

Заменить статические массивы на динамические; размер массива запрашивать у пользователя
#include &lt;iostream&gt; #include &lt;ctime&gt; using namespace std; const int n=10; int first, last;...

3
6968 / 6013 / 2731
Регистрация: 14.04.2014
Сообщений: 25,736
08.03.2017, 17:17 2
Цитата Сообщение от Kristina_S Посмотреть сообщение
Они у меня статические
Где?
Цитата Сообщение от Kristina_S Посмотреть сообщение
нужно сделать их глобальными
Что именно? pDataArray?
0
4 / 1 / 0
Регистрация: 09.10.2015
Сообщений: 204
08.03.2017, 17:22  [ТС] 3
они у меня реализованы через класс. а нужно глобально
0
6968 / 6013 / 2731
Регистрация: 14.04.2014
Сообщений: 25,736
08.03.2017, 18:46 4
Ну вынеси их наверх. Классы убери. А чем они мешают-то?
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
08.03.2017, 18:46

Заказываю контрольные, курсовые, дипломные работы и диссертации здесь.

Глобальные статические переменные
Ребят, может мне кто-нибудь объяснить назначение глобальных статических переменных? Литература (в...

Заменить статические массивы динамическими.
Заменить статические массивы динамическими. Значение N (размерность массива) вводится...

Статические массивы,Динамические массивы,строки
1)Создать двумерный массив A(N,M) целых положительных и отрицательных чисел с помощью функции...

Массивы(статические)
Найти максимальную по длине монотонную (т. е. либо неубывающую, либо невозрастающую)...


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

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

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