- •Министерство образования и науки Российской Федерации Курский государственный технический университет
- •Задание №1 (Delphi)
- •Код программы
- •Interface
- •Implementation
- •I:integer;
- •I:integer;
- •Задание №2 (Delphi)
- •Код программы
- •Interface
- •I,j,q:integer;
- •I,j,q:integer;
- •Код программы
- •Void fCalcParam(AnsiString s) //обсчёт параметров
- •Void fShowMas() //Вывод массива
- •Void __fastcall tfMain::BtWorkClick(tObject *Sender)
- •Void __fastcall tfMain::BtClearClick(tObject *Sender)
- •Код программы
- •Void __fastcall tForm1::pbMainPaint(tObject *Sender)
- •Void __fastcall tForm1::BtWorkClick(tObject *Sender)
- •Void __fastcall tForm1::pbMainMouseDown(tObject *Sender,
- •Void __fastcall tForm1::BtAutoVClick(tObject *Sender)
- •Void __fastcall tForm1::Button1Click(tObject *Sender)
Void fCalcParam(AnsiString s) //обсчёт параметров
{
int q=0,l=fQuantityComma(s);
for (int i=0;i<l;i++)
{
if (i==0) paramw[0][i]=q+1;
else paramw[0][i]=paramw[0][i-1]+q;
q=0;
q=q+s.Pos(',');
s.Delete(paramw[0][i],q);
paramw[1][i]=q;
}
}
//---------------------------------------------------------------------------
Void fShowMas() //Вывод массива
{
for (int i=0;i<l;i++)
{
FMain->Label1->Caption=FMain->Label1->Caption+" /"+paramw[0][i]+", "+paramw[1][i]+"/ ";
}
FMain->Label1->Caption=FMain->Label1->Caption+" # ";
}
//---------------------------------------------------------------------------
AnsiString fChangeStr(AnsiString s, int i) //меняем 2 рядом стоящие
{
AnsiString s1,s2;
s1=s.SubString(paramw[0][i],paramw[1][i]);
s2=s.SubString(paramw[0][i+1],paramw[1][i+1]);
if (AnsiCompareText(s1,s2)<0)
{//3
s.Delete(paramw[0][i],paramw[1][i]+paramw[1][i+1]);
s.Insert(s2,paramw[0][i]);
s.Insert(s1,paramw[0][i]+paramw[1][i+1]);
j++;
}
return s;
}
//---------------------------------------------------------------------------
Void __fastcall tfMain::BtWorkClick(tObject *Sender)
{
if (fFindBlank(EdVvod->Text)==true)
ShowMessage("найдены недопустимые пробелы");
else
if (fCheckLength(EdVvod->Text)==false)
ShowMessage("несоответствие требований ввода");
else
{
//ввод слов
AnsiString Vvod=EdVvod->Text;
Vvod[Vvod.Pos('.')]=',';
l=fQuantityComma(Vvod);
paramw=new int *[2];
for (int i=0;i<2;i++)
paramw[i]=new int[l];
bool fl=true;
while (fl)
{//1
fl=false; j=0;
fCalcParam(Vvod);
for (int i=0;i<l-1;i++)
{//2
Vvod=fChangeStr(Vvod,i);
fCalcParam(Vvod);
if (j>0) fl=true;
}//2
}//1
LbOtvet->Caption=Vvod;
}
}
//---------------------------------------------------------------------------
Void __fastcall tfMain::BtClearClick(tObject *Sender)
{
EdVvod->Text="";
LbOtvet->Caption="";
}
//---------------------------------------------------------------------------
Задание №4 (С++)
Даны два множества точек на плоскости. Найти центр и радиус окружности, проходящей через 3 точки первого множества и содержащей строго внутри себя M точек второго множества.
Код программы
//---------------------------------------------------------------------------
#include <vcl.h>
#include <math.h>
#pragma hdrstop
#include "UnMain.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
struct sCentr
{
float x;
float y;
float r;
};
//---------------------------------------------------------------------------
int xn1[2][3], mn2, vm;
int **xn2;
sCentr centr;
//---------------------------------------------------------------------------
void fFind_X_Y_R(); //находит х0 у0 и радиус
bool fCheckOccurence(); //возвращает true , если число вхождений равно vm
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
}
//---------------------------------------------------------------------------
void __fastcall TForm1::BtVvtClick(TObject *Sender)
{
mn2=StrToInt(EdVn2->Text);
vm=StrToInt(EdVm->Text);
xn2=new int *[2];
for (int i=0;i<2;i++)
xn2[i]=new int[mn2];
SGN2->RowCount=mn2+1;
GBkt->Enabled=false;
GBKoor->Visible=true;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::FormCreate(TObject *Sender)
{
SGN1->Cells[0][0]="X";
SGN1->Cells[1][0]="Y";
SGN2->Cells[0][0]="X";
SGN2->Cells[1][0]="Y";
}
//---------------------------------------------------------------------------
void fFind_X_Y_R() //находит х0 у0 и радиус
{
float s1=pow(pow(xn1[0][1]-xn1[0][0],2)+pow(xn1[1][1]-xn1[1][0],2),0.5);
float s2=pow(pow(xn1[0][2]-xn1[0][1],2)+pow(xn1[1][2]-xn1[1][1],2),0.5);
float s3=pow(pow(xn1[0][2]-xn1[0][0],2)+pow(xn1[1][2]-xn1[1][0],2),0.5);
float p=(s1+s2+s3)/2;
float s=pow((p*(p-s1)*(p-s2)*(p-s3)),0.5);
centr.r=int(s1*s2*s3)/int(4*s);
centr.y=int(xn1[0][1]*xn1[0][2]*xn1[0][2]-xn1[0][0]*xn1[0][2]*xn1[0][2]-xn1[0][1]*xn1[0][0]*xn1[0][0]+xn1[0][0]*xn1[0][0]*xn1[0][0]+xn1[0][1]*xn1[1][2]*xn1[1][2]-xn1[0][0]*xn1[1][2]*xn1[1][2]-xn1[0][1]*xn1[1][0]*xn1[1][0]-xn1[0][2]*xn1[0][1]*xn1[0][1]+xn1[0][0]*xn1[0][1]*xn1[0][1]+xn1[0][2]*xn1[0][0]*xn1[0][0]-xn1[0][0]*xn1[0][0]*xn1[0][0]-xn1[0][2]*xn1[1][1]*xn1[1][1]+xn1[0][0]*xn1[1][1]*xn1[1][1]+xn1[0][2]*xn1[1][0]*xn1[1][0])/
(2*((xn1[0][2]-xn1[0][0])*(xn1[1][0]-xn1[1][1])+(xn1[0][0]-xn1[0][1])*(xn1[1][0]-xn1[1][2])));
centr.x=int(pow((centr.r*centr.r-pow((centr.y-xn1[1][0]),2)),0.5)+xn1[0][0]);
}
//---------------------------------------------------------------------------
bool fCheckOccurence() //возвращает true , если число вхождений равно vm
{
int q=0;
for (int i=0;i<mn2;i++)
if (pow((pow((centr.x-xn2[0][i]),2)+pow((centr.y-xn2[1][i]),2)),0.5)<centr.r)
{
q=q+1;
}
if (q==vm)
return true;
else
return false;
}
//---------------------------------------------------------------------------