Учебный курс Программирование на Delphi. Модуль 16: различия между версиями
| Строка 3: | Строка 3: | ||
== Пример 1== | == Пример 1== | ||
*'''Условие задачи:''' | *'''Условие задачи:''' | ||
| + | |||
| + | Вычислить интеграл | ||
| + | [[Изображение:ф12-1.JPG]] | ||
| + | |||
| + | по методу прямоугольников и трапеций: | ||
| + | |||
| + | [[Изображение:ф12-3.JPG]] | ||
| + | |||
| + | [[Изображение:ф12-2.JPG]] | ||
*'''Использованные компоненты:''' | *'''Использованные компоненты:''' | ||
| + | |||
| + | Edit1 - для ввода нижнего предела интегрирования; | ||
| + | |||
| + | Edit2 - для ввода вержнего предела интегрирования; | ||
| + | |||
| + | Edit3 - количество интервалов интегрирования; | ||
| + | |||
| + | Label1 - для вывода значения интеграла по методу прямоугольников; | ||
| + | |||
| + | Label2 - для вывода значения интеграла по методу трапеций; | ||
| + | |||
| + | Button - вывод результата. | ||
| + | |||
*'''Программный код:''' | *'''Программный код:''' | ||
| + | |||
| + | unit Unit1; | ||
| + | interface | ||
| + | uses | ||
| + | Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, | ||
| + | Dialogs, StdCtrls; | ||
| + | type | ||
| + | TForm1 = class(TForm) | ||
| + | Edit1: TEdit; | ||
| + | Edit2: TEdit; | ||
| + | Edit3: TEdit; | ||
| + | Label1: TLabel; | ||
| + | Label2: TLabel; | ||
| + | Button1: TButton; | ||
| + | Label4: TLabel; | ||
| + | Label5: TLabel; | ||
| + | Label6: TLabel; | ||
| + | Label3: TLabel; | ||
| + | Label7: TLabel; | ||
| + | procedure Button1Click(Sender: TObject); | ||
| + | private | ||
| + | { Private declarations } | ||
| + | public | ||
| + | { Public declarations } | ||
| + | end; | ||
| + | var | ||
| + | Form1: TForm1; | ||
| + | implementation | ||
| + | {$R *.dfm} | ||
| + | function f(x:real):real; | ||
| + | begin | ||
| + | f:=2*x*x+4 | ||
| + | end; | ||
| + | procedure TForm1.Button1Click(Sender: TObject); | ||
| + | var a,b:real; | ||
| + | n,i:integer; | ||
| + | s,h,Ip,It:real; | ||
| + | begin | ||
| + | a:=StrToFloat(Edit1.Text); | ||
| + | b:=StrToFloat(Edit2.Text); | ||
| + | n:=StrToInt(Edit3.Text); | ||
| + | h:=(b-a)/n; | ||
| + | s:=0; | ||
| + | for i:=0 to n-1 do | ||
| + | s:=s+f(a+i*h); | ||
| + | Ip:=s*h; | ||
| + | label1.Caption:=FloatToStr(Ip); | ||
| + | S:=(f(a)+f(b))/2; | ||
| + | for i:=1 to n-1 do | ||
| + | s:=s+f(a+i*h); | ||
| + | It:=s*h; | ||
| + | label2.caption:=FloatToStr(It); | ||
| + | end; | ||
| + | end. | ||
*'''Форма с результатом работы программы:''' | *'''Форма с результатом работы программы:''' | ||
| − | + | [[Изображение:-12-12.JPG]] | |
== Пример 2== | == Пример 2== | ||
*'''Условие задачи:''' | *'''Условие задачи:''' | ||
| + | |||
| + | x<sup>3</sup>-cos(x)=0 | ||
| + | |||
| + | найти корни уравнения с помощью метода половинного деления | ||
*'''Использованные компоненты:''' | *'''Использованные компоненты:''' | ||
| + | |||
| + | Label1 - для текстового сообщения | ||
| + | |||
| + | Label2 - для вывода значения корня уравнения, найденного с помощью метода половинного деления | ||
| + | |||
| + | Label3 - для вывода значения корня уравнения, найденного графическим способом | ||
| + | |||
| + | Button - кнопка для запуска процедуры поиска корня методом половинного деления | ||
*'''Программный код:''' | *'''Программный код:''' | ||
| + | unit Unit1; | ||
| + | interface | ||
| + | uses | ||
| + | Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, | ||
| + | Dialogs, StdCtrls; | ||
| + | type | ||
| + | TForm1 = class(TForm) | ||
| + | Button1: TButton; | ||
| + | Label2: TLabel; | ||
| + | Label1: TLabel; | ||
| + | Label3: TLabel; | ||
| + | procedure FormPaint(Sender: TObject); | ||
| + | procedure FormResize(Sender: TObject); | ||
| + | procedure Button1Click(Sender: TObject); | ||
| + | private | ||
| + | { Private declarations } | ||
| + | public | ||
| + | { Public declarations } | ||
| + | end; | ||
| + | var | ||
| + | Form1: TForm1; | ||
| + | t:real; | ||
| + | implementation | ||
| + | {$R *.dfm} | ||
| + | function f(x:real):real; | ||
| + | begin | ||
| + | f:=x*x*x-COS(x); | ||
| + | end; | ||
| + | procedure gr; | ||
| + | var | ||
| + | x1,x2:real; | ||
| + | y1,y2:real; | ||
| + | x:real; | ||
| + | y:real; | ||
| + | dx:real; | ||
| + | l,b:integer; | ||
| + | w,h:integer; | ||
| + | mx,my:real; | ||
| + | x0,y0:integer; | ||
| + | begin | ||
| + | l:=10; | ||
| + | b:=Form1.clientheight-20; | ||
| + | h:=Form1.clientheight-40; | ||
| + | w:=Form1.clientwidth-40; | ||
| + | x1:=-3; x2:=3; dx:=0.0001; | ||
| + | y1:=f(x1); | ||
| + | y2:=f(x1); | ||
| + | x:=x1; | ||
| + | repeat | ||
| + | y:=f(x); | ||
| + | if y<y1 then y1:=y; | ||
| + | if y>y2 then y2:=y; | ||
| + | x:=x+dx; | ||
| + | until (x>=x2); | ||
| + | my:=h/(abs(y2-y1)); | ||
| + | mx:=w/(abs(x2-x1)); | ||
| + | x0:=l; | ||
| + | y0:=b-abs(round(y1*my)); | ||
| + | with form1.canvas do begin | ||
| + | moveto(l,b); lineto(l,b-h); | ||
| + | moveto(x0,y0); lineto(x0+w,y0); | ||
| + | textout(l+5,b-h,floattostrf(y2,ffgeneral,6,3)); | ||
| + | textout(l+5,b,floattostrf(y1,ffgeneral,6,3)); | ||
| + | x:=x1; | ||
| + | repeat | ||
| + | y:=f(x); | ||
| + | if abs(y)<0.01 then t:=x; | ||
| + | pixels[x0+round(x*mx),y0-round(y*my)]:=clred; | ||
| + | x:=x+dx; | ||
| + | until (x>=x2); | ||
| + | end; | ||
| + | end; | ||
| + | procedure TForm1.FormPaint(Sender: TObject); | ||
| + | begin | ||
| + | gr; | ||
| + | Label3.Caption:=floattostr(t); | ||
| + | end; | ||
| + | procedure TForm1.FormResize(Sender: TObject); | ||
| + | begin | ||
| + | form1.Canvas.FillRect(rect(0,0,clientwidth,clientheight)); | ||
| + | gr; | ||
| + | end; | ||
| + | procedure TForm1.Button1Click(Sender: TObject); | ||
| + | var | ||
| + | a,b,c:real; | ||
| + | y1,y2,e:real; | ||
| + | begin | ||
| + | a:=-3; | ||
| + | b:=3; | ||
| + | e:=0.00001; | ||
| + | repeat | ||
| + | c:=(a+b)/2; | ||
| + | y1:=f(a); | ||
| + | y2:=f(c); | ||
| + | if (y1*y2>0) then a:=c | ||
| + | else b:=c; | ||
| + | until (abs(b-a))<e; | ||
| + | label2.caption:=floattostr(c); | ||
| + | end; | ||
| + | end. | ||
| + | |||
| + | |||
| + | *'''Форма с результатом работы программы:''' | ||
| + | <center>[[Изображение:форма_график.JPG|650 px]]</center> | ||
| + | |||
| + | == Пример 3== | ||
| + | |||
| + | *'''Условие задачи:''' | ||
| + | |||
| + | Заданы значения температуры: | ||
| + | |||
| + | |||
| + | {| border=1 width=85% | ||
| + | |- | ||
| + | |<center>'''Y'''</center>|| <center>'''3'''</center>||<center>'''10'''</center>||<center>'''12'''</center>||<center>'''14'''</center>||<center>'''16'''</center>||<center>'''температура'''</center> | ||
| + | |- | ||
| + | |<center>'''X'''</center>||<center>'''1'''</center>||<center>'''4'''</center>||<center>'''5'''</center>||<center>'''12'''</center>||<center>'''17'''</center>||<center>'''дни'''</center> | ||
| + | |} | ||
| + | |||
| + | Какая температура была в 7 день? | ||
| − | *''' | + | *'''Использованные компоненты:''' |
| + | *'''Программный код:''' | ||
| − | + | *'''Форма с результатом работу программы:''' | |
==Литература== | ==Литература== | ||
Версия 11:18, 11 апреля 2008
Содержание
Пример 1
- Условие задачи:
Вычислить интеграл Файл:Ф12-1.JPG
по методу прямоугольников и трапеций:
- Использованные компоненты:
Edit1 - для ввода нижнего предела интегрирования;
Edit2 - для ввода вержнего предела интегрирования;
Edit3 - количество интервалов интегрирования;
Label1 - для вывода значения интеграла по методу прямоугольников;
Label2 - для вывода значения интеграла по методу трапеций;
Button - вывод результата.
- Программный код:
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;
type
TForm1 = class(TForm)
Edit1: TEdit;
Edit2: TEdit;
Edit3: TEdit;
Label1: TLabel;
Label2: TLabel;
Button1: TButton;
Label4: TLabel;
Label5: TLabel;
Label6: TLabel;
Label3: TLabel;
Label7: TLabel;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
function f(x:real):real;
begin
f:=2*x*x+4
end;
procedure TForm1.Button1Click(Sender: TObject);
var a,b:real;
n,i:integer;
s,h,Ip,It:real;
begin
a:=StrToFloat(Edit1.Text);
b:=StrToFloat(Edit2.Text);
n:=StrToInt(Edit3.Text);
h:=(b-a)/n;
s:=0;
for i:=0 to n-1 do
s:=s+f(a+i*h);
Ip:=s*h;
label1.Caption:=FloatToStr(Ip);
S:=(f(a)+f(b))/2;
for i:=1 to n-1 do
s:=s+f(a+i*h);
It:=s*h;
label2.caption:=FloatToStr(It);
end;
end.
- Форма с результатом работы программы:
Пример 2
- Условие задачи:
x3-cos(x)=0
найти корни уравнения с помощью метода половинного деления
- Использованные компоненты:
Label1 - для текстового сообщения
Label2 - для вывода значения корня уравнения, найденного с помощью метода половинного деления
Label3 - для вывода значения корня уравнения, найденного графическим способом
Button - кнопка для запуска процедуры поиска корня методом половинного деления
- Программный код:
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;
type
TForm1 = class(TForm)
Button1: TButton;
Label2: TLabel;
Label1: TLabel;
Label3: TLabel;
procedure FormPaint(Sender: TObject);
procedure FormResize(Sender: TObject);
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
t:real;
implementation
{$R *.dfm}
function f(x:real):real;
begin
f:=x*x*x-COS(x);
end;
procedure gr;
var
x1,x2:real;
y1,y2:real;
x:real;
y:real;
dx:real;
l,b:integer;
w,h:integer;
mx,my:real;
x0,y0:integer;
begin
l:=10;
b:=Form1.clientheight-20;
h:=Form1.clientheight-40;
w:=Form1.clientwidth-40;
x1:=-3; x2:=3; dx:=0.0001;
y1:=f(x1);
y2:=f(x1);
x:=x1;
repeat
y:=f(x);
if y<y1 then y1:=y;
if y>y2 then y2:=y;
x:=x+dx;
until (x>=x2);
my:=h/(abs(y2-y1));
mx:=w/(abs(x2-x1));
x0:=l;
y0:=b-abs(round(y1*my));
with form1.canvas do begin
moveto(l,b); lineto(l,b-h);
moveto(x0,y0); lineto(x0+w,y0);
textout(l+5,b-h,floattostrf(y2,ffgeneral,6,3));
textout(l+5,b,floattostrf(y1,ffgeneral,6,3));
x:=x1;
repeat
y:=f(x);
if abs(y)<0.01 then t:=x;
pixels[x0+round(x*mx),y0-round(y*my)]:=clred;
x:=x+dx;
until (x>=x2);
end;
end;
procedure TForm1.FormPaint(Sender: TObject);
begin
gr;
Label3.Caption:=floattostr(t);
end;
procedure TForm1.FormResize(Sender: TObject);
begin
form1.Canvas.FillRect(rect(0,0,clientwidth,clientheight));
gr;
end;
procedure TForm1.Button1Click(Sender: TObject);
var
a,b,c:real;
y1,y2,e:real;
begin
a:=-3;
b:=3;
e:=0.00001;
repeat
c:=(a+b)/2;
y1:=f(a);
y2:=f(c);
if (y1*y2>0) then a:=c
else b:=c;
until (abs(b-a))<e;
label2.caption:=floattostr(c);
end;
end.
- Форма с результатом работы программы:
Пример 3
- Условие задачи:
Заданы значения температуры:
Какая температура была в 7 день?
- Использованные компоненты:
- Программный код:
- Форма с результатом работу программы:
Литература
- Архангельский. Программирование на Delphi 6. – М: БИНОМ, 2002
- Бобровский С. Delphi 7. Учебный курс. – СПб: Питер, 2003
- Культин Н. Основы программирования в Delphi 7. СПб: БХВ-Петербург, 2005.