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

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

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



[Self.CHeadColNum,+bc_LTaskRowsBeforeVars+Self.CHeadRowNum]; {назва}:=SRow; {номер п/п у стовпцi в умовi задачi}

{Ознака, що змiнна спочатку була у стовпцi-заголовку:}:=False;;;;

TGridFormattingProcs. ReadTableFromGrid: Boolean;sc_CurProcName='ReadTableFromGrid';

{Процедура для зчитування таблицi та СЧСЧ заголовкiв iз CurGrid.

Для екранноСЧ таблицi використовуються координати рядка-заголовка та

стовпця заголовка (верхнього лiвого кута таблицi з заголовками):(CHeadColNum) i HeadRowNumInGrid (CHeadRowNum).}CurRow, CurCol, CurWidth, CurHeight: Integer;:TWorkFloat;Self. CurGrid=Nil thenSelf. CurOutConsole<>Nil then. CurOutConsole. Lines. Add (sc_CurProcName+

': '+sc_NoGrowingStringGrid);:=False;;;

{Ширина i висота таблицi з заголовками:}:=Self. CurGrid. ColCount-Self.CHeadColNum-bc_LTaskColsBeforeVars;:=Self. CurGrid. RowCount-Self.CHeadRowNum-bc_LTaskRowsBeforeVars;

(CurHeightNil then. CurOutConsole. Lines. Add (sc_CurProcName+

': починаючи з комiрки ['+IntToStr (Self.CHeadColNum+1)+'; '+(Self.CHeadRowNum+1)+'] таблицi не знайдено' + sc_TriSpot);:=False;;;

{ВидiляСФмо пам'ять:}(Self. CurHeadRow, CurWidth); {рядок-заголовок}(Self. CurHeadCol, CurHeight); {стовпець-заголовок}(Self. CurTable, CurHeight, CurWidth); {таблиця}

{ЧитаСФмо рядок-заголовок:}CurCol:=0 to CurWidth-1 do ReadHeadRowCell(CurCol);

{ЧитаСФмо стовпець-заголовок:}CurRow:=0 to CurHeight-1 do ReadHeadColCell(CurRow);

{ЧитаСФмо таблицю коефiцiСФнтiв:}CurRow:=Self.CHeadRowNum+bc_LTaskRowsBeforeVars to. CurGrid. RowCount-1 doCurCol:=Self.CHeadColNum+bc_LTaskColsBeforeVars to. CurGrid. ColCount-1 do{ПробуСФмо iнтерпретувати рядок iз комiрки як число:}:=StrToFloat (CurGrid. Cells [CurCol, CurRow]);{Якщо не вдалося, то вважаСФмо це число нулем:}:=0;;. CurTable [CurRow-bc_LTaskRowsBeforeVars-Self.CHeadRowNum,bc_LTaskColsBeforeVars-Self.CHeadColNum]:=CurFloatVal;;;

{Пiсля читання змiни в екраннiй таблицi врахованi:}. CurGridModified:=False;:=True;;

TGridFormattingProcs. WriteTableToGrid (SHeadColNum,: Integer; ToTuneColWidth: Boolean=True):Boolean;

{Процедура для вiдображення таблицi та СЧСЧ заголовкiв у CurGrid.}sc_CurProcName='WriteTableToGrid';CurRow, CurCol, CurWidth, CurHeight: Integer;:THeadLineElmType;Self. CurGrid=Nil thenSelf. CurOutConsole<>Nil then. CurOutConsole. Lines. Add (sc_CurProcName+

': GrowingStringGrid не заданий!..');:=True;;;

{Ширина i висота таблицi:}. GetTaskSizes (CurWidth, CurHeight);

(CurHeightNil then. CurOutConsole. Lines. Add (sc_CurProcName+sc_EmptyTable);:=False;;;

{ВидiляСФмо комiрки для таблицi у екранному CurGrid:}. CurGrid. ColCount:=CurWidth+SHeadColNum+1;. CurGrid. RowCount:=CurHeight+SHeadRowNum+1;

{ВiдображаСФмо рядок-заголовок:}CurCol:=SHeadColNum+1 to Self. CurGrid. ColCount-1 do:=CurHeadRow [CurCol-1-SHeadColNum].ElmType;

CurElmType=bc_Number then {записуСФмо число, якщо СФ числом:}. Cells [CurCol, SHeadRowNum]:=(CurHeadRow[CurCol-1-SHeadColNum].AsNumber){Якщо це не число, то це рядок з якоюсь назвою. ЗаписуСФмо:}. CurGrid. Cells [CurCol, SHeadRowNum]:=[CurCol-1-SHeadColNum].AsVarName;;

{ВiдображаСФмо стовпець-заголовок:}CurRow:=SHeadRowNum+1 to Self. CurGrid. RowCount-1 do:=CurHeadCol [CurRow-1-SHeadRowNum].ElmType;

CurElmType=bc_Number then {записуСФмо число, якщо СФ числом:}. Cells [SHeadColNum, CurRow]:=(CurHeadCol[CurRow-1-SHeadRowNum].AsNumber){Якщо це не число, то це рядок з якоюсь назвою. ЗаписуСФмо:}. CurGrid. Cells [SHeadColNum, CurRow]:=[CurRow-1-SHeadRowNum].AsVarName;;

{ВiдображаСФмо таблицю коефiцiСФнтiв:}CurRow:=SHeadRowNum+1 to Self. CurGrid. RowCount-1 doCurCol:=SHeadColNum+1 to Self. CurGrid. ColCount-1 do. Cells [CurCol, CurRow]:=(Self. CurTable [CurRow-1-SHeadRowNum, CurCol-1-SHeadColNum]);;

{Комiрка на перехрестi заголовкiв пуста:}(SHeadRowNum<Self. CurGrid. RowCount) and

(SHeadColNum<Self. CurGrid. ColCount) then. Cells [SHeadColNum, SHeadRowNum]:='';

{Пiсля запису в екранну таблицю: змiни, що могли бути у нiй, вважаСФмо

затертими:}. CurGridModified:=False;

{Якщо задано, настроюСФмо ширини стовпцiв по довжинi тексту у комiрках:}ToTuneColWidth then Self. CurGrid. TuneColWidth;

:=True;;

TGridFormattingProcs. GetTaskSizes (Var DWidth, DHeight: Integer);

{Визначення розмiрiв таблицi задачi, i корегування довжини заголовкiв

таблицi та зовнiшнього масиву таблицi (масиву масивiв).}:=Length (Self. CurTable);

DHeight>0 then:=Length (Self. CurTable[0])DWidth:=0;DWidth=0 then DHeight:=0;

DWidth>Length (Self. CurHeadRow) then:=Length (Self. CurHeadRow);

DHeight>Length (Self. CurHeadCol) then:=Length (Self. CurHeadCol);

{Якщо комiрок немаСФ, то:}DWidth=0 then

{Зовнiйшiй масив встановлюСФмо у нульову довжину:}(Self. CurTable, 0);

{Заголовки теж:}(Self. CurHeadRow, 0);(Self. CurHeadCol, 0);;;

{Розмiри прочитаноСЧ таблицi задачi:}TGridFormattingProcs. TaskWidth: Integer;CurWidth, CurHeight: Integer;. GetTaskSizes (CurWidth, CurHeight);:=CurWidth;;

TGridFormattingProcs. TaskHeight: Integer;CurWidth, CurHeight: Integer;. GetTaskSizes (CurWidth, CurHeight);:=CurHeight;;

TGridFormattingProcs. GetTask (ToPrepareGrid: Boolean=True):Boolean;

{Зчитування умови задачi iз CurGrid та вiдображення прочитаного

на тому ж мiii, де воно було. ПрацюСФ у режимах_EnteringEqs i fs_EnteringLTask.}sc_CurProcName='GetTask';Res1: Boolean;DoGetTask;ToPrepareGrid then. ShrinkToFilled (Self.CHeadColNum+1, Self.CHeadRowNum+1);

{ЧитаСФмо комiрки таблицi:}:=Self. ReadTableFromGrid;

{ВiдображаСФмо те, що вийшло прочитати, у тих самих комiрках на екранi:}Not (Self. WriteTableToGrid (Self.CHeadColNum, Self.CHeadRowNum)) then:=False;;Self. CurGrid=Nil thenSelf. CurOutConsole<>Nil then. CurOutConsole. Lines. Add (sc_CurProcName+': '+sc_NoGrowingStringGrid);:=False;;;

Self. CurFormatState of_EnteringEqs: {режим редагування системи лiнiйних рiвнянь:}

{ЗчитуСФмо таблицю. Як рядок-заголовок зчитуСФмо автоматично

сформованi назви змiнних x1тАжxn та множник вiльних членiв (1).

Як стовпець-заголовок зчитуСФмо стовпець нумерацiСЧ.

При переходi до режиму вирiшування задачi у цей стовпець

будуть скопiйованi вiльнi члени (режим способу 1, fs_SolvingEqsM1),

або нулi (режим способу 2, fs_SolvingEqsM2):};

Not(Res1) then Begin GetTask:=False; Exit; End;;_EnteringLTask: {режим редагування форми задачi лiнiйного програмування:}

{ЗчитуСФмо таблицю умови для задачi ЛП максимiзацiСЧ або

мiнiмiзацiСЧ лiнiйноСЧ форми (функцiСЧ з умовами-нерiвностями,

рiвняннями та обмеженнями невiд'СФмностi, iмена змiнних, нерiвностей,

функцiй):};

Not(Res1) then Begin GetTask:=False; Exit; End;;_FreeEdit: {режим вiльного редагування:}

{ЧитаСФмо таблицю, рядок-заголовок, стовпець-заголовок:};

Not(Res1) then Begin GetTask:=False; Exit; End;;{iншi режими:}Self. CurOutConsole<>Nil then. CurOutConsole. Lines. Add (sc_CurProcName + sc_CantReadTaskInCurMode

+ sc_TriSpot);:=False;;;;

{If ToPrepareGrid then CurGr