czwartek, 16 października 2025

Discrete knapsack problem - C++ Builder

 



void __fastcall TForm1::alg_Greedy(float a, float x[3], float y[3], float z[3])
{
double temp=a;
const int k=3;
int i;
for(i=0;i<k;i++)
{
if(x[i]>temp)
break;
z[i]=1;
temp-=x[i];
if(i<k)
z[i]=temp/x[i];
}
}
void __fastcall TForm1::FormCreate(TObject *Sender)
{

 Edit1->Text="";
 Edit2->Text="";
 Edit3->Text="";
 Edit4->Text="";
 Edit5->Text="";
 Edit6->Text="";
 Edit7->Text="";
 Edit8->Text="";
 Edit9->Text="";
 Edit10->Text="";
 Label1->Caption="Size = ";
 Label2->Caption="x[0]";
 Label3->Caption="x[1]";
 Label4->Caption="x[2]";
 Label5->Caption="y[0]";
 Label6->Caption="y[1]";
 Label7->Caption="y[2]";
 Label8->Caption="z[0]";
 Label9->Caption="z[1]";
 Label10->Caption="z[2]";
 Button1->Caption="&RUN";

}
//---------------------------------------------------------------------------

void __fastcall TForm1::Button1Click(TObject *Sender)
{
 ListBox1->Items->Clear();
 const int k=3; int i;
 float Size, Sum;
 float x[k]; float y[k]; float z[k];
 Sum=0.0;
 Size=StrToFloat(Edit1->Text);
 x[0]=StrToFloat(Edit2->Text);
 x[1]=StrToFloat(Edit2->Text);
 x[2]=StrToFloat(Edit4->Text);
 y[0]=StrToFloat(Edit5->Text);
 y[1]=StrToFloat(Edit6->Text);
 y[2]=StrToFloat(Edit7->Text);
 z[0]=StrToFloat(Edit8->Text);
 z[1]=StrToFloat(Edit9->Text);
 z[2]=StrToFloat(Edit10->Text);
 alg_Greedy(Size,x,y,z);
 for(i=0;i<k;Sum+=z[i]*y[i],i++)
 {
ListBox1->Items->Add(IntToStr(i)+")  "+FloatToStr(x[i])+"   "+FloatToStr(y[i])+"   "+
FloatToStr(z[i])+"    \n");
 }
 Label11->Caption="Total: "+FloatToStr(Sum);

}


niedziela, 5 października 2025

CreateThread, SuspendThread, ResumeThread - C++ Builder



#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
HANDLE ha;
TColor draw_Color(int c)
{
TColor value;
switch(c)
{
case 0: value=clBlue; break;
case 1: value=clRed; break;
case 2: value=clGreen; break;
case 3: value=clYellow; break;
case 4: value=clBlack; break;
case 5: value=clTeal; break;
case 6: value=clPurple; break;
case 7: value=clLime;break;
case 8: value=clOlive; break;
case 9: value=clMaroon;break;
default: value=clWhite;break;
}

return value;
}

DWORD WINAPI TProc01(void* pr)
{
int ma=3;
int cl1;
int cl2;
int x_min,y_min,x_0,y_0,x_max,y_max,shape;
HANDLE MainWnd(pr);
x_min=y_min=ma;
x_max=Form1->Width-ma;
y_max=Form1->Height-ma;
x_0=Form1->Width/2;
y_0=Form1->Height/2;
int a1,a2,a3,a4;
while(true) {
shape=rand()%3;
if(shape==0)
{
cl1=rand()%10;
cl2=rand()%10;
Form1->Canvas->Pen->Color=draw_Color(cl1);
Form1->Canvas->Brush->Color=draw_Color(cl2);
a1=rand()%x_0+x_min;
a2=rand()%y_0+y_min;
a3=rand()%x_0+x_0-ma;
a4=rand()%y_0+y_0-ma;
Form1->Canvas->MoveTo(a1,a2);
Form1->Canvas->LineTo(a3,a4);
}
else if(shape==1)
{
cl1=rand()%10;
cl2=rand()%10;
Form1->Canvas->Pen->Color=draw_Color(cl1);
Form1->Canvas->Brush->Color=draw_Color(cl2);
a1=rand()%x_0+x_min;
a2=rand()%y_0+y_min;
a3=rand()%x_0+x_0-ma;
a4=rand()%y_0+y_0-ma;
Form1->Canvas->Ellipse(a1,a2,a3,a4);
}
else
{
cl1=rand()%10;
cl2=rand()%10;
Form1->Canvas->Pen->Color=draw_Color(cl1);
Form1->Canvas->Brush->Color=draw_Color(cl2);
a1=rand()%x_0+x_min;
a2=rand()%y_0+y_min;
a3=rand()%x_0+x_0-ma;
a4=rand()%y_0+y_0-ma;
Form1->Canvas->Rectangle(a1,a2,a3,a4);
}
}



return 0;


}

//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{

 DWORD dw;
 ha=CreateThread(NULL,0,TProc01,this,CREATE_SUSPENDED,&dw);
 srand(time(NULL));
 if(!ha)
 {
ShowMessage("The thread could not be started");
Application->Terminate();
 }

}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
 ResumeThread(ha);
 Button1->Enabled=false;
 Button2->Enabled=true;

}
//---------------------------------------------------------------------------

void __fastcall TForm1::Button2Click(TObject *Sender)
{
 SuspendThread(ha);
 Button1->Enabled=true;
 Button2->Enabled=false;

}