Студопедия

КАТЕГОРИИ:


Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748)

Динамические массивы

Динамические массивы появились в Delphi 4 и представляют средство для хранения данных для тех задач, где заранее неизвестное количество элементов в обрабатываемых массивах.

 

Объявление динамических массивов

Type имя =array of базовый_тип;

 

или

 

var имя: array of базовый_тип;

где имя – идентификатор;

базовый_тип - тип элементов массива.

 

Например:

Var A: array of integer;

 

Длину массива задают процедурой SetLength:

SetLength(имя, длина)

 

имя - строка или переменная, которая является динамическим массивом;

длина - новое количество характеристик или элементов в массиве.

 

Например:

SetLength(А, 7);

 

выделяет для массива А в операционной памяти 7 элементов и присваивает этим элементам нулевые значения.

 

Индекс первого элемента массива равняется нулю, поэтому масив содержит элементы A[0], A[1],..., A[5], A[6].

 

Например:

For i:=0 to 6 do a[i]:=random(10);

 

Если надо, длину динамического массива можно изменить, с помощью еще одного использования процедуры SetLength.

Если новая длина окажется больше начальной, то к массиву прибавятся новые элементы с нулевыми значениями; если меньше, то последние элементы в начальном массиве будут отброшены.

 

Переменная которая имеет тип динамического массива, является указателем, таким образом содержит адрес участка памяти, начиная с которого располагаются элементы массива.

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

1. A:=nil;

2. finalize(A);

3. SetLength(A, 0);

 

В программах реальная длина может быть определена или с помощью функции Length(массив), или с помощью функции High(массив) – наибольшее значение индекса.

Для этих функций справедливо следующее соотношения:

Length(массив) = High(массив)+1

 

Также есть функция Low(массив), которая определяет меньше всего значение индекса – 0.

Динамический массив может передаваться в качестве параметра в те подпрограммы, в объявление которых соответствующий формальный параметр объявленн как открытый массив, например

procedure x(t: array of real; var w: array of integer);

 

Можно сказать, что открытый массив, который используется для передачи параметров, аналогичен динамическому массиву. В частности, начальное значение индекса в открытом массиве также равняется 0.

В качестве фактического параметра может передаваться и статический массив.

Задача №1.

Написать программу для нахождения суммы элементов главной диагонали квадратной матрицы.

 

program DymamicMass2;

var A:array of array of integer; //Объявление двумерного динамического массива

S, N, i,j: integer;

begin

writeln('Enter N'); //Введение количества строк и столбиков

readln(N);

setlength(A,N,N); //Выделение памяти под динамический массив и инициализация нулями

For i:=0 to N-1 do //Возможно записать For i:=0 to High(A) do

begin

For j:=0 to N-1 do

begin

A[i,j]:=random(10);

write(A[i,j],' ');

end;

writeln

end;

i:=0;

S:=0;

while i<=High(A) do

begin

S:=S+A[i,i];

inc(i)

end;

finalize(A);//Освобождение памяти

writeln('S=',S);

readln;readln

end.

 

Задача №2.

Составить программу для нахождения последнего отрицательного элемента. Использовать подпрограммы. В качестве фактических параметров использовать открытые массивы.

 

program DymamicMass3;

var b:array of real; //объявление динамического одномерного массива

x,n:integer;

flag:boolean;

procedure vvod(var a:array of real);

//объявление открытого массива

var i:integer; //

begin //length(a) – количество элементов

for i:=Low(a) to high(a) do

//Low(a)=0, high(a)=length(a)-1

a[i]:=-5+random(11);

 

end;

procedure Negativ(a:array of real; var found:boolean;var Item:integer);

var i:integer;

begin

i:= High(A);

found:=false;

while (i>=Low(A)) and not found do

 

begin

if A[i]<0 then

begin

found:=true;

item:=i;

end;

dec(i);

end;

 

end;

procedure vivod(a:array of real);

var i:integer;

begin

writeln(' Array (',length(a),')');

for i:=Low(a) to high(a) do

write(a[i]:6:1);

writeln

end;

begin

randomize;

writeln('Enter n');

readln(n);

Setlength(b,n); //!!!!!!!!!!!!!!!

vvod(b);

vivod(b);

Negativ(B,flag,x);

//Обратите внимание, что индекс элемента на единицу меньше его порядкового номера,

//так как индексация начинается из нуля!

if flag then writeln('Value found. Index =',x,'Nomber=',x+1)

else writeln('Value not found.');

finalize(b); //!!!!!!!!!!!!!!!

readln;readln

end.

 

<== предыдущая лекция | следующая лекция ==>
Очистка памяти | Промышленная революция: сущность и значение
Поделиться с друзьями:


Дата добавления: 2014-01-06; Просмотров: 395; Нарушение авторских прав?; Мы поможем в написании вашей работы!


Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет



studopedia.su - Студопедия (2013 - 2024) год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! Последнее добавление




Генерация страницы за: 0.012 сек.