Архитектура электронного правительства: Единая архитектура – это методологический подход при создании системы управления государства, который строится...
Археология об основании Рима: Новые раскопки проясняют и такой острый дискуссионный вопрос, как дата самого возникновения Рима...
Топ:
Техника безопасности при работе на пароконвектомате: К обслуживанию пароконвектомата допускаются лица, прошедшие технический минимум по эксплуатации оборудования...
Когда производится ограждение поезда, остановившегося на перегоне: Во всех случаях немедленно должно быть ограждено место препятствия для движения поездов на смежном пути двухпутного...
Отражение на счетах бухгалтерского учета процесса приобретения: Процесс заготовления представляет систему экономических событий, включающих приобретение организацией у поставщиков сырья...
Интересное:
Распространение рака на другие отдаленные от желудка органы: Характерных симптомов рака желудка не существует. Выраженные симптомы появляются, когда опухоль...
Подходы к решению темы фильма: Существует три основных типа исторического фильма, имеющих между собой много общего...
Что нужно делать при лейкемии: Прежде всего, необходимо выяснить, не страдаете ли вы каким-либо душевным недугом...
Дисциплины:
2020-03-31 | 58 |
5.00
из
|
Заказать работу |
|
|
Функционально-структурная схема
Рис. 1 - Функционально-структурная схема
Иерархия форм
Рис.2 - Главная форма
Рис. 3– API –функции
Рис.4 – Главная форма (прорисовка графиков)
Рис.5 -Наглядный метод решения
Рис.6 - Настройки
Рис 7 – Главная форма для вычисления интеграла
Работа с программой начинается с этой формы.
На этой форме вы можете рассчитать интеграл:
1. Выбрать интеграл
2. Выбрать метод (трапеций, Симпсона)
3. Ввести верхний предел интеграла
4. Ввести нижний предел интеграла
5. Ввести число разбиений
6. Нажав клавишу «Вперед» вычислить значение интеграла
Рис 8 – Форма для прорисовки графиков
На этой форме можно получить значения интегралов в зависимости от значений нижней границы при фиксированных значениях верхней границы определенного интеграла и построить графики
1. Выбрать интеграл
2. Нажать клавишу «График» и получить график выбранного вами интеграла
Рис 9 - Таблицы
На этой форме показан более детально метод нахождения интегралов.
Форма для применения функции Windows API SetForegroundWindow (HWND: hwnd);
Рис 10 – API –функции
На этой форме можно применить функцию SetForegroundWindow (HWND: hwnd) путем нажатия клавиши «Применить».
Форма для применения функции Windows API SetCurrentDirectory (IpPathName: PChar): bool;
Рис.11 – API-функции
На этой форме можно применить функцию SetCurrentDirectory (IpPathName: PChar): bool;
путем нажатия клавиши «Применить».
Форма настроек главной формы
Рис.12 - Настройки
На этой форме расположены настройки с помощью которых настраивается цвет и шрифты главной формы.
Элементы главной формы
Элемент формы | Назначение |
Событие
|
BitgrafClick
BuclearClick
BurunClick
CbintChange
MainMenu
FormCreate
Пункт меню для применении функции S etCurrentDirectory
Пункт меню для применении функции SetForegroundWindow
Переключатель для построения графика на первый интеграл
Переключатель для построения графика на второй интеграл
Строка для вывода подсказок
Функции Windows API
SetForeGroundWindow function SetForegroundWindow(hWnd: HWND): BOOL;
Функция SetForegroundWindow(HWND:hwnd) предназначена для перевода окна, которое идентифицируемо пораметром hwnd,в" верхний слой " и перевода на него фокус, независимо от того, какой поток создал это окно.
SetForegroundWindow(HWND hWnd // Маркер(дескриптор) окна, чтобы перенести к переднему плану)
Параметры
hWnd -дискриптор окна который идентифицирует окно, которое должно быть активизировано и перенесено к переднему плану.
|
Применение:
procedure TForm2.Timer1Timer(Sender: TObject);
begin
SetForegroundWindow(kurs.Handle);
Timer1.Enabled:=false;
end;
Обработчиком события является таймер (Timer1Timer) который и запускает функцию
SetCurrentDirectory
function SetCurrentDirectory(lpPathName: PChar): BOOL;
Функция SetCurrentDirectory (‘ lpPathName: PChar ‘) изменяет (устанавливает) текущий каталог. Возвращаемое значение было бы True, если текущий каталог был успешно изменен(заменен), или False, если ошибка произошла.
SetCurrentDirectory(
lpPathName // Адрес названия(имени) нового текущего каталога);
Параметры
LpPathName
Укажите на строку с нулевым символом в
конце, которая определяет путь к новому текущему каталогу.
Применение:
procedure TForm3.Button1Click(Sender: TObject);
begin
SetCurrentDirectory('c:\');
end;
Обработчиком события является кнопка (Button1Click) который и запускает функцию.
Основные процедуры
Расчет интегралов
procedure TKurs.CbintChange(Sender: TObject);
begin
if CBint.Text='Интеграл №1' then
Imint.Picture.LoadFromFile('int.bmp') else
Imint.Picture.LoadFromFile('int1.bmp');
end;
procedure TKurs.BurunClick(Sender: TObject);
begin
try
try
a:=strtoint(Edzn1.text);
b:=strtoint(Edzn2.text);
n:=strtoint(Edit3.Text);
If (Cbint.Text='Интеграл №1') then
int:=f1;
if (CBmet.Text='Методом Симпсона') then
int1(a,b,n,ss);
if (CBint.Text='Интеграл №1') then
int:=f1;
if (CBmet.Text='Методом трапеций') then
int2(a,b,n,ss);
if (Cbint.Text='Интеграл №2') then
int:=f2;
if (CBmet.Text='Методом Симпсона')then
int1(a,b,n,ss);
if (CBint.Text='Интеграл №2') then
int:=f2;
if (CBmet.Text='Методом трапеций')then
int2(a,b,n,ss);
Memo1.Lines.Add(' '+CBint.Text);
Memo1.Lines.Add((CBmet.Text)+' = '+(FloatToStrF(ss,ffNumber,9,3)));
except
on EConvertError do
begin
raise Exception.Create('Внимание!Ошибка в записи числа!');
end;
end;
finally
if (a)>(b)
then
ShowMessage('Вверхняя граница должна быть больше нижней');
end;
end;
procedure TKurs.FormCreate(Sender: TObject);
begin
han:=loadlibrary('mydll.dll');
if han=0 then showmessage('+Билиотека не найдена!')
else
begin
@f1:=getprocaddress(han,'f1');
@f2:=getprocaddress(han,'f2');
end;
end;
procedure TKurs.int1(a,b:real;n:integer;var ss:real);
var i1,i2,i:integer;h,s,s1,x1,s2,x2,yn,x:real;
begin
i:=1;
s1:=0;
y0:=INT(a);
h:=(b-a)/n;
repeat
x1:=a+i*h;
s1:=s1+INT(x1);
i:=i+2;
until i>n-1;
i1:=2;
s2:=0;
yn:=INT(b);
repeat
x2:=a+i1*h;
s2:=s2+INT(x2);
i1:=i1+2;
until i1>n-2;
yn:=a-n*h;
s:=(h/3)*(y0+4*s1+2*s2+yn);
ss:=s;
end;
procedure TKurs.int2(a,b:real;n:integer;var ss:real);
var i,j:integer;k:real;
begin
Form5.StringGrid1.Cells[0,0]:='I';
Form5.StringGrid1.Cells[1,0]:='Xi';
form5.StringGrid1.Cells[2,0]:='SQR(Xi)';
Form5.StringGrid1.Cells[3,0]:='(0.5*sqr(Xi)+1.5))';
Form5.StringGrid1.Cells[4,0]:='y0..yn';
Form5.StringGrid1.Cells[5,0]:='y1..yn';
s:=0;
h:=(b-a)/n;
Form5.Label2.Caption:=floattostr(h);
Form5.StringGrid1.RowCount:=n+3;
for i:=0 to n do begin
s:=s+iNT(a+i*h);
j:=0;
Form5.StringGrid1.Cells[j,i+1]:=intToStr(i);
j:=1;
Form5.StringGrid1.Cells[j,i+1]:=FloatToStrF((a+i*h),ffNumber,4,4);
|
j:=2;
Form5.StringGrid1.Cells[j,i+1]:=FloatToStrF(sqr(a+i*h),ffNumber,4,4);
j:=3;
form5.StringGrid1.Cells[j,i+1]:=FloatToStrF(0.5*sqr(a+i*h)+1.5,ffNumber,4,4);
j:=5;
Form5.StringGrid1.Cells[j,i+2]:=FloatToStrF(int(a+(i+1)*h),ffNumber,4,4);
end;
Form5.Show;
Form5.StringGrid1.Cells[0,n+2]:='Сумма';
Form5.StringGrid1.Cells[5,n+2]:=FloatToStrF(s-(int(a+(n)*h)+int(a+0*h)),ffNumber,4,4);
Form5.StringGrid1.Cells[4,1]:=FloatToStrF(int(a+0*h),ffNumber,4,4);
Form5.StringGrid1.Cells[4,n+1]:=FloatToStrF(int(a+(n)*h),ffNumber,4,4);
Form5.StringGrid1.Cells[4,n+2]:=FloatToStrF(int(a+(n)*h)+int(a+0*h),ffNumber,4,4);
s:=((INT(a)+INT(b))/2+s)*h;
ss:=s;
end;
Методика визуализации
Визуализация полученных значений при решении интеграла в зависимости от значений нижней границы при фиксированных значениях верхней границы определенного интеграла была получена с помощью стандартного компонента визуализации графических данных, а также с помощью класса TCanvas его свойств и методов которые описаны ниже.
Свойство | Описание |
Font | Определяет шрифт, чтобы использовать его при записи текста на изображении |
Brush | Определяет цвет и образец использования холста для заполнения графических форм и фонов |
Pen | Определяет вид пера для использования для рисования строк и структурирования форм |
Pixels | Определяет цвет области пикселов в пределах потока ClipRect. |
Метод | Описание |
Draw | Выполняет графический объект указанным параметром Graphic на холсте в местоположении, заданном координатами (X, Y). |
FillRect | Заполняет указанный прямоугольник на холсте, используя текущую кисть. |
LineTo | Тянет(рисует) строку на холсте от PenPos, к координатам указанных X и Y, и устанавливает перьевую позицию в (X, Y). |
MoveTo | Изменяет позицию текущего рисунка к координатам (X, Y). |
procedure TKurs.BitgrafClick(Sender: TObject);
var
x,ymin,ymax,hx1,hx,hy,xn,xk,mx,sx,my,sy,yy,xx:real;i,X1,Y1,Y2,x3,xa,ya,xb,yb:integer;
begin
if Timer1.Enabled=false then
Timer1.Enabled:=true;
Kurs.Imgraf.Canvas.FillRect(rect(0,0,620,370));
xn:=strtofloat(Edzn1.text);
xk:=StrTofloat(Edzn2.Text);
n:=strtoint(Edit3.Text);
x:=xn;ymax:=-1e30;ymin:=1e30;
while x<=xk do
begin
if RadioButton1.Checked then
int:=f1;
if RadioButton2.Checked then
int:=f2;
int1(x,xk,n,ss);
if ss>ymax then ymax:=ss;
if ss<ymin then ymin:=ss;
x:=x+0.01;
end;
x:=xn;
int1(x,xk,n,ss);
x1:=round(mx*x+sx);
y1:=round(my*x+sy);
repeat
int1(x,xk,n,ss);
x2:=ROUND(mx*x+sx);
y2:=round(-my*ss+sy);
kurs.Imgraf.Canvas.Pen.Color:=ColorDialog2.color;
kurs.Imgraf.Canvas.Brush.Color:=clwhite;
kurs.Imgraf.Canvas.MoveTo(x1,y1);
kurs.Imgraf.Canvas.LineTo(x2,y2);
x1:=x2;y1:=y2;
k:=true;
kurs.Imgraf.Canvas.Pen.Color:=clred;
kurs.Imgraf.Canvas.Pen.Width:=2;
hx1:=1;
hx:=(xk-xn)/10;
xa:=0;ya:=0;xb:=450;yb:=310;
mx:=(xb-xa)/(xk-xn);
my:=(yb-ya)/(ymax-ymin);
|
sy:=ya+my*ymax;sx:=xa-mx*xn;
kurs.Imgraf.Canvas.MoveTo(xb,yb);
kurs.Imgraf.Canvas.LineTo(xa,yb);
x:=x+0.01;
until x>xk;
i:=3;
xx:=xn;
//вертикальные состовляющие
repeat
kurs.Imgraf.Canvas.MoveTo(i,ya);
kurs.Imgraf.Canvas.LineTo(i,yb);
kurs.Imgraf.Canvas.TextOut(i,yb+5,FloatToStr(xx));
inc(i,Round((Imgraf.Width)/10));
xx:=xx+hx;
until i>Imgraf.Width;
//горизонтальные состовляющие
i:=Imgraf.Height-50;
repeat
yy:=(sy-i)/my;
kurs.Imgraf.Canvas.MoveTo(0,i);
kurs.Imgraf.Canvas.LineTo(Imgraf.Width,i);
kurs.Imgraf.Canvas.TextOut(0,i-5,FloatToStrF(yy,ffNumber,4,2));
i:=i-round(hy);
dec(i,Round((Imgraf.Height)/8));
until i<0;
Подключение DLL- библиотеки
Существует два типа исполняемых файлов Windows: программы и библиотеки динамической компоновки (Dynamic Link Libraries,Dll). Когда мы разрабатываем приложение Delphi, мы, как правило создаем исполняемый файл программы, который обладает расширением EXE. Однако приложения Delphi в процессе своей работы часто обращаются к функциям, содержащимся в библиотеках DLL. Например, каждый раз, когда мы напрямую обращаемся к Windows API, на самом деле мы обращаемся к DLL.
Что такое динамическая компоновка?
При использовании динамической компоновки, которая выполняется в случае, если разрабатываемый нами код обращается к функции, содержащейся в библиотеки DLL, компоновщик получает необходимую информацию о функции из ее обьявления external. Эта информация используется для заполнения некоторых таблиц внутри исполняемого файла. Когда операционная система Windows загружает исполняемый файл в память, в первую очередь она осуществляет загрузку всех необходимых для функционирования программы библиотек, и только после этого программы начинает работу. В процессе загрузки библиотек DLL операционная система заполняет таблицы внутренние таблицы программы адресами функций из загруженных в память библиотек DLL.
Подключение Dll –подключение путем динамической Dll-загрузки.
procedure TKurs.FormCreate(Sender: TObject);
begin
han:=loadlibrary('mydll.dll');
if han=0 then showmessage('+Библиотека не найдена!')
else
begin
@f1:=getprocaddress(han,'f1');
@f2:=getprocaddress(han,'f2');
end;
Листинг Dll- библиотеки
library mydll;
{ Important note about DLL memory management: ShareMem must be the
first unit in your library's USES clause AND your project's (select
Project-View Source) USES clause if your DLL exports any procedures or
functions that pass strings as parameters or function results. This
applies to all strings passed to and from your DLL--even those that
are nested in records and classes. ShareMem is the interface unit to
the BORLNDMM.DLL shared memory manager, which must be deployed along
with your DLL. To avoid using BORLNDMM.DLL, pass string information
using PChar or ShortString parameters. }
uses
SysUtils,
Classes;
{$R *.res}
function f1(x:real):real;
begin
f1:=1/sqrt(0.5*sqr(x)+1.5);
end;
function f2(x:real):real;
begin
f2:=(x+1)*cos(sqr(x));
end;
exports
f1 index 1 name 'f1',f2 index 2 name 'f2';
begin
end.
2.7 Компоненты индивидуального задания
DateTimePicker1: TDateTimePicker;
TDateTimePicker - визуальный компонент, разработанный (предназначенный) определенно для ввода дат или времен. В DateTimePicker датируют режим, это походит на список или поле со списком, за исключением того, что раскрывающийся список заменен календарной иллюстрацией; пользователи могут выбирать дату от календаря. Даты или времена могут также быть выбраны, листая со Стрелками "вверх" и "вниз".
|
Gauge используется для визуального отображения пользователю степень завершенности некоторой длительной орерации или процесса
Свойство | Назначение |
Backcolor | Изменение цвета фона заднего плана |
Forecolor | Изменение цвета индикатора движения |
Kind gkVerticalBar gkHorizontalBar gkNeedle gkPie gkText | Изменение основной формы индикатора движения gkVerticalBar – вертикальный вид индикатора движения gkHorizontalBar- горизонтальный вид индикатора движения gkNeedle- индикатора движения в виде полукруга gkPie- индикатора движения в виде сектора gkText - текстовое отображение индикатора движения |
MaxValue | Максимальное значение диапазона (конечное) изменения индикатора движения |
MinValue | Минимальное значение диапазона (начальное) изменения индикатора движения |
Progress | Задание начального положения индикатора движения |
ShowText | Значение True означает отображение индикатора движения с текстовой информацией (числовой) |
РУКОВОДСТВО ПОЛЬЗОВАТЕЛЯ
3.1 Системные требования
Pentium 133 Mhz, RAM 32 Mb, HDD 10Mb, Windows 98
Помощь
Для справки нажмите F1, и появится окно
Рис.8- Справка
Установка программы
Для установки программы необходимо скопировать папку EXE
Содержимое папки:
Project1.exe
Mydll.dll
Helpkurs
Выводы
Таким образом, данная работа позволила мне:
1. закрепить на опыте знания, полученные при изучении дисциплины “Системное программирование”.
2. научился разрабатывать программные продукты под операционную среду Windows
3. закрепил следующие знания:
Ø Программирование в Delphi
Ø Программирование программ использующие код, написанный на других языках программирования (использование DLL)
Ø Динамическая компоновка с DLL
Ø Численные методы для вычисления определенных интегралов
Ø Написание Help в стиле Windows.
Список используемой литературы
1. Delphi 6. Для профессионалов. Разработка COM: Пер.с англ.:-464c. 2005
2. Разработка приложений в среде Delphi: пер.с англ.:Уч.пос-М.:Издательский дом «Вильямс»,2006.-464с.
Листинг программы
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, ComCtrls, Menus, ExtDlgs, ExtCtrls, ToolWin, Gauges,
AppEvnts, TeEngine, Series, TeeProcs, Chart, TeeFunci, Buttons, ShellAPI,
ScktComp, ImgList;
type
TKurs = class(TForm)
PageControl1: TPageControl;
TabSheet1: TTabSheet;
TabSheet2: TTabSheet;
Edzn1: TEdit;
Edzn2: TEdit;
Edit3: TEdit;
MainMenu1: TMainMenu;
file1: TMenuItem;
N1: TMenuItem;
N2: TMenuItem;
N3: TMenuItem;
SavePictureDialog1: TSavePictureDialog;
N4: TMenuItem;
N5: TMenuItem;
N6: TMenuItem;
StatusBar1: TStatusBar;
Imint: TImage;
Cbint: TComboBox;
Label1: TLabel;
Label2: TLabel;
Label3: TLabel;
Label4: TLabel;
CBmet: TComboBox;
Memo1: TMemo;
Label5: TLabel;
Burun: TButton;
N7: TMenuItem;
N22GetCurrentDirectory1: TMenuItem;
N52SetForegroundWindow1: TMenuItem;
DateTimePicker1: TDateTimePicker;
Imgraf: TImage;
Label6: TLabel;
Buclear: TButton;
Bitgraf: TBitBtn;
GroupBox1: TGroupBox;
RadioButton1: TRadioButton;
RadioButton2: TRadioButton;
ApplicationEvents1: TApplicationEvents;
N8: TMenuItem;
N9: TMenuItem;
ImageList1: TImageList;
Timer1: TTimer;
Gauge1: TGauge;
N10: TMenuItem;
N11: TMenuItem;
ColorDialog1: TColorDialog;
ColorDialog2: TColorDialog;
N12: TMenuItem;
procedure N1Click(Sender: TObject);
procedure N6Click(Sender: TObject);
procedure CbintChange(Sender: TObject);
procedure BurunClick(Sender: TObject);
procedure int1(a,b:real;n:integer;var ss:real);
procedure int2(a,b:real;n:integer;var ss:real);
procedure FormCreate(Sender: TObject);
procedure N22GetCurrentDirectory1Click(Sender: TObject);
procedure N52SetForegroundWindow1Click(Sender: TObject);
procedure ApplicationEvents1Hint(Sender: TObject);
procedure BuclearClick(Sender: TObject);
procedure BitgrafClick(Sender: TObject);
procedure RadioButton1Click(Sender: TObject);
procedure RadioButton2Click(Sender: TObject);
procedure Button3Click(Sender: TObject);
procedure N4Click(Sender: TObject);
procedure N9Click(Sender: TObject);
procedure Timer1Timer(Sender: TObject);
procedure N10Click(Sender: TObject);
procedure N11Click(Sender: TObject);
procedure N12Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
tfun=function(x:real):real;
var
Kurs: TKurs;
INT,F1,f2:tfun;
han:thandle;
k:boolean;
a,b,s,h,ss,y0,yn,s2,x2,xx1,xx2,xk:real;
n,n1,i1:integer;
mplementation
uses Unit2, Unit3, Unit4, Unit5;
{$R *.dfm}
procedure TKurs.N1Click(Sender: TObject);
begin
Imgraf.Picture.SaveToFile(SavePictureDialog1.FileName+'.bmp');
end;
procedure TKurs.N4Click(Sender: TObject);
begin
if k=true then begin
N1.Enabled:=true;
if SavePictureDialog1.Execute then
Imgraf.Picture.SaveToFile(SavePictureDialog1.FileName+'.bmp');
end
else
ShowMessage('Ãðàôèê íå îòðèñîâàí');
end;
procedure TKurs.N6Click(Sender: TObject);
begin
Application.HelpCommand(HELP_FINDER,0);
end;
procedure TKurs.CbintChange(Sender: TObject);
begin
if CBint.Text='Èíòåãðàë ¹1' then
Imint.Picture.LoadFromFile('int.bmp') else
Imint.Picture.LoadFromFile('int1.bmp');
end;
procedure TKurs.BurunClick(Sender: TObject);
begin
a:=strtofloat(Edzn1.text);
b:=strtofloat(Edzn2.text);
n:=strtoint(Edit3.Text);
if (edzn1.Text<>'') and (Edzn2.Text<>'') and
(Cbint.ItemIndex<>-1)and (CBmet.ItemIndex<>-1) then
begin
try
If (Cbint.Text='Èíòåãðàë ¹1') then
int:=f1;
if (CBmet.Text='Ìåòîäîì Ñèìïñîíà') then
int1(a,b,n,ss);
if (CBint.Text='Èíòåãðàë ¹1') then
int:=f1;
if (CBmet.Text='Ìåòîäîì òðàïåöèé') then
int2(a,b,n,ss);
if (Cbint.Text='Èíòåãðàë ¹2') then
int:=f2;
if (CBmet.Text='Ìåòîäîì Ñèìïñîíà')then
int1(a,b,n,ss);
if (CBint.Text='Èíòåãðàë ¹2') then
int:=f2;
if (CBmet.Text='Ìåòîäîì òðàïåöèé')then
int2(a,b,n,ss);
Memo1.Lines.Add(' '+CBint.Text);
Memo1.Lines.Add((CBmet.Text)+' = '+(FloatToStrF(ss,ffNumber,9,3)));
finally
if (a)>(b)
then
ShowMessage('Ââåðõíÿÿ ãðàíèöà äîëæíà áûòü áîëüøå íèæíåé');
end;
end
else
if (Edzn1.Text=' ') then ShowMessage('Íå ââåäåíà ââåðõíÿÿ ãðàíèöà!');
if (Edzn2.Text=' ') then ShowMessage('Íå ââåäåíà íèæíÿÿ ãðàíèöà!');
if (Cbint.ItemIndex=-1) then ShowMessage('Âíèìàíèå!Íå âûáðàí èíòåãðàë!');
if (CBmet.ItemIndex=-1) then ShowMessage('Íå âûáðàí ìåòîä ðåøåíèÿ!');
end;
procedure TKurs.FormCreate(Sender: TObject);
begin
han:=loadlibrary('mydll.dll');
if han=0 then showmessage('+Áèëèîòåêà íå íàéäåíà!')
else
begin
@f1:=getprocaddress(han,'f1');
@f2:=getprocaddress(han,'f2');
end;
end;
procedure TKurs.int1(a,b:real;n:integer;var ss:real);
ar i1,i2,i:integer;h,s,s1,x1,s2,x2,yn,x:real;
begin
i:=1;
s1:=0;
y0:=INT(a);
h:=(b-a)/n;
repeat
x1:=a+i*h;
s1:=s1+INT(x1);
i:=i+2;
until i>n-1;
i1:=2;
s2:=0;
yn:=INT(b);
repeat
x2:=a+i1*h;
s2:=s2+INT(x2);
i1:=i1+2;
until i1>n-2;
yn:=a-n*h;
s:=(h/3)*(y0+4*s1+2*s2+yn);
ss:=s;
end;
procedure TKurs.int2(a,b:real;n:integer;var ss:real);
var i,j:integer;k:real;
begin
Form5.StringGrid1.Cells[0,0]:='I';
Form5.StringGrid1.Cells[1,0]:='Xi';
form5.StringGrid1.Cells[2,0]:='SQR(Xi)';
Form5.StringGrid1.Cells[3,0]:='(0.5*sqr(Xi)+1.5))';
Form5.StringGrid1.Cells[4,0]:='y0..yn';
Form5.StringGrid1.Cells[5,0]:='y1..yn';
s:=0;
h:=(b-a)/n;
Form5.Label2.Caption:=floattostr(h);
Form5.StringGrid1.RowCount:=n+3;
for i:=0 to n do begin
s:=s+iNT(a+i*h);
j:=0;
Form5.StringGrid1.Cells[j,i+1]:=intToStr(i);
j:=1;
Form5.StringGrid1.Cells[j,i+1]:=FloatToStrF((a+i*h),ffNumber,4,4);
j:=2;
orm5.StringGrid1.Cells[j,i+1]:=FloatToStrF(sqr(a+i*h),ffNumber,4,4);
j:=3;
form5.StringGrid1.Cells[j,i+1]:=FloatToStrF(0.5*sqr(a+i*h)+1.5,ffNumber,4,4);
j:=5;
Form5.StringGrid1.Cells[j,i+2]:=FloatToStrF(int(a+(i+1)*h),ffNumber,4,4);
end;
Form5.Show;
Form5.StringGrid1.Cells[0,n+2]:='Ñóììà';
Form5.StringGrid1.Cells[5,n+2]:=FloatToStrF(s-(int(a+(n)*h)+int(a+0*h)),ffNumber,4,4);
Form5.StringGrid1.Cells[4,1]:=FloatToStrF(int(a+0*h),ffNumber,4,4);
Form5.StringGrid1.Cells[4,n+1]:=FloatToStrF(int(a+(n)*h),ffNumber,4,4);
Form5.StringGrid1.Cells[4,n+2]:=FloatToStrF(int(a+(n)*h)+int(a+0*h),ffNumber,4,4);
s:=((INT(a)+INT(b))/2+s)*h;
ss:=s;
end;
procedure TKurs.N22GetCurrentDirectory1Click(Sender: TObject);
begin
form2.Show;
end;
procedure TKurs.N52SetForegroundWindow1Click(Sender: TObject);
begin
form3.Show;
end;
procedure TKurs.ApplicationEvents1Hint(Sender: TObject);
begin
StatusBar1.Panels[0].Text:=Application.Hint;
end;
procedure TKurs.BuclearClick(Sender: TObject);
begin
Memo1.Lines.Clear;
end;
procedure TKurs.BitgrafClick(Sender: TObject);
var
x,ymin,ymax,hx1,hx,hy,xn,xk,mx,sx,my,sy,yy,xx:real;i,X1,Y1,Y2,x3,xa,ya,xb,yb:integer;
begin
if Timer1.Enabled=false then
Timer1.Enabled:=true;
Kurs.Imgraf.Canvas.FillRect(rect(0,0,620,370));
xn:=strtofloat(Edzn1.text);
xk:=StrTofloat(Edzn2.Text);
n:=strtoint(Edit3.Text);
x:=xn;ymax:=-1e30;ymin:=1e30;
while x<=xk do
begin
if RadioButton1.Checked then
int:=f1;
if RadioButton2.Checked then
int:=f2;
int1(x,xk,n,ss);
if ss>ymax then ymax:=ss;
if ss<ymin then ymin:=ss;
x:=x+0.01;
end;
x:=xn;
int1(x,xk,n,ss);
x1:=round(mx*x+sx);
y1:=round(my*x+sy);
repeat
int1(x,xk,n,ss);
x3:=ROUND(mx*x+sx);y2:=round(-my*ss+sy);
kurs.Imgraf.Canvas.Pen.Color:=ColorDialog2.color;
kurs.Imgraf.Canvas.Brush.Color:=clwhite;
kurs.Imgraf.Canvas.MoveTo(x1,y1);
kurs.Imgraf.Canvas.LineTo(x3,y2);
x1:=x3;y1:=y2;
k:=true;
kurs.Imgraf.Canvas.Pen.Color:=clred;
kurs.Imgraf.Canvas.Pen.Width:=2;
hx1:=1;
hx:=(xk-xn)/10;
xa:=0;ya:=0;xb:=450;yb:=310;
mx:=(xb-xa)/(xk-xn);my:=(yb-ya)/(ymax-ymin);
sy:=ya+my*ymax;sx:=xa-mx*xn;
kurs.Imgraf.Canvas.MoveTo(xb,yb);
kurs.Imgraf.Canvas.LineTo(xa,yb);
x:=x+0.01;
until x>xk;
i:=3;
xx:=xn;
//âåðòèêàëüíûå ñîñòîâëÿþùèå
repeat
kurs.Imgraf.Canvas.MoveTo(i,ya);
kurs.Imgraf.Canvas.LineTo(i,yb);
kurs.Imgraf.Canvas.TextOut(i,yb+5,FloatToStr(xx));
inc(i,Round((Imgraf.Width-50)/10));
xx:=xx+hx;
until i>Imgraf.Width;
//ãîðèçîíòàëüíûå ñîñòàâëÿþùèå
i:=Imgraf.Height-50;
repeat
yy:=(sy-i)/my;
kurs.Imgraf.Canvas.MoveTo(0,i);
kurs.Imgraf.Canvas.LineTo(Imgraf.Width,i);
kurs.Imgraf.Canvas.TextOut(0,i-5,FloatToStrF(yy,ffNumber,4,2));
i:=i-round(hy);
dec(i,Round((Imgraf.Height-50)/10));
until i<0;
end;
rocedure TKurs.RadioButton1Click(Sender: TObject);
begin
Bitgraf.Enabled:=true;
end;
procedure TKurs.RadioButton2Click(Sender: TObject);
begin
Bitgraf.Enabled:=true;
end;
procedure TKurs.Button3Click(Sender: TObject);
begin
SetForegroundWindow(HWND_TOP);
end;
procedure TKurs.N9Click(Sender: TObject);
begin
Form4.Show;
end;
procedure TKurs.Timer1Timer(Sender: TObject);
begin
Gauge1.Progress:=Gauge1.Progress+10;
if Gauge1.Progress=100 then begin
Timer1.Enabled:=false;
Gauge1.Progress:=0;
end;
end;
procedure TKurs.N10Click(Sender: TObject);
begin
if ColorDialog2.Execute then
kurs.Imgraf.Canvas.Pen.Color:=ColorDialog1.Color;
end;
procedure TKurs.N11Click(Sender: TObject);
begin
if ColorDialog1.Execute then
kurs.Imgraf.Canvas.Pen.Color:=ColorDialog1.Color;
end;
procedure TKurs.N12Click(Sender: TObject);
begin
Kurs.Close;
end;
end.
|
|
Индивидуальные и групповые автопоилки: для животных. Схемы и конструкции...
Механическое удерживание земляных масс: Механическое удерживание земляных масс на склоне обеспечивают контрфорсными сооружениями различных конструкций...
Эмиссия газов от очистных сооружений канализации: В последние годы внимание мирового сообщества сосредоточено на экологических проблемах...
Биохимия спиртового брожения: Основу технологии получения пива составляет спиртовое брожение, - при котором сахар превращается...
© cyberpedia.su 2017-2024 - Не является автором материалов. Исключительное право сохранено за автором текста.
Если вы не хотите, чтобы данный материал был у нас на сайте, перейдите по ссылке: Нарушение авторских прав. Мы поможем в написании вашей работы!