Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
44
Добавлен:
28.06.2014
Размер:
9.66 Кб
Скачать
//---------------------------------------------------------------------------

#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("Печать");
}
//---------------------------------------------------------------------------

Соседние файлы в папке LAB 5
  • #
    28.06.20148.53 Кб42Project1.cbproj
  • #
    28.06.20141.69 Кб42Project1.cbproj.local
  • #
    28.06.2014919 б43Project1.cpp
  • #
    28.06.201411.5 Кб42Project1.res
  • #
    28.06.20149.66 Кб44Unit1.cpp
  • #
    28.06.201410.15 Кб42Unit1.dfm
  • #
    28.06.20142.19 Кб44Unit1.h