Мегаобучалка Главная | О нас | Обратная связь


Функционально-структурная схема



2020-02-04 182 Обсуждений (0)
Функционально-структурная схема 0.00 из 5.00 0 оценок




 


Рис. 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 - Настройки

 

На этой форме расположены настройки с помощью которых настраивается цвет и шрифты главной формы.

 

Элементы главной формы

 

Элемент формы Назначение

Событие

Bitgraf Кнопка для запуска процедуры прорисовки графиков

BitgrafClick

Buclear Кнопка для очистки поля для вывода значений интегралов

BuclearClick

Burun Кнопка для запуска процедуры вычисления интегралов

BurunClick

Cbint Переключатель для выбора интеграла

CbintChange

CBmet Переключатель для выбора метода решения

 

ColorDialog Палитра для выбора цвета

 

DateTimePicker Календарь (день,месяц,год)

 

Edzn1 Поле для ввода нижнего предела интеграла

 

Edzn2 Поле для ввода верхнего предела интеграла

 

Gauge Компонент для визуального отображения степени завершенности некоторой длительной орерации или процесса  

 

Imgraf Поле для вывода графически результатов вычисления

 

Imint Поле для вывода графического изображения интеграла

 

Kurs Главная форма

MainMenu

FormCreate

LbCbint Метка которая указывает на переключатель Cbint

 

LbCbmet Метка которая указывает на переключатель Cb met

 

LbEdzn1 Метка которая указывает поле Edzn1

 

LbEdzn2 Метка которая указывает поле Edzn2

 

LbintGraf Метка которая указывает поле Imgraf

 

MMoutput Поле для вывода значений припостроении графика

 

LbznGr Метка которая указывает поле MMoutput

 

N22 S etCurrentDirectory

Пункт меню для применении функции S etCurrentDirectory

N22GetCurrentDirectory1Click
N52SetForegroundWindow1Click

Пункт меню для применении функции SetForegroundWindow

N52SetForegroundWindow1Click
RBint1

Переключатель для построения графика на первый интеграл

RBint1Click
RBint2

Переключатель для построения графика на второй интеграл

RBint2Click
StatusBar

Строка для вывода подсказок

 
       

Функции 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 ;

 



2020-02-04 182 Обсуждений (0)
Функционально-структурная схема 0.00 из 5.00 0 оценок









Обсуждение в статье: Функционально-структурная схема

Обсуждений еще не было, будьте первым... ↓↓↓

Отправить сообщение

Популярное:
Как вы ведете себя при стрессе?: Вы можете самостоятельно управлять стрессом! Каждый из нас имеет право и возможность уменьшить его воздействие на нас...
Почему стероиды повышают давление?: Основных причин три...
Почему агроценоз не является устойчивой экосистемой
Как распознать напряжение: Говоря о мышечном напряжении, мы в первую очередь имеем в виду мускулы, прикрепленные к костям ...



©2015-2024 megaobuchalka.ru Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. (182)

Почему 1285321 студент выбрали МегаОбучалку...

Система поиска информации

Мобильная версия сайта

Удобная навигация

Нет шокирующей рекламы



(0.01 сек.)