
Добавил:
Tushkan
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз:
Предмет:
Файл:Лабораторные работы / Захаров / LAB 5 / Unit1
.cpp//---------------------------------------------------------------------------
#include <vcl.h>
#pragma hdrstop
#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm2 *Form2;
AnsiString St, aFileName;
int B1[30], A1[30];
int Kstart, Kend, Nstart, Nend, i,k,N, i1, j1, Dub;
//---------------------------------------------------------------------------
__fastcall TForm2::TForm2(TComponent* Owner)
: TForm(Owner)
{
aFileName = "";
Button2->OnClick = imOpenClick;
Button3->OnClick = imSaveClick;
}
//---------------------------------------------------------------------------
void __fastcall TForm2::imOpenClick(TObject *Sender)
{
OpenDialog1->FileName = "*.txt";
OpenDialog1->Options<<ofPathMustExist<<ofFileMustExist;
if (OpenDialog1->Execute())
{
RichEdit1->Lines->Clear();
RichEdit1->Lines->LoadFromFile(OpenDialog1->FileName);
aFileName=OpenDialog1->FileName;
}
}
//---------------------------------------------------------------------------
void __fastcall TForm2::imSaveClick(TObject *Sender)
{
aFileName = "Результат";
SaveDialog1->FileName = aFileName;
if (SaveDialog1->Execute())
{
switch (SaveDialog1->FilterIndex)
{
case 1 : aFileName+=".txt"; break;
case 2 : aFileName+=".doc"; break;
}
RichEdit1->Lines->SaveToFile (aFileName);
}
}
//---------------------------------------------------------------------------
void __fastcall TForm2::EditOnChange(TObject *Sender)
{
if (Edit1->Text=="" || Edit2->Text=="" || Edit3->Text=="" || Edit4->Text=="")
Button1->Enabled=false;
else if (StrToInt(Edit1->Text)>StrToInt(Edit2->Text) || StrToInt(Edit3->Text)>StrToInt(Edit4->Text) ||
StrToInt(Edit2->Text)>StrToInt(Edit3->Text))
Button1->Enabled=false;
else
Button1->Enabled=true;
}
//---------------------------------------------------------------------------
inline long double TForm2::fac (double n) { return (n<2) ? 1 : n*fac(n-1);}
//---------------------------------------------------------------------------
long double TForm2::C (double n1, double k1)
{
long double S1=fac(n1), S2=fac(k1), S3=fac(n1-k1);
return S1/(S2*S3);
}
//---------------------------------------------------------------------------
long double TForm2::A (double n1, double k1)
{
long double S1=fac(n1), S2=fac(n1-k1);
return S1/S2;
}
//---------------------------------------------------------------------------
long double TForm2::Cp(double n1, double k1)
{
long double S1=fac(n1+k1-1), S2=fac(k1), S3=fac(n1-1);
return S1/(S2*S3);
}
//---------------------------------------------------------------------------
long double TForm2::Ap(double n1, double k1)
{
long double S=1;
if (k1!=0)
for (int i = 1; i <= k1; i++)
S*=n1;
return S;
}
//---------------------------------------------------------------------------
int TForm2::ChangeC (int X[], int N1, int k1, int S1)
{
if (S1==1 && X[S1]==(N1-k1+1))
return 0;
else if (X[S1]!=(N1-k1+S1))
{
X[S1]++;
for (int f = (S1+1); f <= k1; f++)
X[f]=X[f-1]+1;
return 1;
}
else return ChangeC (X,N1,k1,S1-1);
}
//---------------------------------------------------------------------------
void __fastcall TForm2::Button1Click(TObject *Sender)
{
Kstart=StrToInt(Edit1->Text);
Kend=StrToInt(Edit2->Text);
Nstart=StrToInt(Edit3->Text);
Nend=StrToInt(Edit4->Text);
RichEdit1->Lines->Clear();
RichEdit1->SelAttributes->Color=clBlue;
RichEdit1->Paragraph->Alignment=taCenter;
RichEdit1->Lines->Add("Лабораторная работа № 5");
RichEdit1->Paragraph->Alignment=taLeftJustify;
RichEdit1->Lines->Add("");
St="n = "+Edit3->Text;
for (i = Nstart+1; i <= Nend; i++)
St=St+", "+IntToStr(i);
RichEdit1->Lines->Add(St);
St="k = "+Edit1->Text;
for (i = Kstart+1; i <= Kend; i++)
St=St+", "+IntToStr(i);
RichEdit1->Lines->Add(St);
ProgressBar1->Max=(Nend-Nstart+1)*(Kend-Kstart+1)*2;
ProgressBar1->Position=0;
RichEdit1->Lines->Add("");
if (CheckBox1->Checked)
RichEdit1->Lines->Add("Число различных сочетаний:");
for (N = Nstart; N <= Nend; N++)
for (k = Kstart; k <= Kend ; k++)
{
Label1->Caption="Генерация сочетаний для n = "+IntToStr(N)+", k = "+IntToStr(k);
Label1->Refresh();
if (CheckBox1->Checked)
{
RichEdit1->SelAttributes->Color=clBlue;
RichEdit1->Lines->Add("C("+FloatToStr(N)+","+IntToStr(k)+") = "+FloatToStrF(C(N,k),ffGeneral,15,0));
}
if (k && CheckBox5->Checked)
{
GroupBox2->Visible=true;
for (i = 1; i <= k; i++) B1[i]=i;
St="";
for (i = 1; i <= k; i++)
St = (B1[i]<10) ? St+IntToStr(B1[i])+" " : St+IntToStr(B1[i])+" ";
RichEdit1->Lines->Add(St);
for ( ; ChangeC (B1,N,k,k) ; )
{
St="";
for (i = 1; i <= k; i++)
St = (B1[i]<10) ? St+IntToStr(B1[i])+" " : St+IntToStr(B1[i])+" ";
RichEdit1->Lines->Add(St);
}
}
ProgressBar1->Position=ProgressBar1->Position+1;
}
RichEdit1->Lines->Add("");
if (CheckBox2->Checked)
RichEdit1->Lines->Add("Число различных размещений:");
for (N = Nstart; N <= Nend; N++)
for (k = Kstart; k <= Kend ; k++)
{
Label1->Caption="Генерация размещений для n = "+IntToStr(N)+", k = "+IntToStr(k);
Label1->Refresh();
if (CheckBox2->Checked)
{
RichEdit1->SelAttributes->Color=clBlue;
RichEdit1->Lines->Add("A("+FloatToStr(N)+","+IntToStr(k)+") = "+FloatToStrF(A(N,k),ffGeneral,30,0));
}
if (k && CheckBox6->Checked)
{
GroupBox2->Visible=true;
bool fl;
for (i = 1; i <= k; i++) { B1[i]=i; A1[i]=i; }
do
{
St="";
for (i = 1; i <= k; i++)
St = (B1[A1[i]]<10) ? St+IntToStr(B1[A1[i]])+" " : St+IntToStr(B1[A1[i]])+" ";
RichEdit1->Lines->Add(St);
i1=k-1;
while (i1>0 && A1[i1]>A1[i1+1]) i1--;
if (i1>0)
{
j1=i1+1;
while (j1<k && A1[j1+1]>A1[i1]) j1++;
Dub=A1[i1];
A1[i1]=A1[j1];
A1[j1]=Dub;
for (j1 = i1+1; j1 <= ((k+i1)/2); j1++)
{
Dub=A1[j1];
A1[j1]=A1[k-j1+i1+1];
A1[k-j1+i1+1]=Dub;
}
fl=true;
}
else
fl=false;
}
while (fl);
for ( ; ChangeC (B1,N,k,k) ; )
{
St="";
for (i = 1; i <= k; i++) A1[i]=i;
do
{
St="";
for (i = 1; i <= k; i++)
St = (B1[A1[i]]<10) ? St+IntToStr(B1[A1[i]])+" " : St+IntToStr(B1[A1[i]])+" ";
RichEdit1->Lines->Add(St);
i1=k-1;
while (i1>0 && A1[i1]>A1[i1+1]) i1--;
if (i1>0)
{
j1=i1+1;
while (j1<k && A1[j1+1]>A1[i1]) j1++;
Dub=A1[i1];
A1[i1]=A1[j1];
A1[j1]=Dub;
for (j1 = i1+1; j1 <= ((k+i1)/2); j1++)
{
Dub=A1[j1];
A1[j1]=A1[k-j1+i1+1];
A1[k-j1+i1+1]=Dub;
}
fl=true;
}
else
fl=false;
}
while (fl);
}
}
ProgressBar1->Position=ProgressBar1->Position+1;
}
if (CheckBox3->Checked)
{
RichEdit1->Lines->Add("");
RichEdit1->Lines->Add("Число различных сочетаний с повторениями:");
for (N = Nstart; N <= Nend; N++)
for (k = Kstart; k <= Kend ; k++)
{
RichEdit1->SelAttributes->Color=clBlue;
RichEdit1->Lines->Add("С^("+FloatToStr(N)+","+IntToStr(k)+") = "+FloatToStrF(Cp(N,k),ffGeneral,30,0));
}
RichEdit1->SelAttributes->Color=clBlack;
}
if (CheckBox4->Checked)
{
RichEdit1->Lines->Add("");
RichEdit1->Lines->Add("Число различных размещений с повторениями:");
for (N = Nstart; N <= Nend; N++)
for (k = Kstart; k <= Kend ; k++)
{
RichEdit1->SelAttributes->Color=clBlue;
RichEdit1->Lines->Add("A^("+FloatToStr(N)+","+IntToStr(k)+") = "+FloatToStrF(Ap(N,k),ffGeneral,30,0));
}
RichEdit1->SelAttributes->Color=clBlack;
}
GroupBox2->Visible=false;
Button3->Enabled=true;
Button4->Enabled=true;
}
//---------------------------------------------------------------------------
void __fastcall TForm2::Form1OnCanResize(TObject *Sender, int &NewWidth, int &NewHeight, bool &Resize) { if (NewWidth<655 || NewHeight<669) Resize=false; }
//---------------------------------------------------------------------------
void __fastcall TForm2::Button5Click(TObject *Sender) { WinExec("hh help.chm",SW_RESTORE); }
//---------------------------------------------------------------------------
void __fastcall TForm2::Button6Click(TObject *Sender) { Form2->Close(); }
//---------------------------------------------------------------------------
void __fastcall TForm2::Button2Click(TObject *Sender)
{
OpenDialog1->FileName = "*.txt";
OpenDialog1->Options<<ofPathMustExist<<ofFileMustExist;
if (OpenDialog1->Execute())
{
RichEdit1->Lines->Clear();
RichEdit1->Lines->LoadFromFile(OpenDialog1->FileName);
aFileName=OpenDialog1->FileName;
}
}
//---------------------------------------------------------------------------
void __fastcall TForm2::Button3Click(TObject *Sender)
{
aFileName = "Результат";
SaveDialog1->FileName = aFileName;
if (SaveDialog1->Execute())
{
switch (SaveDialog1->FilterIndex)
{
case 1 : aFileName+=".txt"; break;
case 2 : aFileName+=".doc"; break;
}
RichEdit1->Lines->SaveToFile (aFileName);
}
}
//---------------------------------------------------------------------------
void __fastcall TForm2::Button4Click(TObject *Sender)
{
if (PrintDialog1->Execute())
RichEdit1->Print("Печать");
}
//---------------------------------------------------------------------------