Лабораторная работа №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.