? сортуваннях обмежень (розбіття на групи);
поставлених переді мною завдання я решил вікорістовуючі мову програмування Delphi. Дана мова програмування є про єктно орієнтованою того вона чудово підійшла для розробки програми. Саму ж програму я Виконаю вікорістовуючі візуальні компоненти (рис.1). Сло вводитися через таблицю StrinGrid1, причому є дві варіанти введенню: ручний та автоматичний з можлівістю редагування. Регулюваті розмір табліці можна помощью двох компонент SpinEdit1 та SpinEdit2 Кожна з якіх відповідає за Кількість змінніх та Кількість ЛО у табліці.
Рис. 1
Розглянемо кнопки по порядку розташування:
Exit - Виконує вихід з програми-клієнта;
Reset - скідає всі налаштування для запровадження НОВИХ даних
Write LO - віпісує Сло у компонент Memo1;
Check solution - перевіряє чи введень користувачем вектор задовольняє Сло;
Open - відкріває Сло з текстового файлу та Заповнює таблицю
Save - зберігає Сло в текстовий файл;
Sort LO - сортує Сло (розбіває на групи);
Текст програми
Текст модуля Class_Lin_ObmezhClass_Lin_Obmezh ;, Dialogs, Grids;=array of integer;=array of String;=array of TIVector;=class:TIVector;:String;:integer;:byte;Set_koef(V:TIVector);Get_koef:TIVector;Set_znak(Znak:String);Get_znak:String;Set_lim(Lim:integer);Get_lim:integer;Set_Sort(V:TIVector);Get_Sort:Integer;Get_koef_String:String;Lo_IntoString:String;Check_solution(V:TIVector):boolean;Koef:TIVector read Get_koef write Set_koef; Znak: String read Get_znak write Set_znak; Lim: Integer read Get_Lim write Set_Lim; Sort: integer read Get_Sort ;;=array of Lo;=class: TArrLo; Create (N: byte); Destroy; override;Set_Sys(SG:TStringGrid);Get_SLO:TArrLo;Check(SG:TStringGrid):boolean;Into_text:TSVector;Sort_SLO;;
//------------ Операції Із коефіцієнтамі ЛО ----------------- Lo.Set_koef (V: TIVector ); (fKoef, length (V));:=V; _Sort (V) ;; Lo.Get_koef: TIVector;:=fKoef ;;
Lo.Get_koef_String: String;: byte;:= raquo ;; i:=0 to high (fKoef) do:=result + IntToStr (fKoef [i]) + raquo ;;;
//------------ Отримання даних про знаки елементів Ло ------- Lo.Set_Sort (V: TIVector) ;, j: byte ;: =0; i:=0 to high (V) do//fSort=0= gt; all + (V [i] lt; 0) or (V [i]=0) then//fSort=1= gt; all -//fSort=2= gt; +, -, 0:=1; j:=0 to high (V) do (V [j]=0) or (V [j] gt; 0) then:=2 ;;; Lo.Get_Sort: Integer; :=fSort ;;
//------------ Операції Із знаком ---------------------------Lo.Set_znak (Znak: String); (Znak==) or (Znak= gt;=) or (Znak= lt;=) then:=Znak ( laquo ; Неправильно заповнений символ нерівності ) ;;;; Lo.Get_znak: String;:=fZnak ;;
//------------ Операції з границею--------------------------Lo.Set_lim(Lim:integer);:=Lim;;Lo.Get_lim:integer;:=fLim;;
//------------ Вивід ЛО як тексту --------------------------- Lo.Lo_IntoString: String; i: byte;:= raquo ;; i:=0 to high (fKoef) dofKoef [i] gt; 0 theni lt; gt; 0 thenfKoef [i]=1 then:= result + + x + IntToStr (i + 1) + :=result + + + IntToStr (fKoef [i]) + x + IntToStr (i + 1) + fKoef [i]=1 then:=result + x + IntToStr (i + 1) + :=result + IntToStr (fKoef [i]) + x + IntToStr (i + 1) + fKoef [i]=0 then:=result + fKoef [i]=- 1 then:=result + -x + IntToStr (i + 1) + :=result + IntToStr (fKoef [i]) + x + IntToStr (i + 1) + raquo ;;:=result + + fZnak + + IntToStr (fLim) ;;
//------------ Перевірка можливіть розв язку ---------------- Lo.Check_solution (V: TIVector ): boolean;: byte;: integer;:=0; i:=0 to high (fKoef) do:=temp + fKoef [i] * V [i]; fZnak= lt; thentemp lt; fLim then:=true:=falsefZnak= gt; thentemp gt; fLim then:=true:=falsefZnak= lt;= thentemp lt;=fLim then:=true:=falsefZnak= gt;= thentemp gt;=fLim then:=true:=falsefZnak=='thentemp=fLim then:=true:=false ;;
//-----------------Class_SLO-------------------------------SLO.Create(N:byte);:byte;(fSys,n);i:=0 to high (fSys) do [i]:=Lo.Create ;; SLO.Destroy;: byte; i:=0 to high (fSys) do [i] .Free (); Destroy ;;
//---------------------------------------------------------SLO.Set_Sys(SG:TStringGrid);,j:integer;:TSVector;:TIVector;:Matrix;(MK,SG.RowCount- 1); i:=0 to high (MK) do (MK [i], SG.ColCount - 2); (VZ, SG.RowCount - 1); (VL, SG.RowCount - 1); i:= 0 to SG.ColCount - 3 doj:=1 to SG.RowCount - 1 do [j - 1] [i]:=StrToInt (SG.Cells [i, j]); i:=1 to SG.RowCount - 1 do [i - 1]:=SG.Cells [SG.ColCount - 2, i]; [i - 1]:=StrToInt (SG.Cells [SG.ColCount - 1, i]) ;; i:=0 to high (fSys) do[i].Koef:=MK[i];[i].Znak:=VZ[i]...