Багатокритерiальна задача лiнiйного програмування

Дипломная работа - Компьютеры, программирование

Другие дипломы по предмету Компьютеры, программирование



?омiрках рядка-заголовка та стовпця-заголовка таблицi.

ФормуСФ та вiдкриваСФ контекстне меню для вибору типу комiрки iз можливих

типiв для цiСФСЧ комiрки.}sc_CurProcName='EdLineTaskOnMouseUp';CurCol, CurRow, ArrayRow, ArrayCol: Integer; CurElmType:THeadLineElmType;:TPoint;

{Якщо до вмикання форматування був якийсь обробник подiСЧ, запускаСФмо його:}@Self. OldOnMouseUp<>Nil then Self. OldOnMouseUp (Sender, Button, Shift, X, Y);

Sender=Nil then Exit;

{Якщо задано екранну таблицю даного об'СФкта TGridFormattingProcs:}Sender = Self. CurGrid thenButton=mbRight then {якщо була вiдпущена права кнопка мишi}

{ПробуСФмо узнати, на яку комiрку натиснула миша:}:=-1; CurRow:=-1;. CurGrid. MouseToCell (X, Y, CurCol, CurRow);:=Self. CurGrid. ClientToScreen (Point(X, Y));

{Координати комiрки у масивах таблицi i СЧСЧ заголовкiв:}:=CurRow-Self.CHeadRowNum-bc_LTaskRowsBeforeVars;:=CurCol-Self.CHeadColNum-bc_LTaskColsBeforeVars;

{Якщо натиснуто на комiрку рядка-заголовка:}(CurRow=Self.CHeadRowNum) and (ArrayCol>=0) and

(ArrayCol<Length (Self. CurHeadRow)) then{очищаСФмо меню перед заповненням:}. InitGridPopupMenu (Self. CurGrid);

{Якщо в екраннiй таблицi були змiни з часу останнього СЧСЧ читання,

то читаСФмо комiрку, для якоСЧ треба сформувати меню:}Self. CurGridModified then Self. ReadHeadRowCell(ArrayCol);

{ЧитаСФмо поточний тип комiрки:}:=Self. CurHeadRow[ArrayCol].ElmType;

{ДодаСФмо пункти меню:}

{Якщо в комiрцi число-то тип комiрки може бути тiльки числовий:}CurElmType=bc_Number then. AddCellTypeItemToMenu (Self. CurGrid. PopupMenu,_ValInHeadColOrRow, True, CurElmType){якщо в комiрцi не число:}

{незалежна змiнна:}. AddCellTypeItemToMenu (Self. CurGrid. PopupMenu,_IndependentVar,= bc_IndependentVar, bc_IndependentVar);

{залежна змiнна:}. AddCellTypeItemToMenu (Self. CurGrid. PopupMenu,_DependentVar,= bc_DependentVar, bc_DependentVar);;If (CurCol=Self.CHeadColNum) and (ArrayRow>=0) and

(ArrayRow<Length (Self. CurHeadCol)) then{якщо натиснуто на комiрку стовпця-заголовка:}. InitGridPopupMenu (Self. CurGrid);

{Якщо в екраннiй таблицi були змiни з часу останнього СЧСЧ читання,

то читаСФмо комiрку, для якоСЧ треба сформувати меню:}Self. CurGridModified then Self. ReadHeadColCell(ArrayRow);

{ЧитаСФмо поточний тип комiрки:}:=Self. CurHeadCol[ArrayRow].ElmType;

{ДодаСФмо пункти меню:}

{Якщо в комiрцi число-то тип комiрки може бути тiльки числовий:}CurElmType=bc_Number then. AddCellTypeItemToMenu (Self. CurGrid. PopupMenu,_ValInHeadColOrRow, True, CurElmType){якщо в комiрцi не число:}

{назва фiнкцiСЧ - рядка нерiвностi:}. AddCellTypeItemToMenu (Self. CurGrid. PopupMenu,_InequalFuncName, CurElmType = bc_FuncVal, bc_FuncVal);

{назва функцiСЧ мети, що максимiзуСФться:}. AddCellTypeItemToMenu (Self. CurGrid. PopupMenu,_DestFuncToMaxName, CurElmType = bc_DestFuncToMax,_DestFuncToMax);

{назва функцiСЧ мети, що мiнiмiзуСФться:}. AddCellTypeItemToMenu (Self. CurGrid. PopupMenu,_DestFuncToMinName, CurElmType = bc_DestFuncToMin,_DestFuncToMin);;{якщо для даноСЧ комiрки вибiр типу не передбачено}{ставимо в меню координати комiрки

(щоб користувач взагалi помiтив, що меню СФтАж)}. InitGridPopupMenu (Self. CurGrid);. AddCellTypeItemToMenu (Self. CurGrid. PopupMenu,_Row+sc_DoubleSpot+sc_Space+IntToStr (ArrayRow+1)+sc_KrKm+_Space+sc_Col+sc_DoubleSpot+sc_Space+IntToStr (ArrayCol+1),, bc_OtherType);;

{ЗаписуСФмо координати комiрки для обробника вибору типу з меню:}. CurGridSolveCol:=ArrayCol;. CurGridSolveRow:=ArrayRow;

{ВiдображаСФмо меню:}. CurGrid. PopupMenu. Popup (MouseScrCoords.X, MouseScrCoords.Y);; {If Button=mbRight thenтАж}{If Sender = Self. CurGrid thenтАж}{якщо обробник викликала чужа таблиця або невiдомий об'СФкт:}Self. CurOutConsole<>Nil then. CurOutConsole. Lines. Add (sc_CurProcName+sc_UnknownObjectCall+_DoubleQuot+Sender. ClassName+sc_DoubleQuot);;;

TGridFormattingProcs. ReactOnSetEditText (Sender: TObject; ACol,: Longint; const Value: string);

{Процедура для реагування на редагування вмiсту комiрок

пiд час редагування вхiдних даних. ВстановлюСФ прапорець:=True про те, що екранна таблиця маСФ змiни.}

{Старий обробник теж викликаСФмо, якщо вiн СФ:}@Self. OldOnSetEditText<>Nil then. OldOnSetEditText (Sender, ACol, ARow, Value);

. CurGridModified:=True;;

TGridFormattingProcs. SetNewState (Value:TTableFormatState);sc_CurProcName='SetNewState';StateSafe:TTableFormatState;, OldHRowPos: Integer;

{Процедура для змiни режиму форматування GrowingStringGrid}GoSolveLTask;{Вирiшування задачi ЛП симплекс-методом:}. ColCount:=bc_FixedCols+1;. RowCount:=bc_FixedRows+1;. FixedRows:=bc_FixedRows;. FixedCols:=bc_FixedCols;

Not (Self. PrepareToSolveLTask) then{Якщо не вдаСФться пiдготувати таблицю до вирiшування задачi:}:=Self. CurFormatState;

{ПеремикаСФмо на режим fs_NoFormatting, i назад у поточний,

щоб встановити усi настройки цього режиму (повернутися до них):}. TableFormatState:=fs_NoFormatting;. TableFormatState:=StateSafe;;;

. OnNewCol:=NumerationOnNewCol;. OnNewRow:=NumerationOnNewRow;. OnDrawCell:=EdLineTaskOnDrawCell;

. OnDblClick:=OldOnDblClick;. OnMouseUp:=OldOnMouseUp;

. OnSetEditText:=OldOnSetEditText;

{ВимикаСФмо редагування екранноСЧ таблицi:}. Options:=CurGrid. Options - [goEditing];;InSolving thenSelf. CurOutConsole<>Nil then. CurOutConsole. Lines. Add (sc_CurProcName+sc_CantChangeStateInSolving);;;

Self. CurGrid=Nil then {Якщо екранну таблицю не задано:}{запам'ятовуСФмо поточний режим, i бiльше нiчого не робимо тут:}. CurFormatState:=Value; Exit;;

{Якщо задано новий режим:}Self. CurFormatState<>Value then{Якщо форматування було вимкнене:}Self. CurFormatState=fs_NoFormatting then{Запам'ятовуСФмо обробники подiй, якi замiнимо на своСЧ

форматувальники:}:=CurGrid. OnNewCol;:=CurGrid. OnNewRow;:=CurGrid. OnDrawCell;:=CurGrid. OnDblClick;:=CurGrid. OnSetEditText;:=CurGrid. OnMouseUp;;

{Якщо таблиця редагована, то приймаСФмо останнi змiни перед

змiною режиму:}Self. CurGridModified then Self. Refresh;

Value of_EnteringEqs: {редагування таблицi системи лiнiйних рiвнянь:}

{ВстановлюСФмо потрiбну кiлькiсть рядкiв i стовпцiв екранноСЧ

таблицi для фiксованих заголовкiв (тiльки для читання).

Для цього забезпечуСФмо щоб кiлькiсть рядкiв i стовпцiв не була

меншою за потрiбну кiлькiсть фiксованих, плюс хоч один

стовпець / рядок (хоч одна комiрка) для редагування:}CurGrid. ColCount<bc_FixedCols+1 then. ColCount:=bc_FixedCols+1;CurGrid. RowCount<bc_FixedRows+1 then. RowCount:=bc_FixedRows+1;

. FixedRows:=bc_FixedRows;. FixedCols:=bc_FixedCols;

{Позицiювання таблицi до змiни режиму:}:=Self.CHeadColNum; OldHRowPos:=Self.CHeadRowNum;

{Позицiювання вiдображення таблицi у даному режимi редагування:}.CHeadColNum:=CurGrid. FixedCols-1;.CHeadRowNum:=CurGrid. FixedRows-1;

{Якщо позицiювання змiнилося, то вiдображаСФмо таблицю

в новому мiii:}(OldHColPos<>Self.CHeadColNu