Поможем написать учебную работу
Если у вас возникли сложности с курсовой, контрольной, дипломной, рефератом, отчетом по практике, научно-исследовательской и любой другой работой - мы готовы помочь.
Если у вас возникли сложности с курсовой, контрольной, дипломной, рефератом, отчетом по практике, научно-исследовательской и любой другой работой - мы готовы помочь.
Билет 20. Концепция объекта в Турбо Паскале.
В языке Турбо Паскаль введено новое понятие объекта, как дальнейшее развитие концепции типа. Как и типы, объекты должны быть описаны в разделе описаний программы. Форма описания объекта аналогична описанию типа Запись. Различие лишь в том, что ключевым словом описания является object, а не record, и кроме обычных полей (элементов структуры данных) в описании объекта используются процедурные поля - заголовки процедур и функций, инкапсулированных в данном типе объекта. Кроме того, возможности описания полей структуры данных расширены - могут описываться кроме переменных также необходимые типы данных, константы. Переменные, образующие структуру данных, называются полями объекта, а процедуры и функции - методами объекта. При этом тела методов должны быть описаны вне описания объекта: обычно в соответствующих модулях.
Некоторые поля и методы объекта можно объявить скрытыми от пользователей объекта с помощью директивы private (частный, скрытый), указываемой после общедоступной части описания объекта. Все поля и методы, описанные после private, доступны только внутри того модуля, где описан сам объект.
Пример описания объекта:
type point = object; {объект - точка на плоскости}
x,y: integer; {координаты точки}
c: byte; { цвет точки}
vis: boolean; { светимость}
procedure create(a,b:integer); {создание точки}
procedure move(dx,dy:integer); {сдвиг точки}
procedure setcolor(color:byte); {установка цвета}
procedure vis_on; {включить светимость}
procedure vis_off; {выключение светимости}
function getX:integer; {получить координату Х}
function getY:integer; {получить координату Y}
end {point};
Для работы с объектами помимо описания объекта, как и при описании других типов, необходимо объявить переменные типа объект, называемые экземплярами объектов. Например, для описанного выше объекта point можно объявить экземпляры: var p1,p2:point; {две точки}
Для обращения к полям и к методам объекта используются составные имена (имена с точкой), аналогично тому, как это принято для записей. Например: p1.X:=1; p1.Y:=p1.X; p2.X:=p1.getX; p1.SetColor(green); В описании каждого типа-объекта неявно присутствует стандартное имя Self того же типа, что и сам объект. Это - обобщенное имя экземпляра объекта, которое может использовать любой метод для указания своей принадлежности этому объекту.
Аналогично записям, доступ к полям и методам объекта можно упростить за счет использования оператора with.
Например: with p1 do begin x1:=getX; y1:=getY end;
Для объектов одного типа допустимо присваивание, например: p1:=p2;
В заданной прямоугольной матрице поставить на первое место
столбец с наименьшим количеством нулевых элементов,
перестаиви все нули в конец этого столбца. (Измененная
матрица должна сожержать все элементы исходной матрицы).
program z433_20;
program Z433_20;
uses Z433_20;
Var a:matr; i,j:integer;
Begin
for i:=1 to n do
for j:=1 to m do
read(a[i,j]);
obmen_nul(a);
for j:=1 to m do
for i:=1 to n do
writeln(a[i,j]);
end.
unit Z433_20;
interface
Const n=4; Const m=5;
Type matr=array[1..n,1..m] of real;
Var a:matr; i,j:integer;
procedure nul_schet(a:matr; Var k:mas);
procedure nom_stol(k:mas; Var w:integer);
procedure obmen_nul(Var a:matr);
implementation
procedure nul_schet;
Var i,j:integer;
Begin
for j:=1 to m do
for i:=1 to n do
if a[i,j]=0 then k[j]:=k[j]+1;
end;
end;{proc1}
procedure nom_stol;
Var i,j:integer;
Begin w:=0;
for j:=1 to m do
if k[j]>k[j+1] then w:=i+1;
end;
end;{proc2}
procedure obmen_nul;
Var j, k,l:integer;
Begin k:=1; l:=m;
for i:=1 to n do
for j:=1 to m do
while k<>l do Begin
if a[i,k]=0 then Begin
if a[i,l]=0 then l:=l-1
else Begin a[i,l]:=a[i,k]; a[i,k]:=0; k:=k+1; l:=l+1; end; end
else k:=k+1;
end;
end;{proc}