У вас вопросы?
У нас ответы:) SamZan.net

памяти под типизированные указатели можно использовать с расширенными возможностями- в ней допускается вто

Работа добавлена на сайт samzan.net: 2016-03-13

Поможем написать учебную работу

Если у вас возникли сложности с курсовой, контрольной, дипломной, рефератом, отчетом по практике, научно-исследовательской и любой другой работой - мы готовы помочь.

Предоплата всего

от 25%

Подписываем

договор

Выберите тип работы:

Скидка 25% при заказе до 1.2.2025

Расширенное использование new.  Понятие динамических объектов

При работе с динамическими объектами процедуру new (выделения хип-памяти под типизированные указатели) можно использовать с расширенными возможностями: в ней допускается второй параметр, в котором можно указывать обращение к конструктору для инициализации динамического объекта; процедуру new можно вызывать как функцию, возвращающую значение типа указатель, которое указывает на динамически размещаемый объект. Первым параметром функции new  (в отличие от процедуры new) должен быть тип размещаемого объекта, а вторым параметром может быть (как и в процедуре new) имя конструктора.

Такие расширенные средства позволяют одновременно, и зарезервировать хип-память для динамического объекта и разместить в ней некоторое (начальное) значение (с помощью конструктора). В такой ситуации (использования нескольких уровней вложенности) проблемой может стать нехватка распределяемой хип-памяти. При нехватке хип-памяти необходимо ликвидировать всю цепочку размещенных объектов. Эту операцию может выполнить стандартная процедура fall, которую можно вызывать только из конструктора и которая освобождает выделенную память, возвращая значение указателя nil. Примеры расширенного использования new:

var pL1:^Line; {динамический объект типа Line}

new(pL1,Init);  {Init - конструктор для инициализации объекта pL1}

pL1:= new(Line, Init); {инициализация pL1 с помощью функции new}

Понятие о динамических объектах.

Объектные переменные совершенно подобны переменным других типов Турбо Паскаля. Для них допустим оператор присваивания и обращение к полям и методам по составным именам (как для записей). Экземпляры объектов, размещаемые в динамической памяти, называются динамическими объектами.

Для создания динамических объектов необходимо создать типизированный указатель на заданный тип объекта:

type pLine = ^Line; {указатель на объект типа Line }

var pL1:pLine; {динамический объект типа pLine}

Динамические объекты чрезвычайно полезны для задач моделирования, управления, проектирования. Библиотеки объектов в большинстве своём содержат динамические объекты, как например Turbo Vision -библиотека объектов интерфейса. Для использования динамических объектов характерными процессами являются создание объекта (с размещением его в хип-памяти) и удаление объекта (освобождение  занимаемой им хип-памяти).

Дана квадратная матрица. Если номер столбца с максимальной суммой элементов совпадает с номером строки с максимальной суммой элементов, определить сумму найденных элементов строки и столбца, иначе - распечатать номера найденных строки и столбца с максимальными суммами.

unit Z433_22;

interface

Const n=5;

Type matriza=array[1..n,1..n]of real;

massiv=array[1..n]of real;

procedure colmax(a:matriza;Var ncol:integer;Var sumcol:massiv;Var maxcol:real);

procedure rowmax(a:matriza;Var nrow:integer;Var sumrow:massiv;Var maxrow:real);

procedure summa(a:matriza;ncol:integer;nrow:integer;Var sumelem:real);

implementation

procedure colmax(a:matriza;Var ncol:integer;Var sumcol:massiv;Var maxcol:real);

Var i,j:integer;

Begin

for j:=1 to n do Begin

sumcol[j]:=0;

for i:=1 to n do

sumcol[j]:=sumcol[j]+a[i,j]; end;

maxcol:=sumcol[1];

for j:=2 to n do

if sumcol[j]>maxcol then Begin

maxcol:=sumcol[j];

ncol:=j; end;

end; { procedure colmax }

procedure rowmax(a:matriza;Var nrow:integer;Var sumrow:massiv;Var maxrow:real);

Var i,j:integer;

Begin

for i:=1 to n do Begin

sumrow[i]:=0;

for j:=1 to n do

sumrow[i]:=sumrow[i]+a[i,j]; end;

maxrow:=sumrow[1];

for i:=2 to n do

if sumrow[i]>maxrow then Begin

maxrow:=sumrow[i];

nrow:=i; end;

end;{ procedure rowmax }

procedure summa(a:matriza;ncol:integer;nrow:integer;Var sumelem:real);

Var i,j:integer;

Begin

sumelem:=0;

for i:=1 to n do

for j:=1 to n do

if (i=nrow) or (j=ncol)

then sumelem:=sumelem+a[i,j];

end; { procedure summa }

end.

program Z433_22;

uses Z433_22;

Var a:matriza;

sumcol,sumrow:massiv;

sumelem,maxcol,maxrow:real;

ncol,nrow,i,j:integer;

Begin

for i:=1 to n do

for j:=1 to n do

readln(a[i,j]);

colmax(a,ncol,sumcol,maxcol);

rowmax(a,nrow,sumrow,maxrow);

if ncol=nrow then Begin

summa(a,ncol,nrow,sumelem);

writeln(sumelem); end

else writeln(nrow,ncol);

end.




1. железный поток
2. а Бог есть Любовь и пребывающий в любви пребывает в Боге и Бог в нём
3. РЖД сообщает что продажа билетов на все пассажирские поезда дальнего следования прицепные и беспересадочн
4. 14 Вівторок 21
5. Средневековье - цивилизация мужчин
6. .1 Определения
7. Методические рекомендации по самостоятельному изучению учебной дисциплины и написанию контрольных работ И
8. Строительные конструкции и гидротехнические сооружения РАСЧЕТ НАГРУЗОК НА ФУНДАМЕНТЫ ЗДАН
9. Тема- Самый умный
10. Курсовая работа- Орган дознания как субъект уголовного процесса