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