Багатокритерiальна задача лiнiйного програмування
Дипломная работа - Компьютеры, программирование
Другие дипломы по предмету Компьютеры, программирование
для помiток для змiнних}=array of TByteArr;
{Стани об'СФкта форматування таблицi у GrowingStringGrid:}=(fs_EnteringEqs, fs_EnteringLTask, fs_SolvingEqsM1,_SolvingEqsM2, fs_SolvingLTask,_NoFormatting, fs_FreeEdit);
{Тип переходу до двоСЧстоСЧ задачi: вiд задачi максимiзацiСЧ до
задачi мiнiмiзацiСЧ, або навпаки. Цi два переходи виконуються за
рiзними правилами (рiзнi правила змiни знакiв =
при переходi вiд нерiвностей до залежних змiнних, i вiд залежних змiнних
до нерiвностей). РЖ двоСЧстi задачi для максимiзацiСЧ i мiнiмiзацiСЧ
виходять рiзнiтАж}=(dt_MaxToMin, dt_MinToMax);
{Процедури для форматування екранноСЧ таблицi GrowingStringGrid пiд час
роботи з нею у потрiбному форматi, а також для вирiшування
задач ЛП i вiдображення промiжних чи кiнцевих результатiв у
такiй таблицi:}=class(TObject)
{Робочi масиви:}, CurHeadCol:TValOrNameMas; {заголовки таблицi}:TFloatMatrix; {таблиця}
{Масиви для зберiгання умови (використовуються для
багатокритерiальноСЧ задачi):}, CopyHeadCol:TValOrNameMas; {заголовки таблицi}:TFloatMatrix; {таблиця}
, SolWasFound, WasNoRoots, WasManyRoots,TaskPrepared, EqM2TaskPrepared, LTaskPrepared: Boolean;
{Прапорець про те, що вмiст CurGrid ще не був прочитаний
даним об'СФктом з часу останнього редагування його користуваем:}: Boolean;
{В режимах розв'язування (CurFormatState=fs_SolvingEqsM1,_SolvingEqsM2, fs_SolvingLTask)
координати розв'язувальноСЧ комiрки у GrowingStringGrid
(вiдносно екранноСЧ таблицi);
в режимах редагування (CurFormatState=fs_EnteringEqs, fs_EnteringLTask)
координати комiрки, для якоСЧ викликано контекстне меню
(вiдносно верхньоСЧ лiвоСЧ комiрки таблицi коефiцiСФнтiв (що маСФ
тут координати [0,0])):}, CurGridSolveRow: Integer;
{Номери стовпця i рядка-заголовкiв у CurGrid:}, CHeadRowNum: Integer;
{Режим форматування i редагування чи розв'язування задачi:}:TTableFormatState;
{Екранна таблиця для редагування чи вiдображення результатiв:}:TGrowingStringGrid;:TMemo; {поле для вiдображення повiдомлень}
{Адреси обробникiв подiй екранноСЧ таблицi CurGrid, якi цей
об'СФкт замiняСФ своСЧми власними:}:TNewColEvent;:TNewRowEvent;:TDrawCellEvent;:TNotifyEvent;:TMouseEvent;:TSetEditEvent;
{Процедура встановлюСФ довжину рядка-заголовка CurHeadRow вiдповiдно
до ширини екранноСЧ таблицi CurGrid i заповнюСФ новi елементи
значеннями за змовчуванням. ВикористовуСФться при змiнi розмiрiв
екранноСЧ таблицi. Пiсля СЧСЧ виклику можна вказувати типи змiнних
у рядку-заголовку (користувач вибираСФ залежнi та незалежнi):}UpdateLTaskHeadRowToStrGrid (SGrid:TStringGrid);
{Процедура для пiдтримки масиву стовпця-заголовка пiд час
редагування таблицi. ВстановлюСФ довжину масиву вiдповiдно до висоти
екранноСЧ таблицi i координат вписування в неСЧ таблицi задачi,
заповнюСФ новi комiрки значеннями за змовчуванням:}UpdateLTaskHeadColToStrGrid (SGrid:TStringGrid;: array of Integer);
{ФункцiСЧ для переходiв з одного режиму до iншого:}SetNewState (Value:TTableFormatState);PrepareToSolveEqsWithM1: Boolean;PrepareToSolveEqsWithM2: Boolean;PrepareToSolveLTask: Boolean;
SetNewGrid (Value:TGrowingStringGrid); {перехiд до нового CurGrid}SetNewMemo (Value:TMemo); {перехiд до нового CurOutConsole}
{Процедури форматування GrowingStringGrid для набору таблицi
лiнiйних рiвнянь:}EditLineEqsOnNewRow (Sender: TObject; NewRows: array of Integer);EditLineEqsOnNewCol (Sender: TObject; NewCols: array of Integer);EditLineEqsOnDrawCell (Sender: TObject; ACol, ARow: Integer;: TRect; State: TGridDrawState);
{Процедура форматування GrowingStringGrid вiдображення таблицi
у процесi розв'язання системи рiвнянь способом 1 i 2:}SolveLineEqsM1OrM2OnDrawCell (Sender: TObject;, ARow: Integer; Rect: TRect; State: TGridDrawState);
{Процедури форматування GrowingStringGrid для набору таблицi
задачi максимiзацiСЧ чи мiнiмiзацiСЧ лiнiйноСЧ форми (функцiСЧ з
умовами-нерiвностями чи рiвняннями):}EdLineTaskOnNewRow (Sender: TObject; NewRows: array of Integer);EdLineTaskOnNewCol (Sender: TObject; NewCols: array of Integer);EdLineTaskOnDrawCell (Sender: TObject; ACol, ARow: Integer;: TRect; State: TGridDrawState);EdLineTaskOnDblClick (Sender: TObject);
{Процедура реагуСФ на вiдпускання правоСЧ кнопки мишi на
комiрках рядка-заголовка та стовпця-заголовка таблицi.
ФормуСФ та вiдкриваСФ контекстне меню для вибору типу комiрки iз можливих
типiв для цiСФСЧ комiрки:}EdLineTaskOnMouseUp (Sender: TObject;: TMouseButton; Shift: TShiftState; X, Y: Integer);
{Процедура перевiряСФ наявнiсть об'СФкта TPopupMenu. Якщо його немаСФ
(SGrid. PopupMenu=Nil), то створюСФ новий.
ВидаляСФ усi пунтки (елементи, теми) з меню:}InitGridPopupMenu (SGrid:TStringGrid);
{ДодаСФ пункт меню для вибору типу комiрки в таблицi з заданим
написом SCaption i кругом того кольору, що асоцiйований з даним
типом SAssocType. Для нового пункту меню настроюСФ виклик
процедури обробки комiрки для задавання СЧй обраного типу SAssocType.
Значення SAssocType записуСФ у поле Tag об'СФкта пункту меню:}AddCellTypeItemToMenu (SMenu:TPopupMenu;: String; IsCurrentItem: Boolean; SAssocType:THeadLineElmType;: Boolean=True);
{Обробник вибору пункту в меню типiв для комiрки
рядка - чи стовпця-заголовка.}ProcOnCellTypeSelInMenu (Sender: TObject);
{Процедури для нумерацiСЧ рядкiв i стовпцiв при вiдображеннi
таблиць у ходi вирiшення задачi, або з результатами. Лише
проставляють номери у першому стовпцю i першому рядку:}NumerationOnNewRow (Sender: TObject; NewRows: array of Integer);NumerationOnNewCol (Sender: TObject; NewCols: array of Integer);
{Процедура для реагування на редагування вмiсту комiрок
пiд час редагування вхiдних даних. ВстановлюСФ прапорець:=True про те, що екранна таблиця маСФ змiни:}ReactOnSetEditText (Sender: TObject; ACol, ARow: Longint;Value: string);
{ЗчитуСФ комiрку з екранноСЧ таблицi в рядок-заголовок.
Вхiднi данi:- номер комiрки у рядку-заголовку.
Для екранноСЧ таблицi використовуються координати комiрки вiдповiдно до
коо