Багатокритерiальна задача лiнiйного програмування
Дипломная работа - Компьютеры, программирование
Другие дипломы по предмету Компьютеры, программирование
Console. Lines. Add (sc_ResultIs+sc_DoubleSpot);
NoRoots:=False;
CurRowN:=0 to Length (Self. CurHeadCol) - 1 doSelf. CurOutConsole<>Nil then:='';
{=тАж:}Self. CurHeadCol[CurRowN].ElmType=bc_Number then:=st1+FloatToStr (Self. CurHeadCol[CurRowN].AsNumber):=st1+Self. CurHeadCol[CurRowN].AsVarName;;
:=False;:=Self. CurTable [CurRowN, Length (Self. CurHeadRow) - 1];Self. CurHeadCol[CurRowN].ElmType=bc_Number thenSelf. CurHeadCol[CurRowN].AsNumber<>CurVal thenNoRoots:=True; NotEqual:=True; End;;
Self. CurOutConsole}st1:=st1+sc_Space+sc_Equal+sc_Space; {=}
:=st1+FloatToStr(CurVal)+sc_KrKm; {;}. CurOutConsole. Lines. Add(st1);;; {For CurRowN:=0 to Length (Self. CurHeadCol) - 1 doтАж}
{ПерерiряСФмо, чи залишилися змiннi у рядку-заголовку. Якщо так, то
коренi вiльнi, i якщо система сумiсна, то СЧх безлiч:}:=False;CurColN:=0 to Length (Self. CurHeadRow) - 1 doSelf. CurHeadRow[CurColN].ElmType<>bc_Number thenFreeRoots:=True; Break; End;;
NoRoots thenSelf. CurOutConsoleNil then. CurOutConsole. Lines. Add (sc_CurProcName + sc_EmptyTable);:=False;;;
:=Self.CHeadRowNum;:=Self.CHeadColNum;
Self. CurOutConsole<>Nil then. CurOutConsole. Lines. Add (sc_CurProcName + sc_StartSolving);
:=0; {починаСФмо з першого рядка}
{Проходимо по усiх стовпцях (по усiх змiнних), намагаючись брати
розв'язувальнi комiрки по головнiй дiагоналi. Якщо серед таких зустрiнеться
нуль, спробуСФмо знайти ненульову комiрку нижче, i помiняти рядки нульовоСЧ
з ненульовою, щоб ненульова стала на головнiй дiагоналi.
При цьому останнiй стовпець не беремо (у ньому вiльнi члени -
правi частини рiвнянь):}:=0;(CurColNum<(Length (Self. CurHeadRow) - 1)) and {останнiй стовпець не беремо}
(CurRowNum<Length (Self. CurHeadCol)) do
{Координати розв'язувальноСЧ комiрки для помiтки кольором в екраннiй
таблицi:}. CurGridSolveCol:=CurColNum+HeadColNum+bc_LTaskColsBeforeVars;. CurGridSolveRow:=CurRowNum+HeadRowNum+bc_LTaskRowsBeforeVars;
{ПеревiряСФмо, чи не СФ поточна комiрка нулем, i при потребi шукаСФмо
ненульову серед коефiцiСФнтiв, окрiм стовпця вiльних членiв
(що СФ останнiм):}Not (Self. SearchNozeroSolveCell (CurRowNum, CurColNum,(Self. CurHeadCol) - 1, Length (Self. CurHeadRow) - 2,, HeadColNum)) then; {якщо не знайденотАж}Self. Stop then Goto LStopLabel;
(HeadColNum, HeadRowNum);
{Якщо дано команду перервати розв'язування:}Self. Stop then Goto LStopLabel;
:=False;
{ОбробляСФмо таблицю звичайним Жордановим виключенням:}Not (Self.GI (CurColNum, CurRowNum, Self. CurHeadRow, Self. CurHeadCol,. CurTable, ColDeleted, False, True)) then:=False;;;
{Переходимо до наступного рядка, так як у цьому вже виразили одну iз
змiнних:}(CurRowNum);Not(ColDeleted) then Inc(CurColNum);;
;
:=True;;
:Self. CurOutConsole<>Nil then. CurOutConsole. Lines. Add (sc_CurProcName + sc_SolvingStopped);
:=False;;;
{Запускач вирiшування. ПрацюСФ у режимах fs_SolvingEqsM1,_SolvingEqsM2, fs_SolvingLTask:}TGridFormattingProcs. Solve (ToGoToEnd: Boolean=False):Boolean;sc_CurProcName='Solve';: Boolean;: String;. InSolving:=True;. WasNoRoots:=False; Self. WasManyRoots:=False; Self. SolWasFound:=False;
. Stop:=False; Self. GoToEnd:=ToGoToEnd;:=False;
Self. CurFormatState of_SolvingEqsM1: Res1:=Self. SolveEqsWithM1;_SolvingEqsM2: Res1:=Self. SolveEqsWithM2;_SolvingLTask: Res1:=Self. SolveMultiCritLTask;
Self. CurOutConsole<>Nil then. CurOutConsole. Lines. Add (sc_CurProcName + sc_NoSolveMode);;;
Self. CurOutConsole<>Nil then:='Вирiшування закiнчено.';Res1 then st1:=st1+' Успiшно.' else st1:=st1+' З помилками' + sc_TriSpot;. CurOutConsole. Lines. Add(st1);;
. InSolving:=False;
{ВiдображаСФмо таблицю вкiнцi вирiшування:}. WriteTableToGrid (Self.CHeadColNum, Self.CHeadRowNum, True);:=Res1;;
TGridFormattingProcs. Create;Create;:=False;:=False; WasNoRoots:=False; WasManyRoots:=False;TaskPrepared:=False; EqM2TaskPrepared:=False; LTaskPrepared:=False;
:=False; GoToEnd:=False; Stop:=False;
:=False;:=0; CurGridSolveRow:=0;
:=fs_NoFormatting;
:=Nil;:=Nil;:=Nil;:=Nil;:=Nil;:=Nil;:=Nil;
{SetLength (CurHeadRow, 0); SetLength (CurHeadCol, 0);(CurTable, 0);}
. CurHeadRow:=Nil;. CurHeadCol:=Nil;. CurTable:=Nil;
. CopyHeadRow:=Nil;. CopyHeadCol:=Nil;. CopyTable:=Nil;
:=Nil;;
TGridFormattingProcs. Free;
{Inherited Free;} {inaccessible value;
тАжraised too many consecutive exceptions:violation at address 0x00000000 read of address 0x00000000тАж};
TGridFormattingProcs. GetColorByElmType (CurType:THeadLineElmType):TColor;sc_CurProcName='GetColorByElmType';CurColor:TColor;CurType of_IndependentVar: CurColor:=lwc_IndependentColor;_DependentVar: CurColor:=lwc_DependentColor;_FuncVal: CurColor:=lwc_HeadColColor;_Number: CurColor:=lwc_ValInHeadColOrRowColor;_DestFuncToMax: CurColor:=lwc_DestFuncToMaxNameColor;_DestFuncToMin: CurColor:=lwc_DestFuncToMinNameColor;_OtherType:Self. CurGridNil then. CurOutConsole. Lines. Add (sc_CurProcName+':'+sc_Space+_UnknownVarType+sc_Space+IntToStr (Ord(CurType))+_Space+sc_TriSpot);:=bc_NotColored;;;:=CurColor;;
TGridFormattingProcs. GetNameByElmType (CurType:THeadLineElmType):String;sc_CurProcName='GetNameByElmType';CurName: String;CurType of_IndependentVar: CurName:=sc_IndependentVar;_DependentVar: CurName:=sc_DependentVar;_FuncVal: CurName:=sc_InequalFuncName;_Number: CurName:=sc_ValInHeadColOrRow;_DestFuncToMax: CurName:=sc_DestFuncToMaxName;_DestFuncToMin: CurName:=sc_DestFuncToMinName;_OtherType: CurName:=sc_OtherType;Self. CurOutConsole<>Nil then. CurOutConsole. Lines. Add (sc_CurProcName+':'+sc_Space+_UnknownVarType+sc_Space+IntToStr (Ord(CurType))+sc_Space+_TriSpot);:=sc_UnknownVarType;;;
:=CurName;;
TGridFormattingProcs. ReadFromFile (Const SPath: String):Boolean;
{Читання умови задачi iз файла.}sc_CurProcName='ReadFromFile';CurFile: File; CurColCount, CurRowCount, CurCol, CurRow, ControlSize: Integer;:TTableFormatState;: String;((Self. CurFormatState<>fs_EnteringEqs) and
(Self. CurFormatState<>fs_EnteringLTask) and
(Self. CurFormatState<>fs_NoFormatting) and
(Self. CurFormatStateNil then. CurOutConsole. Lines. Add(CurMessage);(CurMessage, mtError, [mbOk], 0);:=False; Exit;;
. AssignFile (CurFile, SPath);. FileMode:=fmOpenRead;{ПробуСФмо вiдкрити файл:}. Reset (CurFile, 1);:=sc_CurProcName+sc_CantOpenFile+SPath+sc_DoubleQuot;Self. CurOutConsole<>Nil then. CurOutConsole. Lines. Add(CurMessage);(CurMessage, mtError, [mbOk], 0);:=False; Exit;;
{ПробуСФмо прочитати дескриптори кiлькостi рядкiв i стовпцiв у задачi:}. BlockRead (CurFile, CurColCount, SizeOf(CurColCount));. BlockRead (CurFile, CurRowCount, SizeOf(CurRowCount));:=sc_CurProcName+sc_EmptyFileOrCantRead+SPath+_DoubleQuot;Self. CurOutConsole<>Nil then. CurOutConsole. Lines. Add(CurMessage);(CurMessage, mtError, [mbOk], 0);:=False; Exit;;
{ОбчислюСФмо розмiр, який повиннi займати усi данi у файлi:}:=SizeOf(CurColCount)+SizeOf(CurRowCount)+
+SizeOf (Self. CurFormatState)+(TValOrName)*CurColCount+ SizeOf(TValOrName)*CurRowCount+(TWorkFloat)*CurColCount*CurRowCount;
{ПеревiряСФмо, чи маСФ файл такий розмiр:}ControlSizeNil then. CurOutConsole. Lines. Add(CurMessage);(CurMessage, mtError, [mbOk], 0);:=False; Exit;;
. BlockRead (CurFile, GotFormatState, SizeOf(GotFormatState)