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

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

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



der, NewCols);

Sender is TStringGrid then:=TStringGrid(Sender);CurNum:=0 to Length(NewCols) - 1 do

{Заголовки лише для нефiксованих комiрок:}NewCols[CurNum]>=(Self.CHeadColNum+1) then. Cells [NewCols[CurNum], 0]:=(NewCols[CurNum] - Self.CHeadColNum);;;;

TGridFormattingProcs. UpdateLTaskHeadRowToStrGrid (SGrid:TStringGrid);

{Процедура для пiдтримки масиву рядка-заголовка пiд час редагування

таблицi. ВстановлюСФ довжину масиву вiдповiдно до ширини екранноСЧ таблицi

i координат вписування в неСЧ таблицi задачi, заповнюСФ новi комiрки

значеннями за змовчуванням, а також змiнюСФ останню комiрку перед новими.}CurLTaskVarCount, OldCount, CurVarMark: Integer;

{Кiлькiсть стовпцiв для коефiцiСФнтiв змiнних у таблицi:}:=SGrid. ColCount-Self.CHeadColNum-_LTaskColsBeforeVars {-bc_LTaskColsAfterVars};

{Якщо таблиця маСФ надто малу ширину, то нiчого тут не робимо:}CurLTaskVarCount<0 then Exit;

{Масив видовжуСФмо до кiлькостi стовпцiв у StringGrid, у яких

редагуСФмо коСФфiцiСФнти при змiнних:}:=Length (Self. CurHeadRow);OldCount<>CurLTaskVarCount then(Self. CurHeadRow, CurLTaskVarCount); {змiнюСФмо довжину}

{ЗаповнюСФмо новi елементи масиву значеннями за змовчуванням:

вiльнi змiннi:}CurVarMark:=OldCount to CurLTaskVarCount-2 do. CurHeadRow[CurVarMark].ElmType:=bc_IndependentVar;. CurHeadRow[CurVarMark].VarInitInRow:=True;. CurHeadRow[CurVarMark].VarInitPos:=CurVarMark;. CurHeadRow[CurVarMark].AsVarName:=sc_XVarName+IntToStr (CurVarMark+1);;

{Останнiй елемент СФ числом, а не змiнною: це множник стовпця

вiльних членiв (правих частин):}CurLTaskVarCount>0 then. CurHeadRow [CurLTaskVarCount-1].ElmType:=bc_Number;. CurHeadRow [CurLTaskVarCount-1].AsNumber:=1;

{Колишнiй останнiй елемент тепер буде змiнною:}(OldCount>0) and (OldCount<CurLTaskVarCount) then. CurHeadRow [OldCount-1].ElmType:=bc_IndependentVar;. CurHeadRow [OldCount-1].AsVarName:=sc_XVarName+IntToStr(OldCount);;;;

TGridFormattingProcs. UpdateLTaskHeadColToStrGrid (SGrid:TStringGrid;: array of Integer);

{Процедура для пiдтримки масиву стовпця-заголовка пiд час редагування

таблицi. ВстановлюСФ довжину масиву вiдповiдно до висоти екранноСЧ таблицi

i координат вписування в неСЧ таблицi задачi, заповнюСФ новi комiрки

значеннями за змовчуванням.

Вхiднi данi:- екранна таблиця, пiд яку треба настроСЧти масив;- масив номерiв рядкiв таблицi, що були доданi чи змiненi

(що зазнали змiн з часу останнього виклику цiСФСЧ процедури пiд час

редагування).}CurHeight, OldHeight, CurRow: Integer;FillWithDefVal (SElmNum: Integer);. CurHeadCol[SElmNum].ElmType:=bc_FuncVal;. CurHeadCol[SElmNum].VarInitInRow:=False;. CurHeadCol[SElmNum].VarInitPos:=SElmNum;. CurHeadCol[SElmNum].AsVarName:=sc_YFuncName+(SElmNum+1);;{Висота таблицi за поточною висотою екранноСЧ таблицi:}:=SGrid. RowCount-Self.CHeadRowNum-bc_LTaskRowsBeforeVars;:=Length (Self. CurHeadCol); {попередня висота таблицi}(OldHeight=0) then

{ЗмiнюСФмо довжину масиву стовпця-заголовка:}(Self. CurHeadCol, CurHeight);

CurRow:=OldHeight to CurHeight-1 do(CurRow); {заповнюСФмо новi комiрки за змовчуванням};;

TGridFormattingProcs. EdLineTaskOnDrawCell (Sender: TObject; ACol,: Integer; Rect: TRect; State: TGridDrawState);

{Процедура виконуСФться при малюваннi кожноСЧ комiрки StringGrid.

ЗафарбовуСФ в iнший колiр фону комiрок:

перший стовпець комiрок (стовпець-заголовок таблицi задачi лiнiйного

програмування). Комiрки цього стовпця зафарбовуються вiдповiдно до типiв

елементiв у масивi стовпця-заголовка (якщо цей масив створений для цих

комiрок, iнакше - за змовчуванням: кольором назв функцiй умов-нерiвностей,

i найнижчу комiрку - кольором для назви функцiСЧ мети);

останнiй стовпець (стовпець значень правих сторiн р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:TStringGrid; SafeBrushColor:TColor;:THeadLineElmType; CurColor:TColor;: Integer;

Sender=Nil then Exit;

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

:=ARow - (Self.CHeadRowNum+bc_LTaskRowsBeforeVars);Sender is TStringGrid then:=TStringGrid(Sender);:=CurGrid. Canvas. Brush. Color;:=bc_NotColored;

{Комiрки останнього стовпця СФ стовпцем правих сторiн рiвнянь.

ФарбуСФмо СЧх у блакитний колiр (окрiм комiрок заголовкiв):}Not (gdFixed in State) then {якщо комiрка не у заголовках StringGrid}ACol>=(CurGrid. ColCount-bc_LTaskColsAfterVars) then {останнi стовпцi:}

{Якщо це комiрка значення цiльовоСЧ функцiСЧ - для неСЧ свiй колiр:}Self. CurHeadCol[ArrRowNum].ElmType of_DestFuncToMax: CurColor:=lwc_DestFuncValColor;_DestFuncToMin: CurColor:=lwc_DestFuncValColor;CurColor:=lwc_RightSideColColor;;if ACol<(Self.CHeadColNum+bc_LTaskColsBeforeVars) then{Якщо першi стовпцi (стовпець-заголовок):}

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

то фарбуСФмо СЧСЧ залежно вiд типу цього елемента:}Length (Self. CurHeadCol)>

(ARow - (Self.CHeadRowNum + bc_LTaskRowsBeforeVars)) then{Тип елемента у комiрцi:}:=Self. CurHeadCol [ARow - (Self.CHeadRowNum+_LTaskRowsBeforeVars)].ElmType;:=GetColorByElmType(CurVarColState); {колiр за типом}{Якщо масив стовпця-заголовка не визначено для комiрки -

фарбуСФмо за змовчуванням - як назву функцiСЧ умови-нерiвностi:}:=lwc_HeadColColor;{Якщо рядок коефiцiСФнтiв при змiнних цiльовоСЧ функцiСЧ:}if (Self. CurHeadCol[ArrRowNum].ElmType=bc_DestFuncToMax) or

(Self. CurHeadCol[ArrRowNum].ElmType=bc_DestFuncToMin) then

{Якщо рядок функцiСЧ видiлений, то видiляСФмо кольором:}InSolving and (Self. CurGridSolveRow=ARow) then:=lwc_SolveRowColorCurColor:=lwc_FuncRowColor; {iнакше - колiр рядка функц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;;;

{ЗафарбовуСФмо комiрки-заголовки стовпцiв коефiцiСФнтiв при змiнних

вiдповiдно до масиву помiток про залежнiсть:}(ARow=Self.CHeadRowNum) and