КАТЕГОРИИ: Архитектура-(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; Нарушение авторских прав?; Мы поможем в написании вашей работы! Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет |