Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Лабник по СПО

.pdf
Скачиваний:
9
Добавлен:
05.06.2015
Размер:
1.59 Mб
Скачать

WoEd.Text:=FloatToStrF(Wo,ffGeneral,5,3);

fo:=Wo/2/Pi;

foEd.Text:=FloatToStrF(fo,ffGeneral,5,3);

tp:=1/fo;

tpEd.Text:=FloatToStrF(tp,ffGeneral,5,3)

End;

Procedure TfmHt.ToEdChange(Sender: TObject);

Begin

If ToEd.Focused Then

Begin

T0:=Vvod(ToEd.Text); If T0>100 Then T0:=100;

If T0<0.001 Then T0:=0.001; a:=-Kci/T0;

Wo:=Kci1/T0;

WoEd.Text:=FloatToStrF(Wo,ffGeneral,5,3);

fo:=Wo/2/Pi;

foEd.Text:=FloatToStrF(fo,ffGeneral,5,3);

tp:=1/fo;

tpEd.Text:=FloatToStrF(tp,ffGeneral,5,3)

End

End;

Procedure TfmHt.WoEdChange(Sender: TObject);

Begin

If WoEd.Focused Then

Begin

Wo:=Vvod(WoEd.Text);

If Wo>1000 Then Wo:=1000;

If Wo<0.01 Then Wo:=0.01; T0:=Kci1/Wo; fo:=Wo/2/Pi;

tp:=1/fo;

ToEd.Text:=FloatToStrF(T0,ffGeneral,5,3);

foEd.Text:=FloatToStrF(fo,ffGeneral,5,3);

tpEd.Text:=FloatToStrF(tp,ffGeneral,5,3)

161

PDF created with pdfFactory Pro trial version www.pdffactory.com

End

End;

Procedure TfmHt.foEdChange(Sender: TObject);

Begin

If foEd.Focused Then

Begin fo:=Vvod(foEd.Text);

If fo>1000 Then fo:=1000; If fo<0.01 Then fo:=0.01; Wo:=fo*2*Pi;

tp:=1/fo;

T0:=Kci1/Wo;

ToEd.Text:=FloatToStrF(T0,ffGeneral,5,3);

WoEd.Text:=FloatToStrF(Wo,ffGeneral,5,3);

tpEd.Text:=FloatToStrF(tp,ffGeneral,5,3)

End

End;

Procedure TfmHt.tpEdChange(Sender: TObject);

Begin

If tpEd.Focused Then

Begin tp:=Vvod(tpEd.Text);

If tp<0.001 Then tp:=0.001; If tp>100 Then tp:=100; fo:=1/tp;

foEd.Text:=FloatToStrF(fo,ffGeneral,5,3);

Wo:=fo*2*Pi;

WoEd.Text:=FloatToStrF(Wo,ffGeneral,5,3);

T0:=Kci1/Wo;

ToEd.Text:=FloatToStrF(T0,ffGeneral,5,3)

End

End;

Создаём процедуру рисования координат с учётом заданного значения максимального времени, реализующую блок 20 из рис.6.2.

Procedure TfmHt.Scale;

162

PDF created with pdfFactory Pro trial version www.pdffactory.com

Var

J :Byte;

Begin

With ImageGraf.Canvas Do

Begin

Font.Color:=clBlack;

Pen.Color:=clBlack;

Pen.Width:=1;

MoveTo(3,275);

LineTo(590,275);

MoveTo(30,280);

LineTo(30,10); TextOut(27, 280,'0'); MoveTo(25,150); LineTo(590,150); TextOut(10, 145,'1'); TextOut(580, 258,'t'); TextOut(15, 10,'h');

MoveTo(30,10); LineTo(33,20);

MoveTo(30,10); LineTo(27,20); MoveTo(590,275); LineTo(580,272); MoveTo(590,275); LineTo(580,278)

End;

For J:=1 To tmax Do

With ImageGraf.Canvas Do

Begin

MoveTo(30+CnSc*J,280);

LineTo(30+CnSc*J,15); TextOut(28+CnSc*J, 285,IntToStr(J))

End End;

Пишем процедуру удаления графиков и восстановления осей координат (реализация блоков 21, 22 из рис.6.2).

Procedure TfmHt.BitBtCleareClick(Sender: TObject);

Begin

163

PDF created with pdfFactory Pro trial version www.pdffactory.com

ImageGraf.Canvas.Brush.Color:=clWhite;

ImageGraf.Canvas.FillRect(ClientRect);

Scale;

Ngr:=0

End;

Создаём процедуру изменения масштаба по оси времени (реализация блока 20 из рис.6.2).

Procedure TfmHt.ScrollBar1Change(Sender: TObject);

Begin tmax:=ScrollBar1.Position; CnSc:=Trunc(540/tmax); BitBtCleareClick(BitBtCleare); Scale;

End;

Создаём процедуру задания цвета графика.

Procedure TfmHt.ColorBitBtClick(Sender: TObject);

Begin

With ColorDialog1 Do

If Execute Then PenCol:=Color

End;

Инаконец, приступаем к написанию процедуры построения графика. Аргументом

ввыражении (6.1) является время. При рисовании кривой на экране аргументом будет смещение по горизонтальной оси. Расчётную кривую разбиваем на отдельные участки. Чем больше будет участков, тем плавнее кривая. Выбираем ширину объекта ImageGraf равной 600 пикселей, отступаем справа на 30 пикселей. Получаем длину графика 570 пикселей. Принимаем шаг приращения по оси времени равным трём пикселям и получаем 190 расчётных точек.

Procedure TfmHt.GrafBitBtClick(Sender: TObject); Var J :Byte;

Begin tpEd.Text:=FloatToStrF(tp,ffGeneral,5,3); foEd.Text:=FloatToStrF(fo,ffGeneral,5,3); WoEd.Text:=FloatToStrF(Wo,ffGeneral,5,3); ToEd.Text:=FloatToStrF(T0,ffGeneral,5,3); KciEd.Text:=FloatToStrF(Kci,ffGeneral,5,3); Ngr:=Ngr+1;

164

PDF created with pdfFactory Pro trial version www.pdffactory.com

ImageGraf.Canvas.MoveTo(30,275);

ImageGraf.Canvas.Pen.Color:=PenCol;

ImageGraf.Canvas.Pen.Width:=3;

For J:=1 To 190 Do

ImageGraf.Canvas.LineTo(3*J+30,Round(275-(1-Sin (Wo*3*J/CnSc+fi)*Exp(a*3*J/CnSc)/Kci1)*125)); ImageGraf.Canvas.Font.Color:=PenCol; ImageGraf.Canvas.TextOut(45*Ngr, 10,FloatToStrF (Kci,ffGeneral,2,1)+'-'+FloatToStrF(T0,ffGeneral,2,1))

End;

Текст программы на языке С++

Последовательность написания текста выбираем так, чтобы работу каждого оператора можно было проверить сразу после написания каждого оператора.

Объявляем переменные, обозначив их такими же именами, как и в программе на языке

Delphi.

public: // User declarations

__fastcall TfmHt(TComponent* Owner); double a,fi,Kci,Kci1,Wo,fo,T0,tp; unsigned tmax,CnSc,Ngr;

TColor PenCol;

Задаём начальные значения параметров в функции, реализующей блок 2 из схемы, показанной на рис.6.2:

void __fastcall TfmHt::FormCreate(TObject *Sender) {T0=0.2; Kci=0.1; Wo=4.9749; fi=1.471;

tmax=5; CnSc=108; fo=0.79179; tp=1.263; Kci1=sqrt(1-Kci*Kci);

a=-Kci/T0; // Scale();

Application->HintHidePause = -1;

}

Вызов функции рисования координат Scale; пока закомментирован, после создания этой функции комментарии нужно убрать. Функцию преобразования строки в число заимствуем из работы № 3 (распечатка 3.6).

165

PDF created with pdfFactory Pro trial version www.pdffactory.com

Создаём функцию ввода параметров, т.е. реализуем блоки с 7-го по 14-й из схемы, показанной на рис.6.2. Во всех функциях, кроме функции ввода коэффициента затухания, должно проверяться наличие фокуса.

void __fastcall TfmHt::KciEdChange(TObject *Sender) {Kci=Vvod(KciEd->Text);

if (Kci>0.91) Kci=0.91; if (Kci<0.01) Kci=0.01; a = -Kci/T0; Kci1=sqrt(1-Kci*Kci); fi=atan(Kci1/Kci); Wo=Kci1/T0;

WoEd->Text=FloatToStrF(Wo,ffGeneral,5,3); fo=Wo/2/M_PI; foEd->Text=FloatToStrF(fo,ffGeneral,5,3); tp=1/fo; tpEd->Text=FloatToStrF(tp,ffGeneral,5,3);

}

void __fastcall TfmHt::ToEdChange(TObject *Sender) {if (ToEd->Focused())

{T0=Vvod(ToEd->Text); if (T0>100) T0=100;

if (T0<0.001) T0=0.001;

a = -Kci/T0; Wo=Kci1/T0; WoEd->Text=FloatToStrF(Wo,ffGeneral,5,3); fo=Wo/2/M_PI; foEd->Text=FloatToStrF(fo,ffGeneral,5,3); tp=1/fo; tpEd->Text=FloatToStrF(tp,ffGeneral,5,3); ToEd->Text=FloatToStrF(T0,ffGeneral,5,3);

}

}

void __fastcall TfmHt::WoEdChange(TObject *Sender) {if (WoEd->Focused())

{Wo=Vvod(WoEd->Text); if (Wo>1000) Wo=1000;

166

PDF created with pdfFactory Pro trial version www.pdffactory.com

if (Wo<0.01) Wo=0.01; T0=Kci1/Wo;

ToEd->Text=FloatToStrF(T0,ffGeneral,5,3); fo=Wo/2/M_PI; foEd->Text=FloatToStrF(fo,ffGeneral,5,3); tp=1/fo; tpEd->Text=FloatToStrF(tp,ffGeneral,5,3);

}

}

void __fastcall TfmHt::foEdChange(TObject *Sender) {if (foEd->Focused())

{fo=Vvod(foEd->Text); if (fo>1000) fo=1000; if (fo<0.01) fo=0.01; Wo=fo*2*M_PI; T0=Kci1/Wo; tp=1/fo;

ToEd->Text=FloatToStrF(T0,ffGeneral,5,3); WoEd->Text=FloatToStrF(Wo,ffGeneral,5,3); tpEd->Text=FloatToStrF(tp,ffGeneral,5,3);

}

}

void __fastcall TfmHt::tpEdChange(TObject *Sender)

{

if (tpEd->Focused())

{

tp=Vvod(tpEd->Text); if (tp>100) tp=100;

if (tp<0.001) tp=0.001; fo=1/tp;

foEd->Text=FloatToStrF(fo,ffGeneral,5,3); Wo=fo*2*M_PI; WoEd->Text=FloatToStrF(Wo,ffGeneral,5,3); T0=Kci1/Wo; ToEd->Text=FloatToStrF(T0,ffGeneral,5,3);

}

167

PDF created with pdfFactory Pro trial version www.pdffactory.com

}

Реализуем блок 22 из рис.6.2 созданием функции рисования координат с учётом заданного значения максимального времени.

void __fastcall TfmHt::Scale()

{

ImageGraf->Canvas->Font->Color=clBlack;

ImageGraf->Canvas->Pen->Color=clBlack; ImageGraf->Canvas->Pen->Width=1; ImageGraf->Canvas->MoveTo(3,275); ImageGraf->Canvas->LineTo(590,275); ImageGraf->Canvas->MoveTo(30,280); ImageGraf->Canvas->LineTo(30,10); ImageGraf->Canvas->TextOut(27, 280,'0'); ImageGraf->Canvas->MoveTo(25,150); ImageGraf->Canvas->LineTo(590,150); ImageGraf->Canvas->TextOut(10, 145,'1'); ImageGraf->Canvas->TextOut(580, 258,'t'); ImageGraf->Canvas->TextOut(15, 10,'h'); ImageGraf->Canvas->MoveTo(30,10); ImageGraf->Canvas->LineTo(33,20); ImageGraf->Canvas->MoveTo(30,10); ImageGraf->Canvas->LineTo(27,20); ImageGraf->Canvas->MoveTo(590,275); ImageGraf->Canvas->LineTo(580,272); ImageGraf->Canvas->MoveTo(590,275); ImageGraf->Canvas->LineTo(580,278); for ( Word i=1; i<=tmax; i++ )

{

ImageGraf->Canvas->MoveTo(30+CnSc*i,280);

ImageGraf->Canvas->LineTo(30+CnSc*i,15); ImageGraf->Canvas->TextOut

(28+CnSc*i, 285,IntToStr(i));

}

}

168

PDF created with pdfFactory Pro trial version www.pdffactory.com

Создаём функцию удаления графиков и восстановления осей координат, реализующую блок 19 из рис.6.2.

void __fastcall TfmHt::BitBtCleareClick (TObject *Sender)

{

ImageGraf->Canvas->Brush->Color = clWhite; ImageGraf->Canvas->FillRect(ClientRect); Scale();

Ngr = 0;

}

Создаём функцию изменения масштаба по оси времени. void __fastcall TfmHt::ScrollBar1Change

(TObject *Sender)

{

tmax = ScrollBar1->Position; CnSc = ceil(540/tmax); BitBtCleareClick(BitBtCleare); Scale();

}

Помещаем на форму объект типа TColorDialog и создаём функцию задания цвета графика. void __fastcall TfmHt::ColorBitBtClick(TObject *Sender)

{

if (ColorDialog1->Execute()) PenCol = ColorDialog1->Color;

}

Пишем функцию построения графика. Принимаем шаг приращения по оси времени 3 пикселя и получаем 190 расчётных точек.

void __fastcall TfmHt::GrafBitBtClick (TObject *Sender) {tpEd->Text=FloatToStrF(tp,ffGeneral,5,3); foEd->Text=FloatToStrF(fo,ffGeneral,5,3); WoEd->Text=FloatToStrF(Wo,ffGeneral,5,3); ToEd->Text=FloatToStrF(T0,ffGeneral,5,3); KciEd->Text=FloatToStrF(Kci,ffGeneral,5,3); unsigned x,y;

169

PDF created with pdfFactory Pro trial version www.pdffactory.com

Ngr = Ngr+1; ImageGraf->Canvas->MoveTo(30,275); ImageGraf->Canvas->Pen->Color=PenCol; ImageGraf->Canvas->Pen->Width=3;

for ( x = 0; x < 570; x = x+3 ) {y = 275-floor((1-

sin(Wo*x/CnSc+fi)*exp(a*x/CnSc)/Kci1)*125); ImageGraf->Canvas->LineTo(x+30,y);

}

ImageGraf->Canvas->Font->Color = PenCol; ImageGraf->Canvas->TextOut

(45*Ngr, 10,FloatToStrF(Kci,ffGeneral,2,1)+ '-'+FloatToStrF(T0,ffGeneral,2,1));

}

Контрольные вопросы

1.Как происходит отсчёт координат на рисунках?

2.Когда происходит событие OnCreate?

3.Какими способами можно создавать рисунки на экране?

4.Как проверить наличие файла при его открытии?

5.В чём состоит разница между рисованием и отображением?

6.Как отсчитываются координаты точки по вертикали?

7.Что называется диалоговым окном? Для чего используются диалоговые окна?

8.На что влияет свойство Stretch объекта типа TImage? Какие значения может принимать свойство Stretch объекта типа TImage?

9.Расскажите о методах удаления изображения.

170

PDF created with pdfFactory Pro trial version www.pdffactory.com

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]