Частина тексту файла (без зображень, графіків і формул):
Міністерство освіти і науки України
Національний університет „Львівська політехніка”
Кафедра КСА
Звіт
З лабораторної роботи №1
з дисципліни: “Алгоритмічні мови та програмування. Частина 2”
на тему: “ Об’єктно орієнтоване програмування”
Створення WIN32-програм з розділеними
паралельно в часі математичними обчисленнями
Варіант №2
Мета роботи: отримати навики роботи в системі візуального об’єктно-орієнтованого програмування C++Builder та освоїти розроблення програм орієнтованих на виконання складних математичних розрахунків з розділенням їх виконання паралельно в часі.
Завдання: написати програмний код для обчислення математичного виразу в окремо створеному потоці програми, а в лабораторії спроектувати та налагодити цю програму.
Використати засоби інтерфейсу WIN32 API, результати вивести на екран і у файл.
Остаточна версія програми:
Unit1.h
//---------------------------------------------------------------------------
#ifndef Unit1H
#define Unit1H
//---------------------------------------------------------------------------
#include <Classes.hpp>
#include <Controls.hpp>
#include <StdCtrls.hpp>
#include <Forms.hpp>
#include <ExtCtrls.hpp>
#include <Menus.hpp>
//---------------------------------------------------------------------------
class TForm1 : public TForm
{
__published: // IDE-managed Components
TPanel *Panel1;
TLabel *Label1;
TMemo *Memo1;
TButton *Button1;
TButton *Button2;
TMainMenu *MainMenu1;
TMenuItem *N1;
TMenuItem *N2;
void __fastcall Button2Click(TObject *Sender);
void __fastcall Button1Click(TObject *Sender);
private: // User declarations
public: // User declarations
__fastcall TForm1(TComponent* Owner);
};
//---------------------------------------------------------------------------
extern PACKAGE TForm1 *Form1;
//---------------------------------------------------------------------------
#endif
Unit1.cpp
//---------------------------------------------------------------------------
#include <vcl.h>
#include <fstream.h>
#include "math.h"
#pragma hdrstop
#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
HANDLE Thread1, Thread2; // оголошення дескрипторів потоків
DWORD ThreadFunc1(LPVOID lParam); // оголошення потокових функцій
DWORD ThreadFunc2(LPVOID lParam);
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button2Click(TObject *Sender) // запис у файл
{
Memo1->Lines->SaveToFile("c:\\zap.txt");
}
//---------------------------------------------------------------------------
DWORD ThreadFunc1(LPVOID lParam) // табулювання функції в потоці
{
double tpi=6.28; // 2pi
double h=tpi/50; // крок табуляції
for (double x=0; x<=tpi; x+=h)
{
double count=(1-cos(x))*cos(x); // обчислення значення виразу
Form1->Memo1->Lines->Add("x= "); // вивід у Memo поле
Form1->Memo1->Lines->Add(x);
Form1->Memo1->Lines->Add("y= ");
Form1->Memo1->Lines->Add(count);
}
}
void __fastcall TForm1::Button1Click(TObject *Sender)
{
DWORD count1,ThreadId;
if (Button1->Tag==0)
{
Thread1=CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE)ThreadFunc1,
&count1, 0, &ThreadId);
if (Thread1!=NULL )
{Button1->Tag=1; }
}
else
{
TerminateThread(Thread1,1);
Button1->Tag=0;
}
}
//---------------------------------------------------------------------------
Результат роботи програми:
/
Файл результату: