Багатокритерiальна задача лiнiйного програмування
Дипломная работа - Компьютеры, программирование
Другие дипломы по предмету Компьютеры, программирование
у чисел чи назв змiнниходного або бiльше елементiв, починаючи з елемента з номером Index.
ВидаляСФться Count елементiв (якщо вони були у масивi починаючи iз елемента
з номером Index).}CurElm: Integer;Count<=0 then Exit; {якщо немаСФ елементiв для видалення}
{Якщо СФ хоч один елемент iз заданих для видалення:}Length(SArr)>=(Index+1) then
{Якщо у масивi немаСФ так багато елементiв, скiльки холiли видалити, то
коригуСФмо кiлькiсть тих, що видаляСФмо:}(Index+Count)>Length(SArr) then Count:=Length(SArr) - Index;
{ЗсуваСФмо елементи масиву влiво, що залишаються справа пiсля видалення
заданих:}CurElm:=Index to (Length(SArr) - 1-Count) do[CurElm]:=SArr [CurElm+Count];
{ВидаляСФмо з масиву зайвi елементи справа:}(SArr, Length(SArr) - Count);;;
DeleteFromArr (Var SArr:TFloatArr; Index, Count: Integer); overload;
{Процедура для видалення з одновимiрного масиву дiйсних чиселодного або бiльше елементiв, починаючи з елемента з номером Index.
ВидаляСФться Count елементiв (якщо вони були у масивi починаючи iз елемента
з номером Index).}CurElm: Integer;Count<=0 then Exit; {якщо немаСФ елементiв для видалення}
{Якщо СФ хоч один елемент iз заданих для видалення:}Length(SArr)>=(Index+1) then
{Якщо у масивi немаСФ так багато елементiв, скiльки холiли видалити, то
коригуСФмо кiлькiсть тих, що видаляСФмо:}(Index+Count)>Length(SArr) then Count:=Length(SArr) - Index;
{ЗсуваСФмо елементи масиву влiво, що залишаються справа пiсля видалення
заданих:}CurElm:=Index to (Length(SArr) - 1-Count) do[CurElm]:=SArr [CurElm+Count];
{ВидаляСФмо з масиву зайвi елементи справа:}(SArr, Length(SArr) - Count);;;
DelColsFromMatr (Var SDMatrix:TFloatMatrix; ColIndex, Count: Integer);
{Процедура для видалення iз матрицi дiйсних чиселодного або бiльше стовпцiв, починаючи зi стовпця з номером ColIndex.
ВидаляСФться Count стовпцiв (якщо вони були у матрицi починаючи зi стовпця
з номером ColIndex).}CurRow: Integer;Count<=0 then Exit; {якщо немаСФ елементiв для видалення}
{ВидаляСФмо елементи у вказаних стовпцях з кожного рядка. Так
видалимо стовпцi:}CurRow:=0 to (Length(SDMatrix) - 1) do(SDMatrix[CurRow], ColIndex, Count);;;
DelRowsFromMatr (Var SDMatrix:TFloatMatrix; RowIndex, Count: Integer);
{Процедура для видалення iз матрицi дiйсних чиселодного або бiльше рядкiв, починаючи з рядка з номером RowIndex.
ВидаляСФться Count рядкiв (якщо вони були у матрицi починаючи з рядка
з номером RowIndex).}CurElm: Integer;Count<=0 then Exit; {якщо немаСФ елементiв для видалення}
{Якщо СФ хоч один рядок iз заданих для видалення:}Length(SDMatrix)>=(RowIndex+1) then
{Якщо у матрицi немаСФ так багато рядкiв, скiльки холiли видалити, то
коригуСФмо кiлькiсть тих, що видаляСФмо:}(RowIndex+Count)>Length(SDMatrix) then Count:=Length(SDMatrix) - RowIndex;
{ЗсуваСФмо рядки матрицi вгору, що залишаються знизу пiсля видалення
заданих:}CurElm:=RowIndex to (Length(SDMatrix) - 1-Count) do[CurElm]:=SDMatrix [CurElm+Count];
{ВидаляСФмо з матрицi зайвi рядки знизу:}(SDMatrix, Length(SDMatrix) - Count);;;
ChangeSignForValOrVarName (Var SDValOrName:TValOrName);
{Змiна знаку числа або перед iменем змiнноСЧ:}SDValOrName. ElmType=bc_Number then {для числа:}. AsNumber:=-SDValOrName. AsNumber{для рядка-назви:}Pos (sc_Minus, SDValOrName. AsVarName)=1 then(SDValOrName. AsVarName, 1, Length (sc_Minus))SDValOrName. AsVarName:=sc_Minus+SDValOrName. AsVarName;;;
{Жорданове виключення за заданим розв'язувальним елементом матрицi:}TGridFormattingProcs.GI (RozElmCol, RozElmRow: Integer;SDHeadRow, SDHeadCol:TValOrNameMas; Var SDMatrix:TFloatMatrix;DColDeleted: Boolean;: Boolean=False; {прапорець на модифiковане Жорданове виключення}: Boolean=True):Boolean;
{Функцiя виконуСФ Жорданове виключення для елемента матрицiз координатами (RozElmCol, RozElmRow). Окрiм обробки матрицi,
здiйснюСФться замiна мiiями елементiв у рядку i стовпцю-заголовках
матрицi (SDHeadRow, SDHeadCol).
Вхiднi данi:- номер стовпця матрицi, у якому лежить розв'язувальний елемент.
нумерацiя з нуля;- номер рядка матрицi, у якому лежить розв'язувальний елемент.
нумерацiя з нуля.
Розв'язувальний елемент не повинен бути рiвним нулю, iнакше виконання
Жорданового виключення не можливе;, SDHeadCol - рядок i стовпець-заголовки матрицi. Рядок-заголовокповинен мати не менше елементiв, нiж СФ ширина матрицi. Вiн
мiстить множники. Стовпець-заголовок SDHeadCol повинен бути не коротшим
за висоту матриц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кованого Жорданового виключення
(при ToDoMGI=True здiйснюСФться модифiковане, iнакше - звичайне).
Модифiковане Жорданове виключення використовуСФться для матрицi, у якiй
було змiнено знак початкових елементiв, i змiнено знаки елементiв-
множникiв у рядку-заголовку. ВикористовуСФться для симплекс-методу.- прапорець, що вмикаСФ видалення стовпця матрицi iз
розв'язувальним елементом, якщо пiсля здiйснення жорданiвського
виключення у рядок-заголовок зi стовпця-заголовка записуСФться число нуль.
Вихiднi данi:, SDHeadCol - змiненi рядок та стовпець-заголовки. У них
мiняються мiiями елементи, що стоять навпроти розв'язувального елемента
(у його стовпцi (для заголовка-рядка) i рядку (для заголовка-стовпця).
У заголовку-рядку такий елемент пiсля цього може бути видалений, якщо
вiн рiвний нулю i ToDelColIfZ