Моделирования маятника с подвижной точкой подвеса

Рассмотрение структурной схемы программы визуального проектирования маятника Капицы. Описание разработанного класса модели. Характеристика реализаций технологий Com. Определение динамических библиотек. Выявление возможностей созданной программы.

Рубрика Программирование, компьютеры и кибернетика
Вид курсовая работа
Язык русский
Дата добавления 05.02.2015
Размер файла 933,3 K

Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже

Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.

var

Excel: Variant;

ExcelID : String;

i,j : Integer;

begin

ExcelID:='Excel.Application';

Excel:=CreateOleObject(ExcelID);

Excel.Application.DisplayAlerts:=false;

Excel.Workbooks.Add;

Excel.Range[Excel.Cells[1, 2], Excel.Cells[1, 6]].Select;

Excel.Selection.MergeCells:=True;

Excel.Workbooks[1].WorkSheets[1].Cells[1,2].HorizontalAlignment:=3;

Excel.Workbooks[1].WorkSheets[1].Cells[1,2].Value:='Маятник';

for j:=2 to PendulumStringGrid.RowCount+2 do

for i:=2 to MainPendulumStringGrid.ColCount+2 do begin

Excel.Workbooks[1].WorkSheets[1].Cells[j,i].Value:=

MainPendulumStringGrid.Cells[i-2,j-2];

end;

Excel.Visible:=true;

Excel:=Unassigned;

end;

procedure TForm1.PopupMenu2ClearClick(Sender: TObject);//Очистка таблицы перевернутый маятник на главной вкладке

var

i : Integer;

begin

with MainInvertedpendulumStringGrid do begin

for i:=FixedRows to RowCount-1 do

Rows[i].Clear;

RowCount:=2;

end;

end;

procedure TForm1.PopupMenu2SaveClick(Sender: TObject);//Сохранения таблицы перевернутый маятник

var

Excel: Variant;

ExcelID : String;

i,j : Integer;

begin

ExcelID:='Excel.Application';

Excel:=CreateOleObject(ExcelID);

Excel.Application.DisplayAlerts:=false;

Excel.Workbooks.Add;

Excel.Range[Excel.Cells[1, 2], Excel.Cells[1, 6]].Select;

Excel.Selection.MergeCells:=True;

Excel.Workbooks[1].WorkSheets[1].Cells[1,2].HorizontalAlignment:=3;

Excel.Workbooks[1].WorkSheets[1].Cells[1,2].Value:='Обращенный маятник';

for j:=2 to MainInvertedpendulumStringGrid.RowCount+2 do

for i:=2 to MainInvertedpendulumStringGrid.ColCount+2 do begin

Excel.Workbooks[1].WorkSheets[1].Cells[j,i].Value:=

MainInvertedpendulumStringGrid.Cells[i-2,j-2];

end;

Excel.WorkBooks[1].SaveAs(GetCurrentDir()+'\Table\'+FormatDateTime('DDMMYYYYhhmmss', Now)+'Invertedpendulum');

Excel.Application.Quit;

Excel:=Unassigned;

end;

procedure TForm1.PopupMenu2ExcelClick(Sender: TObject);//Выводим таблицу перевернутый маятник

var

Excel: Variant;

ExcelID : String;

i,j : Integer;

begin

ExcelID:='Excel.Application';

Excel:=CreateOleObject(ExcelID);

Excel.Application.DisplayAlerts:=false;

Excel.Workbooks.Add;

Excel.Range[Excel.Cells[1, 2], Excel.Cells[1, 6]].Select;

Excel.Selection.MergeCells:=True;

Excel.Workbooks[1].WorkSheets[1].Cells[1,2].HorizontalAlignment:=3;

Excel.Workbooks[1].WorkSheets[1].Cells[1,2].Value:='Обращенный маятник';

for j:=2 to MainInvertedpendulumStringGrid.RowCount+2 do

for i:=2 to MainInvertedpendulumStringGrid.ColCount+2 do begin

Excel.Workbooks[1].WorkSheets[1].Cells[j,i].Value:=

MainInvertedpendulumStringGrid.Cells[i-2,j-2];

end;

Excel.Visible:=true;

Excel:=Unassigned;

end;

procedure TForm1.PopupMenu3ClearClick(Sender: TObject);//Очистка таблицы маятник в вкладке маятник

var

i : Integer;

begin

with PendulumStringGrid do begin

for i:=FixedRows to RowCount-1 do

Rows[i].Clear;

RowCount:=2;

end;

end;

//Очистка таблицы перевернутый маятник в вкладке перевернутый маятник

procedure TForm1.PopupMenu4ClearClick(Sender: TObject);

var

i : Integer;

begin

with InvertedpendulumStringGrid do begin

for i:=FixedRows to RowCount-1 do

Rows[i].Clear;

RowCount:=2;

end;

end;

//PageControl//Заносим данные с перевенутого маятника в обычный маятник

procedure TForm1.MainSpeedButton1Click(Sender: TObject);

begin

if MainPanelCheckBox.Checked=false

then begin

MainPendulumEdit1.Text:=MainInvertedpendulumEdit1.Text;

MainPendulumEdit2.Text:=MainInvertedpendulumEdit2.Text;

MainPendulumEdit3.Text:=MainInvertedpendulumEdit3.Text;

MainPendulumEdit4.Text:=MainInvertedpendulumEdit4.Text;

end;

end;

//Заносим данные с обычного маятника в перевернутый маятник

procedure TForm1.MainSpeedButton2Click(Sender: TObject);

begin

if MainPanelCheckBox.Checked=false

then begin

MainInvertedpendulumEdit1.Text:=MainPendulumEdit1.Text;

MainInvertedpendulumEdit2.Text:=MainPendulumEdit2.Text;

MainInvertedpendulumEdit3.Text:=MainPendulumEdit3.Text;

MainInvertedpendulumEdit4.Text:=MainPendulumEdit4.Text;

end;

end;

//Строим обычный маятник

procedure TForm1.MainPendulumResClick(Sender: TObject);

begin

if (MainPendulumEdit1.Text='') or (MainPendulumEdit2.Text='') or (MainPendulumEdit3.Text='') or (MainPendulumEdit4.Text='') then exit;

if (OptionSeparatewindowCheckBox1.Checked=true) or (OptionMultipleinstancesCheckBox1.Checked=true)

then begin//Создаем дополнительное окно

FormPend:=TForm.Create(Application);

FormPend.BorderIcons:=[];

FormPend.Width:=700;

FormPend.Height:=700;

FormPend.AlphaBlend:=true;

FormPend.AlphaBlendValue:=200;

FormPend.Show;

end;

Pendul:=TPendulumThread.Create(true);//Создаем поток

Pendul.Resume;//Запускаем выполнения потока

MainPendulumRes.Enabled:=false;

MainPendulumStop.Enabled:=true;

MainMenuFileNew.Enabled:=false;

MainMenuFileOpen.Enabled:=false;

ToolButtonNew.Enabled:=false;

ToolButtonOpen.Enabled:=false;

ClosePend:=false;//Запрещаем выход до завершения построения маятника

Series1.Clear;//Очистка графика

if MainInvertedpendulumStop.Enabled<>true

then

MainPanelBitBtn1.Enabled:=false

else begin

MainPanelBitBtn1.Enabled:=true;

MainPanelBitBtn1.Caption:='Остановить все';

end;

StatusBar1.Panels.Items[1].Text:='Идет построение маятника.Начало:';

StatusBar1.Panels.Items[2].Text:=FormatDateTime('hh:mm:ss', Now);// Записываем дату начала построения

end;

//Останавливаем построения обычного маятника

procedure TForm1.MainPendulumStopClick(Sender: TObject);

begin

if Assigned(FormPend)//Проверям была ли использована доп. форма

then

FreeAndNil(FormPend);//Уничтожаем форму

FreeAndNil(Pendul);//Уничтожаем поток

MainPendulumRes.Enabled:=true;

MainPendulumStop.Enabled:=false;

if MainInvertedpendulumRes.Enabled=true

then begin

MainMenuFileNew.Enabled:=true;

MainMenuFileOpen.Enabled:=true;

ToolButtonNew.Enabled:=true;

ToolButtonOpen.Enabled:=true;

end;

ClosePend:=true;//Построение завершено

if MainInvertedpendulumRes.Enabled<>true

then

MainPanelBitBtn1.Enabled:=false

else begin

MainPanelBitBtn1.Enabled:=true;

MainPanelBitBtn1.Caption:='Построить все';

end;

StatusBar1.Panels.Items[1].Text:='Построение закончено.Конец:';

StatusBar1.Panels.Items[2].Text:=FormatDateTime('hh:mm:ss', Now);//Записывае дату конца построения маятника

end;

//Построения перевернутого маятника

procedure TForm1.MainInvertedpendulumResClick(Sender: TObject);

begin

if (MainInvertedpendulumEdit1.Text='') or (MainInvertedpendulumEdit2.Text='') or (MainInvertedpendulumEdit3.Text='') or (MainInvertedpendulumEdit4.Text='') then exit;

if (OptionSeparatewindowCheckBox2.Checked=true) or (OptionMultipleinstancesCheckBox2.Checked=true)

then begin//Создаем доп. форму

FormInvPend:=TForm.Create(Application);

FormInvPend.BorderIcons:=[];

FormInvPend.Width:=700;

FormInvPend.Height:=700;

FormInvPend.AlphaBlend:=true;

FormInvPend.AlphaBlendValue:=200;

FormInvPend.Show;

end;

InvPendul:=TInvertedPendulumThread.Create(true);//Создаем поток

InvPendul.Resume;//Запускаем выполнения потока

MainInvertedpendulumRes.Enabled:=false;

MainInvertedpendulumStop.Enabled:=true;

MainMenuFileNew.Enabled:=false;

MainMenuFileOpen.Enabled:=false;

ToolButtonNew.Enabled:=false;

ToolButtonOpen.Enabled:=false;

CloseInvPend:=false;//Идет построения маятника

Series2.Clear;//Очистка графика

if MainPendulumStop.Enabled<>true

then

MainPanelBitBtn1.Enabled:=false

else begin

MainPanelBitBtn1.Enabled:=true;

MainPanelBitBtn1.Caption:='Остановить все';

end;

StatusBar1.Panels.Items[4].Text:='Идет построение маятника.Начало:';

StatusBar1.Panels.Items[5].Text:=FormatDateTime('hh:mm:ss', Now);// Записываем дату начала построения

end;

//Построения перевернутого маятника

procedure TForm1.MainInvertedpendulumStopClick(Sender: TObject);

begin

if Assigned(FormInvPend)//Проверяем была ли использована доп. форма

then

FreeAndNil(FormInvPend);//Уничтожаем форму

FreeAndNil(InvPendul);//Уничтожаем поток

MainInvertedpendulumRes.Enabled:=true;

MainInvertedpendulumStop.Enabled:=false;

if MainPendulumRes.Enabled=true

then begin

MainMenuFileNew.Enabled:=true;

MainMenuFileOpen.Enabled:=true;

ToolButtonNew.Enabled:=true;

ToolButtonOpen.Enabled:=true;

end;

CloseInvPend:=true;//Построения маятника завершено

if MainPendulumRes.Enabled<>true

then

MainPanelBitBtn1.Enabled:=false

else begin

MainPanelBitBtn1.Enabled:=true;

MainPanelBitBtn1.Caption:='Построить все';

end;

StatusBar1.Panels.Items[4].Text:='Построение закончено.Конец:';

StatusBar1.Panels.Items[5].Text:=FormatDateTime('hh:mm:ss', Now); //Записывае дату конца построения маятника

end;

//Запрещаем изменения значений

procedure TForm1.MainPanelCheckBoxClick(Sender: TObject);

begin

MainPendulumEdit1.ReadOnly:=MainPanelCheckBox.Checked;

MainPendulumEdit2.ReadOnly:=MainPanelCheckBox.Checked;

MainPendulumEdit3.ReadOnly:=MainPanelCheckBox.Checked;

MainPendulumEdit4.ReadOnly:=MainPanelCheckBox.Checked;

MainInvertedpendulumEdit1.ReadOnly:=MainPanelCheckBox.Checked;

MainInvertedpendulumEdit2.ReadOnly:=MainPanelCheckBox.Checked;

MainInvertedpendulumEdit3.ReadOnly:=MainPanelCheckBox.Checked;

MainInvertedpendulumEdit4.ReadOnly:=MainPanelCheckBox.Checked;

end;

//Построить оба маятника и остановить оба маятника

procedure TForm1.MainPanelBitBtn1Click(Sender: TObject);

begin

if (MainPendulumEdit1.Text='') or (MainPendulumEdit2.Text='') or (MainPendulumEdit3.Text='') or (MainPendulumEdit4.Text='') then exit;

if (MainInvertedpendulumEdit1.Text='') or (MainInvertedpendulumEdit2.Text='') or (MainInvertedpendulumEdit3.Text='') or (MainInvertedpendulumEdit4.Text='') then exit;

if MainPanelBitBtn1.Caption='Построить все'

then begin

MainPendulumResClick(nil);

MainInvertedpendulumResClick(nil);

MainPanelBitBtn1.Caption:='Остановить все';

end

else begin

MainPendulumStopClick(nil);

MainInvertedpendulumStopClick(nil);

MainPanelBitBtn1.Caption:='Построить все';

end;

end;

procedure TForm1.MainPanelBitBtn2Click(Sender: TObject);

begin

Close;//Закрыть программу

end;

//Приблежения графика

procedure TForm1.FormMouseWheelDown(Sender: TObject; Shift: TShiftState;MousePos: TPoint; var Handled: Boolean);

begin

if PageControl.ActivePage=PageControlGraf

then

if k0>50

then begin

k0:=k0-2;

GrafChart.ZoomPercent(k0);

end;

end;

procedure TForm1.FormMouseWheelUp(Sender: TObject; Shift: TShiftState;MousePos: TPoint; var Handled: Boolean);

begin// Отдаления маятника

if PageControl.ActivePage=PageControlGraf

then

if k1<150

then begin

k1:=k1+2;

GrafChart.ZoomPercent(k1);

end;

end;

procedure TForm1.EditKeyPress(Sender: TObject; var Key: Char);

begin

if not (Key in ['0'..'9', ',',#8]) then Key:=chr(0);//Разрешения вводить только цифры и запятуб

end;

procedure TForm1.MainPendulumEdit4Change(Sender: TObject);

begin//Проверяем на допустимость значения

if MainPendulumEdit4.Text='' then exit;

if (StrToFloat(MainPendulumEdit4.Text)>180) or (StrToFloat(MainPendulumEdit4.Text)<-180)

then begin

MessageBox(Self.Handle, PChar('Значение должно быть из промежутка: [-180;180]'), PChar('Предупреждение'), MBOK + MBICONINFORMATION + MBAPPLMODAL);

MainPendulumEdit4.Undo;

end;

end;

procedure TForm1.MainInvertedpendulumEdit4Change(Sender: TObject);

begin//Проверяем на допустимость значения

if MainInvertedpendulumEdit4.Text='' then exit;

if (StrToFloat(MainInvertedpendulumEdit4.Text)>180) or (StrToFloat(MainInvertedpendulumEdit4.Text)<-180)

then begin

MessageBox(Self.Handle, PChar('Значение должно быть из промежутка: [-180;180]'), PChar('Предупреждение'), MBOK + MBICONINFORMATION + MBAPPLMODAL);

MainInvertedpendulumEdit4.Undo;

end;

end;

//Дополнительные настройки

procedure TForm1.Separatewindow(Sender: TObject);//Настройки вывода маятников на экран

begin

if OptionSeparatewindowCheckBox1.Checked=true

then

OptionMultipleinstancesCheckBox1.Enabled:=false

else

OptionMultipleinstancesCheckBox1.Enabled:=true;

if OptionSeparatewindowCheckBox2.Checked=true

then

OptionMultipleinstancesCheckBox2.Enabled:=false

else

OptionMultipleinstancesCheckBox2.Enabled:=true;

if OptionSeparatewindowCheckBox3.Checked=true

then

OptionMultipleinstancesCheckBox3.Enabled:=false

else

OptionMultipleinstancesCheckBox3.Enabled:=true;

if (OptionSeparatewindowCheckBox1.Checked=false) and (OptionSeparatewindowCheckBox2.Checked=false)

then

OptionMultipleinstancesCheckBox3.Enabled:=true

else

OptionMultipleinstancesCheckBox3.Enabled:=false;

if (OptionSeparatewindowCheckBox1.Checked=false) or (OptionSeparatewindowCheckBox2.Checked=false)

then begin

OptionSeparatewindowCheckBox3.Checked:=false;

OptionSeparatewindowCheckBox3.BringToFront;

end

else begin

OptionSeparatewindowCheckBox4.Checked:=true;

OptionSeparatewindowCheckBox4.BringToFront;

end;

end;

procedure TForm1.OptionSeparatewindowCheckBox3Click(Sender: TObject);//Выделить все

begin

if OptionSeparatewindowCheckBox3.Checked=true

then begin

OptionSeparatewindowCheckBox1.Checked:=true;

OptionSeparatewindowCheckBox2.Checked:=true;

end;

end;

procedure TForm1.OptionSeparatewindowCheckBox4Click(Sender: TObject);//Снять выделения

begin

if OptionSeparatewindowCheckBox4.Checked=false

then begin

OptionSeparatewindowCheckBox1.Checked:=false;

OptionSeparatewindowCheckBox2.Checked:=false;

end;

end;

procedure TForm1.Multipleinstances(Sender: TObject); //Настройки вывода маятников на экран

begin

if OptionMultipleinstancesCheckBox1.Checked=true

then

OptionSeparatewindowCheckBox1.Enabled:=false

else

OptionSeparatewindowCheckBox1.Enabled:=true;

if OptionMultipleinstancesCheckBox2.Checked=true

then

OptionSeparatewindowCheckBox2.Enabled:=false

else

OptionSeparatewindowCheckBox2.Enabled:=true;

if OptionMultipleinstancesCheckBox3.Checked=true

then

OptionSeparatewindowCheckBox3.Enabled:=false

else

OptionSeparatewindowCheckBox3.Enabled:=true;

if (OptionMultipleinstancesCheckBox1.Checked=false) and (OptionMultipleinstancesCheckBox2.Checked=false)

then

OptionSeparatewindowCheckBox3.Enabled:=true

else

OptionSeparatewindowCheckBox3.Enabled:=false;

if (OptionMultipleinstancesCheckBox1.Checked=false) or (OptionMultipleinstancesCheckBox2.Checked=false)

then begin

OptionMultipleinstancesCheckBox3.Checked:=false;

OptionMultipleinstancesCheckBox3.BringToFront;

end

else begin

OptionMultipleinstancesCheckBox4.Checked:=true;

OptionMultipleinstancesCheckBox4.BringToFront;

end;

end;

procedure TForm1.OptionMultipleinstancesCheckBox3Click(Sender: TObject);//Выделить все

begin

if OptionMultipleinstancesCheckBox3.Checked=true

then begin

OptionMultipleinstancesCheckBox1.Checked:=true;

OptionMultipleinstancesCheckBox2.Checked:=true;

end;

end;

procedure TForm1.OptionMultipleinstancesCheckBox4Click(Sender: TObject);//Снять выделения

begin

if OptionMultipleinstancesCheckBox4.Checked=false

then begin

OptionMultipleinstancesCheckBox1.Checked:=false;

OptionMultipleinstancesCheckBox2.Checked:=false;

end;

end;

procedure TForm1.OptionLogCheckBox1Click(Sender: TObject);//Настройки логирования

begin

if OptionLogCheckBox1.Checked=true

then

MainMenuViewLog.Enabled:=true

else begin

MainMenuViewLog.Enabled:=false;

MainMenuViewLog.Checked:=false;

PageControlLog.TabVisible:=False;

end;

OptionLogCheckBox2.Enabled:=OptionLogCheckBox1.Checked;

OptionLogCheckBox3.Enabled:=OptionLogCheckBox1.Checked;

OptionLogCheckBox4.Enabled:=OptionLogCheckBox1.Checked;

OptionCloseCheckBox3.Enabled:=OptionLogCheckBox1.Checked;

if OptionLogCheckBox1.Checked=false

then begin

OptionLogCheckBox2.Checked:=false;

OptionLogCheckBox3.Checked:=false;

OptionLogCheckBox4.Checked:=false;

OptionCloseCheckBox3.Checked:=false;

end;

end;

procedure TForm1.Logoption(Sender: TObject);//Положения checkbox

begin

if (OptionLogCheckBox2.Checked=false) or (OptionLogCheckBox3.Checked=false)

then begin

OptionLogCheckBox4.Checked:=false;

OptionLogCheckBox4.BringToFront;

end

else begin

OptionLogCheckBox5.Checked:=true;

OptionLogCheckBox5.BringToFront;

end;

end;

procedure TForm1.OptionLogCheckBox4Click(Sender: TObject);//Выделить все

begin

if OptionLogCheckBox4.Checked=true

then begin

OptionLogCheckBox2.Checked:=true;

OptionLogCheckBox3.Checked:=true;

end;

end;

procedure TForm1.OptionLogCheckBox5Click(Sender: TObject);//Снять выделения

begin

if OptionLogCheckBox5.Checked=false

then begin

OptionLogCheckBox2.Checked:=false;

OptionLogCheckBox3.Checked:=false;

end;

end;

procedure TForm1.OptionRadioGroupClick(Sender: TObject);

begin

case OptionRadioGroup.ItemIndex of

0: StatusBar1.Panels.Items[0].Text:='Используется обычнй класс';

1: StatusBar1.Panels.Items[0].Text:='Используется Com-сервер';

end;

end;

//Настройки выхода

procedure TForm1.OptionCloseCheckBox1Click(Sender: TObject);

begin

OptionCloseCheckBox2.Enabled:=OptionCloseCheckBox1.Checked;

if OptionCloseCheckBox1.Checked=false

then

OptionCloseCheckBox2.Checked:=false;

end;

//Сбрасываем настройки

procedure TForm1.OptionBitBtn1Click(Sender: TObject);

begin

OptionSeparatewindowCheckBox1.Checked:=False;

OptionSeparatewindowCheckBox2.Checked:=False;

OptionSeparatewindowCheckBox3.Checked:=False;

OptionMultipleinstancesCheckBox1.Checked:=False;

OptionMultipleinstancesCheckBox2.Checked:=False;

OptionMultipleinstancesCheckBox3.Checked:=False;

OptionCloseCheckBox1.Checked:=False;

OptionCloseCheckBox2.Checked:=False;

OptionLogCheckBox2.Checked:=False;

OptionLogCheckBox3.Checked:=False;

OptionLogCheckBox4.Checked:=False;

end;

//Сохраняем настройки

procedure TForm1.OptionBitBtn2Click(Sender: TObject);

var

Ini: Tinifile;

begin

Ini:=TiniFile.Create(extractfilepath(paramstr(0))+'\Option.ini');

Ini.WriteBool('Separate window','Pendulum',OptionSeparatewindowCheckBox1.Checked);

Ini.WriteBool('Separate window','Inverted pendulum',OptionSeparatewindowCheckBox2.Checked);

Ini.WriteBool('Separate window','All Selection',OptionSeparatewindowCheckBox3.Checked);

Ini.WriteBool('Multiple instances','Pendulum',OptionMultipleinstancesCheckBox1.Checked);

Ini.WriteBool('Multiple instances','Inverted pendulum',OptionMultipleinstancesCheckBox2.Checked);

Ini.WriteBool('Multiple instances','All Selection',OptionMultipleinstancesCheckBox3.Checked);

Ini.WriteBool('Log','Enable',OptionLogCheckBox1.Checked);

Ini.WriteBool('Log','Pendulum',OptionLogCheckBox2.Checked);

Ini.WriteBool('Log','Inverted pendulum',OptionLogCheckBox3.Checked);

Ini.WriteBool('Log','All Selection',OptionLogCheckBox4.Checked);

Ini.WriteInteger('Server','Selection',OptionRadioGroup.ItemIndex);

Ini.WriteBool('Close','Disable reminder',OptionCloseCheckBox1.Checked);

Ini.WriteBool('Close','Automatically save',OptionCloseCheckBox2.Checked);

Ini.Free;

end;

//Выход

procedure TForm1.FormCloseQuery(Sender: TObject; var CanClose: Boolean);

var

SelBut: Integer;

begin

if (ClosePend=false) or (CloseInvPend=false) or (ClosePend=false) and (CloseInvPend=false)

then begin //Проверяем возможно ли выйти сейчас

CanClose:=false;

MessageBox(Self.Handle, PChar('Завершите постройку маятников'), PChar('Предупреждение'), MBOK + MBICONINFORMATION + MBAPPLMODAL);

end

else

if OptionCloseCheckBox1.Checked<>true

then begin//Вопрос о сохранения перед выходом

SelBut:=MessageBox(Self.Handle, PChar('Сохранить изменения?'), PChar('Выход'), MBYESNOCANCEL + MBICONINFORMATION + MBAPPLMODAL);

case SelBut of

IDYes: MainMenuFileSaveClick(nil);

IDCancel: CanClose:=false;

end;

end

else

if OptionCloseCheckBox2.Checked=true

then//Автоматическое сохранения перед выходом

MainMenuFileSaveClick(nil);

end;

procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);

var

Ini: TInifile;

begin

if (OptionLogCheckBox2.Checked=true or OptionLogCheckBox3.Checked=true) and OptionCloseCheckBox3.Checked=true

then

LogMemo.Lines.SaveToFile(extractfilepath(paramstr(0))+'Log\'+FormatDateTime('DDMMYYYYhhmmss', Now)+' Log.txt');//Сохраняем лог

Ini:=TIniFile.Create(extractfilepath(paramstr(0))+'\Option.ini');

Ini.WriteBool('View','Pendulum',MainMenuViewPendulum.Checked);

Ini.WriteBool('View','Inverted pendulum',MainMenuViewInvertedpendulum.Checked);

Ini.WriteBool('View','Chart',MainMenuViewChart.Checked);

Ini.WriteBool('View','Option',MainMenuViewOption.Checked);

Ini.Free;

end;

end.

unit FormParametr;//Форма параметры

interface

uses

Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,

Dialogs, StdCtrls, XPMan, ExtCtrls, IniFiles, Math;

type

TFormParametr = class(TForm)

XPManifest1: TXPManifest;

Button1: TButton;

Button2: TButton;

Button3: TButton;

GroupBox1: TGroupBox;

PendulumEdit2: TLabeledEdit;

PendulumEdit1: TLabeledEdit;

PendulumEdit3: TLabeledEdit;

PendulumEdit4: TLabeledEdit;

GroupBox2: TGroupBox;

InvertedpendulumEdit2: TLabeledEdit;

InvertedpendulumEdit1: TLabeledEdit;

InvertedpendulumEdit3: TLabeledEdit;

InvertedpendulumEdit4: TLabeledEdit;

PendulumEdit6: TLabeledEdit;

PendulumEdit5: TLabeledEdit;

InvertedpendulumEdit5: TLabeledEdit;

InvertedpendulumEdit6: TLabeledEdit;

Button4: TButton;

procedure FormActivate(Sender: TObject);

procedure EditKeyPress(Sender: TObject; var Key: Char);

procedure PendulumEdit4Change(Sender: TObject);

procedure InvertedpendulumEdit4Change(Sender: TObject);

procedure Button1Click(Sender: TObject);

procedure Button2Click(Sender: TObject);

procedure Button3Click(Sender: TObject);

procedure Button4Click(Sender: TObject);

private

{ Private declarations }

public

{ Public declarations }

end;

var

FormParametr: TFormParametr;

implementation

{$R *.dfm}

uses

MainForm;

procedure TFormParametr.EditKeyPress(Sender: TObject;

var Key: Char);

begin

if not (Key in ['0'..'9', ',',#8]) then Key:=chr(0);//Разрешаем вводить только цифры и запятую

end;

procedure TFormParametr.PendulumEdit4Change(Sender: TObject);

begin//Проверяем на допустимость значения

if PendulumEdit4.Text='' then exit;

if (StrToFloat(PendulumEdit4.Text)>180) or (StrToFloat(PendulumEdit4.Text)<-180)

then begin

MessageBox(Self.Handle, PChar('Значение должно быть из промежутка: [-180;180]'), PChar('Предупреждение'), MBOK + MBICONINFORMATION + MBAPPLMODAL);

PendulumEdit4.Undo;

end;

end;

procedure TFormParametr.InvertedpendulumEdit4Change(Sender: TObject);

begin//Проверяем на допустимость значения

if InvertedpendulumEdit4.Text='' then exit;

if (StrToFloat(InvertedpendulumEdit4.Text)>180) or (StrToFloat(InvertedpendulumEdit4.Text)<-180)

then begin

MessageBox(Self.Handle, PChar('Значение должно быть из промежутка: [-180;180]'), PChar('Предупреждение'), MBOK + MBICONINFORMATION + MBAPPLMODAL);

InvertedpendulumEdit4.Undo;

end;

end;

//Выводим текущие значения на форму

procedure TFormParametr.FormActivate(Sender: TObject);

begin

PendulumEdit1.Text:=Form1.MainPendulumEdit1.Text;

PendulumEdit2.Text:=Form1.MainPendulumEdit2.Text;

PendulumEdit3.Text:=Form1.MainPendulumEdit3.Text;

PendulumEdit4.Text:=Form1.MainPendulumEdit4.Text;

PendulumEdit5.Text:=Form1.MainPendulumEdit5.Text;

PendulumEdit6.Text:=Form1.MainPendulumEdit6.Text;

InvertedpendulumEdit1.Text:=Form1.MainInvertedpendulumEdit1.Text;

InvertedpendulumEdit2.Text:=Form1.MainInvertedpendulumEdit2.Text;

InvertedpendulumEdit3.Text:=Form1.MainInvertedpendulumEdit3.Text;

InvertedpendulumEdit4.Text:=Form1.MainInvertedpendulumEdit4.Text;

InvertedpendulumEdit5.Text:=Form1.MainInvertedpendulumEdit5.Text;

InvertedpendulumEdit6.Text:=Form1.MainInvertedpendulumEdit6.Text;

end;

//По умолчанию

procedure TFormParametr.Button1Click(Sender: TObject);

begin

PendulumEdit1.Text:='2';

PendulumEdit2.Text:='3';

PendulumEdit3.Text:='40';

PendulumEdit4.Text:='0,1';

PendulumEdit5.Text:='9,81';

PendulumEdit6.Text:='10';

InvertedpendulumEdit1.Text:='2';

InvertedpendulumEdit2.Text:='3';

InvertedpendulumEdit3.Text:='40';

InvertedpendulumEdit4.Text:='0,1';

InvertedpendulumEdit5.Text:='9,81';

InvertedpendulumEdit6.Text:='10';

end;

//Выводим значения на основную форму

procedure TFormParametr.Button2Click(Sender: TObject);

begin

Form1.MainPendulumEdit5.Text:=PendulumEdit5.Text;

if StrToFloat(PendulumEdit6.Text)<0.1 then PendulumEdit6.Text:='0,1';

Form1.MainPendulumEdit6.Text:=PendulumEdit6.Text;

Form1.MainInvertedpendulumEdit5.Text:=InvertedpendulumEdit5.Text;

if StrToFloat(InvertedpendulumEdit6.Text)<0.1 then InvertedpendulumEdit6.Text:='0,1';

Form1.MainInvertedpendulumEdit6.Text:=InvertedpendulumEdit6.Text;

if Form1.MainPanelCheckBox.Checked=false

then begin

Form1.MainPendulumEdit1.Text:=PendulumEdit1.Text;

Form1.MainPendulumEdit2.Text:=PendulumEdit2.Text;

Form1.MainPendulumEdit3.Text:=PendulumEdit3.Text;

Form1.MainPendulumEdit4.Text:=PendulumEdit4.Text;

Form1.MainInvertedpendulumEdit1.Text:=InvertedpendulumEdit1.Text;

Form1.MainInvertedpendulumEdit2.Text:=InvertedpendulumEdit2.Text;

Form1.MainInvertedpendulumEdit3.Text:=InvertedpendulumEdit3.Text;

Form1.MainInvertedpendulumEdit4.Text:=InvertedpendulumEdit4.Text;

end

else

ShowMessage('Изменение запрещенны');

end;

//Сохраняем значения

procedure TFormParametr.Button3Click(Sender: TObject);

var

Ini: TInifile;

begin

Ini:=TIniFile.Create(extractfilepath(paramstr(0))+'\Option.ini');

Ini.WriteString('ParametrPendulum','Amplitude',PendulumEdit1.Text);

Ini.WriteString('ParametrPendulum','Frequency',PendulumEdit2.Text);

Ini.WriteString('ParametrPendulum','Length',PendulumEdit3.Text);

Ini.WriteString('ParametrPendulum','Angle',PendulumEdit4.Text);

Ini.WriteString('ParametrPendulum','Acceleration due to gravity',PendulumEdit5.Text);

if StrToFloat(PendulumEdit6.Text)<0.1 then PendulumEdit6.Text:='0,1';

Ini.WriteString('ParametrPendulum','Time',PendulumEdit6.Text);

Ini.WriteFloat('ParametrPendulum','Angular Velocity',1);

Ini.WriteString('ParametrInvertedPendulum','Amplitude',InvertedpendulumEdit1.Text);

Ini.WriteString('ParametrInvertedPendulum','Frequency',InvertedpendulumEdit2.Text);

Ini.WriteString('ParametrInvertedPendulum','Length',InvertedpendulumEdit3.Text);

Ini.WriteString('ParametrInvertedPendulum','Angle',InvertedpendulumEdit4.Text);

Ini.WriteString('ParametrInvertedPendulum','Acceleration due to gravity',InvertedpendulumEdit5.Text);

if StrToFloat(InvertedpendulumEdit6.Text)<0.1 then InvertedpendulumEdit6.Text:='0,1';

Ini.WriteString('ParametrInvertedPendulum','Time',InvertedpendulumEdit6.Text);

Ini.WriteFloat('ParametrInvertedPendulum','Angular Velocity',1);

Ini.free;

end;

//Используем случайные значения

procedure TFormParametr.Button4Click(Sender: TObject);

begin

PendulumEdit1.Text:=FloatToStr(RandomRange(1, 10));

PendulumEdit2.Text:=FloatToStr(RandomRange(1, 15));

PendulumEdit3.Text:=FloatToStr(RandomRange(1, 100));

PendulumEdit4.Text:=FloatToStr(RandomRange(-180, 180));

PendulumEdit5.Text:=FloatToStr(RandomRange(1, 15));

PendulumEdit6.Text:=FloatToStr(RandomRange(1, 60));

InvertedpendulumEdit1.Text:=FloatToStr(RandomRange(1, 10));

InvertedpendulumEdit2.Text:=FloatToStr(RandomRange(1, 15));

InvertedpendulumEdit3.Text:=FloatToStr(RandomRange(1, 100));

InvertedpendulumEdit4.Text:=FloatToStr(RandomRange(-180, 180));

InvertedpendulumEdit5.Text:=FloatToStr(RandomRange(1, 15));

InvertedpendulumEdit6.Text:=FloatToStr(RandomRange(1, 60));

end;

end.

unit PendulumThread;//Поток обычного маятника

interface

uses

Classes , SysUtils, Math, Pendulum, ComObj, ActiveX , UComPendulumTlb;

type

TPendulumThread = class(TThread)

private

d: TPendulum;

dCom: IPendulumCom;

protected

procedure Execute; override;

procedure Draw;

procedure DrawCom;

procedure Start;

end;

var

Ampl, Freque, Lent, PastTime, Deviation, AngVel, NewAngVel: Double;

implementation

uses

MainForm;

procedure TPendulumThread.Execute;

begin

case Form1.OptionRadioGroup.ItemIndex of

0: begin

try

Synchronize(Draw); //Создаем класс и вводим значения

Ampl:=d.AmplitInit; //Сохраняем значения чтобы использовать при сохранений

Freque:=d.Frequency;

Lent:=d.Length;

Deviation:=d.Deviation;

while not Terminated do begin

AngVel:=d.AngularVelocity;

PastTime:=d.PastTime;

Synchronize(d.StartBuilding);

sleep(100);

end;

finally

d.Free; //Уничтожаем класс

end;

end;

1: begin

try

Synchronize(DrawCom); //Создаем Com-сервер и вводим значения

Ampl:=dCom.AmplitInit; //Сохраняем значения чтобы использовать при сохранений

Freque:=dCom.Frequency;

Lent:=dCom.Length;

Deviation:=dCom.Deviation;

while not Terminated do begin

AngVel:=dCom.AngularVelocity;

PastTime:=dCom.PastTime;

Synchronize(Start);

sleep(100);

end;

finally

dCom:=nil;//Удаляем ссылку на Com-сервер

end;

end;

end;

end;

procedure TPendulumThread.Start;

begin

dCom.StartBuilding;

end;

procedure TPendulumThread.Draw();

var

A,v,L,f,g : Double;

Row : Integer;

begin

A:=StrToFloat(Form1.MainPendulumEdit1.Text);

v:=StrToFloat(Form1.MainPendulumEdit2.Text);

L:=StrToFloat(Form1.MainPendulumEdit3.Text);

f:=DegToRad(StrToFloat(Form1.MainPendulumEdit4.Text));

g:=StrToFloat(Form1.MainPendulumEdit5.Text);

if MainForm.LoadSavePend=false//Проверяем было ли загружено сохранения

then begin

f:=DegToRad(StrToFloat(Form1.MainPendulumEdit4.Text));

d:=TPendulum.Create(A,v,L,f,NewAngVel,g,0,0); //Создаем класс

end

else begin

Row:=Form1.MainPendulumStringGrid.RowCount-2;

f:=DegToRad(StrToFloat(Form1.MainPendulumStringGrid.Cells[3,Row]));

d:=TPendulum.Create(A,v,L,f,AngVel,g,PastTime,0); //Создаем класс

MainForm.LoadSavePend:=false;

end;

d.CenterXImage:=Form1.PendulumImage.Width div 2;

d.CenterYImage:=Form1.PendulumImage.Height div 2;

d.Separatewindow:=Form1.OptionSeparatewindowCheckBox1.Checked;

d.Multipleinstances:=Form1.OptionMultipleinstancesCheckBox1.Checked;

d.Log:=Form1.OptionLogCheckBox2.Checked;

d.TimeLimit:=StrToFloat(Form1.MainPendulumEdit6.Text);

d.Image:=Form1.PendulumImage;

d.MainTable:=Form1.MainPendulumStringGrid;

d.Table:=Form1.PendulumStringGrid;

d.Chart:=Form1.GrafChart;

d.Memo:=Form1.LogMemo;

if (Form1.OptionSeparatewindowCheckBox1.Checked=true) or (Form1.OptionMultipleinstancesCheckBox1.Checked=true)

then begin//Ипользуем если используется доп. форма

d.CenterXFormIm:=FormPend.ClientWidth div 2;

d.CenterYFormIm:=FormPend.ClientHeight div 2;

d.FormIm:=FormPend;

end;

end;

procedure TPendulumThread.DrawCom();

var

A,v,L,f,g : Double;

Row : Integer;

Begin

dCom:=CreateComObject(ClassPendulumCom) as IPendulumCom;//Создаем Com-сервер

A:=StrToFloat(Form1.MainPendulumEdit1.Text);

v:=StrToFloat(Form1.MainPendulumEdit2.Text);

L:=StrToFloat(Form1.MainPendulumEdit3.Text);

f:=DegToRad(StrToFloat(Form1.MainPendulumEdit4.Text));

g:=StrToFloat(Form1.MainPendulumEdit5.Text);

if MainForm.LoadSavePend=false//Проверяем было ли загружено сохранения

then begin

f:=DegToRad(StrToFloat(Form1.MainPendulumEdit4.Text));

dCom.Create(A,v,L,f,NewAngVel,g,0,0);

end

else begin

Row:=Form1.MainPendulumStringGrid.RowCount-2;

f:=DegToRad(StrToFloat(Form1.MainPendulumStringGrid.Cells[3,Row]));

dCom.Create(A,v,L,f,AngVel,g,PastTime,0);

MainForm.LoadSavePend:=false;

end;

dCom.CenterXImage:=Form1.PendulumImage.Width div 2;

dCom.CenterYImage:=Form1.PendulumImage.Height div 2;

dCom.Separatewindow:=Form1.OptionSeparatewindowCheckBox1.Checked;

dCom.Multipleinstances:=Form1.OptionMultipleinstancesCheckBox1.Checked;

dCom.Log:=Form1.OptionLogCheckBox2.Checked;

dCom.TimeLimit:=StrToFloat(Form1.MainPendulumEdit6.Text);

dCom.Image:=Form1.PendulumImage;

dCom.MainTable:=Form1.MainPendulumStringGrid;

dCom.Table:=Form1.PendulumStringGrid;

dCom.Chart:=Form1.GrafChart;

dCom.Memo:=Form1.LogMemo;

if (Form1.OptionSeparatewindowCheckBox1.Checked=true) or (Form1.OptionMultipleinstancesCheckBox1.Checked=true)

then begin//Ипользуем если используется доп. форма

dCom.CenterXFormIm:=FormPend.ClientWidth div 2;

dCom.CenterYFormIm:=FormPend.ClientHeight div 2;

dCom.FormIm:=FormPend;

end;

end;

unit InvertedPendulumThread;//Поток обращенного маятника

interface

uses

Classes, SysUtils, Math, Pendulum, ComObj, ActiveX, , UComPendulumTlb;

type

TInvertedPendulumThread = class(TThread)

private

d: TInvertedPendulum;

dCom: IPendulumCom;

protected

procedure Execute; override;

procedure Draw;

procedure DrawCom;

procedure Start;

end;

var

Ampl, Freque, Lent, PastTime, Deviation, AngVel, NewAngVel: Double;

implementation

uses

MainForm;

procedure TInvertedPendulumThread.Execute;

begin

case Form1.OptionRadioGroup.ItemIndex of

0: begin

try

Synchronize(Draw);//Создаем класс и вводим значения

Ampl:=d.AmplitInit;//Сохраняем значения чтобы использовать при сохранений

Freque:=d.Frequency;

Lent:=d.Length;

Deviation:=d.Deviation;

while not Terminated do begin

AngVel:=d.AngularVelocity;

PastTime:=d.PastTime;

Synchronize(d.StartBuilding);//Запускаем выполнения

sleep(100);

end;

finally

d.Free;//Уничтожаем класс

end;

end;

1: begin

try

Synchronize(DrawCom) //Создаем Com-сервер и вводим значения

Ampl:=dCom.AmplitInit; //Сохраняем значения чтобы использовать при сохранений

Freque:=dCom.Frequency;

Lent:=dCom.Length;

Deviation:=dCom.Deviation;

while not Terminated do begin

AngVel:=dCom.AngularVelocity;

PastTime:=dCom.PastTime;

Synchronize(Start); //Запускаем выполнения

sleep(100);

end;

finally

dCom:=nil; //Удаляем ссылку на Com-сервер

end;

end;

end;

end;

procedure TInvertedPendulumThread.Start;

begin

dCom.StartBuilding;

end;

procedure TInvertedPendulumThread.Draw();

var

A,v,L,f,g : Double;

begin

A:=StrToFloat(Form1.MainInvertedpendulumEdit1.Text);

v:=StrToFloat(Form1.MainInvertedpendulumEdit2.Text);

L:=StrToFloat(Form1.MainInvertedpendulumEdit3.Text);

f:=DegToRad(StrToFloat(Form1.MainInvertedpendulumEdit4.Text));

g:=StrToFloat(Form1.MainInvertedpendulumEdit5.Text);

if MainForm.LoadSaveInvPend=false//Проверяем было ли загружено сохранения

then begin

f:=DegToRad(StrToFloat(Form1.MainInvertedpendulumEdit4.Text));

d:=TInvertedPendulum.Create(A,v,L,f,NewAngVel,g,0,1);//Создаем класс

end

else begin

Row:=Form1.MainInvertedpendulumStringGrid.RowCount-2;

f:=DegToRad(StrToFloat(Form1.MainInvertedpendulumStringGrid.Cells[3,Row]));

d:=TInvertedPendulum.Create(A,v,L,f,AngVel,g,PastTime,1); //Создаем класс

MainForm.LoadSaveInvPend:=false;

end;

d.CenterXImage:=Form1.InvertedpendulumImage.Width div 2;

d.CenterYImage:=Form1.InvertedpendulumImage.Height div 2;

d.Separatewindow:=Form1.OptionSeparatewindowCheckBox2.Checked;

d.Multipleinstances:=Form1.OptionMultipleinstancesCheckBox2.Checked;

d.Log:=Form1.OptionLogCheckBox3.Checked;

d.TimeLimit:=StrToFloat(Form1.MainInvertedpendulumEdit6.Text);

d.Image:=Form1.InvertedpendulumImage;

d.MainTable:=Form1.MainInvertedpendulumStringGrid;

d.Table:=Form1.InvertedpendulumStringGrid;

d.Chart:=Form1.GrafChart;

d.Memo:=Form1.LogMemo;

if (Form1.OptionSeparatewindowCheckBox2.Checked=true) or (Form1.OptionMultipleinstancesCheckBox2.Checked=true)

then begin//Ипользуем если используется доп. форма

d.FormIm:=FormInvPend;

d.CenterXFormIm:=FormInvPend.ClientWidth div 2;

d.CenterYFormIm:=FormInvPend.ClientHeight div 2;

end;

end;

procedure TInvertedPendulumThread.DrawCom();

var

A,v,L,f,g : Double;

Begin

dCom:=CreateComObject(ClassInvertedPendulumCom) as IPendulumCom; //Создаем Com-сервер

A:=StrToFloat(Form1.MainInvertedpendulumEdit1.Text);

v:=StrToFloat(Form1.MainInvertedpendulumEdit2.Text);

L:=StrToFloat(Form1.MainInvertedpendulumEdit3.Text);

f:=DegToRad(StrToFloat(Form1.MainInvertedpendulumEdit4.Text));

g:=StrToFloat(Form1.MainInvertedpendulumEdit5.Text);

if MainForm.LoadSaveInvPend=false//Проверяем было ли загружено сохранения

then begin

f:=DegToRad(StrToFloat(Form1.MainInvertedpendulumEdit4.Text));

dCom.Create(A,v,L,f,NewAngVel,g,0,1);

end

else begin

Row:=Form1.MainInvertedpendulumStringGrid.RowCount-2;

f :=DegToRad(StrToFloat(Form1.MainInvertedpendulumStringGrid.Cells[3,Row]));

dCom.Create(A,v,L,f,AngVel,g,PastTime,1);

MainForm.LoadSaveInvPend:=false;

end;

dCom.CenterXImage:=Form1.InvertedpendulumImage.Width div 2;

dCom.CenterYImage:=Form1.InvertedpendulumImage.Height div 2;

dCom.Separatewindow:=Form1.OptionSeparatewindowCheckBox2.Checked;

dCom.Multipleinstances:=Form1.OptionMultipleinstancesCheckBox2.Checked;

dCom.Log:=Form1.OptionLogCheckBox3.Checked;

dCom.TimeLimit:=StrToFloat(Form1.MainInvertedpendulumEdit6.Text);

dCom.Image:=Form1.InvertedpendulumImage;

dCom.MainTable:=Form1.MainInvertedpendulumStringGrid;

dCom.Table:=Form1.InvertedpendulumStringGrid;

dCom.Chart:=Form1.GrafChart;

dCom.Memo:=Form1.LogMemo;

if (Form1.OptionSeparatewindowCheckBox2.Checked=true) or (Form1.OptionMultipleinstancesCheckBox2.Checked=true)

then begin//Ипользуем если используется доп. форма

dCom.FormIm:=FormInvPend;

dCom.CenterXFormIm:=FormInvPend.ClientWidth div 2;

dCom.CenterYFormIm:=FormInvPend.ClientHeight div 2;

end;

end;

unit Pendulum;//Класс маятник и обращенный маятник

interface

uses

Forms, Classes, Graphics, SysUtils, Grids, Math, Chart, StdCtrls, IniFiles,

Series, ExtCtrls;

type

TPendulum = class

private

FA: Double;//Амплитуда

Fv: Double;//Частота

FL: Double;//Длина

FPhi: Double;//Угол

Fw: Double;//Угловая скорость

FG: Double;//Ускорение свободного падения

FTimeLimit: Double;//Промежуток времени между обновление таблицы

FTime: Double;//Время

FNomerSeries: Integer;//Номер серий Chart

Fk: Integer;//Чередование Амлитуд

Fk0: Integer;//Время следующего изменения амлитуды

Fk1: Integer;//Следущие время обновление таблиц

FImage: TImage;//Для вывода в главном окне

FFormIm: TForm;//Для вывода в дополнительном окне

FWidthImage, FHeightImage: Integer;//Координаты центра экрана главного окна

FWidthFormIm, FHeightFormIm: Integer;//Координаты центра экрана дополнительного окна

FMainTable: TStringGrid;//Главная таблица для вывода результата

FTable: TStringGrid;//Дополнительная таблица для вывода результата

FMemo: TMemo;//Окно мемо для вывода лога

FChart: TChart;//Chart для рисование зависимоти угла от времени

FSeparatewindow: Boolean;//Вывод изображения в дополнительной форме

FMultipleinstances: Boolean;//Вывод изображения в главной и дополнительной форме

//Если оба значения стоят в false то вывод производится только в главной форме

FLog: Boolean;//Разрешения для логирования

protected

procedure SetSeparatewindow(NewSeparatewindow: Boolean);

procedure SetMultipleinstances(NewMultipleinstances: Boolean);

procedure SetLog(NewLog: Boolean);

procedure SetTimeLimit(NewTimeLimit: Double);

procedure SetImage(NewImage: TImage);

procedure SetFormIm(NewFormIm: TForm);

procedure SetMainTable(NewMainTable: TStringGrid);

procedure SetTable(NewTable: TStringGrid);

procedure SetChart(NewChart: TChart);

procedure SetMemo(NewMemo: TMemo);

procedure SetCenterXImage(NewCenterXImage: Integer);

procedure SetCenterYImage(NewCenterYImage: Integer);

procedure SetCenterXFormIm(NewCenterXFormIm: Integer);

procedure SetCenterYFormIm(NewCenterYFormIm: Integer);

procedure AddTable;//Вывод в таблицу

procedure CalcPhi;virtual;//Вычисление фи

procedure DifUrav;//Вычисление дифф. урав. методом Рунге-Кутты 4-порядка

procedure DrawNextMain;virtual;//Построение на главной форме

procedure DrawNext;virtual;//Построение на дополнительной форме

function f(t,y,z: Double): Double;//Функция вида z'=cos(3x)-4y=f(x,y,z)

function g(t,y,z: Double): Double;//Функция вида y'=z=g(x,y,z)

function GetAmplitInit: Double;

function GetFrequency: Double;

function GetLength: Double;

function GetDeviation: Double;

function GetPastTime: Double;

function GetAngularVelocity: Double;

public

constructor Create(A,v,L,f,w,g: Double;time: Double;nomer: Integer);

procedure StartBuilding;//Начинает выполнения

procedure ReadToIni;virtual;

//Вводим данные для начало построения маятника

property Separatewindow: Boolean write SetSeparatewindow;

property Multipleinstances: Boolean write SetMultipleinstances;

property Log: Boolean write SetLog;

property TimeLimit: Double write SetTimeLimit;

property Image: TImage write SetImage;

property FormIm: TForm write SetFormIm;

property MainTable: TStringGrid write SetMainTable;

property Table: TStringGrid write SetTable;

property Memo: TMemo write SetMemo;

property Chart: TChart write SetChart;

property CenterXImage: Integer write SetCenterXImage;

property CenterYImage: Integer write SetCenterYImage;

property CenterXFormIm: Integer write SetCenterXFormIm;

property CenterYFormIm: Integer write SetCenterYFormIm;

//Записываем значения для произведения сохранения в файл

property AmplitInit: Double read GetAmplitInit;

property Frequency: Double read GetFrequency;

property Length: Double read GetLength;

property PastTime: Double read GetPastTime;

property Deviation: Double read GetDeviation;

property AngularVelocity: Double read GetAngularVelocity;

end;

TInvertedPendulum=class(TPendulum)

protected

procedure CalcPhi;override;

procedure DrawNextMain;override;

procedure DrawNext;override;

public

procedure ReadToIni;override;

end;

const

ValArr: array[0..1] of Double = (-0.5, 0.5);

implementation

constructor TPendulum.Create(A,v,L,f,w,g: Double;time: Double;nomer: Integer);

begin

inherited Create;

FA:=A;

Fv:=v;

FL:=L;

FPhi:=f;

FG:=g;

Fw:=w;

FTime:=time;

FNomerSeries:=nomer;

Fk:=RandomRange(0, 2);

Fk0:=1;

Fk1:=0;

end;

procedure TPendulum.SetSeparatewindow(NewSeparatewindow: Boolean);

begin

FSeparatewindow:=NewSeparatewindow;

end;

procedure TPendulum.SetMultipleinstances(NewMultipleinstances: Boolean);

begin

FMultipleinstances:=NewMultipleinstances;

end;

procedure TPendulum.SetLog(NewLog: Boolean);

begin

FLog:=NewLog;

end;

procedure TPendulum.SetTimeLimit(NewTimeLimit: Double);

begin

FTimeLimit:=NewTimeLimit;

end;

procedure TPendulum.SetImage(NewImage: TImage);

begin

FImage:=NewImage;

end;

procedure TPendulum.SetFormIm(NewFormIm: TForm);

begin

FFormIm:=NewFormIm;

end;

procedure TPendulum.SetMainTable(NewMainTable: TStringGrid);

begin

FMainTable:=NewMainTable;

end;

procedure TPendulum.SetTable(NewTable: TStringGrid);

begin

FTable:=NewTable;

end;

procedure TPendulum.SetChart(NewChart: TChart);

begin

FChart:=NewChart;

end;

procedure TPendulum.SetMemo(NewMemo: TMemo);

begin

FMemo:=NewMemo;

end;

procedure TPendulum.SetCenterXImage(NewCenterXImage: Integer);

begin

FWidthImage:=NewCenterXImage;

end;

procedure TPendulum.SetCenterYImage(NewCenterYImage: Integer);

begin

FHeightImage:=NewCenterYImage;

end;

procedure TPendulum.SetCenterXFormIm(NewCenterXFormIm: Integer);

begin

FWidthFormIm:=NewCenterXFormIm;

end;

procedure TPendulum.SetCenterYFormIm(NewCenterYFormIm: Integer);

begin

FHeightFormIm:=NewCenterYFormIm;

end;

function TPendulum.GetAmplitInit : Double;

begin

Result:=FA;

end;

function TPendulum.GetFrequency : Double;

begin

Result:=Fv;

end;

function TPendulum.GetLength : Double;

begin

Result:=FL;

end;

function TPendulum.GetDeviation : Double;

begin

Result:=RadToDeg(FPhi);

end;

function TPendulum.GetPastTime : Double;

begin

Result:=FTime;

end;

function TPendulum.GetAngularVelocity : Double;

begin

Result:=Fw;

end;

function TPendulum.f(t,y,z: Double) : Double;

begin

Result:=-(Fg/Fl+(FA*Fv*Fv)/FL*cos(Fv*t))*y;

end;

function TPendulum.g(t,y,z: Double) : Double;

begin

Result:=z;

end;

procedure TPendulum.DifUrav;

var

l1,l2,l3,l4,q1,q2,q3,q4: Double;

begin

//Нахождение Phi

l1:= 0.1 * f(FTime, FPhi, Fw);

q1:= 0.1 * g(FTime, FPhi, Fw);

l2:= 0.1 * f(FTime + 0.1/2, FPhi + q1/2, Fw + l1/2);

q2:= 0.1 * g(FTime + 0.1/2, FPhi + q1/2, Fw + l1/2);

l3:= 0.1 * f(FTime + 0.1/2, FPhi + q2/2, Fw + l2/2);

q3:= 0.1 * g(FTime + 0.1/2, FPhi + q2/2, Fw + l2/2);

l4:= 0.1 * f(FTime + 0.1, FPhi + q3, Fw + l3);

q4:= 0.1 * g(FTime + 0.1, FPhi + q3, Fw + l3);

Fw:= Fw + (l1 + 2*l2 + 2*l3 + l4)/6;

FPhi:= FPhi + (q1 + 2*q2 + 2*q3 + q4)/6;

end;

procedure TPendulum.CalcPhi;

begin

DifUrav;

end;

procedure TInvertedPendulum.CalcPhi;

begin

if FA*Fv>sqrt(2*Fg*Fl)

then begin

if FPhi<>0

then

if (FPhi>-DegToRad(3)) and (FPhi<DegToRad(3))

then

FPhi:=0

else

if FPhi<DegToRad(3)

then

FPhi:=FPhi+DegToRad(5)

else

if FPhi>-DegToRad(3)

then

FPhi:=FPhi-DegToRad(5);

end

else

DifUrav;

end;

procedure TPendulum.StartBuilding;

begin

//Изменение амлитуды

if (FTime=Fk0*10)

then

if Fk=0

then begin

FA:=FA+ValArr[Fk];

Fk:=Fk+1;

Fk0:=Fk0+1;

end

else begin

FA:=FA+ValArr[Fk];

Fk:=Fk-1;

Fk0:=Fk0+1;

end;

//Выбор места вывода маятника

if FMultipleinstances=true

then begin

DrawNextMain;

DrawNext;

end

else

if FSeparatewindow=true

then

DrawNext

else

DrawNextMain;

//Вывод графика движения маятника

FChart.Series[FNomerSeries].AddXY(FTime,FPhi);

//Обновление таблицы

if (FTime>=RoundTo(Fk1*FTimeLimit,-2))

then

AddTable;

//Увеличение времени

FTime:=RoundTo(FTime+0.1,-2);

CalcPhi;//Вычисляем угол

//RoundTo используется чтобы вычисление производились с десятичными числами

end;

procedure TPendulum.DrawNextMain;

var

y0: Double;

x,y: Integer;

begin

//Закрепленный конец

FImage.Canvas.Brush.Color := ClWhite;

FImage.Canvas.FillRect(FImage.Canvas.ClipRect);

FImage.Canvas.Brush.Color:=clRed;

//Вычисление движеия закрепленного конца

y0:=FA*cos(Fv*FTime);

//Рисования закрепленного конца

FImage.Canvas.MoveTo(FWidthImage,FHeightImage+Round(y0));

FImage.Canvas.Ellipse(FWidthImage-6,FHeightImage+Round(y0)-6,FWidthImage+6,FHeightImage+Round(y0)+6);

//Подвижная часть

//Вычисление положения маятника

x:=FWidthImage+Round(FL*sin(FPhi));

y:=FHeightImage+Round(FL*cos(FPhi)+y0);

//Рисование подвижной части

FImage.Canvas.Brush.Color:=clBlack;

FImage.Canvas.LineTo(x,y);

FImage.Canvas.Ellipse(x-10,y-10,x+10,y+10);

//Вывод лога

if FLog=true

then

FMemo.Lines.Add(FormatDateTime('[DD\MM\YYYY hh:mm:ss]', Now)+' [PendulumMain]'+' Амплитуда='+FloatToStr(FA)+' Частота='+FloatToStr(Fv)+' Длина='+FloatToStr(FL)+' Угол='+FloatToStr(FPhi)+' Угловая скорость='+FloatToStr(Fw)+' Время='+FloatToStr(FTime)+' Середина листа=['+IntToStr(FWidthImage)+','+IntToStr(FHeightImage)+']'+' Значение Y точки подвеса='+FloatToStr(y0)+' Используемое значение для Y точки подвеса='+FloatToStr(Round(y0))+' Координаты точки подвеса=['+IntToStr(FWidthImage)+','+IntToStr(FHeightImage+Round(y0))+']'+' Координаты маятника=['+IntToStr(x)+','+FloatToStr(y)+']');

end;

procedure TPendulum.DrawNext;

var

y0: Double;

x,y: integer;

begin

//Закрепленный конец

FFormIm.Canvas.Brush.Color := ClWhite;

FFormIm.Canvas.FillRect(FFormIm.Canvas.ClipRect);

FFormIm.Canvas.Brush.Color:=clRed;

//Вычисление движеия закрепленного конца

y0:=FA*cos(Fv*FTime);

//Рисования закрепленного конца

FFormIm.Canvas.MoveTo(FWidthFormIm,FHeightFormIm+Round(y0));

FFormIm.Canvas.Ellipse(FWidthFormIm-6,FHeightFormIm+Round(y0)-6,FWidthFormIm+6,FHeightFormIm+Round(y0)+6);

//Подвижная часть

//Вычисление положения маятника

x:=FWidthFormIm+Round(FL*sin(FPhi));

y:=FHeightFormIm+Round(FL*cos(FPhi)+y0);

//Рисование подвижной части

FFormIm.Canvas.Brush.Color:=clBlack;

FFormIm.Canvas.LineTo(x,y);

FFormIm.Canvas.Ellipse(x-10,y-10,x+10,y+10);

//Вывод лога

if FLog=true

then

FMemo.Lines.Add(FormatDateTime('[DD\MM\YYYY hh:mm:ss]', Now)+' [Pendulum]'+' Амплитуда='+FloatToStr(FA)+' Частота='+FloatToStr(Fv)+' Длина='+FloatToStr(FL)+' Угол='+FloatToStr(FPhi)+' Угловая скорость='+FloatToStr(Fw)+' Время='+FloatToStr(FTime)+' Середина листа=['+IntToStr(FWidthFormIm)+','+IntToStr(FHeightFormIm)+']'+' Значение Y точки подвеса='+FloatToStr(y0)+' Используемое значение для Y точки подвеса='+FloatToStr(Round(y0))+' Координаты точки подвеса=['+IntToStr(FWidthFormIm)+','+IntToStr(FHeightFormIm+Round(y0))+']'+' Координаты маятника=['+IntToStr(x)+','+IntToStr(y)+']');

end;

procedure TPendulum.AddTable;

begin

//Выбор таблиц для вывода и вывод в них

if (FMultipleinstances=true) or (FSeparatewindow=false)

then begin

FMainTable.Cells[0,FMainTable.RowCount-1]:=FloatToStr(FA);

FMainTable.Cells[1,FMainTable.RowCount-1]:=FloatToStr(Fv);

FMainTable.Cells[2,FMainTable.RowCount-1]:=FloatToStr(FL);

FMainTable.Cells[3,FMainTable.RowCount-1]:=FloatToStr(RoundTo(RadToDeg(FPhi),-2));

FMainTable.Cells[4,FMainTable.RowCount-1]:=FloatToStr(FTime);

FMainTable.RowCount:=FMainTable.RowCount+1;

FTable.Cells[0,FTable.RowCount-1]:=FloatToStr(FA);

FTable.Cells[1,FTable.RowCount-1]:=FloatToStr(Fv);

FTable.Cells[2,FTable.RowCount-1]:=FloatToStr(FL);

FTable.Cells[3,FTable.RowCount-1]:=FloatToStr(RoundTo(RadToDeg(FPhi),-2));

FTable.Cells[4,FTable.RowCount-1]:=FloatToStr(FTime);

FTable.RowCount:=FTable.RowCount+1;

end

else begin

FMainTable.Cells[0,FMainTable.RowCount-1]:=FloatToStr(FA);

FMainTable.Cells[1,FMainTable.RowCount-1]:=FloatToStr(Fv);

FMainTable.Cells[2,FMainTable.RowCount-1]:=FloatToStr(FL);

FMainTable.Cells[3,FMainTable.RowCount-1]:=FloatToStr(RoundTo(RadToDeg(FPhi),-2));

FMainTable.Cells[4,FMainTable.RowCount-1]:=FloatToStr(FTime);

FMainTable.RowCount:=FMainTable.RowCount+1;

end;

//Увеличение времени для следующего круга

Fk1:=Fk1+1;

end;

procedure TInvertedPendulum.DrawNextMain;

var

y0: Double;

x,y: integer;

begin

//Закрепленный конец

FImage.Canvas.Brush.Color := ClWhite;

FImage.Canvas.FillRect(FImage.Canvas.ClipRect);

FImage.Canvas.Brush.Color:=clRed;

//Вычисление движеия закрепленного конца

y0:=FA*cos(Fv*FTime);

//Рисования закрепленного конца

FImage.Canvas.MoveTo(FWidthImage,FHeightImage+Round(y0));

FImage.Canvas.Ellipse(FWidthImage-6,FHeightImage+Round(y0)-6,FWidthImage+6,FHeightImage+Round(y0)+6);

//Подвижная часть

//Вычисление положения маятника

x:=FWidthImage+Round(FL*sin(FPhi));

y:=FHeightImage+Round(-FL*cos(FPhi)+y0);

//Рисование подвижной части

FImage.Canvas.Brush.Color:=clBlack;

FImage.Canvas.LineTo(x,y);

FImage.Canvas.Ellipse(x-10,y-10,x+10,y+10);

//Вывод лога

if FLog=true

then

FMemo.Lines.Add(FormatDateTime('[DD\MM\YYYY hh:mm:ss]', Now)+' [InvPendulumMain]'+' Амплитуда='+FloatToStr(FA)+' Частота='+FloatToStr(Fv)+' Длина='+FloatToStr(FL)+' Угол='+FloatToStr(FPhi)+' Угловая скорость='+FloatToStr(Fw)+' Время='+FloatToStr(FTime)+' Середина листа=['+IntToStr(FWidthImage)+','+IntToStr(FHeightImage)+']'+' Значение Y точки подвеса='+FloatToStr(y0)+' Используемое значение для Y точки подвеса='+FloatToStr(Round(y0))+' Координаты точки подвеса=['+IntToStr(FWidthImage)+','+IntToStr(FHeightImage+Round(y0))+']'+' Координаты маятника=['+IntToStr(x)+','+IntToStr(y)+']');

end;

procedure TInvertedPendulum.DrawNext;

var

y0: Double;

x,y: integer;

begin

//Закрепленный конец

FFormIm.Canvas.Brush.Color := ClWhite;

//FFormIm.Canvas.FillRect(FFormIm.Canvas.ClipRect);

FFormIm.Canvas.Brush.Color:=clRed;

//Вычисление движеия закрепленного конца

y0:=FA*cos(Fv*FTime);

//Рисования закрепленного конца

FFormIm.Canvas.MoveTo(FWidthFormIm,FHeightFormIm+Round(y0));

FFormIm.Canvas.Ellipse(FWidthFormIm-6,FHeightFormIm+Round(y0)-6,FWidthFormIm+6,FHeightFormIm+Round(y0)+6);

//Подвижная часть

//Вычисление положения маятника

x:=FWidthFormIm+Round(FL*sin(FPhi));

y:=FHeightFormIm+Round(-FL*cos(FPhi)+y0);

//Рисование подвижной части

FFormIm.Canvas.Brush.Color:=clBlack;

FFormIm.Canvas.LineTo(x,y);

FFormIm.Canvas.Ellipse(x-10,y-10,x+10,y+10);

//Вывод лога

if FLog=true

then

FMemo.Lines.Add(FormatDateTime('[DD\MM\YYYY hh:mm:ss]', Now)+' [InvPendulum]'+' Амплитуда='+FloatToStr(FA)+' Частота='+FloatToStr(Fv)+' Длина='+FloatToStr(FL)+' Угол='+FloatToStr(FPhi)+' Угловая скорость='+FloatToStr(Fw)+' Время='+FloatToStr(FTime)+' Середина листа=['+IntToStr(FWidthFormIm)+','+IntToStr(FHeightFormIm)+']'+' Значение Y точки подвеса='+FloatToStr(y0)+' Используемое значение для Y точки подвеса='+FloatToStr(Round(y0))+' Координаты точки подвеса=['+IntToStr(FWidthFormIm)+','+IntToStr(FHeightFormIm+Round(y0))+']'+' Координаты маятника=['+IntToStr(x)+','+IntToStr(y)+']');

end;

//Процедуры написанные далее не используются в программе

procedure TPendulum.ReadToIni;

var

Ini: Tinifile;

begin

Ini:=TiniFile.Create(extractfilepath(paramstr(0))+'\Option.ini');

FA:=Ini.ReadFloat('ParametrPendulum','Amplitude',2);

Fv:=Ini.ReadFloat('ParametrPendulum','Frequency',3);

FL:=Ini.ReadFloat('ParametrPendulum','Length',40);

FPhi:=Ini.ReadFloat('ParametrPendulum','Angle',0.1);

Fw:=Ini.ReadFloat('ParametrPendulum','Acceleration due to gravity',9.81);

FTimeLimit:=Ini.ReadFloat('ParametrPendulum','Time',10);

Ini.Free;

end;

procedure TInvertedPendulum.ReadToIni;

var

Ini: Tinifile;

begin

Ini:=TiniFile.Create(extractfilepath(paramstr(0))+'\Option.ini');

FA:=Ini.ReadFloat('ParametrPendulum','Amplitude',2);

Fv:=Ini.ReadFloat('ParametrPendulum','Frequency',3);

FL:=Ini.Rea...


Подобные документы

  • Анализ временных рядов. Разработка программы для среды визуального проектирования Borland Delphi 7.0. Математическая формулировка задачи. Структурная схема программы. Описание реализации технологии COM, динамических библиотек, возможностей программы.

    курсовая работа [4,3 M], добавлен 14.11.2010

  • Анализ преимуществ и недостатков различных численных методов решения дифференциальных уравнений высших порядков. Обоснование выбора метода Рунге-Кутта четвертого порядка. Разработка программы, моделирующей физическое и математическое поведение маятника.

    курсовая работа [1,6 M], добавлен 11.07.2012

  • Разработка имитационной модели для изучения движения нелинейного маятника с графическим отображением в ГИС Maple в режиме функционирования системы наблюдений без задержки времени. Гармонические и периодические колебания маятника. Теорема Гюйгенса.

    курсовая работа [1,3 M], добавлен 29.05.2014

  • Стандартная библиотека для всех 32-разрядных операционных систем - OpenGL. Структурная схема программы. Описание разработанного класса, реализации технологии Com, динамических библиотек. Средства использования сервисов, предоставляемых Microsoft Office.

    курсовая работа [4,3 M], добавлен 14.11.2010

  • Исследование характера движения математического маятника в идеальных условиях, то есть без учёта сил сопротивления, что позволяет маятнику совершать гармонические колебания неограниченное количество времени. Рассмотрение алгоритма решения задачи на ЭВМ.

    курсовая работа [231,1 K], добавлен 07.03.2013

  • Процесс моделирования работы САПР: описание моделирующей системы, разработка структурной схемы и Q-схемы, построение временной диаграммы, построение укрупненного моделирующего алгоритма. Описание математической модели, машинной программы решения задачи.

    курсовая работа [291,6 K], добавлен 03.07.2011

  • Существующие альтернативы программы. Описание формул для выкроек, используемых в разработке. Описание разрабатываемой программы, а также структура ее интерфейса. Детальное описание возможностей и спецификация, функциональные особенности программы.

    курсовая работа [427,4 K], добавлен 10.10.2015

  • Постановка нелинейной задачи. Кусочно-линейная и кусочно-постоянная аппроксимация нелинейностей. Сопровождающая кусочно-линейная задача минимальной интенсивности. Свойства оптимальной стартовой обратной связи. Стабилизация перевернутого маятника.

    дипломная работа [412,8 K], добавлен 28.05.2013

  • Применение программного обеспечения для разработки игры "Быки и коровы". Описание алгоритма и интерфейса пользователя программы. Назначение и область применения и описание возможностей программы. Рассмотрение списка сообщений об ошибках программы.

    курсовая работа [799,2 K], добавлен 26.04.2021

  • Основные типы динамических подключаемых библиотек DLL: исполняемые и библиотеки ресурсов. Способы экспорта процедур и функций: по имени и порядковому номеру. Системные требования к разработке программы для организации проведения опросов (тестов).

    курсовая работа [124,3 K], добавлен 23.07.2012

  • Описание структурной схемы операционного устройства. Построение обратной структурной таблицы автомата. Проектирование функций выходов и управление элементами памяти. Изображение пользовательского интерфейса и инструкции по инсталляции и запуску программы.

    курсовая работа [642,6 K], добавлен 19.05.2014

  • Характеристика функций имитационного моделирования. Знакомство с особенностями имитационного моделирования агрегированной системы массового обслуживания. Анализ программы GPSSWorld: рассмотрение возможностей, способы составления имитационной модели.

    курсовая работа [1,6 M], добавлен 27.05.2013

  • Характеристика состава, интерфейса и основных возможностей программы схемотехнического моделирования и проектирования семейства Micro-Cap8, которая относится к наиболее популярным системам автоматизированного проектирования (САПР) электронных устройств.

    реферат [108,0 K], добавлен 12.03.2011

  • Характеристика алгоритмов и программных реализаций поведения агентов в двумерной среде. Исследование разработки структур данных и знаний. Особенность создания интерфейса и карты лабиринта. Экспериментальное тестирование и отладка модулей программы.

    дипломная работа [2,4 M], добавлен 12.08.2017

  • Назначение и применение микроконтроллеров - интегральных микросхем, предназначенных для управления электронными схемами. Описание способа адресации. Разработка программы, описание электрической и структурной схемы разрабатываемого микроконтроллера.

    курсовая работа [177,6 K], добавлен 30.06.2014

  • Необходимость создания моделируемой системы. Описание моделируемой системы и задание моделирования. Структурная схема модели системы. Блок–диаграмма. Текст программы. Описание текста программы. Результаты моделирования. Эксперимент, его результаты.

    курсовая работа [35,9 K], добавлен 19.11.2007

  • Разработка алгоритма решения задачи численного интегрирования методом трапеции. Словесное описание и блок-схема разработанного алгоритма программы. Описание интерфейса, главного окна и основных форм программы. Проверка работоспособности программы.

    курсовая работа [1,4 M], добавлен 16.03.2012

  • Изучение методов разработки приложений в среде визуального программирования Visual Studio. Создание программы, реализующей заказ железнодорожных билетов. Язык SQL-запросов в системе управления базами данных MS Access. Тестирование созданной программы.

    курсовая работа [1,0 M], добавлен 03.07.2016

  • Определение ускорения свободного падения с помощью физического маятника. Период колебания физического маятника. Нахождение ускорения свободного падения методом наименьших квадратов. Решение задач методами Гаусса-Ньютона и квазиньютоновскими методами.

    лабораторная работа [32,4 K], добавлен 29.03.2015

  • Порядок проектирования программы, демонстрирующей принцип заполнения очереди и стека и принцип удаления элементов из очереди и стека. Определение класса и всех необходимых функций. Программа на языке С, описание возможностей, используемых для алгоритма.

    курсовая работа [254,3 K], добавлен 20.05.2013

Работы в архивах красиво оформлены согласно требованиям ВУЗов и содержат рисунки, диаграммы, формулы и т.д.
PPT, PPTX и PDF-файлы представлены только в архивах.
Рекомендуем скачать работу.