}
}
else
if(array[i+1]> array[j])
{
temp = array[i+1];
array[i+1] = array[j];
array[j] = temp;
}
}
}
}
//-------------------------удаление элемента из пирамиды ----------------------------------------
void delElem(int t)
{
int f;
for(int i=0; i<n; i++)
{
if(array[i]==t && i==0)
{
array[0]=array[n-1];
n=n-1;
break;
}
else
{
ShowMessage("This element is not a root or this element is not found");
break;
}
}
}
//-------------------функция очищения области рисования пирамиды -------------------------------
void Re(void)
{
FormHeapTree->ImageTree->Canvas->FillRect(Rect(0,0,FormHeapTree->ImageTree->Width,FormHeapTree->ImageTree->Height));
}
//-------------------------Функция вывода пирамиды на экран -------------------------------------------
void showTree()
{
Re();
int x = FormHeapTree->ImageTree->Width/2;
int y = 20;
int pr = 20;//расстояние между элементрами
if(n!=0)
{
int m = log(n)/log(2);
FormHeapTree->ImageTree->Canvas->Ellipse(x,20,x+30,50);
FormHeapTree->ImageTree->Canvas->TextOutA(x+10,y+5,array[0]);
//левое поддерово снизу вверх
for(int i=m; i>0; i--)
{
int q=pow(2,i-1)-1;
for(int j=pow(2,i)-1; j<=pow(2,i)+pow(2,i-1)-2; j++)
if(j<n)
{
FormHeapTree->ImageTree->Canvas->Ellipse(x-q*pr*2-pr-5, y+i*50-5, x-q*pr*2-pr+30-5, y+i*50-5+30);
FormHeapTree->ImageTree->Canvas->TextOutA(x-q*pr*2-pr+5, y+i*50, array[j]);
q--;
}
//правое поддерево
q=0;
for(int j = pow(2,i)+pow(2,i-1)-1; j<=pow(2,i+1)-2; j++)
if(j<n)
{
FormHeapTree->ImageTree->Canvas->Ellipse(x+q*pr*2+pr-5, y+i*50-5, x+q*pr*2+pr+30-5, y+i*50-5+30);
FormHeapTree->ImageTree->Canvas->TextOutA(x+q*pr*2+pr+5, y+i*50, array[j]);
q++;
}
pr*=2;
}
}
}
//---------------------------------------------------------------------------
__fastcall TFormHeapTree::TFormHeapTree(TComponent* Owner)
: TForm(Owner)
{
}
//---------------------------------функция вывода массива на экран ------------------------------------
void ShowArray()
{
FormHeapTree->LabelArray->Caption = "";
for(int i=0; i<n; i++)
FormHeapTree->LabelArray->Caption = FormHeapTree->LabelArray->Caption + " " + array[i];
}
//--------------------функция добавления элемента в пирамиду---------------------------------------
void __fastcall TFormHeapTree::SpeedButtonAddClick(TObject *Sender)
{
if(this->EditElem->Text != "")
{
try
{
int temp = StrToInt(this->EditElem->Text);
array[n] = temp;
this->LabelArray->Caption = this->LabelArray->Caption + " " + array[n];
n++;
}
catch(EConvertError &e)
{
ShowMessage("Please enter only numbers.");
}
}
else
ShowMessage("Please enter element!");
}
//----------------------функция непосредственно удаления элемента из пирамиды -----------
void __fastcall TFormHeapTree::SpeedButtonDeleteClick(TObject *Sender)
{
if(this->EditElem->Text != "")
{
try
{
int temp = StrToInt(this->EditElem->Text);
delElem(temp);
this->LabelArray->Caption = "";
ShowArray();
}
catch(EConvertError &e)
{
ShowMessage("Please enter only numbers.");
}
}
else
ShowMessage("Please enter element!");
}
//----------------- функция вывода пирамиды на экран ------------------------------------------------
void __fastcall TFormHeapTree::SpeedButtonShowTreeClick(TObject *Sender)
{
if(RadioButtonMin->Checked == true || RadioButtonMax->Checked == true)
{
if(RadioButtonMin->Checked)
{
// RadioButtonMax->Checked = false;
heap_min();
ShowArray();;
}
if(RadioButtonMax->Checked)
{
//RadioButtonMin->Checked = false;
heap_max();
ShowArray();
}
showTree();
}
else
ShowMessage("Please choose type of heap-tree.");
}
//------------ функция использоания данных программы-----------------------------------------------
void __fastcall TFormHeapTree::ButtonProgDataClick(TObject *Sender)
{
makeArray();
ShowArray();;
//---------------------------------------------------------------------------