<<
>>

Объекты в Турбо-Паскале

Упражнение № 1. Знакомство с типом «объект». Работа с модулем, содержащим объект «звезда» Рассмотрим модуль Unplanl. В нем определен объект Pozition, позволяющий инициализировать положение точки на экране дисплея, и объект-потомок star, наследующий свойства объекта Pozition.
Методы объекта star позволяют устанавливать точку по заданным координатам, с заданным цветом, перемещать и гасить ее. Ниже приведен полный листинг модуля. Запишите этот модуль в виде файла с именем Unplanl.pas. Unit Unplanl; Interface uses Graph, Crt; type Pozition = object X,Y: Integer; procedure Init(CoordX, CoordY: Integer); function GetX: Integer; function GetY: Integer; end; Star = object (Pozition) Visible: Boolean; Color: Word; . constructor Init(CoordX, CoordY: Integer; InitColor:Word); destructor Done; virtual; function IsVisible: Boolean; procedure Show; virtual; procedure Blind; virtual; procedure Jump (NextX, NextY: Integer); virtual; end; Implementation { ** ******** методы объекта Pozition *************** } procedure Pozition.Init(CoordX, CoordY: Integer); begin X:=CoordX; Y:=CoordY; end; function Pozition.GetX: Integer; begin GetX:=X; end; function Pozition.GetY: Integer; begin GetY:=Y; end; I ★★★★★★★★ Методы объекта Star ****************** j.
constructor Star.Init(CoordX, CoordY: Integer; InitColor: Word); begin Pozition.Init(CoordX, CoordY); Visible:= False; Color:= InitColor; end; destructor Star.Done; - begin Blind; end; procedure Star.Show; begin Visible:= True; PutPixel(X,Y,Color); end; function Star.IsVisible: Boolean; begin IsVisible:= Visible; end; procedure Star.Blind; begin Visible:= False; PutPixel (X, Y, GetBkColor); {точка закрашивается фоновым цветом} end; procedure Star.Jump ;{(NextX,NextY:integer);} begin Blind; X := NextX; Y := NextY; Show; end; {секции инициализации нет} End.
Пример 78. Программа «блуждающая звезда». В нижеприведенной программе используется объект star из подключаемого модуля Unplanl. tpu. Предполагается, что модуль был предварительно откомпилирован. После инициализации и установки точки (переменная Astar) в цикле происходит гашение и установка точки с новыми координатами, определяемыми случайным образом. Program Example_78, Starl; . Uses Crt, Graph, Unplanl; Var GraphDriver,GraphMode,ErrorCode: Integer; . AStar: Star; . i: integer; begin Randomize; GraphDriver:=Detect; InitGraph(GraphDriver,GraphMode,’’); ' if GraphResult OGrOk then Halt(l); Astar.Init (200, 100, 15); {инициализация точки} Astar.show; readln; {установка точки до нажатия ввода} for i:=1 to 10 do begin Astar.blind; {гашение точки} Astar.Jump(50+Random(400),50+Random(300)); Astar.show; readln; {установка точки в новом случайном месте} end; AStar.Done; CloseGraph; End. Пример 79. Программа «звездное небо с мигающими звездами». С использованием модуля Unplanl. tpu в программе задается массив экземпляров объекта Star. Program Example_79, Star2; Uses Crt, Graph, Unplanl; Var GraphDriver,GraphMode,ErrorCode: Integer; AStar: array[1..200] of Star; . i,s: integer; begin GraphDriver := Detect; InitGraph(GraphDriver,GraphMode, r r); if GraphResult OGrOk then Halt(l); Randomize; for i:=l to 200 do {начальная установка 200 звезд} begin Astar[i].Init(50+random(350),50+random(250),15); Astar[i].show; end; readln; repeat s:=random(199)+1; Astar[s].blind; delay(100); Astar[s].show; Until Keypressed; readln; , for i:=l to 200 do AStar[i].Done; CloseGraph; End. Пример 80. Программа «звездное небо с пролетающим метеоритом». В алгоритм предыдущей программы добавлен экземпляр Bstar, который двигается прямолинейно до границ рассматриваемой области. Program Example_80, Star3; Uses Crt, Graph, Unplanl; Var GraphDriver, GraphMode, ErrorCode: Integer; AStar: array[1..200] of Star; BStar: Star; i,s: integer; begin GraphDriver := Detect; InitGraph (GraphDriver,GraphMode, r ' ); if GraphResult OGrOk then Halt(l); Randomize; for i:=l to 200 do {начальная установка 200 звезд} begin Astar[i].Init(50+random(350),50+random(250),green); Astar[i].show; end; BStar.Init(100,60,white); BStar.show; {начальная установка метеорита} readln; i : =1; repeat s:=random(199)+1; Astar[s].blind; delay(200); Astar[s].show; BStar.Jump(100+i,60+i); BStar.show; i:=i+l; until (Keypressed) or (BStar.GetX>400) or (BStar.GetY>300); {останов по нажатию любой клавиши, либо когда метеорит долетит до границы области} readln; for i:=l to 200 do AStar[i].Done; BStar.Done; CloseGraph; End.
Упражнение № 2. Работа с модулем, содержащим объекты «звезда» и «планета» В следующем модуле описаны объекты: «звезда» и «планета». С их помощью на экране дисплея можно изображать точку — «звезду» и закрашенный круг — «планету» заданного цвета, удалять, инициировать и перемещать их. Объект Pozition инициирует положение точки на экране дисплея и запоминает ее координаты. Объект star наследует свойства Pozition, устанавливает точку с заданными координатами и с заданным цветом. Его методы позволяют перемещать и гасить точку. Объект Planet наследует свойства star и имеет аналогичные методы по инициализации, установке и перемещению закрашенного круга. Рекомендуется записать текст модуля jPlanet в файл с именем jplanet.pas и откомпилировать его с целью получения файла Jplanet.tpu. Unit jPlanet; Interface uses Graph, Crt; type Pozition = object X,Y: Integer; procedure Init(CoordX, CoordY: Integer); function GetX: Integer; ' function GetY: Integer; ' end; StarPtr^Star; Star = object (Pozition) Visible: Boolean; Color: Word; constructor Init(CoordX, CoordY: Integer; InitColor:Word) ; destructor Done; virtual; function IsVisible: Boolean; procedure Show; virtual; procedure Blind; virtual; procedure Jump (NextX, NextY: Integer); virtual; end; PlanetPtr= ""Planet; Planet=object(Star) Radius: Integer; PI: Pointer; Size: Word; constructor Init(CoordX, CoordY: Integer; InitColor: Word; InitRadius: Integer); destructor Done; virtual; • procedure Show; virtual; ' procedure Blind; virtual; procedure Jump(NextX, NextY: Integer); virtual; end; Implementation {********** методы объекта Pozition ***************} Procedure Pozition.Init(CoordX, CoordY: Integer); begin X:-CoordX; Y:-CoordY; end; Function Pozition.GetX: Integer; begin GetX:=X; end; Function Pozition.GetY: Integer; begin GetY:—Y; end; I ★★★★★★★★★★ Методы объекта Star ******************} Constructor Star.Init(CoordX, CoordY: Integer; InitColor: Word); begin Pozition.Init(CoordX, CoordY); Visible:- False; Color:- InitColor; end; Destructor Star.Done; begin Blind; end; Procedure Star.Show; begin Visible:- True; PutPixel(X,Y,Color); end; Function Star.IsVisible: Boolean; begin IsVisible:- Visible; end; Procedure Star.Blind; begin Visible:- False; PutPixel (X, Y, GetBkColor); {точка закрашивается фоновым цветом} end; Procedure Star.Jump; - begin Blind; X := NextX; Y:= NextY; Show; end; {*** ******** методы объекта Planet ***************} Constructor Planet.Init(CoordX, CoordY: Integer; InitColor: Word; InitRadius: Integer); begin Star.Init(CoordX, CoordY, InitColor); Radius:- InitRadius; Size:- ImageSize(X, Y, X+2*Radius, Y+2*Radius); {вычисляем размер прямоугольной области, занимаемой планетой} GetMem(PI,Size); end; Destructor Planet.Done; .
1 begin Blind; FreeMem(Pl, Size); end; Procedure Planet.Show; Var i: Integer; . PromColor: Word; begin Visible := True; Getlmage(X-Radius, Y-Radius, X+Radius, Y+Radius, P1A) ; PromColor := Graph.GetColor; {запоминаем установленный ранее цвет рисования} Graph.SetColor(Color); {устанавливаем заданный для планеты цвет} for I := 1 to Radius do Graph.Circle(X, Y, I); Graph.SetColor(PromColor); end; Procedure Planet.Blind; begin - Visible := False; ' Putimage(X - Radius, Y - Radius, P1A, NormalPut); {выдаем старый фон} end; Procedure Planet.Jump(NextX, NextY: Integer); begin Blind; X := NextX; Y := NextY; Show; end; {секции инициализации нет} End. Пример 81. Программа установки звезды (экземпляр аа) и двух планет (экземпляры APlanet, В Planet). Следующие программы используют модуль j Planet, tpu. Program Example_81, Planet1; Uses Crt, Graph, jPlanet; Var GraphDriver, GraphMode, ErrorCode: Integer; APlanet, BPlanet: Planet; aa: star; Begin GraphDriver := Detect; DetectGraph (GraphDriver, GraphMode); InitGraph(GraphDriver,GraphMode, ' '); if GraphResult OGrOk then Halt(l); aa.Init(290,150,15); aa.show; readln; APlanet.Init(151,82,3,50); BPlanet.Init(201,82,4,50); APlanet.Show; Readln; BPlanet.Show; Readln; BPlanet.Jump(55,82); Readln; BPlanet.Blind; Readln; APlanet.Blind; Readln; APlanet.Done; BPlanet.Done; CloseGraph; End. Пример 82. Программа «планеты на фоне мигающих звезд». Программа составлена на основе алгоритма примера 2 с добавлением двух экземпляров типа объект Planet. Program Example_82, Planet2; Uses Crt, Graph, Jplanet; Var GraphDriver,GraphMode,ErrorCode: Integer; AStar: array[1..20] of Star; i,s: integer; APlanet, BPlanet: Planet; Begin GraphDriver := Detect; InitGraph(GraphDriver,GraphMode,' "); if GraphResult OGrOk then Halt(l); Randomize; for i:=l to 20 do begin Astar[i].Init(50+random(350),50+random(250),15); Astar [i] . show-; end;{начальная установка 20 звезд} APlanet .Init’(85,82,3,20) ; BPlanet .Init(201,82,4,10) ; readln; APlanet.Show; {установка стационарной планеты} BPlanet.Show; {установка блуждающей планеты} readln; i:=l; , .
repeat BPlanet.Jump(55+i,82+i); s:=random(19)+1; Astar[s].blind; delay(100); Astar[s].show; i:=i+l; until (Keypressed) or (BPlanet.GetX>400) or (BPlanet.GetY>300) ; readln; for i:=l to 20 do AStar[i].Done; APlanet.Done; BPlanet.Done; CloseGraph; End. Пример 83. Программа «Динамическая модель солнечной системы». Программа содержит блоки программ, рассмотренных выше, а также алгоритм перемещения двух экземпляров объектного типа по окружностям. Program Example_83, Planet3; Uses Crt, Graph, Jplanet; const pi=3.1415; Var GraphDriver,GraphMode,ErrorCode: Integer; AStar: array[1..20] of Star; i,s: integer; Sun, Zemla, Moon: Planet; fi,h,fil,hl : real; xO,yO,x,y,r,rl : integer; Begin GraphDriver := Detect; InitGraph (GraphDriver,GraphMode, ’’); if GraphResult OGrOk then Halt(l); Randomize; for i:=l to 20 do begin . Astar[i].Init(50+random(550),50+random(350),15); Astar[i].show; end; {начальная установка 20 звезд} Sun.Init (320,240,15,20); Zemla.Init(320,340,blue,10); Moon.Init(320,370,red,5); readln; Sun.Show; Zemla.Show; Moon.Show; readln; h:=5; hi:=1;fi:=0; fil:=0; r:=Moon.GetY-Zemla.GetY; {радиус орбиты Луны} rl:=Zemla.GetY-Sun.GetY; {радиус орбиты Земли} repeat x0:=round(rl*sin(fil))+Sun.GetX; yO:=round(rl*cos(fil))+ Sun.GetY; x:=x0+round(r*sin(fi)) ; у:=y0+round(r*cos(fi)); fi:=fi+2*pi*h/360; fil:=fil+2*pi*hl/360; Zemla.Jump(xO,yO); Moon.Jump(x,y); s:=random(19)+1; Astar[s].blind; delay(200); Astar[s].show; until Keypressed; for i:=l to 20 do AStar[i].Done; Sun.Done; Zemla.Done; Moon.Done; CloseGraph; End. Задания для самостоятельной работы 1. Используя модуль Unplanl.tpu, разработайте программу «Броуновское движение точки». 2. Используя модуль Unplan l.tpu, разработайте программу «Хаотичное движение точек». 3. Используя модуль UnplanLtpu, разработайте программу «Имитационная модель диффузии двух газов». 4. Используя модуль Unplanl.tpu, разработайте программу «Звездный дождь». 5. Используя модуль Unplanl.tpu, разработайте программу иЗвездное небо с мигающими звездами созвездия «Большая медведица»”.
6. Используя модуль jPlanet, разработайте программу «Звездное небо с планетами». I. Используя модуль jPlanet, разработайте программу «Статическая картина Солнечной системы». 8. Используя модуль jPlanet, разработайте программу «Динамическая картина Солнечной системы с двумя планетами со своими спутниками». 9. Используя модуль jPlanet, разработайте программу «Динамическая модель атома с двумя электронами». 10. Используя модуль jPlanet, разработайте программу «Движение бильярдного шара». II. Используя модуль jPlanet, разработайте программу «Хаотичное движение шаров с упругим столкновением». Упражнение № 3. Работа с числовыми объектами Ниже приведен листинг модуля, содержащий процедуры матричной алгебры [6]. Задан класс «комплексные матрицы». Методы этих объектов содержат арифметические действия над комплексными матрицами. Unit matrices; interface uses crt; const max = 3; type strlO = string[10]; str30 = string[30]; matrix = array[1..max,1..max] of pointer; complex = record re, im : real; end; complex_ptr = ^complex; complex_matrix = array[1..max, 1..max] of complex; matrix_obj = object M : matrix; constructor init; procedure set_to_zero(var pipointer); virtual; procedure scalar_sum(const p,q: pointer; var r : pointer);virtual; procedure scalarjproduct(const p,q: pointer; var r : pointer); virtual; procedure matrix_sum(const A,B: matrix); procedure matrix_product(const A,B: matrix); procedure convert_to_string(p:pointer; var tt : str30); virtual; procedure print(name : strlO); destructor done; end; complex_matrix_obj = object(matrix_obj) constructor init(MO: complex_matrix); procedure set_to_zero(var p: pointer); virtual; procedure scalar_sum(const p, q: pointer; var r: pointer); virtual; . procedure scalarjproduct(const p,q: pointer; var r: pointer); virtual; procedure convert_to_string(p: pointer; var tt: str30); virtual; procedure print(name: strlO); destructor done; End; Implementation cons truetor ma t r i x_ob j.init; Begin End; Procedure matrix_obj.set_to_zero(var pipointer); Begin End; Procedure matrix_obj.scalarjSum(const p, q: pointer; var r: pointer); Begin End; Procedure matrix_obJ.scalar_product(const p,q: pointer; var r: pointer); Begin End; Procedure matrix__obj .matrix_sum (const A,B: matrix); var i,j: word; begin for i:=l to max do for J:=l to max do scalar_sum(A[i, J] , B [i, J] ,M[i, J] ) end; Procedure matrix_obJ.matrix_product(const A,B: matrix) ; var i,j,k: word; prod, sum: pointer; begin getmem(prod, SizeOf(M[1,1])); for i:=l to max do for k:=l to max do begin sum:= M[i,k]; set_to_zero(sum); for J:=l to max do begin scalar_product(A[i,J], B[J,k], prod); scalar_sum(sum, prod, sum) end end; freemem(prod,SizeOf(M[1,1])); end; Procedure matrix_obj.convert_to_string(p: pointer; var tt: str30) begin end; Procedure matrix_obJ.print(name: strlO); var i, J, k, hold_y: word; temp: str30; begin hold_y := WhereY; gotoxy(l, hold_y + (max + 1) div 2); write(name, '='); k := length(name) + 4; gotoxy(k, hold_y); write('v'); for i:=l to max do begin gotoxy(k, hold_y + i); write(* |’); for J:=l to max do begin convert_to_string(M[i,J], temp); write(temp); end; write('|’) end; gotoxy(k, max + hold_y +1); write('%'); gotoxy(k + length(temp) * max + 1, hold_y); write('J'); gotoxy(k + length (temp) * max + 1, max + hold_y +1); writeln (' A') end; Destructor matrix_obJ.done; begin end; Constructor complex_matrix_obj.init(MO:complex_matrix); var i, j : word; begin inherited init; for i: = 1 to max do for j := 1 to max do begin new(complex_ptr(M[i,j])); complex_ptr(M[i,j])A :=M0[i,j]/ end; end; Procedure complex_matrix_obj . set_to_zero (var p: pointer); begin complex_ptr(p)A.re := 0.0; complex_ptr(p)A.im := 0.0; end; Procedure complex_matrix_obj.scalar_sum(const p,q: pointer; var r : pointer); var x, y, z : complex; begin x:= complex_ptr(p)A; y:= complex_ptr(q)A; z.re:= x.re + y.re; z.im:= x.im + y.im; if r = nil then new(complex_ptr(r)); complex_ptr(r)A := z; end; Procedure complex_matrix_obJ.scalar_product(const p, q : pointer; var r : pointer); var x, y, z : complex; begin x := complex_ptr(p)A; y := complex_ptr(q)A; z.re := x.re * y.re - x.im * y.im; z.im := x.re * y.im + x.im * y.re; if not Assigned(r) then new(complex_ptr(r)); complex_ptr(r)A := z; end; Procedure complex_matrix_obJ.convert_to_string(p: pointer; var tt: str30); var tl,-t2: string[6]; begin str(complex_ptr(p)A.re:6:4, tl) ; str(complex_ptr(p)A.im:6:4, t2); tt:=''+ tl + '+' + t2 +,i'; end; Procedure complex_matrix_obJ.print(name: strlO); var i, J, k, hold_y: word; temp: str30; begin hold_y := WhereY; gotoxyil, hold_y + (max + 1) div 2); write(name, '='); k := length(name) + 4; gotoxy(k, hold_y); write('v'); for i: =1 to max do begin gotoxy(k, hold_y + i); write('|'); for J:=l to max do begin convert_to_string(M[i,J], temp); write(temp); end; write('|') end; gotoxy(k, max + hold_y +1); write('%'); gotoxy(k + length(temp) * max + 1, hold_y); write ("JM); gotoxy(k + length (temp) * max -t 1, max + hold_y + 1) ; writeln('A'); end; Destructor complex_matrix_obJ.done; var i, j: word; begin for i:=l to max do for J:= 1 to max do begin dispose(complex_ptr(M[i,J])); end; inherited done; end; End. Пример 84. Программа работы с комплексными матрицами. Изучите приведенную ниже программу, демонстрирующую использование модуля Matrices. Program Example_84, obJ_demo; uses crt, matrices; - Procedure test_complex; var AO rBO rCO: complex_matrix; А, В, C : complex_matrix_obJ; i,j : word; begin for i:=l to max do for J:=l to max do begin AO [i,j] .re:=1.0; AO[i,J] .im:=0.0; BO[i,J] .re:=i; B0[i,J].im:=J; CO[i,J].re:=0.0; CO[i,J].im:=0.0; end; A.init(AO); B.init(BO); C.init(CO); A.print('A'); В.print('B'); C.matrix_sum(A.M, B.M); C.print("A + BM); C.matrix_product(A.M, B.M); C.print("A * BM); A.done; B.done; C.done; end; {конец процедуры } Begin clrscr; writeln("Комплексные матрицы"); test_complex; write("Нажмите "); readln; End. Задания для самостоятельной работы 1. Используя модуль Matrices, разработайте программу определения суммы и произведения диагональных элементов комплексной матрицы 4x4, заданной случайным образом. 2. Используя модуль Matrices, разработайте программу сложения трех комплексных матриц 3x3 и в результирующей матрице определите сумму диагональных элементов. 3. Используя модуль Matrices, разработайте программу умножения трех комплексных матриц 3x3. Упражнение № 4. Работа с объектами «окно» Создадим модуль работы с окнами. Объект «окно» содержит поля, задающие координаты окна (х, у) — (х1, у1), рамки (х/г, у/г) — (х\/г, у\/г), тени, состоящей из двух прямоугольников (х/, у/) — (хй, уй) и (а/, 6/) - (ай, Ы1), рабочего поля уг) ~ (хг1, уг1). Максимальные размеры окон: без рамки.(1, 1, 80, 25); с рамкой (2, 2, 78, 24); с тенью (1, 1, х\ + 2, yl + 1). Следующие атрибуты полей задают цвет фона, букв, рамку (одинарную или двойную) с заголовком или без, цвет рамки, тень, цвет тени. Методы объекта: Procedure InitWn(Fx,Fy,Fxl/Fyl,Ffon/Fletter:byte) — инициализация окна с координатами (Fx,Fy)-(Fxl,Fyl), цветом фона Ffon, цветом букв Fletter. Procedure InitFr(Fframe,Fcolorframe:byte; Frubre: string) — инициализация рамки: Fframe=0 — нет рамки/ Fframe=l — одинарная рамка; Fframe=2 — двойная рамка/ цвет рамки Fcolorframe, заголовок Frubre. Procedure InitSh(FcolorShade: byte) — инициализация тени с цветом FcolorShade. Procedure Show — открыть окно. Procedure Hide — закрыть окно. . Собственные процедуры модуля : Procedure OknoBegin — начало работы с окнами (обязательная процедура) . Procedure OknoEnd — завершение работы с окнами (обязательная процедура) . Unit Okl; interface Uses Crt; Type okno = Object x,y,xl,yl : byte; {Координаты окна} xk,yk: byte; {Координаты курсора} xfr,yfr,xlfr,ylfr: byte;{Координаты рамки} xt,yt,xtl,ytl, at,bt,atl,btl: byte; {Координаты тени} xz,xzl,yz, yzl: byte; {Координаты пред.области} frame: byte; {0 - нет рамки 1,2 - есть рамка} rubre:string[60]; {Заголовок} lrubreibyte; shade :byte; {0 - Нет тени 1 - Есть тень} fon,letter: byte; {Цвета фона, букв} colorframe,colorshade:byte; {Методы:} .. Procedure InitWn(Fx,Fy,Fxl,Fyl,Ffon,Fletter:byte); Procedure InitFr(Fframe,Fcolorframe:byte; Frubre:string); Procedure InitSh (FcolorShade:byte); Procedure Show; {Открыть окно} ' Procedure Hide; {Закрыть окно} end; {object} Procedure OknoBegin; {Начало работы} . Procedure OknoEnd; {Конец работы} I ★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★ j. Implementation Procedure Errwn; begin Writeln("Для продолжения работы нажмите ENTER"); Readln; end; Procedure Okno.InitWn; . {Инициировать окно: установить координаты окна, цвет фона, букв, цвет внешнего окна для закраски — выполняется первой} begin x:=Fx; y:=Fy; xl:=Fxl; yl:=Fyl; fon:=Ffon; letter: =Fletter; frame :=0; lrubre:=0;. shade :=0; end; Procedure Okno.InitFr; {Инициировать рамку: установить тип, цвет рамки и текст заголовка. Если заголовка нет, то указыватся «2»} Var prz,i:integer; rb:string[60]; . lrb:byte absolute rubre; Begin prz:=0; frame:=Fframe; colorframe:=Fcolorframe; rb:=Frubre; rubre:=rb; lrubre:=lrb; ’ if x< 2 then begin x:=2; prz:=l end; if y< 2 then begin y:=2; prz:=l end; if xl>78 then begin xl:=78; prz:=l end; if yl>24 then begin yl:=24; prz:=l end; xfr:=x-l; yfr:=y-l; xlfr:=xl+l; ylfr:=yl+l; if prz 0 then begin Writeln ("Изменены размеры окна из-за рамки=", х:3, у:3, xl:3, у1:3); Errwn; end; prz : =xlfr-xfr-lrubre-3; if prz
<< | >>
Источник: Могилев А. В.. Практикум по информатике. 2005

Еще по теме Объекты в Турбо-Паскале:

  1. Статья 298. Незаконное проведение поисковых работ на объекте археологического наследия, уничтожение, разрушение или повреждение объектов культурного наследия
  2. ОБЪЕКТ: ПРИВЯЗАННОСТЬ
  3. ОБЪЕКТ-ЛИБИДО
  4. ОБЪЕКТ
  5. НАУКА: ОБЪЕКТ
  6. ОБЪЕКТ РЕФЕРЕНТНОСТИ
  7. Тема 6. Объекты гражданских прав
  8. ОБЪЕКТ СЕКСУАЛЬНЫЙ: ВЫБОР
  9. 2. Объект аренды.
  10. Тема 11. Объекты гражданских правоотношений