Об’єктно-орієнтоване програмування у середовищі програмування Delphi7

  • Вид работы:
    Курсовая работа (т)
  • Предмет:
    Информационное обеспечение, программирование
  • Язык:
    Украинский
    ,
    Формат файла:
    MS Word
    72,43 Кб
  • Опубликовано:
    2014-10-16
Вы можете узнать стоимость помощи в написании студенческой работы.
Помощь в написании работы, которую точно примут!

Об’єктно-орієнтоване програмування у середовищі програмування Delphi7

Зміст

Вступ

Основні поняття про ООП

.        Визначення ООП

.        Фундаментальні поняття

Відомості про СЛО

.        Система лінійних нерівностей та опуклі багатогранники

.        Системи лінійних рівнянь лінійної алгебри як частковий випадок СЛО

Практична частина

.        Опис задачі та шлях її вирішення

.        Текст програми

·        Текст модуля Class_Lin_Obmezh

·        Текст модуля Form1

·        Текст основної програми

.        Приклади роботи програми

Висновок

Список використаної літератури

Вступ

В даній курсовій роботі я показую можливості та потенціал використання об’єктно орієнтованого програмування для вирішення задач певного типу. Моєю головною метою курсової роботи є дослідження та вивчення ООП та побудови програми яка б створювала систему лінійних обмежень, а також давала можливість подальшого її оброблення. Для реалізації поставленої задачі буду використовувати середовище програмування Delphi7.

Основні поняття про ООП

.        Визначення ООП

Об'єктно-орієнтоване програмування - це метод програмування, заснований на поданні програми у вигляді сукупності взаємодіючих об'єктів, кожен з яких є екземпляром певного класу, а класи є членами певної ієрархії наслідування. Програмісти спочатку пишуть клас, а на його основі при виконанні програми створюються конкретні об'єкти (екземпляри класів). На основі класів можна створювати нові, які розширюють базовий клас і таким чином створюється ієрархія класів.

На думку Алана Кея <#"786196.files/image001.gif">

Це система m лінійних нерівностей з n невідомими, де:

є невідомими,

є коефіцієнтами системи,

- вільними членами.

Теорема (Вейля - Мінковського)

Множина  є багатогранником тоді і тільки тоді коли  - обмежений багатогранник (поліедр).

Теорема показує, що будь-який багатогранник у певній системі координат може бути описаний за допомогою системи, яка складається з деякого скінченного числа лінійних нерівностей. Ця властивість з одного боку, дозволяє використовувати для вивчення багатогранників гарно розроблену теорію лінійних нерівностей, а з іншого боку, геометричним властивостям багатогранника надати алгебраїчну інтерпретацію.

Нехай нам задано деяку СЛО із двома змінними, тоді геометрично, в двовимірному просторі, кожну нерівність такої системи можна тлумачити як деяку півплощину, обмежену прямою, рівняння якої можна дістати з відповідної нерівності, змінивши знак нерівності знаком рівності. Аналогічно відбувається і в тривимірному просторі, якщо СЛО сумісна тоді вона утворює деякий безкінечний багатогранник, а в окремих випадках опуклий багатогранник . У випадку якщо СЛО складається лише з одної нерівності то така система утворює півпростір - простір який є однією з двох частин, на які гіперплощина <#"786196.files/image006.gif">,

де n є розмірністю простору, що містить політоп, який розглядають. Отже замкнений опуклий політоп можна розглядати як множину рішень системи лінійних нерівностей:

,

де m є числом півпросторів, що описують політоп. Це може бути стисло переписано у вигляді матричної нерівності:

,

де A є m×n матрицею, x є n×1 вектор-стовпець змінних, і b є постійним m×1 вектор-стовпцем.

Відкритий опуклий політоп задається заміною нестрогих нерівностей на строгі у попередньому визначенні.

. Системи лінійних алгебраїчних рівнянь лінійної алгебри як частковий випадок СЛО

Система лінійних алгебраїчних рівнянь (СЛАР) - в лінійній алгебрі <#"786196.files/image009.gif">

Це система m лінійних рівнянь з n невідомими, де:

є невідомими,

є коефіцієнтами системи,

- вільними членами.

Розв'язком системи лінійних алгебраїчних рівнянь є будь-яка сукупність дійсних чисел <#"786196.files/image010.gif">, яка при підстановці кожне рівняння системи перетворює його в тотожність <#"786196.files/image011.gif">, система лінійних алгебраїчних рівнянь називається однорідною. Однорідна система має очевидний розв'язок, у якому всі . Цей розв'язок заведено називати тривіальним. Відмінні від тривіального розв'язки існують тільки тоді, коли матриця  вироджена <#"786196.files/image014.jpg">

Рис. 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;:='';i:=0 to high(fKoef) do:=result+IntToStr(fKoef[i])+' ';;

//------------Отримання даних про знаки елементів Ло-------Lo.Set_Sort(V:TIVector);,j:byte;:=0;i:=0 to high(V) do //fSort = 0 => all +(V[i]<0) or (V[i]=0) then //fSort = 1 => all -//fSort = 2 => +,-,0:=1;j:=0 to high(V) do(V[j]=0) or (V[j]>0) then:=2;;;Lo.Get_Sort:Integer;:=fSort;;

//------------Операції із знаком---------------------------Lo.Set_znak(Znak:String);(Znak = '=') or (Znak = '>=')or (Znak = '<=') then:=Znak('Неправильно заповнений символ нерівності');;;;Lo.Get_znak:String;:=fZnak;;

//------------Операції з границею--------------------------Lo.Set_lim(Lim:integer);:=Lim;;Lo.Get_lim:integer;:=fLim;;

//------------Вивід ЛО як тексту---------------------------Lo.Lo_IntoString:String;i:byte;:='';i:=0 to high(fKoef) dofKoef[i]>0 theni<>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)+' ';:=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 = '<' thentemp < fLim then:=true:=falsefZnak = '>' thentemp > fLim then:=true:=falsefZnak = '<=' thentemp <= fLim then:=true:=falsefZnak = '>=' thentemp >= 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];[i].Lim:=VL[i];;;SLO.Get_SLO:TArrLo;(result,length(fSys));:=fSys;;

//---------------------------------------------------------SLO.Check(SG:TStringGrid):boolean;:integer;:TIVector;(VS, SG.ColCount);i:=0 to SG.ColCount-1 do[i]:=StrToInt(SG.Cells[i,1]);:=true;i:=0 to high(fSys) doNot fSys[i].Check_Solution(VS) then:=false;;;;SLO.Into_text:TSVector;:integer;(result,length(fSys));i:=0 to high(result) do[i]:=fSys[i].Lo_IntoString;;

//---------------------------------------------------------SLO.Sort_SLO;,j:integer;length(fSys)>1 then(fSys,length(fSys)+1);i:=1 to high(fSys) do:=i-1;[high(fSys)]:=fSys[i];(j>-1) and (fSys[high(fSys)].fSort < fSys[j].fSort) do[j+1]:=fSys[j];:=j-1;;[j+1]:=fSys[high(fSys)];;(fSys,length(fSys)-1);;;.

delphi об'єктний орієнтований програмування

Текст модуля Form1

Class_Form1;, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,, StdCtrls, Spin, Grids,_Lin_Obmezh, ExtCtrls;=array of integer;=array of String;=array of TIVector;= class(TForm): TStringGrid;: TSpinEdit;: TSpinEdit;: TLabel;: TLabel;: TButton;: TButton;: TButton;: TRadioGroup;: TStringGrid;: TLabel;: TMemo;: TButton;: TOpenDialog;: TSaveDialog;: TButton;: TButton;: TButton;SpinEdit1Change(Sender: TObject);Button1Click(Sender: TObject);SpinEdit2Change(Sender: TObject);Button2Click(Sender: TObject);FormCreate(Sender: TObject);Button3Click(Sender: TObject);RadioGroup1Click(Sender: TObject);Button4Click(Sender: TObject);Button5Click(Sender: TObject);Button6Click(Sender: TObject);FormClose(Sender: TObject);Button7Click(Sender: TObject);IsEmpty1(Sender: TObject):boolean;IsEmpty2(Sender: TObject):boolean;;: TForm1;_1:SLO;

{$R *.dfm}TForm1.FormCreate(Sender: TObject);.ColCount:=3;.RowCount:=2;.Cells[0,0]:='a1';.Cells[1,0]:='=,<=,>=';.Cells[2,0]:='Limit';.Cells[0,0]:='x1';;TForm1.FormClose(Sender: TObject);_1.Free;;

//-----------------Button_Exit-----------------------------TForm1.Button1Click(Sender: TObject);;;

//-----------------Ввід к-сті елементів ЛО та к-сті ЛО-----

procedure TForm1.SpinEdit1Change(Sender: TObject);,i,j:byte;.Enabled:=True;:=SpinEdit1.Value;.ColCount:=n+2;.ColCount:=n;i:=0 to SpinEdit1.Value doj:=1 to SpinEdit2.Value do.Cells[i,j]:='';.Cells[i,j]:='';;i:=0 to n-1 do.Cells[i,0]:='a'+IntToStr(i+1);.Cells[i,0]:='x'+IntToStr(i+1);;.Cells[n,0]:='=,<=,>=';.Cells[n+1,0]:='Limit';Click(Sender);;TForm1.SpinEdit2Change(Sender: TObject);:byte;.Enabled:=True;:=SpinEdit2.Value;.RowCount:=n+1;Click(Sender);;

//-----------------Button Reset----------------------------TForm1.Button2Click(Sender: TObject);,j:integer;.Value:=1;.Value:=1;.ColCount:=3;.RowCount:=2;.ItemIndex:=0;i:=0 to 2 doj:=1 to 1 do.Cells[i,j]:='';i:=Memo1.Lines.Count downto 0 do.Lines.Delete(i);.Cells[0,1]:='';.Enabled:=False;SLO_1<>nil then_1.Free;_1:=nil;;

end;

//-----------------Вибір способу вводу---------------------

procedure TForm1.RadioGroup1Click(Sender: TObject);,j,k:byte;;RadioGroup1.ItemIndex=1 theni:=0 to StringGrid1.ColCount-3 doj:=1 to StringGrid1.RowCount-1 do.Cells[i,j]:=IntToStr(random(10)-5);i:=1 to StringGrid1.RowCount-1 do.Cells[SpinEdit1.Value+1,i]:=IntToStr(random(10));:=random(3);k=0 then.Cells[SpinEdit1.Value,i]:='<='k=1 then.Cells[SpinEdit1.Value,i]:='>='k=2 then.Cells[SpinEdit1.Value,i]:='=';i:=0 to StringGrid1.ColCount-1 doj:=1 to StringGrid1.RowCount-1 do.Cells[i,j]:='';;

//-----------------Вивід ЛО в Memo та стврення класу-------

procedure TForm1.Button3Click(Sender: TObject);:integer;SLO_1<>nil then_1.Free;_1:=nil;;i:=Memo1.Lines.Count downto 0 do.Lines.Delete(i);IsEmpty1(Sender) then('Заповніть таблицю значень');;;_1:=SLO.Create(SpinEdit2.Value);

//-----------------_1.Set_Sys(StringGrid1);

//-----------------i:=0 to high(SLO_1.Into_text) do.Lines.Add(SLO_1.Into_text[i]);;

//-----------------Button Check Solution-------------------TForm1.Button4Click(Sender: TObject);IsEmpty1(Sender) then('Заповніть таблицю значень');;;IsEmpty2(Sender) then('Не введено жодного можливого розв`язку в таблицю!');

exit;;Click(Sender);SLO_1.Check(StringGrid2) then('Даний розв`язок задовольняє системі лінійних обмежень')('Даний розв`язок HE задовольняє системі лінійних обмежень');SLO_1<>nil then_1.Free;_1:=nil;;;

//-----------------Button Open-----------------------------TForm1.Button5Click(Sender: TObject);:TextFile;_FName,Str,temp_Str:string;_Lo,kilkist_zminnuh,i,j,k:Integer;OpenDialog1.Execute thenClick(Sender);_FName:=Opendialog1.FileName;(F,temp_FName);(F);(F,kilkist_Lo);(F,kilkist_zminnuh);.Value:=kilkist_Lo;.Value:=kilkist_zminnuh;

//-----------------i:=1 to kilkist_Lo do(F,Str);:=1;_Str:='';j:=1 to length(Str) doStr[j]=' ' then.Cells[k-1,i]:=temp_Str;_Str:='';:=k+1;_Str:=temp_Str+Str[j];;

//-----------------i:=1 to kilkist_Lo do(F,Str);.Cells[kilkist_zminnuh,i]:=Str;;

//-----------------i:=1 to kilkist_Lo do(F,Str);.Cells[kilkist_zminnuh+1,i]:=Str;;

//-----------------(F);;;

//-----------------Button Save-----------------------------TForm1.Button6Click(Sender: TObject);:TextFile;_FName:string;:byte;IsEmpty1(Sender) then('Заповніть таблицю значень');;Click(Sender);SaveDialog1.Execute then_FName:=Savedialog1.FileName;(F,temp_FName);(F);(F,IntToStr(SpinEdit2.Value));(F,IntToStr(SpinEdit1.Value));i:=0 to high(SLO_1.Get_SLO) do(F,SLO_1.Get_SLO[i].Get_koef_String);i:=0 to high(SLO_1.Get_SLO) do(F,SLO_1.Get_SLO[i].Znak);i:=0 to high(SLO_1.Get_SLO) do(F,IntToStr(SLO_1.Get_SLO[i].Lim));(F);;;;

//-----------------Button Sort Lo--------------------------TForm1.Button7Click(Sender: TObject);:byte;Click(Sender);IsEmpty1(Sender) then;.Lines.Add('');_1.Sort_SLO;i:=0 to high(SLO_1.Into_text) do.Lines.Add(SLO_1.Into_text[i]);SLO_1<>nil then_1.Free;_1:=nil;;;.

Текст основної програми

Main_Program;,_Form1 in 'Form1\Class_Form1.pas' {Form1},_Lin_Obmezh in 'Class_Lin_Obmezh\Class_Lin_Obmezh.pas';

{$R *.res}.Initialize;.CreateForm(TForm1, Form1);.Run;.

Приклади роботи програми

Рис. 2

На рис. 2 створюємо СЛО з трьома змінними та трьома нерівностями. Автоматично вводимо в таблицю деякі дані та нажимаємо кнопку виводу СЛО на компоненту Memo. Отримуємо результат з трьох нерівностей які і утворюють СЛО.

Рис. 3

На рисунку 3 показано роботу функції Check Solution яка перевіряє чи задовольняє вектор введений в таблицю нижче СЛО. Як бачимо з рисунку то даний вектор (1,2,3) не задовольняє СЛО.

Рис. 4

На рисунку 4 бачимо що введений вектор задовольняє СЛО

Рис. 5

На рисунку 5 показана робота кнопки Sort Lo яка відсортовує систему лінійних обмежень. Сортування відбувається таким чином: в кожній нерівності перевіряється знак коефіцієнта . Першими виводяться ті ЛО в яких всі коефіцієнти додатні, другими - ті в яких всі коефіцієнти від’ємні і останніми ті в яких коефіцієнти різні або дорівнюють нулеві.

Висновок

В даній курсовій роботі показано основні можливості ООП для реалізації моделювання систем лінійних обмежень та моделювання об’єктів в загальному. Використання ООП для вирішення задач такого типу значно полегшує програмісту роботу, робить код більш структурованим та дозволяє легше його читати. Для себе можу зробити важливий висновок, що ООП - гнучкий інструмент який ідеально підходить для написання складних програм які потребують описання деяких об’єктів та їх поведінки.

Список використаної літератури

.        Емеличев В.А. Многогранники, графы, оптимизация (комбинаторная теория многогранников). Емеличев В.А., Ковалев М.М., Кравцов М.К. - М.: Наука, 1981.- 344 с. Глава 1. Параграфы 1,2,4.

.        Семйон І.В. Основи об’єктно-орієнтованого програмування. Навчальний посібник / Семйон І.В., Чупов С. В., Брила А. Ю., Апшай А. І. - Ужгород, 2011.- 141с.

3.      Матеріал з вільної енциклопедії Вікіпедії http://uk.wikipedia.org/wiki/Опуклий_політоп <http://uk.wikipedia.org/wiki/%D0%9E%D0%BF%D1%83%D0%BA%D0%BB%D0%B8%D0%B9_%D0%BF%D0%BE%D0%BB%D1%96%D1%82%D0%BE%D0%BF> http://uk.wikipedia.org/wiki/Багатогранник <http://uk.wikipedia.org/wiki/%D0%91%D0%B0%D0%B3%D0%B0%D1%82%D0%BE%D0%B3%D1%80%D0%B0%D0%BD%D0%BD%D0%B8%D0%BA>

Похожие работы на - Об’єктно-орієнтоване програмування у середовищі програмування Delphi7

 

Не нашли материал для своей работы?
Поможем написать уникальную работу
Без плагиата!