- •Содержание
- •Введение
- •Постановка задачи
- •2. Математическая модель задачи
- •3. Структура представления данных
- •4. Программная реализация
- •4.1 Схема и описание алгоритма
- •4.2 Язык (среда) программирования
- •4.3 Структура программы
- •4.3.1 Функциональное назначение процедур
- •4.3.2. Описание процедур
- •4.4. Интерфейс программы
- •5. Тестирование программы
- •В.Фаронов - язык программирования Delphi
- •Н.Б.Культин - Основы программирования в Delphi
- •Приложение б (результаты тестирования программы)
4.4. Интерфейс программы
Интерфейс программы включает следующие элементы:
Формы. Формы – основные визуальные компоненты проекта, но которых располагаются все остальные элементы.
Метки. Метки представляют собой элементы, расположенные на форме и содержащие текст (условия задачи, пояснения и т.п.)
Кнопки. С помощью кнопок осуществляются различные действия – построение графика, переход между формами.
Радиокнопки. С помощью радиокнопок осуществляется выбор одного из трех вариантов начальных условий задачи.
Поля вода. С помощью данных компонентов пользователь программы вводит значения параметров функции, которые зетам присваиваются переменным. Программными средствами обеспечен ввод в эти поля только числовых данных.
Холсты. Данные элементы необходимы для построения графиков функций.
5. Тестирование программы
После запуска программы открывается первая форма с титульным листом, содержащим информацию о работе (Приложение Б, Рисунок 1).
На данной форме имеется кнопка «Далее», после нажатия которой становится видимой форма №2 (Приложение Б, Рисунок 2).
На второй форме расположены элементы Label (в которых описываются условия задачи), радиокнопки (от выбора одной из которых зависят дальнейшие действия программы), кнопки «Далее» и «Назад». Для продолжения работы необходимо выбрать одну из радиокнопок и нажать «Далее». После этого программа, в зависимости от выбранного пункта, отображает одну из форм для построения конечного графика.
На данных формах имеются поля ввода параметров, кнопки «Равномерно» и «Равноускоренно» (для построения графиков равномерного и равноускоренного движения), кнопка «Назад» (для возврата на форму, где осуществляется выбор исходной зависимости) и кнопка «Выход». При вводе всех необходимых параметров, после нажатия кнопки «Равномерно» или «Равноускоренно», программа строит соответствующий график. Если же значение параметра не введено, то выводится сообщение: «Необходимо ввести значение» (Приложение Б, Рисунок 3).
Заключение
Представленная в данной курсовой работе программа позволяет решать задачу построения графиков функций по условиям физической задачи.
В работе выполнены алгоритмы и блок-схемы задач, листинги программы, а также результаты ее тестирования.
Список литературы
В.Фаронов - язык программирования Delphi
Н.Б.Культин - Основы программирования в Delphi
newdelphi.net
cyberforum.ru
Приложения
Приложение А (листинг программы)
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;
type
TForm1 = class(TForm)
Label1: TLabel;
Label2: TLabel;
Label3: TLabel;
Label4: TLabel;
Label5: TLabel;
Button1: TButton;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
uses Unit2;
{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject);
begin
Form1.Visible:=False;
Form2.Visible:=True;
end;
end.
unit Unit2;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;
type
TForm2 = class(TForm)
Label1: TLabel;
Label2: TLabel;
Label3: TLabel;
RadioButton1: TRadioButton;
RadioButton2: TRadioButton;
Button1: TButton;
Button2: TButton;
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form2: TForm2;
implementation
uses Unit1, Unit3, Unit4;
{$R *.dfm}
procedure TForm2.Button1Click(Sender: TObject);
begin
Form2.Visible:=False;
Form1.Visible:=True;
end;
procedure TForm2.Button2Click(Sender: TObject);
begin
begin if RadioButton1.Checked=true then begin Form2.Visible:=False; Form3.Show; end; end;
begin if RadioButton2.Checked=true then begin Form2.Visible:=False; Form4.Show; end; end;
end;
end.
unit Unit3;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;
type
TForm3 = class(TForm)
Label2: TLabel;
Button1: TButton;
Label3: TLabel;
Edit1: TEdit;
Label4: TLabel;
Edit2: TEdit;
Button2: TButton;
Button3: TButton;
Button4: TButton;
Label1: TLabel;
Edit3: TEdit;
procedure Button3Click(Sender: TObject);
procedure Button4Click(Sender: TObject);
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure edit1KeyPress(Sender: TObject; var Key: Char);
procedure edit2KeyPress(Sender: TObject; var Key: Char);
procedure edit3KeyPress(Sender: TObject; var Key: Char);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form3: TForm3;
Edti1, Edti2, Edti3: TEdit;
implementation
uses Unit2;
{$R *.dfm}
function f1(x:real):real;
var V: Real;
begin
v:=StrToFloat(Form3.Edit1.text);
f1:=v*x;
end;
function f2(x2:real):real;
var v0, a: real;
begin
v0:=StrToFloat(Form3.Edit2.text);
a:=StrToFloat(Form3.Edit3.text);
f2:=v0*x2+(a*x2*x2)/2;
end;
procedure TForm3.edit1KeyPress(Sender: TObject; var Key: Char);
begin
case Key of'0'..'9', chr(8):;
else key:=chr(0);
end;
end;
procedure TForm3.edit2KeyPress(Sender: TObject; var Key: Char);
begin
case Key of '0'..'9', chr(8):;
else key:=chr(0);
end;
end;
procedure TForm3.edit3KeyPress(Sender: TObject; var Key: Char);
begin
case Key of '0'..'9', chr(8):;
else key:=chr(0);
end;
end;
procedure TForm3.Button3Click(Sender: TObject);
begin
form3.Visible:=False;
form2.Visible:=True;
end;
procedure TForm3.Button4Click(Sender: TObject);
begin
Application.Terminate;
end;
procedure TForm3.Button1Click(Sender: TObject);
var
leftGr, topGr, rightGr, bottomGr: integer;
x, xmin, xmax, stepx: real;
kx, ky: real;
xGr, yGr, xOrd, yAbs: integer;
n: integer;
begin
if edit1.text='' then MessageDlg('Необходимо ввести значение V', mtWarning, [mbOK], 0)
else
begin
canvas.fillrect(canvas.cliprect);
xmin:=-10;
xmax:=10;
stepx:=0.5;
with ClientRect do
begin
Canvas.Pen.Style:= psSolid;
leftGr:=left+150;
topGr:=top+150;
rightGr:=Right-150;
bottomGr:=bottom-50;
kx:=(rightGr-leftGr)/(xmax-xmin);
ky:=(bottomGr-topGr)/200.0;
xOrd:=(leftGr+rightGr) div 2;
yAbs:=(topGr+bottomGr) div 2;
Canvas.Pen.Color:= clBLACK;
Canvas.Brush.Color:= Form3.Color;
Canvas.MoveTo(leftGr, yAbs);
Canvas.LineTo(rightGr, yAbs);
x:=xmin;
n:=Round((xmax-xmin)/2);
while n>=0 do
begin
xGr:=xOrd+Round(x*kx);
Canvas.MoveTo(xGr, yAbs-5);
Canvas.LineTo(xGr, yAbs+5);
Canvas.TextOut(xGr, yAbs+10, FloatToStr(x));
x:=x+2;
n:=n-1;
end;
Canvas.MoveTo(xOrd, topGr);
Canvas.LineTo(xOrd, bottomGr);
Canvas.Pen.Color:=clBlue;
Canvas.Pen.Width:=3;
xGr:=xOrd+Round(xmin*kx);
yGr:=yAbs-Round(f1(xmin)*ky);
Canvas.MoveTo(xGr,yGr);
x:=xmin+stepx;
n:=Round((xmax-xmin)/stepx)-1;
while n>=0 do
begin
if (x<-0.5) or (x>-0.4) then
begin
xGr:=xOrd+Round(x*kx);
yGr:=yAbs-Round(f1(x)*ky);
Canvas.LineTo(xGr,yGr);
end;
x:=x+stepx;
n:=n-1;
end;
end;
end;
end;
procedure TForm3.Button2Click(Sender: TObject);
var
leftGr2, topGr2, rightGr2, bottomGr2: integer;
x2, xmin2, xmax2, stepx2: real;
kx2, ky2: real;
xGr2, yGr2, xOrd2, yAbs2: integer;
n2: integer;
begin
if edit2.text='' then MessageDlg('Необходимо ввести все значения', mtWarning, [mbOK], 0)
else
if edit3.text='' then MessageDlg('Необходимо ввести все значения', mtWarning, [mbOK], 0)
else
begin
canvas.fillrect(canvas.cliprect);
xmin2:=-10;
xmax2:=10;
stepx2:=0.5;
with ClientRect do
begin
Canvas.Pen.Style:= psSolid;
leftGr2:=left+150;
topGr2:=top+150;
rightGr2:=Right-150;
bottomGr2:=bottom-50;
kx2:=(rightGr2-leftGr2)/(xmax2-xmin2);
ky2:=(bottomGr2-topGr2)/200.0;
xOrd2:=(leftGr2+rightGr2) div 2;
yAbs2:=(topGr2+bottomGr2) div 2;
Canvas.Pen.Color:= clBLACK;
Canvas.Brush.Color:= Form3.Color;
Canvas.MoveTo(leftGr2, yAbs2);
Canvas.LineTo(rightGr2, yAbs2);
x2:=xmin2;
n2:=Round((xmax2-xmin2)/2);
while n2>=0 do
begin
xGr2:=xOrd2+Round(x2*kx2);
Canvas.MoveTo(xGr2, yAbs2-5);
Canvas.LineTo(xGr2, yAbs2+5);
Canvas.TextOut(xGr2, yAbs2+10, FloatToStr(x2));
x2:=x2+2;
n2:=n2-1;
end;
Canvas.MoveTo(xOrd2, topGr2);
Canvas.LineTo(xOrd2, bottomGr2);
Canvas.Pen.Color:=clBlue;
Canvas.Pen.Width:=3;
xGr2:=xOrd2+Round(xmin2*kx2);
yGr2:=yAbs2-Round(f2(xmin2)*ky2);
Canvas.MoveTo(xGr2,yGr2);
x2:=xmin2+stepx2;
n2:=Round((xmax2-xmin2)/stepx2)-1;
while n2>=0 do
begin
if (x2<-0.5) or (x2>-0.4) then
begin
xGr2:=xOrd2+Round(x2*kx2);
yGr2:=yAbs2-Round(f2(x2)*ky2);
Canvas.LineTo(xGr2,yGr2);
end;
x2:=x2+stepx2;
n2:=n2-1;
end;
end;
end;
end;
end.
unit Unit4;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;
type
TForm4 = class(TForm)
Label2: TLabel;
Button1: TButton;
Label3: TLabel;
Edit1: TEdit;
Button2: TButton;
Label1: TLabel;
Edit2: TEdit;
Button3: TButton;
Button4: TButton;
procedure Button3Click(Sender: TObject);
procedure Button4Click(Sender: TObject);
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure edit1KeyPress(Sender: TObject; var Key: Char);
procedure edit2KeyPress(Sender: TObject; var Key: Char);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form4: TForm4;
implementation
uses Unit2;
{$R *.dfm}
function f1(x:real):real;
var V: Real;
begin
v:=StrToFloat(Form4.Edit1.text);
f1:=v*x;
end;
function f2(x2:real):real;
var R: real;
begin
R:=StrToFloat(Form4.Edit2.text);
f2:=x2*x2/r;
end;
procedure TForm4.edit1KeyPress(Sender: TObject; var Key: Char);
begin
case Key of '0'..'9', chr(8):;
else key:=chr(0);
end;
end;
procedure TForm4.edit2KeyPress(Sender: TObject; var Key: Char);
begin
case Key of '0'..'9', chr(8):;
else key:=chr(0);
end;
end;
procedure TForm4.Button3Click(Sender: TObject);
begin
form4.Visible:=False;
form2.Visible:=True;
end;
procedure TForm4.Button4Click(Sender: TObject);
begin
Application.Terminate;
end;
procedure TForm4.Button1Click(Sender: TObject);
var
leftGr, topGr, rightGr, bottomGr: integer;
x, xmin, xmax, stepx: real;
kx, ky: real;
xGr, yGr, xOrd, yAbs: integer;
n: integer;
begin
if edit1.text='' then MessageDlg('Необходимо ввести значение V', mtWarning, [mbOK], 0)
else
begin
canvas.fillrect(canvas.cliprect);
xmin:=-10;
xmax:=10;
stepx:=0.5;
with ClientRect do
begin
Canvas.Pen.Style:= psSolid;
leftGr:=left+150;
topGr:=top+150;
rightGr:=Right-150;
bottomGr:=bottom-50;
kx:=(rightGr-leftGr)/(xmax-xmin);
ky:=(bottomGr-topGr)/200.0;
xOrd:=(leftGr+rightGr) div 2;
yAbs:=(topGr+bottomGr) div 2;
Canvas.Pen.Color:= clBLACK;
Canvas.Brush.Color:= Form4.Color;
Canvas.MoveTo(leftGr, yAbs);
Canvas.LineTo(rightGr, yAbs);
x:=xmin;
n:=Round((xmax-xmin)/2);
while n>=0 do
begin
xGr:=xOrd+Round(x*kx);
Canvas.MoveTo(xGr, yAbs-5);
Canvas.LineTo(xGr, yAbs+5);
Canvas.TextOut(xGr, yAbs+10, FloatToStr(x));
x:=x+2;
n:=n-1;
end;
Canvas.MoveTo(xOrd, topGr);
Canvas.LineTo(xOrd, bottomGr);
Canvas.Pen.Color:=clBlue;
Canvas.Pen.Width:=3;
xGr:=xOrd+Round(xmin*kx);
yGr:=yAbs-Round(f1(xmin)*ky);
Canvas.MoveTo(xGr,yGr);
x:=xmin+stepx;
n:=Round((xmax-xmin)/stepx)-1;
while n>=0 do
begin
if (x<-0.5) or (x>-0.4) then
begin
xGr:=xOrd+Round(x*kx);
yGr:=yAbs-Round(f1(x)*ky);
Canvas.LineTo(xGr,yGr);
end;
x:=x+stepx;
n:=n-1;
end;
end;
end;
end;
procedure TForm4.Button2Click(Sender: TObject);
var
leftGr2, topGr2, rightGr2, bottomGr2: integer;
x2, xmin2, xmax2, stepx2: real;
kx2, ky2: real;
xGr2, yGr2, xOrd2, yAbs2: integer;
n2: integer;
begin
if edit2.text='' then MessageDlg('Необходимо ввести все значения', mtWarning, [mbOK], 0)
else
begin
canvas.fillrect(canvas.cliprect);
xmin2:=-10;
xmax2:=10;
stepx2:=0.5;
with ClientRect do
begin
Canvas.Pen.Style:= psSolid;
leftGr2:=left+150;
topGr2:=top+150;
rightGr2:=Right-150;
bottomGr2:=bottom-50;
kx2:=(rightGr2-leftGr2)/(xmax2-xmin2);
ky2:=(bottomGr2-topGr2)/200.0;
xOrd2:=(leftGr2+rightGr2) div 2;
yAbs2:=(topGr2+bottomGr2) div 2;
Canvas.Pen.Color:= clBLACK;
Canvas.Brush.Color:= Form4.Color;
Canvas.MoveTo(leftGr2, yAbs2);
Canvas.LineTo(rightGr2, yAbs2);
x2:=xmin2;
n2:=Round((xmax2-xmin2)/2);
while n2>=0 do
begin
xGr2:=xOrd2+Round(x2*kx2);
Canvas.MoveTo(xGr2, yAbs2-5);
Canvas.LineTo(xGr2, yAbs2+5);
Canvas.TextOut(xGr2, yAbs2+10, FloatToStr(x2));
x2:=x2+2;
n2:=n2-1;
end;
Canvas.MoveTo(xOrd2, topGr2);
Canvas.LineTo(xOrd2, bottomGr2);
Canvas.Pen.Color:=clBlue;
Canvas.Pen.Width:=3;
xGr2:=xOrd2+Round(xmin2*kx2);
yGr2:=yAbs2-Round(f2(xmin2)*ky2);
Canvas.MoveTo(xGr2,yGr2);
x2:=xmin2+stepx2;
n2:=Round((xmax2-xmin2)/stepx2)-1;
while n2>=0 do
begin
if (x2<-0.5) or (x2>-0.4) then
begin
xGr2:=xOrd2+Round(x2*kx2);
yGr2:=yAbs2-Round(f2(x2)*ky2);
Canvas.LineTo(xGr2,yGr2);
end;
x2:=x2+stepx2;
n2:=n2-1;
end;
end;
end;
end;
end.
