Событийно-управляемые программы: Методические указания к разработке проектов в DELPHI, страница 10

pl3.Visible:=False;

// вычисляем длины сторон треугольника

with StringGrid1 do

begin

a:=sqrt(sqr(StrToFloat(Cells[1,2])-StrToFloat(Cells[1,3]))

 +sqr(StrToFloat(Cells[2,2])-StrToFloat(Cells[2,3])));

b:=sqrt(sqr(StrToFloat(Cells[1,1])-StrToFloat(Cells[1,3]))

 +sqr(StrToFloat(Cells[2,1])-StrToFloat(Cells[2,3])));

c:=sqrt(sqr(StrToFloat(Cells[1,1])-StrToFloat(Cells[1,2]))

 +sqr(StrToFloat(Cells[2,1])-StrToFloat(Cells[2,2])));

end;

// по формуле Герона находим его площадь

p:=(a+b+c)/2;

s:=sqrt(p*(p-a)*(p-b)*(p-c));

// используя формулы из тригонометрии

// находим величины углов

ugolA:=2*arctan(sqrt((p-b)*(p-c)/(p*(p-a))));

ugolB:=2*arctan(sqrt((p-a)*(p-c)/(p*(p-b))));

ugolC:=2*arctan(sqrt((p-a)*(p-b)/(p*(p-c))));

// выводим результаты на панель

pl2lb2.Caption:=FloatToStrF(s,ffFixed,6,2);

gb1lb4.Caption:=FloatToStrF(a,ffFixed,6,2);

gb1lb5.Caption:=FloatToStrF(b,ffFixed,6,2);

gb1lb6.Caption:=FloatToStrF(c,ffFixed,6,2);

gb2lb4.Caption:=FloatToStrF(ugolA,ffFixed,4,2);

gb2lb5.Caption:=FloatToStrF(ugolB,ffFixed,4,2);

gb2lb6.Caption:=FloatToStrF(ugolC,ffFixed,4,2);

Перед операторной скобкой begin необходимо добавить раздел описаний.

var   a,b,c,p,s,ugolA,ugolB,ugolC:real;

Остался последний обработчик. Переходим в окно конструктора форм. Щелкаем на пункте меню “Построение”. Набираем строки кода, которые позволят в поле рисунка построить треугольник, задаваемый координатами вершин.

// делаем видимой третью панель

pl1.Visible:=False;

pl2.Visible:=False;

pl3.Visible:=True;

with Image1.Canvas do

begin

// строим оси

MoveTo(10,10); LineTo(10,Image1.Height-10);

LineTo(Image1.Width-10,Image1.Height-10);

// определяем максимальные значения X и Y

maxX:=StrToFloat(StringGrid1.Cells[1,1]);

maxY:=StrToFloat(StringGrid1.Cells[2,1]);

for i:=2 to 3 do

 begin

 if StrToFloat(StringGrid1.Cells[1,i])>maxX then

  maxX:=StrToFloat(StringGrid1.Cells[1,i]);

 if StrToFloat(StringGrid1.Cells[2,i])>maxY then

  maxY:=StrToFloat(StringGrid1.Cells[2,i]);

 end;

// выбираем масштабы по осям

mx:=maxX/(Image1.Width-30);

my:=maxY/(Image1.Height-30);

// определяем координаты точек рисунка

xA:=Round(StrToFloat(StringGrid1.Cells[1,1])/mx);

yA:=Image1.Height-10-Round(StrToFloat(StringGrid1.Cells[2,1])/my);

xB:=Round(StrToFloat(StringGrid1.Cells[1,2])/mx);

yB:=Image1.Height-10-Round(StrToFloat(StringGrid1.Cells[2,2])/my);

xC:=Round(StrToFloat(StringGrid1.Cells[1,3])/mx);

yC:=Image1.Height-10-Round(StrToFloat(StringGrid1.Cells[2,3])/my);

// строим треугольник

Polygon([Point(xA,yA),Point(xB,yB),Point(xC,yC)]);

Перед операторной скобкой begin необходимо добавить раздел описаний.

var   maxX,maxY,mx,my:real;  xA,yA,xB,yB,xC,yC,i:integer;

Теперь можете запускать программу и делать с ней, что Вам захочется. После запуска программы необходимо ввести координаты вершин треугольника в соответствующие ячейки сетки и выбрать пункт меню “Расчеты”. Можно проверить работу программы при выборе любых пунктов меню. Программа должна работать безукоризненно. Если она не работает, проверьте записи всех обработчиков – возможно, Вы допустили ошибку. Когда программа заработает, у Вас появится чувство легкой эйфории. Можно сделать лучше? Прекрасно! За работу, товарищи по DELPHI!

7. КОНСОЛЬНОЕ ПРИЛОЖЕНИЕ

Для того, чтобы не отвлекать достаточно много времени на создание интерфейса программы и сосредоточиться на отработке приемов и технологии программирования различных схем обработки данных могут использоваться консольные приложения

Отметим, что в предыдущем разделе мы описали создание простейшего оконного приложения. Вы вероятно заметили, что конструирование оконной формы отнимает достаточно много времени, затраты которого окупаются приятным пользовательским интерфейсом.

Консольное приложение – это программа, предназначенная для работы в режиме MS DOS, для которой устройством ввода является клавиатура, а устройством вывода – монитор, работающий в режиме отображения символьной информации. Эта программа уже не будет реагировать на различные события так, как предыдущая.