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

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

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



);:=sc_CurProcName+sc_CantReadFile+SPath+sc_DoubleQuot;Self. CurOutConsole<>Nil then. CurOutConsole. Lines. Add(CurMessage);(CurMessage, mtError, [mbOk], 0);:=False; Exit;;

{ВстановлюСФмо режим, що був збережений у файлi разом з умовою задачi:}. TableFormatState:=GotFormatState;

{ЧитаСФмо рядок-заголовок:}(Self. CurHeadRow, CurColCount);CurCol:=0 to CurColCount-1 do. BlockRead (CurFile, Self. CurHeadRow[CurCol], SizeOf(TValOrName));:=sc_CurProcName+sc_CantReadFile+SPath+sc_DoubleQuot;Self. CurOutConsole<>Nil then. CurOutConsole. Lines. Add(CurMessage);(CurMessage, mtError, [mbOk], 0);:=False; Exit;;;

{ЧитаСФмо стовпець-заголовок:}(Self. CurHeadCol, CurRowCount);CurRow:=0 to CurRowCount-1 do. BlockRead (CurFile, Self. CurHeadCol[CurRow], SizeOf(TValOrName));:=sc_CurProcName+sc_CantReadFile+SPath+sc_DoubleQuot;Self. CurOutConsole<>Nil then. CurOutConsole. Lines. Add(CurMessage);(CurMessage, mtError, [mbOk], 0);:=False; Exit;;;

{ЧитаСФмо таблицю коефiцiСФнтiв i вiльних членiв:}(Self. CurTable, CurRowCount, CurColCount);CurRow:=0 to CurRowCount-1 doCurCol:=0 to CurColCount-1 do. BlockRead (CurFile, Self. CurTable [CurRow, CurCol],(TWorkFloat));:=sc_CurProcName+sc_CantReadFile+SPath+sc_DoubleQuot;Self. CurOutConsole<>Nil then. CurOutConsole. Lines. Add(CurMessage);(CurMessage, mtError, [mbOk], 0);:=False; Exit;;;;

. Close(CurFile);:=sc_CurProcName + sc_CantCloseFile + SPath + sc_DoubleQuot;Self. CurOutConsole<>Nil then. CurOutConsole. Lines. Add(CurMessage);;

. CurGridModified:=False;

. Refresh;

{ВiдмiчаСФмо, що прочитана умова задачi не пiдготована ще до вирiшування

жодним iз методiв вирiшування:}. EqM1TaskPrepared:=False;. EqM2TaskPrepared:=False;.LTaskPrepared:=False;

:=True;;

TGridFormattingProcs. SaveToFile (Const SPath: String):Boolean;

{Запис умови задачi у файл.}sc_CurProcName='SaveToFile';CurFile: File; CurColCount, CurRowCount, CurCol, CurRow: Integer;: String;((Self. CurFormatState<>fs_EnteringEqs) and

(Self. CurFormatState<>fs_EnteringLTask) and

(Self. CurFormatStateNil then. CurOutConsole. Lines. Add(CurMessage);(CurMessage, mtError, [mbOk], 0);:=False; Exit;;

{Якщо таблиця модифiкована, умова не прочитана з неСЧ, то читаСФмо:}Self. CurGridModified thenNot (Self. GetTask(True)) then:=False; Exit;;;

. AssignFile (CurFile, SPath);. FileMode:=fmOpenWrite;{ПробуСФмо створити новий файл:}. Rewrite (CurFile, 1);:=sc_CurProcName+sc_CantCreateFile+SPath+sc_DoubleQuot;Self. CurOutConsole<>Nil then. CurOutConsole. Lines. Add(CurMessage);(CurMessage, mtError, [mbOk], 0);:=False; Exit;;

. GetTaskSizes (CurColCount, CurRowCount);

{ПробуСФмо прочитати дескриптори кiлькостi рядкiв i стовпцiв у задачi:}. BlockWrite (CurFile, CurColCount, SizeOf(CurColCount));. BlockWrite (CurFile, CurRowCount, SizeOf(CurRowCount));. BlockWrite (CurFile, Self. CurFormatState,(Self. CurFormatState));:=sc_CurProcName+sc_CantWriteFile+SPath+sc_DoubleQuot;Self. CurOutConsole<>Nil then. CurOutConsole. Lines. Add(CurMessage);(CurMessage, mtError, [mbOk], 0);:=False; Exit;;

{ЗаписуСФмо рядок-заголовок:}CurCol:=0 to CurColCount-1 do. BlockWrite (CurFile, Self. CurHeadRow[CurCol], SizeOf(TValOrName));:=sc_CurProcName+sc_CantWriteFile+SPath+sc_DoubleQuot;Self. CurOutConsole<>Nil then. CurOutConsole. Lines. Add(CurMessage);(CurMessage, mtError, [mbOk], 0);:=False; Exit;;;

{ЗаписуСФмо стовпець-заголовок:}CurRow:=0 to CurRowCount-1 do. BlockWrite (CurFile, Self. CurHeadCol[CurRow], SizeOf(TValOrName));:=sc_CurProcName+sc_CantWriteFile+SPath+sc_DoubleQuot;Self. CurOutConsole<>Nil then. CurOutConsole. Lines. Add(CurMessage);(CurMessage, mtError, [mbOk], 0);:=False; Exit;;;

{ЗаписуСФмо таблицю коефiцiСФнтiв i вiльних членiв:}CurRow:=0 to CurRowCount-1 doCurCol:=0 to CurColCount-1 do. BlockWrite (CurFile, Self. CurTable [CurRow, CurCol],(TWorkFloat));:=sc_CurProcName+sc_CantWriteFile+SPath+sc_DoubleQuot;Self. CurOutConsole<>Nil then. CurOutConsole. Lines. Add(CurMessage);(CurMessage, mtError, [mbOk], 0);:=False; Exit;;;;

. Close(CurFile);:=sc_CurProcName + sc_CantCloseFile + SPath + sc_DoubleQuot;Self. CurOutConsole<>Nil then. CurOutConsole. Lines. Add(CurMessage);(CurMessage, mtError, [mbOk], 0);:=False; Exit;;

:=True;;

TGridFormattingProcs. SetTable (Const SHeadRow, SHeadCol:TValOrNameMas;STable:TFloatMatrix);

{ЗадаСФ нову таблицю i загноловки (що могли бути сформованi поза об'СФктом):}. CurTable:=STable;. CurHeadRow:=SHeadRow;. CurHeadCol:=SHeadCol;

. TaskWidth; {перевiряСФмо розмiри новоСЧ таблицi i СЧСЧ заголовкiв};

TGridFormattingProcs. GetTable (Var DHeadRow, DHeadCol:TValOrNameMas;DTable:TFloatMatrix);

{ПовертаСФ посилання на таблицю i СЧСЧ заголовки.}:=Self. CurTable;:=Self. CurHeadRow;:=Self. CurHeadCol;;TGridFormattingProcs. ReadHeadRowCell (SCol: Integer);

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

Вхiднi данi:- номер комiрки у рядку-заголовку.

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

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

таблицi з заголовками): HeadColNumInGrid i HeadRowNumInGrid.}CurFloatVal:TWorkFloat; CurElmType:THeadLineElmType;:=CurHeadRow[SCol].ElmType;:=0;{ПробуСФмо розпiзнати число:}:=StrToFloat (CurGrid. Cells [SCol+bc_LTaskColsBeforeVars+.CHeadColNum, Self.CHeadRowNum]);:=bc_Number; {якщо число розпiзналося, то це число}{Якщо рядок не iнтерпретуСФться як число, але пiд час редагування

була зроблена помiтка про те, що це СФ число або функцiя, то вважаСФмо

його назвою незалежноСЧ змiнноСЧ (бо всi функцiСЧ в умовi задачi мають

бути в стовпцi-заголовку, а не в рядку):}(CurElmTypebc_DependentVar) then:=bc_IndependentVar;; {Виправлений тип елемента:}[SCol].ElmType:=CurElmType;CurElmType=bc_Number then {записуСФмо число, якщо розпiзналося:}[SCol].AsNumber:=CurFloatVal{якщо число не розпiзналося, то записуСФмо як назву змiнноСЧ:}CurHeadRow[SCol] do:=CurGrid. Cells [SCol+bc_LTaskColsBeforeVars+Self.CHeadColNum,.CHeadRowNum]; {назва}:=SCol; {номер п/п у рядку в умовi задачi}:=True; {ознака, що змiнна спочатку була у рядку-заголовку};;;

TGridFormattingProcs. ReadHeadColCell (SRow: Integer);

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

Вхiднi данi:- номер комiрки у стовпцi-заголовку.

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

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

таблицi з заголовками): HeadColNumInGrid i HeadRowNumInGrid.}CurFloatVal:TWorkFloat; CurElmType:THeadLineElmType;:=CurHeadCol[SRow].ElmType;:=0;{ПробуСФмо розпiзнати число:}:=StrToFloat (CurGrid. Cells [Self.CHeadColNum,+bc_LTaskRowsBeforeVars+Self.CHeadRowNum]);:=bc_Number; {якщо число розпiзналося, то це число}{Якщо рядок не iнтерпретуСФться як число, але комiрка вважалася

такою, що мiстить число або змiнну, то вважаСФмо його назвою функцiСЧ

(бо це не число, i не повинно бути змiнною - усi змiннi спочатку

у рядку-заголовку):}(CurElmTypebc_DestFuncToMax) and

(CurElmType<>bc_DestFuncToMin) then:=bc_FuncVal;; {Виправлений тип елемента:}[SRow].ElmType:=CurElmType;CurElmType=bc_Number then {записуСФмо число, якщо розпiзналося:}[SRow].AsNumber:=CurFloatVal{якщо число не розпiзналося, то записуСФмо як назву змiнноСЧ:}CurHeadCol[SRow] do:=CurGrid. Cells