Совсем запарился, помогите. Задание: Разработать программу, которая создает в отдельном потоке случайный массив А из N целых чисел в диапазоне от -999 до 999 выводит на экран эти числа. Создание и вывод элементов массива производится через заданное время T, N и T вводятся пользователем до запуска процесса. Массив обрабатывается двумя другими потоками В и С, работающими параллельно с потоком, создающим массив. Все потоки выводят результаты своей работы в текстовые окна, каждый поток в свое окно. Задание В. Вычисление общего количества цифр всех элементов массива Задание C. Определение и вывод чисел, являющихся простыми числами.
Создал форму, создал 3 потока. Во втором и третьем потоке написал код для задания В и С(кстати проверьте что не так). В первом потоке написал код массива.
| Код |
#ifndef Unit1H #define Unit1H //--------------------------------------------------------------------------- #include <Classes.hpp> #include <Controls.hpp> #include <StdCtrls.hpp> #include <Forms.hpp> #include <ExtCtrls.hpp> //--------------------------------------------------------------------------- class TForm1 : public TForm { __published: // IDE-managed Components TButton *Button1; TButton *Button2; TMemo *Memo1; TMemo *Memo2; TMemo *Memo3; TTimer *Timer1; TLabel *Label1; TLabel *Label2; TLabel *Label3; TEdit *Edit1; TEdit *Edit2; TLabel *Label4; TLabel *Label5; void __fastcall Button1Click(TObject *Sender); private: // User declarations public: // User declarations __fastcall TForm1(TComponent* Owner); }; //--------------------------------------------------------------------------- extern PACKAGE TForm1 *Form1; //--------------------------------------------------------------------------- #endif
|
| Код | #include <vcl.h> #pragma hdrstop #include "Unit1.h" //--------------------------------------------------------------------------- #pragma package(smart_init) #pragma resource "*.dfm" TForm1 *Form1; //--------------------------------------------------------------------------- __fastcall TForm1::TForm1(TComponent* Owner) : TForm(Owner) { }
|
Юнит первого потока
| Код |
#ifndef Unit2H #define Unit2H //--------------------------------------------------------------------------- #include <Classes.hpp> //--------------------------------------------------------------------------- class MyThr1 : public TThread { private: protected: void __fastcall Execute(); public: int i; char A[]=""; __fastcall MyThr1(bool CreateSuspended); }; //--------------------------------------------------------------------------- #endif
|
| Код | #include <vcl.h> #pragma hdrstop #include "Unit2.h" #pragma package(smart_init) //--------------------------------------------------------------------------- __fastcall MyThr1::MyThr1(bool CreateSuspended) : TThread(CreateSuspended) { } //--------------------------------------------------------------------------- void __fastcall MyThr1::Execute() { Form1->Memo1->Text=StrToInt(Form1->Edit2->Text)+"случайных значений"; for(i=0;i<Form1->Edit2->Text;i++) { A[i]= random(1999)-1000; Form1->Memo1->Lines->Add(IntToStr(A[i])); } }
|
Юнит второго потока
| Код |
#ifndef Unit3H #define Unit3H //--------------------------------------------------------------------------- #include <Classes.hpp> #include <Unit2.cpp> //--------------------------------------------------------------------------- class MyThr2 : public TThread { private: protected: void __fastcall Execute(); public: __fastcall MyThr2(bool CreateSuspended); }; //--------------------------------------------------------------------------- #endif
|
| Код |
#include <vcl.h> #pragma hdrstop #include "Unit3.h" #pragma package(smart_init) //--------------------------------------------------------------------------- // Important: Methods and properties of objects in VCL can only be // used in a method called using Synchronize, for example: // // Synchronize(UpdateCaption); // // where UpdateCaption could look like: // // void __fastcall MyThr2::UpdateCaption() // { // Form1->Caption = "Updated in a thread"; // } //--------------------------------------------------------------------------- __fastcall MyThr2::MyThr2(bool CreateSuspended) : TThread(CreateSuspended) { } //--------------------------------------------------------------------------- void __fastcall MyThr2::Execute() { //---- Place thread code here ---- while (A[i]>0) { A[i]/=10; count++; } Form1->Memo3->Text="Вычисление общего количества цифр всех элементов массива"+count; }
|
Юнит 3 потока
| Код |
#ifndef Unit4H #define Unit4H //--------------------------------------------------------------------------- #include <Classes.hpp> #include <Unit2.cpp> //--------------------------------------------------------------------------- class MyThr3 : public TThread { private: protected: void __fastcall Execute(); public: __fastcall MyThr3(bool CreateSuspended); }; //--------------------------------------------------------------------------- #endif
|
| Код |
#include <vcl.h> #pragma hdrstop #include "Unit4.h" #pragma package(smart_init) //--------------------------------------------------------------------------- __fastcall MyThr3::MyThr3(bool CreateSuspended) : TThread(CreateSuspended) { } //--------------------------------------------------------------------------- void __fastcall MyThr3::Execute() { //---- Place thread code here ---- Form1->Memo3->Text="Опеределение и вывод чисел, являющихся простыми"; bool flag=1; for (int j=2;i<A[i];j++) { if (A[i]%j==0){flag=0;break;} } if (flag) Form1->Memo3->Lines->Add(IntToStr(A[i])); }
|
А дальше начались проблемы. 1.Не знаю точно в правильном ли месте написал код массива, чтоб к нему могли обращаться все потоки? 2.Создал две кнопки START и STOP для запуска и остановки потоков. Подскажите где и как написать код для этих кнопок? И как использовать параметр T? Заранее спасибо. |