Визуальная среда разработки программ DELPHI
Реализация алгоритмов вычислительной математики на языках программирования в визуальной среде DELPHI. Алгоритмы решения уравнений и систем уравнений, квадратурные формулы.
Цель работы:
Ознакомиться с приемами работы в визуальной среде программирования Turbo DELPHI, с разделами меню, с основными компонентами визуального программирования. Реализовать алгоритмы решения уравнений и приближенного вычисления определенных интегралов в визуальной среде.
1. Ознакомиться с основными компонентами стандартной закладки компонент среды Turbo DELPHI, с технологией разработки простых программ в визуальной среде.
2. Запустить оболочку, ознакомиться с пунктами главного меню, с установкой компонент на форму, с настройкой первоначальных свойств компонентов и с их изменением в процессе работы программы.
3. Ознакомиться со структурой модуля формы, с интерфейсной частью модуля. Расположить вызываемые процедуры, реализующие алгоритмы в исполняемой части, описать все переменные.
4. Освоить отладку программы в процессе трансляции.
5. Написать программу решения уравнения, левая часть которого задана функцией, алгоритмом половинного деления.
6. Построить на основе этого алгоритма метод касательных, добавив процедуру вычисления производной.
7. Построить процедуру вычисления определенного интеграла функции на заданном отрезке методом средних прямоугольников.
|
|
Образец выполнения задания:
Программа решения уравнения методом половинного деления.
Установить на форму компоненты Button 1, ListBox 1, Label 1 , расположив их примерно так, как указано на рисунке. Двойным щелчком на объекте Button 1 попадаем в редактор кода для набора операторов, соответствующих событию «нажатие кнопки»: procedure TForm1.Button1Click(Sender: TObject);
Вид формы с установленными компонентами.
Часть работы по написанию кода программы берет на себя редактор кода визуальной среды. По мере установки компонент на форму редактор кода добавляет в интерфейсную часть создаваемого модуля описания компонент и используемых свойств и событий. Заголовки процедур, соответствующие обрабатываемым событиям, также создаются редактором кода.
Набираем текст процедуры, соответствующей нажатию кнопки и выделенный ниже прямым жирным шрифтом. Далее, в раздел implementation модуля вводим текст процедур и деклараций, напечатанный жирным курсивом. Отлаживаем работу программы (с учетом ошибок набора) и добиваемся правильного выполнения программы. Тестируем программу на нескольких вариантах уравнений. Сохраняем проект и модуль в отдельной папке.
Текст модуля :
unit koren;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
|
|
Dialogs, StdCtrls;
type
TForm1 = class(TForm)
Button1: TButton;
Label1: TLabel;
Label2: TLabel;
ListBox1: TListBox;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
Const
a=0;b=3;
eps=0.000001;
function f(t:real):real;
Begin
f:=t*t*t*t*t-8*t-1;
end;
procedure root(a,b:real; var x:real);
Var
ya,yb:real;
y:real;
s1,s2:string;
Begin
ya:=f(a);
yb:=f(b);
if ya*yb<0 then
Begin
Repeat
x:=(b+a)/2;
y:=f(x);
str(x:6:3,s1);
str(y:8:4,s2);
form1.listbox1.Items.Add(s1+' '+s2);
if y*ya<0 then
b:=x else
a:=x;
until b-a<eps;
End
Else
showmessage ('корня на этом отрезке нет');
end;
procedure TForm1.Button1Click(Sender: TObject);
Var
x:real;
begin
form1.Caption:=' Решение уравнения ';
root(a,b,x);
label1.Caption:=floattostr(x);
end;
end.
Практическая работа 4
Визуальная среда разработки программ DELPHI
Реализация алгоритмов вычислительной математики на языках программирования в визуальной среде Turbo DELPHI. Методы Эйлера и Рунге-Кутты решения задачи Коши.
Цель работы:
Ознакомиться с графическими компонентами визуальной среды программирования DELPHI. Реализовать алгоритмы решения численного интегрирования дифференциальных уравнений ( задача Коши) методом Эйлера и методами второго порядка (по средней производной и в средней точке).
|
|
1. Ознакомиться с графическим классом канва (Canvas) и его свойствами, предназначенными для рисования на канве пикселами.
2. Ознакомиться с учебной программой рисования графика сигнала с учетом масштабирования.
3. На основе процедуры интегрирования по методу Эйлера написать процедуру интегрирования методом средней производной. Выполнить процедуру для заданного дифференциального уравнения ( по вариантам) с начальными условиями (задача Коши).
4. Построить график полученного решения.
Образец выполнения задания:
Создавать графические элементы можно на любом объекте, имеющем свойство Canvas . Этим свойством обладает, в частности, сама форма. Зададим значения свойств формы (как на рисунке ниже):
Caption = график сигнала;
Color = clWhite (либо другой по выбору из имеющегося списка).
Далее, переключимся в инспекторе объектов на вкладку Events и на событии OnPaint выполним двойной щелчок в поле значения этого события, в результате чего будет создана процедура перерисовки, в теле которой зададим оператор вызова процедуры построения графика сигнала:
procedure TForm1.FormPaint(Sender: TObject);
Begin
grafik ;
end ;
В раздел implementation модуля поместим текст (выделенный ниже жирным курсивом) процедур построения графика и описания используемых переменных.
|
|
unit signal;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs;
type
TForm1 = class(TForm)
procedure FormPaint(Sender: TObject);
procedure FormResize(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure grafik;
Const
omega_r=50;
omega_h=5*omega_r;
T=1/700;
N=1000;{ число точек графика }
Type
dann= array[0..N] of real;
Var
L,R,W,H: integer;
X: dann;
Y: dann;
k:integer;
ymin,ymax:real;
Mx,My:real;
x0,y0: integer;
function signal(j:integer):real;
Begin
X[j]:=sin(j*omega_r*T/(2*Pi))+
cos(j*omega_r*T/Pi)+sin(j*omega_h*T/Pi)/5;
signal:=X[j];
end;
procedure min_max(Y:dann; var min, max:real);
Var
k: integer;
Begin
min:=Y[0];max:=Y[0];
for k := 1 to N do
if Y[k]> max then
max:=Y[k]
else if Y[k]< min then
min:=Y[k];
end;
Begin
L:=10;
R:=form1.clientHeight-10;
W:=form1.Width-50;
H:=form1.clientheight-20;
for k:=0 to N do
signal(k);
min_max(X,ymin,ymax);
Mx:=W/N;
My:=H/(ymax-ymin);
x0:=L;
y0:=R-abs(Round(ymin*My));
With form1.Canvas do
Begin
for k:=0 to N do
form1.Canvas.Pixels[x0+round(k*Mx),y0-round(X[k]*My)]:=clRed;
Moveto(L,R);lineto(L,R-H);
moveto(x0,y0);lineto(x0+W,y0);
textout(x0+W,y0,'x');
textout(L+10, R-10, floattostrF (ymin,
ffGeneral, 6, 3));
end;
end;
{=================================================}
procedure TForm1.FormPaint(Sender: TObject);
begin
grafik ;
end;
Перед выполнением и отладкой программы сохраним проект в отдельной папке. Выполним запуск программы и обнаружим, что при изменении размеров формы график искажается. Добавим к проекту процедуру перерисовки графика с предварительной очисткой новой канвы. Для этого в поле значения события OnResize (на вкладке инспектора объектов) выполним двойной щелчок и в появившейся заготовке соответствующей процедуры наберем операторы очистки канвы и перерисовки графика:
procedure TForm1.FormResize(Sender: TObject);
begin
form1.Canvas.FillRect(rect(0,0,clientwidth,clientheight));
grafik;
end;
end.{конец модуля}
После запуска программы при изменении размеров формы (окна программы) и при развертывании на весь экран (максимизация размеров окна) график перерисовывается заново.
Решение задачи Коши методом Эйлера реализуется следующим модулем:
unit difur;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, ExtCtrls;
type
TForm1 = class(TForm)
Button1: TButton;
Label1: TLabel;
Image1: TImage;
Button2: TButton;
Button3: TButton;
ListBox1: TListBox;
Button4: TButton;
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure Button3Click(Sender: TObject);
procedure Button4Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
Const
h=0.1;
Var
Koeff:real;
U:array[0..50] of real;
ib,ik:array[0..50] of real;
ik2:array[0..50] of real;
maU,miU:real;
function f(t:real):real;
Begin
if t<0 then
f:=0
Else
f:= sin(Pi*t);
end;
function Fs(t,tau:real):real;
Var
z:real;
Begin
z:=frac(t/tau);
Fs:=f(z);
end;
function polin(x:real):real;forward;
{=********************************************************=}
function koren(x0,h:real):real;
Var
a,b:real;
ya,y:real;
x:real;
Begin
a:=0;b:=3;
ya:=polin(a);
Repeat
x:=(a+b)/2;
y:=polin(x);
if (y*ya>0) then
a:=x else
b:=x;
{ writeln(a,b);}
{ readkey;}
until b-a<0.00001;
Koren:=x;
end;
function polin(x:real):real;
Begin
polin:=2*x*x*x*x-x*x*x-8;
end;
procedure Euiler(x0,y0,h:real;var y:real);
Var
y1:real;
Begin
y1:=0.01*(cos(4*x0+y0)-2*1.56*y0+fs(x0,1)) ;
y:=y0+h*y1;
end;
{=************************************************************=}
procedure TForm1.Button1Click(Sender: TObject);
Var
s1:string[10];
begin
Koeff:=koren(0,0.000001);
str(Koeff:8:5,s1);
Label1.Caption:=' корень ='+chr(13)+s1;
end;
procedure TForm1.Button2Click(Sender: TObject);
Var
i:integer;
y:integer;
z:real;
begin
canvas.pen.Color:=clblue;
image1.canvas.moveto(1,100);
image1.canvas.lineto(500,100);
image1.canvas.Pixels[41,41]:=clred;
for i:= 1 to 500 do
Begin
z:=100-fs(i/200,1)*100;
y:=round(z);
image1.canvas.Pixels[i,y]:=clred;
end;
end;
procedure TForm1.Button3Click(Sender: TObject);
Var
y0:real;
x:real;
y:real;
i:integer;
s1:string[3];
s2:string[10];
begin
y0:=0.1;
maU:=y0;MiU:=y0;
U[0]:=y0;
for i:=1 to 50 do
Begin
x:=i*h;
Euiler(x,y0,h,y);
y0:=y;
str(i:3,s1);
str(y:8:4,s2);
listbox1.Items.Add(s1+s2);
{writeln(rf,x:6:2,' ',y:14:-28);}
U[i]:=y;
if maU<y then maU:=y;
if miU>y then miU:=y;
end;
str(maU:8:2,s1);
end;
procedure TForm1.Button4Click(Sender: TObject);
Var
i:integer;
y:integer;
z:real;
begin
image1.Refresh;
image1.canvas.Refresh;
canvas.pen.Color:=clblue;
image1.canvas.moveto(1,100);
image1.canvas.lineto(500,100);
for i:= 0 to 50 do
Begin
z:=(U[i]-miU)*200/(maU-miU);
y:=round(z);
image1.canvas.Pixels[i*10,y]:=clred;
end ;
end;
end.
Процедуры соответствуют командным кнопкам, изображенным на рисунке
Практическая работа 5
Дата добавления: 2018-10-27; просмотров: 289; Мы поможем в написании вашей работы! |
Мы поможем в написании ваших работ!