Багатокритерiальна задача лiнiйного програмування
Дипломная работа - Компьютеры, программирование
Другие дипломы по предмету Компьютеры, программирование
ingProcs. SolveLineEqsM1OrM2OnDrawCell (Sender: TObject;, ARow: Integer; Rect: TRect; State: TGridDrawState);
{Процедура фарбуСФ комiрки (СЧхнiй фон) таблицi вирiшування системи лiнiйних
рiвнянь у стовпцi правих частин (вiльних членiв). У залежностi вiд
методу розв'язання цей стопець може бути першим стовпцем-заголовком
(1-ий спосiб, з отриманням оберненоСЧ матрицi коефiцiСФнтiв), або останнiм
стовпцем (2-ий спосiб, з отриманням нулiв у рядку-заголовку i видаленням
стовпцiв цих нулiв).}CurGrid:TStringGrid; SafeBrushColor:TColor; CurColor:TColor;Sender=Nil then Exit;
{Якщо до вмикання форматування був якийсь обробник подiСЧ, запускаСФмо його:}@Self. OldOnDrawCell<>Nil then Self. OldOnDrawCell (Sender, ACol, ARow, Rect,);
Sender is TStringGrid then:=TStringGrid(Sender);:=CurGrid. Canvas. Brush. Color;:=bc_NotColored;
Not (gdFixed in State) then {якщо комiрка не у заголовках StringGrid}
{У режимi розв'язування способом 1 вiдмiчаСФмо перший стовпець
кольором, а у режимi способу 2 - вiдмiчаСФмо останнiй
(стовпець правих частин - вiльних членiв):}((Self. CurFormatState=fs_SolvingEqsM1) and
(ACol<(Self.CHeadColNum+bc_LineEqM1ColsBeforeVars))) or
((Self. CurFormatState=fs_SolvingEqsM2) and
(ACol>=(CurGrid. ColCount-bc_LineEqM2ColsAfterVars))) then:=lwc_RightSideColColor
{Якщо це комiрка коефiцiСФнта при змiннiй, i задача у ходi вирiшування:}if InSolving thenSelf. CurGridSolveCol=ACol then {якщо це розв'язувальний стовпець:}Self. CurGridSolveRow=ARow then {якщо це розв'язувальна комiрка:}:=lwc_SolveCellColorCurColor:=lwc_SolveColColor;{Якщо це розв'язувальний рядок (але не розв'язувальна комiрка):}if Self. CurGridSolveRow=ARow then CurColor:=lwc_SolveRowColor;;;
CurColor<>bc_NotColored then {якщо комiрку треба пофарбувати:}{МалюСФмо текст на фонi з кольором CurColor:}. Canvas. Brush. Color:=CurColor;. Canvas. TextRect (Rect, Rect. Left, Rect. Top,. Cells [ACol, ARow]);;
. Canvas. Brush. Color:=SafeBrushColor;;;
TGridFormattingProcs. EdLineTaskOnNewRow (Sender: TObject;: array of Integer);
{Процедура працюСФ при виникненнi подiСЧ оновлення рядка чи додавання нового
рядка у GrowingStringGrid.
ПiдтримуСФ форматування стовпця нумерацiСЧ i стовпця-заголовка таблицi у
такому виглядi:
y1
y2
y3
y4
y5
тАжym
Стовпець-заголовок (новi комiрки стовпця-заголовка за змовчуванням
заповнюються значеннями типу функцiСЧ-нерiвностi).}CurNum, CurTableRow: Integer; CurGrid:TStringGrid;Sender=Nil then Exit;
{Якщо до вмикання форматування був якийсь обробник подiСЧ, запускаСФмо його:}@Self. OldOnNewRow<>Nil then Self. OldOnNewRow (Sender, NewRows);
Sender is TStringGrid then:=TStringGrid(Sender);
{ОсвiжаСФмо масив стовпця-заголовка вiдповiдно до висоти таблицi:}(CurGrid, NewRows);
{ВiдображаСФмо заголовки оновлених або нових рядкiв:}CurNum:=0 to Length(NewRows) - 1 do
{Нумерацiя з першого рядка, що не СФ рядком заголовкiв:}NewRows[CurNum]>=(Self.CHeadRowNum+1) then{Нумерацiя рядкiв:}. Cells [Self.CHeadColNum-1, NewRows[CurNum]]:=(NewRows[CurNum] - Self.CHeadRowNum);
{Заголовки iз масиву стовпця-заголовка:}:=NewRows[CurNum] - Self.CHeadRowNum-bc_LTaskRowsBeforeVars;. Cells [Self.CHeadColNum, NewRows[CurNum]]:=(Self. CurHeadCol[CurTableRow]);;;
{Якщо новi або змiненi рядки були, то вважаСФмо таблицю змiненою:}Length(NewRows)>0 then Self. CurGridModified:=True;;;
TGridFormattingProcs. EdLineTaskOnNewCol (Sender: TObject;: array of Integer);
{ПiдтримуСФ форматування рядка нумерацiСЧ та рядка-заголовка таблицi у
такому виглядi:
2 3 4 5тАж n n+1x1 x2 x3 x4тАж xn 1
}CurNum, CurTableCol: Integer; CurGrid:TStringGrid;Sender=Nil then Exit;
{Якщо до вмикання форматування був якийсь обробник подiСЧ, запускаСФмо його:}@Self. OldOnNewCol<>Nil then Self. OldOnNewCol (Sender, NewCols);
Sender is TStringGrid then:=TStringGrid(Sender);
{ОсвiжаСФмо масив помiток залежностi змiнних x:}. UpdateLTaskHeadRowToStrGrid(CurGrid);
{ВiдображаСФмо заголовки оновлених або нових стовпцiв:}CurNum:=0 to Length(NewCols) - 1 do
{Заголовки лише для комiрок, якi можна редагувати:}NewCols[CurNum]>=Self.CHeadColNum then{Нумерацiя стовпцiв:}. Cells [NewCols[CurNum], Self.CHeadRowNum-1]:=(NewCols[CurNum] - Self.CHeadColNum);
{Заголовки iз масиву рядка-заголовка:}:=NewCols[CurNum] - Self.CHeadColNum-bc_LTaskColsBeforeVars;. Cells [NewCols[CurNum], Self.CHeadRowNum]:=(Self. CurHeadRow[CurTableCol]);;;
Length(NewCols)>0 then
{Якщо новi або змiненi стовпцi були, то вважаСФмо таблицю змiненою:}. CurGridModified:=True;
{Якщо перед оновленими або новими стовпцями були iншi стовпцi, то
в останному з них оновлюСФмо пiдпис: тепер вiн буде з iменем змiнноСЧ
(xn) або, якщо це перший стовпець-то з пiдписом стовпця iмен
функцiй та констант рiвнянь.
(Тут покладаСФмося на те, що номери оновлених стовпцiв сортованi
за зростанням):}NewCols[0]>Self.CHeadColNum+bc_LTaskColsBeforeVars then:=NewCols[0] - 1-Self.CHeadColNum-bc_LTaskColsBeforeVars;
. Cells [NewCols[0] - 1, Self.CHeadRowNum]:=(Self. CurHeadRow[CurTableCol]);;{Якщо нових стовпцiв нема (кiлькiсть стовпцiв зменшилася):}
{вiдображаСФмо останню (найправiшу) комiрку}. Cells [CurGrid. ColCount-1, 1]:=(Self. CurHeadRow [CurGrid. ColCount-1-.CHeadColNum-bc_LTaskColsBeforeVars]);;;
TGridFormattingProcs. NumerationOnNewRow (Sender: TObject;: array of Integer);
{Процедура працюСФ при виникненнi подiСЧ оновлення рядка чи додавання нового
рядка у GrowingStringGrid.
ПiдтримуСФ форматування стовпця нумерацiСЧ таблицi у
такому виглядi:
тАж}CurNum: Integer; CurGrid:TStringGrid;Sender=Nil then Exit;
{Якщо до вмикання форматування був якийсь обробник подiСЧ, запускаСФмо його:}@Self. OldOnNewRow<>Nil then Self. OldOnNewRow (Sender, NewRows);
Sender is TStringGrid then:=TStringGrid(Sender);
CurNum:=0 to Length(NewRows) - 1 do
{Нумерацiя з першого рядка, що не СФ рядком заголовкiв:}NewRows[CurNum]>=(Self.CHeadRowNum+1) then. Cells [0, NewRows[CurNum]]:=(NewRows[CurNum] - Self.CHeadRowNum);; {For CurNum:=0 to Length(NewRows) - 1 doтАж}; {If Sender is TStringGrid thenтАж};
TGridFormattingProcs. NumerationOnNewCol (Sender: TObject;: array of Integer);
{Процедура працюСФ при виникненнi подiСЧ оновлення чи додавання нового
стовпця у GrowingStringGrid.
ПiдтримуСФ форматування рядка нумерацiСЧ таблицi у такому виглядi:
2 3 4 5тАж n}CurNum: Integer; CurGrid:TStringGrid;Sender=Nil then Exit;
{Якщо до вмикання форматування був якийсь обробник подiСЧ, запускаСФмо його:}@Self. OldOnNewCol<>Nil then Self. OldOnNewCol (Sen