Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
отчёт о выч практике.docx
Скачиваний:
1
Добавлен:
18.09.2019
Размер:
30.07 Кб
Скачать

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;

}

//---------------------------------------------------------------------------