Лабораторная работа №6. Визуальное программирование

Постановка задачи

Выполнить задание лабораторной работы №3 с использованием средств визуального программирования, т.е. расчет площадей прямоугольника, треугольника и круга с проверкой корректности ввода данных и возможности вычислений. Для выбора типа фигуры использовать управляющий элемент «Группа переключателей» (класс TRadioGroup) с тремя вариантами выбора, для задания параметров каждой фигуры использовать поля ввода (класс TEdit), текстовые надписи выполнить с помощью меток (класс TLabel). Необходимо реализовать две кнопки (класс TButton): «Рассчитать площадь» и «Выход», выполняющие соответствующие действия.

Также на форме должен присутствовать элемент «Изображение» (класс TImage) для отображения вида фигур. При расчете площади в этом элементе должно выводиться изображение соответствующей фигуры в соответствии с введенными параметрами.

 

Математическая модель

, где p – полупериметр, .

 

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

Координаты углов прямоугольника для процедуры Rectangle Координаты углов описывающего эллипс прямоугольника для процедуры Ellipse Координаты точек для процедур MoveTo и LineTo   ,

 

Основная форма программы

 

Основные свойства формы

Name = 'MainForm'

Caption = 'Лабораторная работа №6'

 

Элементы формы

Группа переключателей:

Figure: TRadioGroup

Caption = ‘Фигура’

Items = ('Прямоугольник', 'Треугольник', 'Круг')

 

Метки:

Label1: TLabel

Caption = 'Параметры фигуры'

 

Label2: TLabel

Caption = 'a'

 

Label3: TLabel

Caption = 'b'

Поля ввода:

ra: TEdit

rb: TEdit

ta: TEdit

tb: TEdit

tc: TEdit

cr: TEdit

 

Кнопки:

Button1: TButton

Caption = ‘Рассчитать площадь’

OnClick = Button1Click

 

Button2: TButton

Caption = ‘Выход’

OnClick = Button2Click

 

Изображение:

Image: TImage

Transparent = True

 

Текст программы

unit Main;

interface

uses

Windows, Messages, SysUtils, Classes, Graphics,

Controls, Forms, Dialogs, StdCtrls, ExtCtrls;

type

TMainForm = class(TForm)

Figure: TRadioGroup;

ra: TEdit;

rb: TEdit;

ta: TEdit;

tb: TEdit;

tc: TEdit;

cr: TEdit;

Label1: TLabel;

Label2: TLabel;

Label3: TLabel;

Label4: TLabel;

Label5: TLabel;

Label6: TLabel;

Label7: TLabel;

Button1: TButton;

Button2: TButton;

Image: TImage;

procedure Button1Click(Sender: TObject);

procedure Button2Click(Sender: TObject);

private

{ Private declarations }

public

{ Public declarations }

end;

var

MainForm: TMainForm;

implementation

{$R *.DFM}

procedure TMainForm.Button1Click(Sender: TObject);

var

a,b,c,r,p,s,h:Real;

begin

with Image.Picture.Bitmap do

begin

Width:=0; { Для очистки изображения }

Height:=0;

Width:=Image.Width;

Height:=Image.Width;

end;

 

case Figure.ItemIndex of

0:begin

a:=StrToFloat(ra.Text);

b:=StrToFloat(rb.Text);

if (a<=0) or (b<=0) then

ShowMessage('Некорректный ввод')

else

begin

ShowMessage('Площадь прямоугольника равна '+

FloatToStr(a*b));

with Image.Picture.Bitmap.Canvas do

Rectangle(0,0,Round(a),Round(b));

end;

end;

1:begin

a:=StrToFloat(ta.Text);

b:=StrToFloat(tb.Text);

c:=StrToFloat(tc.Text);

if (a<=0) or (b<=0) or (c<=0) then

ShowMessage('Некорректный ввод')

else

if (a+b<=c) or (b+c<=a) or (a+c<=b) then

ShowMessage('Треугольник не существует')

else

begin

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

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

ShowMessage('Площадь треугольника равна '+

FloatToStr(s));

with Image.Picture.Bitmap.Canvas do

begin

MoveTo(0,0);

LineTo(Round(a),0);

h:=2*s/a;

LineTo(Round(Sqrt(Sqr(c)-Sqr(h))),

Round(h));

LineTo(0,0);

end;

end;

end;

2:begin

r:=StrToFloat(cr.Text);

if r<=0 then

ShowMessage('Некорректный ввод')

else

begin

ShowMessage('Площадь круга равна '+

FloatToStr(Pi*Sqr(r)));

with Image.Picture.Bitmap.Canvas do

Ellipse(0,0,Round(2*r),Round(2*r));

end;

end;

end;

end;

 

procedure TMainForm.Button2Click(Sender: TObject);

begin

Close;

end;

end.

 

Библиографический список

1. Архангельский А.Я. Программирование в Delphi 5. 2-е изд., перераб. и доп. М.: Бином, 2000.

2. Ахо А., Хопкрофт Дж., Ульман Дж. Построение и анализ вычислительных алгоритмов. М.: Мир, 1979.

3. Бондарев В.М., Рублинецкий В.И., Качко Е.Г. Основы программирования. Харьков: Фолио; Ростов-на-Дону: Феникс, 1997.

4. Ершов А.П. Введение в теоретическое программирование. М.: Наука, 1977.

5. Информатика. Язык Паскаль: Лабораторный практикум / Под ред. Б.С. Григорьева. М.: СПбГТУ, 2002.

6. Кнут Д. Искусство программирования для ЭВМ. М.: Мир, 1977. Т.1.

7. Кнут Д. Искусство программирования для ЭВМ. М.: Мир, 1977. Т.2.

8. Культин Н.Б. Программирование в Turbo Pascal 7.0 и Delphi: Самоучитель. 2-е изд. СПб; М.; Дюссельдорф; Киев: BHV, 2000.

9. Новиков Ф.А. Дискретная математика для программистов. СПб: Питер, 2000.

10. Фихтенгольц Г.М. Курс дифференциального и интегрального исчисления, т. 2. М.: Наука, 1966.