- •Розділ 1 Алгоритм
- •1.1Опис алгоритму.
- •1.2Алгоритм у вигляді блок-схем.
- •Розділ 2 Виконана програма на мові object Pascal в середовищі Borland Delphi 7
- •2.1Інтерфейс програми
- •2.2Текст програми та модулів
- •2.2.1Текст файлу проекту
- •2.2.2Текст першого модуля
- •2.2.3Текст другого модуля
- •2.2.4Текст третього модуля
- •2.2.5Текст четвертого модуля
- •2.2.6Текст п'ятого модуля
- •Розділ 3 Результати тестування програми та інструкція користувача
- •3.1Інструкція користувача.
- •3.3Тест програми.
- •Висновок
- •Використана література
- •Додаток а. Виведення формул
2.2Текст програми та модулів
2.2.1Текст файлу проекту
Нижче наведений код проекту:
program Project1;
uses
Forms,
Unit1 in 'Unit1.pas' {Form1},
Unit2 in 'Unit2.pas' {Form2},
Unit3 in 'Unit3.pas' {Form3},
Unit4 in 'Unit4.pas' {Form4},
Unit5 in 'Unit5.pas' {Help};
{$R *.res}
begin
Application.Initialize;
Application.CreateForm(TForm1, Form1);
Application.CreateForm(TForm2, Form2);
Application.CreateForm(TForm3, Form3);
Application.CreateForm(TForm4, Form4);
Application.CreateForm(THelp, Help);
Application.Run;
2.2.2Текст першого модуля
Нижче наведений код першого модуля:
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, Menus, StdCtrls, OleCtnrs, ExtCtrls, jpeg, TeEngine, Series,
TeeProcs, Chart, XPMan;
type
TForm1 = class(TForm)
MainMenu1: TMainMenu;
N1: TMenuItem;
N2: TMenuItem;
N3: TMenuItem;
N4: TMenuItem;
N5: TMenuItem;
N6: TMenuItem;
N7: TMenuItem;
N8: TMenuItem;
N9: TMenuItem;
GroupBox1: TGroupBox;
Edit1: TEdit;
Edit2: TEdit;
Edit3: TEdit;
Label1: TLabel;
Label2: TLabel;
Label3: TLabel;
Label4: TLabel;
Label5: TLabel;
Label6: TLabel;
Label7: TLabel;
Edit4: TEdit;
Label8: TLabel;
Edit5: TEdit;
Label9: TLabel;
Label10: TLabel;
Button1: TButton;
memo1: TMemo;
OpenDialog1: TOpenDialog;
SaveDialog1: TSaveDialog;
Button2: TButton;
N10: TMenuItem;
N12: TMenuItem;
GroupBox2: TGroupBox;
chart1: TChart;
Button9: TButton;
N11: TMenuItem;
Label16: TLabel;
Series1: TLineSeries;
Series2: TLineSeries;
GroupBox3: TGroupBox;
CheckBox1: TCheckBox;
Edit6: TEdit;
XPManifest1: TXPManifest;
SaveDialog2: TSaveDialog;
Image1: TImage;
Label11: TLabel;
Label12: TLabel;
Label13: TLabel;
Label14: TLabel;
Label15: TLabel;
Series3: TLineSeries;
Series4: TLineSeries;
Series5: TLineSeries;
Series6: TLineSeries;
Series8: TLineSeries;
Edit9: TEdit;
Edit10: TEdit;
Label21: TLabel;
Label22: TLabel;
Label17: TLabel;
Label18: TLabel;
RadioButton1: TRadioButton;
RadioButton2: TRadioButton;
RadioButton3: TRadioButton;
RadioButton4: TRadioButton;
RadioButton5: TRadioButton;
RadioButton6: TRadioButton;
RadioButton7: TRadioButton;
Button3: TButton;
Label19: TLabel;
Label20: TLabel;
procedure N9Click(Sender: TObject);
procedure Edit1Change(Sender: TObject);
procedure Edit2Change(Sender: TObject);
procedure Edit6Change(Sender: TObject);
procedure Edit4Change(Sender: TObject);
procedure Edit5Change(Sender: TObject);
procedure N4Click(Sender: TObject);
procedure Button1Click(Sender: TObject);
procedure N8Click(Sender: TObject);
procedure N6Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure N3Click(Sender: TObject);
procedure N2Click(Sender: TObject);
procedure Button9Click(Sender: TObject);
procedure CheckBox1Click(Sender: TObject);
procedure N5Click(Sender: TObject);
procedure N11Click(Sender: TObject);
procedure Button3Click(Sender: TObject);
procedure RadioButton1Click(Sender: TObject);
procedure RadioButton4Click(Sender: TObject);
procedure RadioButton6Click(Sender: TObject);
procedure RadioButton2Click(Sender: TObject);
procedure RadioButton5Click(Sender: TObject);
procedure RadioButton3Click(Sender: TObject);
procedure RadioButton7Click(Sender: TObject);
procedure Edit9Change(Sender: TObject);
procedure Edit10Change(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
uses Unit2, Unit3, Unit4, Unit5;
{$R *.dfm}
procedure vis; //робить кнопки для збереження даних активними
begin //також кнопки виведення графіків гобить активними
form1.N3.Enabled:=true;
form1.N4.Enabled:=true;
form1.N5.Enabled:=true;
form1.RadioButton1.Enabled:=true;
form1.RadioButton2.Enabled:=true;
form1.RadioButton3.Enabled:=true;
form1.RadioButton4.Enabled:=true;
form1.RadioButton5.Enabled:=true;
form1.RadioButton6.Enabled:=true;
form1.RadioButton7.Enabled:=true;
end;
procedure invis;//процедура яка робить кнопки збереження даних
begin //неактивними та видаляє побудовані графіки
form1.N3.Enabled:=false;
form1.N4.Enabled:=false;
form1.N5.Enabled:=false;
form1.Series1.Clear;
form1.Series2.Clear;
form1.Series3.Clear; //видаляє побудовані графіки
form1.Series4.Clear;
form1.Series5.Clear;
form1.Series6.Clear;
form1.Series8.Clear;
form1.RadioButton1.Enabled:=false; //кнопки виведення графіків гобить активними
form1.RadioButton2.Enabled:=false;
form1.RadioButton3.Enabled:=false;
form1.RadioButton4.Enabled:=false;
form1.RadioButton5.Enabled:=false;
form1.RadioButton6.Enabled:=false;
form1.RadioButton7.Enabled:=false;
end;
procedure TForm1.N9Click(Sender: TObject);//виведення даних про програму
begin
form2.show;//відкриває другу форму
end;
procedure TForm1.Edit1Change(Sender: TObject);
begin
invis;
label11.Caption:='R1='+''+edit1.Text+ ' Oм';//для виведення значення першого опору на схемі
end;
procedure TForm1.Edit2Change(Sender: TObject);
begin invis;
label12.Caption:='R2='+''+edit2.Text+ ' Oм';//для виведення значення другого опору на схемі
end;
procedure TForm1.Edit6Change(Sender: TObject);
begin invis;
label13.Caption:='C='+''+edit6.Text+ ' ф';//для виведення ємності конденсатора на схемі
end;
procedure TForm1.Edit4Change(Sender: TObject);
begin invis;
label14.Caption:='L='+''+edit4.Text+ ' Гн';//для виведення індуктивності котушки на схемі
end;
procedure TForm1.Edit5Change(Sender: TObject);
begin invis;
label15.Caption:='E='+''+edit5.Text+ ' B';//для виведення величини ЕРС на схемі
end;
procedure TForm1.N4Click(Sender: TObject);//процедура для збереження даних з іншою назвою
begin
savedialog1.InitialDir:='d:\курсовий проект\файл'; //початкова папка для збереження
form1.saveDialog1.FileName:='file.txt'; //стандартна назва файлу
with saveDialog1 do // Відкривається вікно для збереження даних
if Execute then
begin
memo1.clear; //збереження з допомогою memo
memo1.Lines.append(Edit1.Text);
memo1.Lines.append(Edit2.Text);
memo1.Lines.append(Edit6.Text);
memo1.Lines.append(Edit4.Text);
memo1.Lines.append(Edit5.Text);
memo1.Lines.SaveToFile(filename);
caption := 'Перехідні процеси -' + ExtractFilename(filename);//присвоєння назви форми назві файлу
OpenDialog1.FileName := fileName;
end;
end;
procedure TForm1.Button1Click(Sender: TObject);//процедура виконання розрахунку
var r1,r2,l,c,e,p1,p2,d,a1,a2,i0,i3,uc,i2,ur2,i1,ur1,ul,Q:real; //опис змінних
x1,x2,a:real;
t,t1,t2:integer;
begin
vis;//виконання процедури vis
try //перевірка введених даних на помилку
strtofloat(form1.Edit1.Text);
strtofloat(form1.Edit2.Text);
strtofloat(form1.Edit6.Text);
strtofloat(form1.Edit4.Text);
strtofloat(form1.Edit5.Text);
StrToint(form1.Edit9.text);
StrToint(form1.Edit10.text);
begin
if( strtofloat(form1.Edit1.Text)<=0) or
( strtofloat(form1.Edit2.Text)<=0) or
( strtofloat(form1.Edit6.Text)<=0)or
( strtofloat(form1.Edit4.Text)<=0) or
( strtofloat(form1.Edit5.Text)<=0) or
( StrToint(form1.Edit9.text)<0) or
( StrToint(form1.Edit10.text)<0)then
showMessage('Помилка при вводі даних')//виведення повідомлення про помилку
else begin
r1:=strtofloat(form1.Edit1.Text);//опір першого резистора
r2:=strtofloat(form1.Edit2.Text);//опір другого резистора
c:=strtofloat(form1.Edit6.Text);//ємність конденсатора
l:=strtofloat(form1.Edit4.Text);//індуктивність котушки
e:=strtofloat(form1.Edit5.Text);//величина ЕРС
t1:=strtoint(form1.Edit9.text);//перша точка графіка перехідного процесу
t2:=strtoint(form1.Edit10.text);//остання точка графіка перехідного процесу
end;
end;
d:=sqr(l+c*r1*r2)-4*c*l*r2*(r1+r2);//обчислюємо дискримінант
if d=0 then //перевірка дискримінанту і початок розрахунку
begin
p1:=(-(l+c*r1*r2))/2*c*l*r2;//корні характеристичного рівняння при d=0
p2:=p1;//корні однакові
i0:=e/(r1+r2)-(-e/r2);//вільна складова струму при початкових умовах
a1:=-e-e/(r1+r2)*r2;//постійна інтегрування необхідні для розрахунку струмів і напруг
a2:=i0/c-p1*a1;//постійна інтегрування необхідні для розрахунку струмів і напруг
for t:=t1 to t2 do begin //початок розрахунку точок для графіка та побудова графіків
uc:=e*R2/(r1+r2)+a1*exp(p1*t)+a2*exp(p2*t);//напруга на конденсаторі
i3:=c*p1*a1*exp(p1*t)+c*p1*a2*t*exp(p1*t)+c*a2*exp(p1*t);//струм третьої гілки
i2:=e/(r1+r2)+a1/r2*exp(p1*t)+a2/r2*exp(p2*t);//струм другої гілки
ur2:=e*2*R2/(r1+r2)+a1*r2*exp(p1*t)+a2*r2*exp(p2*t);//напруга на другому опорі
i1:=i2+i3;//струм першої гілки
ur1:=i1*r1;//напруга на першому опорі
ul:=l*i1;//напруга на котушці
form1.Series1.AddXY(t,i3,'',clred);//побудова графіка струму третьої гілки
form1.Series2.AddXY(t,uc,'',clgreen);//побудова графіка напруги на конденсаторі
form1.Series3.AddXY(t,i2,'',clred);//побудова графіка струму другої гілки
form1.Series4.AddXY(t,ur2,'',clgreen);//побудова графіка напруги на конденсаторі
form1.Series5.AddXY(t,i1,'',clred);//побудова графіка струму першої гілки
form1.Series6.AddXY(t,ur1,'',clgreen);//побудова графіка напруги на першому опорі
form1.Series8.AddXY(t,ul,'',clgreen);// обудова графіка напруги на котушці
end;
form1.Series1.Active:=false;
form1.Series2.Active:=false; //графіки побудовані але вони неактивні
form1.Series3.Active:=false;
form1.Series4.Active:=false;
form1.Series5.Active:=false;
form1.Series6.Active:=false;
form1.Series8.Active:=false;
end else if d>0 then //перевірка дискримінанту і початок розрахунку
begin
p1:=(-(l+c*r1*r2)-sqrt(d))/2*c*l*r2;//перший корінь характеристичного рівняння
p2:=(-(l+c*r1*r2)+sqrt(d))/2*c*l*r2;//другий корінь характеристичного рівняння
i0:=e/(r1+r2)-(-e/r2);//вільна чкладова струму при початкових умовах
a2:=((i0/c)-p1*(-e)+p1*(e/(r1+r2)*r2))/(p2-p1);//перша постійна інтегрування
a1:=i0/c-a2-(e*(r1+r2)*r2);//друга постійна інтегрування
for t:=t1 to t2 do begin //початок розрахунку точок і побудови графіків
uc:=e*R2/(r1+r2)+a1*exp(p1*t)+a2*exp(p2*t);//напруга на конденсаторі
i3:=c*p1*a1*exp(p1*t)+c*p2*a2*exp(p1*t);//струм третьої гілки
i2:=e/(r1+r2)+a1/r2*exp(p1*t)+a2/r2*exp(p2*t);//струм другої гілки
ur2:=e*2*R2/(r1+r2)+a1*r2*exp(p1*t)+a2*r2*exp(p2*t);//напруга на першому опорі
i1:=i2+i3;//струм першої гілки
ur1:=i1*r1;//напруга на другому опорі
ul:=l*i1;//напруга на котушці
form1.Series1.AddXY(t,i3,'',clred);//побудова графіка струму третьої гілки
form1.Series2.AddXY(t,uc,'',clgreen);//побудова графіка напруги на конденсаторі
form1.Series3.AddXY(t,i2,'',clred);//побудова графіка струму другої гілки
form1.Series4.AddXY(t,ur2,'',clgreen);//побудова графіка напруги на конденсаторі
form1.Series5.AddXY(t,i1,'',clred);//побудова графіка струму першої гілки
form1.Series6.AddXY(t,ur1,'',clgreen);//побудова графіка напруги на першому опорі
form1.Series8.AddXY(t,ul,'',clgreen);// обудова графіка напруги на котушці
end;
form1.Series1.Active:=false;
form1.Series2.Active:=false; //графіки побудовані але вони неактивні
form1.Series3.Active:=false;
form1.Series4.Active:=false;
form1.Series5.Active:=false;
form1.Series6.Active:=false;
form1.Series8.Active:=false;
end;
if d<0 then //перевірка дискримінанту і початок розрахунку
begin
x1:=-(l+c*r1*r2)/2*c*l*r2;//дійсна частина комплексного числа
x2:=sqrt(abs(d))/2*c*l*r2;//уявна частина комплексного числа
q:=1/(cos(x1/x2)/sin(x1/x2));//перша постійна інтегрування
a:=(-e)/(x1*cos(q)+x2*sin(q));//друга постійна інтегрування
for t:=t1 to t2 do begin //початок розрахунку точок і побудови графіків
uc:=e*r2/(r1+r2)+a*exp(x1*t)*sin(x2*t+q);//напруга на конденсаторі
i3:=c*a*exp(x1*t)*x2*cos(x2*t+q)+c*x1*a*exp(x1*t)*sin(x2*t+q);//струм третьої гілки
i2:=e/(r1+r2)+a/r2*exp(x1*t)*sin(x2*t+q);//струм другої гілки
ur2:=i2*r2;//напруга на другому опорі
i1:=i2+i3;//струм першої гілки
ur1:=i1*r1;//напруга на першому опорі
ul:=l*i1;//напруга на котушці
form1.Series1.AddXY(t,i3,'',clred);//побудова графіка струму третьої гілки
form1.Series2.AddXY(t,uc,'',clgreen);//побудова графіка напруги на конденсаторі
form1.Series3.AddXY(t,i2,'',clred);//побудова графіка струму другої гілки
form1.Series4.AddXY(t,ur2,'',clgreen);//побудова графіка напруги на конденсаторі
form1.Series5.AddXY(t,i1,'',clred);//побудова графіка струму першої гілки
form1.Series6.AddXY(t,ur1,'',clgreen);//побудова графіка напруги на першому опорі
form1.Series8.AddXY(t,ul,'',clgreen);// побудова графіка напруги на котушці
end;
form1.Series1.Active:=false;
form1.Series2.Active:=false; //графіки побудовані але не активні
form1.Series3.Active:=false;
form1.Series4.Active:=false;
form1.Series5.Active:=false;
form1.Series6.Active:=false;
form1.Series8.Active:=false;
end;
except
showMessage('Помилка при вводі даних');//виведення повідомлення про помилку
invis; //виконання процедури invis
end;
end;
procedure TForm1.N8Click(Sender: TObject);//процедура закриття програми
begin
form1.Enabled:=false;//робить першу форму неактивною
form3.show;//відкриває 3 форму
end;
procedure TForm1.N6Click(Sender: TObject);//процедура відкриття даних
begin
opendialog1.InitialDir:='d:\курсовий проект\файл';
With OpenDialog1 do
if Execute then
begin
memo1.lines.LoadFromFile(filename);
Caption:='Перехідні процеси -' + extractFilename(filename);//присваєння назві форми назву файлу
Edit1.text:=memo1.Lines.Strings[0]; //кожному значенню присвоюються свої значення
Edit2.text:=memo1.Lines.strings[1];
Edit6.text:=memo1.Lines.strings[2];
Edit4.text:=memo1.Lines.strings[3];
Edit5.text:=memo1.Lines.strings[4];
end;
invis; //виконання процедури invis
end;
procedure TForm1.Button2Click(Sender: TObject);//процедура видалення даних
begin
Edit1.Text:=''; //присвоюємо величинам елементів початкове значення
Edit2.Text:='';
Edit6.Text:='';
Edit4.Text:='';
Edit5.Text:='';
form1.Series1.Clear;
form1.Series2.Clear; //видаляємо графіки
form1.Series3.Clear;
form1.Series4.Clear;
form1.Series5.Clear;
form1.Series6.Clear;
form1.Series8.Clear;
form1.N5.Enabled:=false;//кнопка збереження графіків стає неактивною
end;
procedure TForm1.N3Click(Sender: TObject);//процедура збереження даних
begin
if opendialog1.FileName <> '' then// якщо файл уже був збережений то перезберегти його
begin
memo1.clear;
memo1.Lines.append(Edit1.Text);
memo1.Lines.append(Edit2.Text); //збереження даних з допомогою memo1
memo1.Lines.append(Edit6.Text);
memo1.Lines.append(Edit4.Text);
memo1.Lines.append(Edit5.Text);
memo1.Lines.SaveToFile(OpenDialog1.filename);//власне збереження
end
else
N4Click(sender); //якщо не був збережений то виконати функцію для збереження даних N4Click
end;
procedure TForm1.N2Click(Sender: TObject);//процедура створення нового файлу
begin
form1.Series1.Clear;
form1.Series2.Clear; //видаляємо побудовані графіки
form1.Series3.Clear;
form1.Series4.Clear;
form1.Series5.Clear;
form1.Series6.Clear;
form1.Series8.Clear;
form1.Enabled:=false;//перша форма неактивна
form4.show;//відкриває 4 форму
end;
procedure TForm1.Button9Click(Sender: TObject);
begin
form1.Enabled:=false;//перша форма неактивна
Form3.Show;//відкриває 3 форму
end;
procedure TForm1.CheckBox1Click(Sender: TObject);//3D графіки
begin
if form1.CheckBox1.Checked then
chart1.View3D:=true
else
chart1.View3D:=false;
end;
procedure TForm1.N5Click(Sender: TObject);//збереження графіків
begin
savedialog2.InitialDir:='d:\курсовий проект\файл';//папка для збереження графіків
form1.saveDialog2.FileName:='Graph.bmp';//перша назва файлу
if saveDialog2.Execute then
Chart1.SaveToBitmapFile(saveDialog2.FileName);//власне збереження графіків
end;
procedure TForm1.N11Click(Sender: TObject);//процедура виведення справки
begin
Help.show;//виведення графіків
end;
procedure TForm1.Button3Click(Sender: TObject);
begin
form2.show;//виведення вікна про програму
end;
procedure TForm1.RadioButton1Click(Sender: TObject);//процедура виведення графіку в Chart1
begin
if form1.RadioButton1.Checked then
form1.Series5.Active:=true;
form1.Label19.Visible:=true; //виведення графіків на екран
form1.Label19.Caption:='I,A';
form1.Series2.Active:=false;
form1.Series3.Active:=false;
form1.Series4.Active:=false;
form1.Series1.Active:=false;
form1.Series6.Active:=false;
form1.Series8.Active:=false;
end;
procedure TForm1.RadioButton4Click(Sender: TObject);//процедура виведення графіку в Chart1
begin
if form1.RadioButton4.Checked then
Series6.Active:=true;
form1.Series1.Active:=false;
form1.Label19.Visible:=true;
form1.Label19.Caption:='U,B'; //виведення графіків на екран
form1.Series3.Active:=false;
form1.Series4.Active:=false;
form1.Series5.Active:=false;
form1.Series2.Active:=false;
form1.Series8.Active:=false;
end;
procedure TForm1.RadioButton6Click(Sender: TObject);//процедура виведення графіку в Chart1
begin
if form1.RadioButton6.Checked then
form1.Series8.Active:=true;
form1.Series1.Active:=false;
form1.Label19.Visible:=true;
form1.Label19.Caption:='U,B';
form1.Series2.Active:=false; //виведення графіків на екран
form1.Series4.Active:=false;
form1.Series5.Active:=false;
form1.Series6.Active:=false;
form1.Series3.Active:=false;
end;
procedure TForm1.RadioButton2Click(Sender: TObject);//процедура виведення графіку в Chart1
begin
if form1.RadioButton2.Checked then
form1.Series3.Active:=true;
form1.Series1.Active:=false;
form1.Label19.Visible:=true;
form1.Label19.Caption:='I,A'; //виведення графіків на екран
form1.Series2.Active:=false;
form1.Series4.Active:=false;
form1.Series5.Active:=false;
form1.Series6.Active:=false;
form1.Series8.Active:=false;
end;
procedure TForm1.RadioButton5Click(Sender: TObject);//процедура виведення графіку в Chart1
begin
if form1.RadioButton5.Checked then
form1.Series4.Active:=true;
form1.Series1.Active:=false;
form1.Label19.Visible:=true;
form1.Label19.Caption:='U,B';
form1.Series2.Active:=false;
form1.Series3.Active:=false;
form1.Series5.Active:=false;
form1.Series6.Active:=false;
form1.Series8.Active:=false;
end;
procedure TForm1.RadioButton3Click(Sender: TObject);//процедура виведення графіку в Chart1
begin
if form1.RadioButton3.Checked then
form1.Series1.Active:=true;
form1.Label19.Visible:=true;
form1.Label19.Caption:='I,A';
form1.Series2.Active:=false;
form1.Series3.Active:=false;
form1.Series4.Active:=false;
form1.Series5.Active:=false;
form1.Series6.Active:=false;
form1.Series8.Active:=false;
end;
procedure TForm1.RadioButton7Click(Sender: TObject);//процедура виведення графіку в Chart1
begin
if form1.RadioButton7.Checked then
form1.Series2.Active:=true;
form1.Label19.Visible:=true;
form1.Label19.Caption:='U,B';
form1.Series1.Active:=false;
form1.Series3.Active:=false; //виведення графіків на екран
form1.Series4.Active:=false;
form1.Series5.Active:=false;
form1.Series6.Active:=false;
form1.Series8.Active:=false;
end;
procedure TForm1.Edit9Change(Sender: TObject);
begin
invis;
end;
procedure TForm1.Edit10Change(Sender: TObject);
begin
invis;
end;
end.