Багатокритер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