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