ДинамичСский массив паскаль Ρ‡Ρ‚ΠΎ это

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

ОписаниС динамичСского массива

Π’ΠΈΠΏ динамичСского массива конструируСтся ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ:

array of Ρ‚ΠΈΠΏ элСмСнтов (ΠΎΠ΄Π½ΠΎΠΌΠ΅Ρ€Π½Ρ‹ΠΉ массив)
array [,] of Ρ‚ΠΈΠΏ элСмСнтов (Π΄Π²ΡƒΠΌΠ΅Ρ€Π½Ρ‹ΠΉ массив)
ΠΈ Ρ‚.Π΄.

ΠŸΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Π°Ρ Ρ‚ΠΈΠΏΠ° динамичСский массив прСдставляСт собой ссылку. ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ динамичСский массив нуТдаСтся Π² ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ (Π²Ρ‹Π΄Π΅Π»Π΅Π½ΠΈΠΈ памяти ΠΏΠΎΠ΄ элСмСнты).

Π’Ρ‹Π΄Π΅Π»Π΅Π½ΠΈΠ΅ памяти ΠΏΠΎΠ΄ динамичСский массив

Для выдСлСния памяти ΠΏΠΎΠ΄ динамичСский массив ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ Π΄Π²Π° способа. ΠŸΠ΅Ρ€Π²Ρ‹ΠΉ способ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΡŽ new Π² стилС Π²Ρ‹Π·ΠΎΠ²Π° конструктора класса:

Π”Π°Π½Π½Ρ‹ΠΉ способ Ρ…ΠΎΡ€ΠΎΡˆ Ρ‚Π΅ΠΌ, Ρ‡Ρ‚ΠΎ позволяСт ΡΠΎΠ²ΠΌΠ΅ΡΡ‚ΠΈΡ‚ΡŒ описаниС массива ΠΈ Π²Ρ‹Π΄Π΅Π»Π΅Π½ΠΈΠ΅ ΠΏΠΎΠ΄ Π½Π΅Π³ΠΎ памяти:

Π’Ρ‚ΠΎΡ€ΠΎΠΉ способ выдСлСния памяти ΠΏΠΎΠ΄ динамичСский массив ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ ΡΡ‚Π°Π½Π΄Π°Ρ€Ρ‚Π½ΡƒΡŽ ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Ρƒ SetLength :

Π­Π»Π΅ΠΌΠ΅Π½Ρ‚Ρ‹ массива ΠΏΡ€ΠΈ этом Π·Π°ΠΏΠΎΠ»Π½ΡΡŽΡ‚ΡΡ значСниями ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ.

ΠŸΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Π° SetLength ΠΎΠ±Π»Π°Π΄Π°Π΅Ρ‚ Ρ‚Π΅ΠΌ прСимущСством, Ρ‡Ρ‚ΠΎ ΠΏΡ€ΠΈ Π΅Π΅ ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π½ΠΎΠΌ Π²Ρ‹Π·ΠΎΠ²Π΅ староС содСрТимоС массива сохраняСтся.

Π˜Π½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΡ динамичСского массива

МоТно ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ динамичСский массив ΠΏΡ€ΠΈ Π²Ρ‹Π΄Π΅Π»Π΅Π½ΠΈΠΈ ΠΏΠΎΠ΄ Π½Π΅Π³ΠΎ ΠΏΠ°ΠΌΡΡ‚ΡŒ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠ΅ΠΉ new:

Π˜Π½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΡŽ динамичСского массива Π² ΠΌΠΎΠΌΠ΅Π½Ρ‚ описания ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡ€ΠΎΠ²ΠΎΠ΄ΠΈΡ‚ΡŒ Π² сокращСнной Ρ„ΠΎΡ€ΠΌΠ΅:

ΠŸΡ€ΠΈ этом происходит Π²Ρ‹Π΄Π΅Π»Π΅Π½ΠΈΠ΅ памяти ΠΏΠΎΠ΄ ΡƒΠΊΠ°Π·Π°Π½Π½ΠΎΠ΅ справа количСство элСмСнтов.

Π˜Π½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΡ ΠΎΠ΄Π½ΠΎΠΌΠ΅Ρ€Π½ΠΎΠ³ΠΎ массива ΠΏΡ€ΠΎΡ‰Π΅ всСго осущСствляСтся стандартными функциями Seq. ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π²Ρ‹Π΄Π΅Π»ΡΡŽΡ‚ ΠΏΠ°ΠΌΡΡ‚ΡŒ Π½ΡƒΠΆΠ½ΠΎΠ³ΠΎ Ρ€Π°Π·ΠΌΠ΅Ρ€Π° ΠΈ Π·Π°ΠΏΠΎΠ»Π½ΡΡŽΡ‚ массив ΡƒΠΊΠ°Π·Π°Π½Π½Ρ‹ΠΌΠΈ значСниями:

var a := Arr(1,3,5,7,8); // array of integer
var s := Arr(‘Иванов’,’ΠŸΠ΅Ρ‚Ρ€ΠΎΠ²’,’Π‘ΠΈΠ΄ΠΎΡ€ΠΎΠ²’); // array of string
var b := ArrFill(777,5); // b = [777,777,777,777,777]
var r := ArrRandom(10); // Π·Π°ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ 10 случайными Ρ†Π΅Π»Ρ‹ΠΌΠΈ Π² Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½Π΅ ΠΎΡ‚ 0 Π΄ΠΎ 99

Π’ Ρ‚Π°ΠΊΠΎΠΌ ΠΆΠ΅ стилС ΠΌΠΎΠΆΠ½ΠΎ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ массивы массивов:

var a := Arr(Arr(1,3,5),Arr(7,8),Arr(5,6)); // array of array of integer

Π”Π»ΠΈΠ½Π° динамичСского массива

ДинамичСский массив ΠΏΠΎΠΌΠ½ΠΈΡ‚ свою Π΄Π»ΠΈΠ½Ρƒ (n-ΠΌΠ΅Ρ€Π½Ρ‹ΠΉ динамичСский массив ΠΏΠΎΠΌΠ½ΠΈΡ‚ Π΄Π»ΠΈΠ½Ρƒ ΠΏΠΎ ΠΊΠ°ΠΆΠ΄ΠΎΠΉ размСрности). Π”Π»ΠΈΠ½Π° массива (количСство элСмСнтов Π² Π½Π΅ΠΌ) возвращаСтся стандартной Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠ΅ΠΉ Length ΠΈΠ»ΠΈ свойством Length :

Для ΠΌΠ½ΠΎΠ³ΠΎΠΌΠ΅Ρ€Π½Ρ‹Ρ… массивов Π΄Π»ΠΈΠ½Π° ΠΏΠΎ ΠΊΠ°ΠΆΠ΄ΠΎΠΉ размСрности возвращаСтся стандартной Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠ΅ΠΉ Length с двумя ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π°ΠΌΠΈ ΠΈΠ»ΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠΌ GetLength(i) :

Π’Π²ΠΎΠ΄ динамичСского массива

ПослС выдСлСния памяти Π²Π²ΠΎΠ΄ динамичСского массива ΠΌΠΎΠΆΠ½ΠΎ ΠΎΡΡƒΡ‰Π΅ΡΡ‚Π²Π»ΡΡ‚ΡŒ Ρ‚Ρ€Π°Π΄ΠΈΡ†ΠΈΠΎΠ½Π½ΠΎ Π² Ρ†ΠΈΠΊΠ»Π΅:

for var i:=0 to a.Length-1 do
read(a[i]);

Π’Π²ΠΎΠ΄ динамичСского массива ΠΌΠΎΠΆΠ½ΠΎ ΠΎΡΡƒΡ‰Π΅ΡΡ‚Π²Π»ΡΡ‚ΡŒ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ стандартной Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ReadSeqInteger:

var a := ReadSeqInteger(10);

ΠŸΡ€ΠΈ этом ΠΏΠΎΠ΄ динамичСский массив выдСляСтся ΠΏΠ°ΠΌΡΡ‚ΡŒ Π½ΡƒΠΆΠ½ΠΎΠ³ΠΎ Ρ€Π°Π·ΠΌΠ΅Ρ€Π°.

Π’Ρ‹Π²ΠΎΠ΄ динамичСского массива

ΠŸΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Π° write Π²Ρ‹Π²ΠΎΠ΄ΠΈΡ‚ динамичСский массив, Π·Π°ΠΊΠ»ΡŽΡ‡Π°Ρ элСмСнты Π² ΠΊΠ²Π°Π΄Ρ€Π°Ρ‚Π½Ρ‹Π΅ скобки ΠΈ раздСляя ΠΈΡ… запятыми:

var a := Arr(1,3,5,7,9);
writeln(a); // [1,3,5,7,9]

n-ΠΌΠ΅Ρ€Π½Ρ‹ΠΉ динамичСский массив выводится Ρ‚Π°ΠΊ, Ρ‡Ρ‚ΠΎ каТдая Ρ€Π°Π·ΠΌΠ΅Ρ€Π½ΠΎΡΡ‚ΡŒ Π·Π°ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ΡΡ Π² ΠΊΠ²Π°Π΄Ρ€Π°Ρ‚Π½Ρ‹Π΅ скобки:.

var m := new integer[3,3] ((1,2,3),(4,5,6),(7,8,9));
writeln(m); // [[1,2,3],[4,5,6],[7,8,9]]

ДинамичСский массив ΠΌΠΎΠΆΠ½ΠΎ Π²Ρ‹Π²ΠΎΠ΄ΠΈΡ‚ΡŒ Ρ‚Π°ΠΊΠΆΠ΅ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠΌ Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΡ Print ΠΈΠ»ΠΈ Println:

ΠŸΡ€ΠΈ этом элСмСнты ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ Ρ€Π°Π·Π΄Π΅Π»ΡΡŽΡ‚ΡΡ ΠΏΡ€ΠΎΠ±Π΅Π»Π°ΠΌΠΈ, Π½ΠΎ ΠΌΠΎΠΆΠ½ΠΎ это ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ, Π·Π°Π΄Π°Π² ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ Print, ΡΠ²Π»ΡΡŽΡ‰ΠΈΠΉΡΡ Ρ€Π°Π·Π΄Π΅Π»ΠΈΡ‚Π΅Π»Π΅ΠΌ элСмСнтов. НапримСр:

Π²Ρ‹Π²ΠΎΠ΄ΠΈΡ‚ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ элСмСнт Π½Π° ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½ΠΎΠΉ строкС.

ΠœΠ°ΡΡΠΈΠ²Ρ‹ массивов

Если объявлСн массив массивов

Ρ‚ΠΎ Π΅Π³ΠΎ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΡŽ ΠΌΠΎΠΆΠ½ΠΎ провСсти Ρ‚ΠΎΠ»ΡŒΠΊΠΎ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ SetLength :

Для ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ Ρ‚Π°ΠΊΠΎΠ³ΠΎ массива с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ new слСдуСт ввСсти имя Ρ‚ΠΈΠΏΠ° для array of integer :

type IntArray = array of integer;
var
с: array of IntArray;
.
c := new IntArray[5];
for i := 0 to 4 do
c[i] := new integer[3];

Π˜Π½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΡŽ массива массивов ΠΌΠΎΠΆΠ½ΠΎ Ρ‚Π°ΠΊΠΆΠ΅ ΠΏΡ€ΠΎΠ²ΠΎΠ΄ΠΈΡ‚ΡŒ Π² сокращСнной Ρ„ΠΎΡ€ΠΌΠ΅:

ΠŸΡ€ΠΈΡΠ²Π°ΠΈΠ²Π°Π½ΠΈΠ΅ динамичСских массивов

ДинамичСскиС массивы ΠΎΠ΄Π½ΠΎΠ³ΠΎ Ρ‚ΠΈΠΏΠ° ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡ€ΠΈΡΠ²Π°ΠΈΠ²Π°Ρ‚ΡŒ Π΄Ρ€ΡƒΠ³ Π΄Ρ€ΡƒΠ³Ρƒ, ΠΏΡ€ΠΈ этом ΠΎΠ±Π΅ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅-ссылки Π±ΡƒΠ΄ΡƒΡ‚ ΡƒΠΊΠ°Π·Ρ‹Π²Π°Ρ‚ΡŒ Π½Π° ΠΎΠ΄Π½Ρƒ ΠΏΠ°ΠΌΡΡ‚ΡŒ:

Π‘Π»Π΅Π΄ΡƒΠ΅Ρ‚ ΠΎΠ±Ρ€Π°Ρ‚ΠΈΡ‚ΡŒ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, Ρ‡Ρ‚ΠΎ для динамичСских массивов принята структурная ΡΠΊΠ²ΠΈΠ²Π°Π»Π΅Π½Ρ‚Π½ΠΎΡΡ‚ΡŒ Ρ‚ΠΈΠΏΠΎΠ²: ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡ€ΠΈΡΠ²Π°ΠΈΠ²Π°Ρ‚ΡŒ Π΄Ρ€ΡƒΠ³ Π΄Ρ€ΡƒΠ³Ρƒ ΠΈ ΠΏΠ΅Ρ€Π΅Π΄Π°Π²Π°Ρ‚ΡŒ Π² качСствС ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ² ΠΏΠΎΠ΄ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ динамичСскиС массивы, ΡΠΎΠ²ΠΏΠ°Π΄Π°ΡŽΡ‰ΠΈΠ΅ ΠΏΠΎ структурС.

Π§Ρ‚ΠΎΠ±Ρ‹ ΠΎΠ΄Π½ΠΎΠΌΡƒ динамичСскому массиву ΠΏΡ€ΠΈΡΠ²ΠΎΠΈΡ‚ΡŒ копию Π΄Ρ€ΡƒΠ³ΠΎΠ³ΠΎ массива, слСдуСт Π²ΠΎΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ стандартной Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠ΅ΠΉ Copy :

ΠŸΠ΅Ρ€Π΅Π΄Π°Ρ‡Π° динамичСского массива Π² ΠΏΠΎΠ΄ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ

ДинамичСский массив ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ пСрСдаСтся Π² ΠΏΠΎΠ΄ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ ΠΏΠΎ Π·Π½Π°Ρ‡Π΅Π½ΠΈΡŽ, Ρ‚.ΠΊ. сама пСрСмСнная ΡƒΠΆΠ΅ являСтся ссылкой:

procedure Squares(a: array of integer);
begin
for var i:=0 to a.Length-1 do
a[i] := Sqr(a[i]);
end;

begin
var a := Arr(1,3,5,7,9);
Squares(a);
end.

ДинамичСский массив пСрСдаСтся ΠΏΠΎ ссылкС Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π² ΠΎΠ΄Π½ΠΎΠΌ случаС: Ссли ΠΎΠ½ создаСтся ΠΈΠ»ΠΈ пСрСсоздаСтся Π²Π½ΡƒΡ‚Ρ€ΠΈ ΠΏΠΎΠ΄ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹. Π’ частности, это Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Π΄Π΅Π»Π°Ρ‚ΡŒ Ссли для динамичСского масива Π²Π½ΡƒΡ‚Ρ€ΠΈ ΠΏΠΎΠ΄ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ вызываСтся SetLength:

procedure Add(var a: array of integer; x: integer);
begin
SetLength(a,a.Length+1);
a[a.Length-1] := x;
end;

begin
var a := Arr(1,3,5,7,9);
Add(a,666);
writeln(a);
end.

Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ

ЗанятиС 5. Pascal abc.net: ДинамичСскиС массивы

ОбъявлСниС, Π²Ρ‹Π΄Π΅Π»Π΅Π½ΠΈΠ΅ памяти

ΠžΠ±Ρ‹Ρ‡Π½ΠΎ Π² языкС Паскаль ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ статичСскиС массивы Π²ΠΈΠ΄Π°:

var mas: array [1..10] of integer;

Π“Ρ€Π°Π½ΠΈΡ†Ρ‹ статичСского массива ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ Π² Ρ…ΠΎΠ΄Π΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ нСльзя, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ ΠΎΠ½ΠΈ Π·Π°Π΄Π°ΡŽΡ‚ΡΡ Π² Ρ€Π°Π·Π΄Π΅Π»Π΅ объявлСний Β«Ρ€Π°Π· ΠΈ навсСгда».
ΠžΡΠ½ΠΎΠ²Π½Ρ‹ΠΌ нСдостатком Ρ‚Π°ΠΊΠΎΠ³ΠΎ массива являСтся Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ Π² случаС, ΠΊΠΎΠ³Π΄Π° Π·Π°Ρ€Π°Π½Π΅Π΅ Π½Π΅ извСстно количСство элСмСнтов массива, Ρ‚ΠΎ приходится Π²Ρ‹Π΄Π΅Π»ΡΡ‚ΡŒ ΠΏΠ°ΠΌΡΡ‚ΡŒ максимального Ρ€Π°Π·ΠΌΠ΅Ρ€Π°, Ρ‡Ρ‚ΠΎ называСтся Β«Π½Π° всякий случай».

Рассмотрим Ρ€Π°Π±ΠΎΡ‚Ρƒ с динамичСским массивом.

ΠžΠ±ΡŠΡΠ²Π»ΡΠ΅Ρ‚ΡΡ динамичСский массив Π² Ρ‚Π΅Π»Π΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹:

Или объявлСниС с ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠ΅ΠΉ:

ДинамичСский массив паскаль Ρ‡Ρ‚ΠΎ это. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ ДинамичСский массив паскаль Ρ‡Ρ‚ΠΎ это. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ ДинамичСский массив паскаль Ρ‡Ρ‚ΠΎ это. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ ДинамичСский массив паскаль Ρ‡Ρ‚ΠΎ это. Π€ΠΎΡ‚ΠΎ ДинамичСский массив паскаль Ρ‡Ρ‚ΠΎ это
А Π²Ρ‹Π΄Π΅Π»Π΅Π½ΠΈΠ΅ памяти ΠΈ Ρ€Π°Π·ΠΌΠ΅Ρ€ Ρ‚Π°ΠΊΠΎΠ³ΠΎ массива задаСтся ΡƒΠΆΠ΅ ΠΏΠΎ Ρ…ΠΎΠ΄Ρƒ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹:

var a: array of integer; var n:=readInteger; a:=new integer[n];

var a: array of integer; a:=new integer[readInteger];

var a: array of integer; var n:=readInteger; SetLength(a,n); // устанавливаСм Ρ€Π°Π·ΠΌΠ΅Ρ€ массива Π°

Бсылочная ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½Π°Ρ модСль: ΠΏΠ°ΠΌΡΡ‚ΡŒ выдСляСтся слуТСбным словом NEW

var a := new integer[5];

ДинамичСский массив паскаль Ρ‡Ρ‚ΠΎ это. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ ДинамичСский массив паскаль Ρ‡Ρ‚ΠΎ это. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ ДинамичСский массив паскаль Ρ‡Ρ‚ΠΎ это. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ ДинамичСский массив паскаль Ρ‡Ρ‚ΠΎ это. Π€ΠΎΡ‚ΠΎ ДинамичСский массив паскаль Ρ‡Ρ‚ΠΎ это

ΠžΡ€Π³Π°Π½ΠΈΠ·Π°Ρ†ΠΈΡ памяти для массива a

Π˜Π½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΡ, присваиваниС ΠΈ Π²Ρ‹Π²ΠΎΠ΄

Π’ΠΎΠ·ΠΌΠΎΠΆΠ½Π° инициализация динамичСского массива ΠΏΡ€ΠΈ описании:

var a: array of integer := (1,2,3);

НовыС способы заполнСния массива (Π·Π°ΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΠΈ):

var a:=ArrFill(5,2); // 2 2 2 2 2

var a:=ReadArrInteger(5); var a:=ReadArrReal(5);

Π—Π°ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ случайными числами:

var a:=new integer[10]; a:=arrRandomInteger(10);

Или с Ρ€Π°Π·Π΄Π΅Π»ΠΈΡ‚Π΅Π»Π΅ΠΌ ΠΌΠ΅ΠΆΠ΄Ρƒ элСмСнтами:

ΠŸΠ΅Ρ€Π΅ΠΏΡ€ΠΈΡΠ²Π°ΠΈΠ²Π°Π½ΠΈΠ΅:

var a: array of integer := (1,2,3); var b:=a; // [1,2,3]

var a: array of integer := (1,2,3); var b:=a; b[2]:=1; print(a); //[1,2,1]

var a: array of integer := (1,2,3); var b:=Copy(a); b[2]:=1; print(a); //[1,2,3]

ΠžΡ‡ΠΈΡΡ‚ΠΊΠ° динамичСского массива

Если Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅ случайно создаСтся ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π½ΠΎ ΠΎΠ΄ΠΈΠ½ ΠΈ Ρ‚ΠΎΡ‚ ΠΆΠ΅ массив:

Но ΠΌΠΎΠΆΠ½ΠΎ ΠΎΡ‡ΠΈΡΡ‚ΠΈΡ‚ΡŒ ΠΏΠ°ΠΌΡΡ‚ΡŒ ΠΈ ΠΏΡ€ΠΈΠ½ΡƒΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ:

Π’ процСссС очистки Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ ΠΈ всСх процСссов приостанавливаСтся. По этой ΠΏΡ€ΠΈΡ‡ΠΈΠ½Π΅ сборщик мусора Π² систСмах Ρ€Π΅Π°Π»ΡŒΠ½ΠΎΠ³ΠΎ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ Π½Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ.

Π Π°Π±ΠΎΡ‚Π° с элСмСнтами массива

for var i:=0 to High(a) do print(a[i]);;

foreach var x in a do print(x);

High(массив) β€” Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ Π²Π΅Ρ€Ρ…Π½ΡŽΡŽ Π³Ρ€Π°Π½ΠΈΡ†Ρƒ динамичСского массива

ΠŸΡ€ΠΈΠΌΠ΅Ρ€Ρ‹ Ρ€Π°Π±ΠΎΡ‚Ρ‹ с динамичСскими массивами

Π’Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅:
Π’Ρ‹ΠΏΠΎΠ»Π½ΠΈΠΌ сначала Π‘Π•Π— использования ΠΎΠ±ΠΎΠ±Ρ‰Π΅Π½Π½ΠΎΠΉ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ:

function IndexOf(a:array of integer;x:integer):integer; begin result:=-1; for var i:=0 to High(a) do if a[i]=x then begin result:=i; break end end; begin var a:=Arr(1,2,3,4,5); print(IndexOf(a,5)) end.

А Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ, Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΠΌ с использованиСм ΠΎΠ±ΠΎΠ±Ρ‰Π΅Π½Π½ΠΎΠΉ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ:

ΠŸΡ€ΠΈ Π²Ρ‹Π·ΠΎΠ²Π΅ ΠΎΠ±ΠΎΠ±Ρ‰Π΅Π½Π½ΠΎΠΉ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ компиляция Π±ΡƒΠ΄Π΅Ρ‚ Π² Π΄Π²Π° этапа:

ΠœΠ΅Ρ‚ΠΎΠ΄Ρ‹ для Ρ€Π°Π±ΠΎΡ‚Ρ‹ с массивами

var a:=Arr(1,2,3,4,5); reverse(a); // [5,4,3,2,1]

var a:=Arr(2,3,1,4,5); //[1,2,3,4,5] sort(a);

Π‘Π»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ Π½Π΅ ΠΌΠ΅Π½ΡΡŽΡ‚ сам массив:
a.Min
a.Max
a.Sum
a.Average β€” срСднСС арифмСтичСскоС

Π‘Π΄Π²ΠΈΠ³ΠΈ

Π‘Ρ‚Π°Π½Π΄Π°Ρ€Ρ‚Π½ΠΎΠ΅ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅:

var a:=Arr(1,2,3,4,5,6); var x:=a[0]; for var i:=0 to 4 do a[i]:=a[i+1]; a[5]:=x; print(a)

Π‘Ρ€Π΅Π·Ρ‹

var a:=Arr(1,2,3,4,5,6); print(a[1:5]) // [2,3,4,5]

a[1:5] β€” 1-ΠΉ элСмСнт Π²ΠΊΠ»ΡŽΡ‡Π°Ρ, 5-ΠΉ Π½Π΅ Π²ΠΊΠ»ΡŽΡ‡Π°Ρ

a[::-1] β€” ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠΌ 6 5 4 3 2 1

ДинамичСский массив паскаль Ρ‡Ρ‚ΠΎ это. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ ДинамичСский массив паскаль Ρ‡Ρ‚ΠΎ это. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ ДинамичСский массив паскаль Ρ‡Ρ‚ΠΎ это. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ ДинамичСский массив паскаль Ρ‡Ρ‚ΠΎ это. Π€ΠΎΡ‚ΠΎ ДинамичСский массив паскаль Ρ‡Ρ‚ΠΎ это
Π’.ΠΎ. Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΏΡ€ΠΈ ΠΏΠΎΠΌΠΎΡ‰ΠΈ срСзов выглядит Ρ‚Π°ΠΊ:
ΠŸΠ΅Ρ€Π΅ΡΡ‚Π°Π½ΠΎΠ²ΠΊΠ°:

Π’.Π΅. создан Π΅Ρ‰Π΅ массив ΡƒΠΆΠ΅ со сдвигом.

Π£Π΄Π°Π»Π΅Π½ΠΈΠ΅ ΠΈ вставка элСмСнтов массива. Бписки

Для Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΡ массива ΠΏΡƒΡ‚Π΅ΠΌ вставки ΠΊΠ°ΠΊΠΎΠ³ΠΎ-Π»ΠΈΠ±ΠΎ элСмСнта, Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΏΡ€Π΅Π΄ΡƒΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ мСсто Π² памяти. По этой ΠΏΡ€ΠΈΡ‡ΠΈΠ½Π΅ для Π΄Π°Π½Π½Ρ‹Ρ… случаСв ΠΏΡ€ΠΎΡ‰Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ списки:
Бписки β€” List β€” это Ρ‚ΠΎΠΆΠ΅ динамичСский массив, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΌΠΎΠΆΠ΅Ρ‚ Β«Ρ€Π°ΡΡˆΠΈΡ€ΡΡ‚ΡŒΡΡΒ» ΠΈ Β«ΡΡƒΠΆΠ°Ρ‚ΡŒΡΡΒ» ΠΏΠΎ Ρ…ΠΎΠ΄Ρƒ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ (вставка ΠΈ ΡƒΠ΄Π°Π»Π΅Π½ΠΈΠ΅ элСмСнтов).
…

РСшСниС Π·Π°Π΄Π°Ρ‡

ΠŸΡ€ΠΎΡΡ‚Ρ‹Π΅ Π·Π°Π΄Π°Ρ‡ΠΈ

Π’Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅:

function SumArray(var a: array of integer): integer:=a.Sum; begin var a:=new integer[10]; a:=arrRandomInteger(10); foreach var x in a do print(x); println(‘Π΄Π»ΠΈΠ½Π° массива = ‘,a.Length,’ сумма = ‘,ArraySum(a)) end.

Π’Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅:
Π”ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅ ΠΊΠΎΠ΄:

ДинамичСский массив паскаль Ρ‡Ρ‚ΠΎ это. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ ДинамичСский массив паскаль Ρ‡Ρ‚ΠΎ это. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ ДинамичСский массив паскаль Ρ‡Ρ‚ΠΎ это. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ ДинамичСский массив паскаль Ρ‡Ρ‚ΠΎ это. Π€ΠΎΡ‚ΠΎ ДинамичСский массив паскаль Ρ‡Ρ‚ΠΎ это

Π’Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅:

function MakeRandomRealArr (n : integer;a,b:real):array of real; begin var c:= ArrRandomReal(n,a,b); result:=c; end; begin var n:= readinteger; var a:=readReal; var b:=readReal; println(‘Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ Ρ€Π°Π±ΠΎΡ‚Ρ‹ с Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠ΅ΠΉ ‘,MakeRandomRealArr(n,a,b)); end.

Π’Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅:

procedure SetToZeroOddIndexes(a: array of integer); begin var j:=0; while j FirstLocMin ).
ПояснСниС: Π»ΠΎΠΊΠ°Π»ΡŒΠ½Ρ‹ΠΌ ΠΌΠΈΠ½ΠΈΠΌΡƒΠΌΠΎΠΌ считаСтся Ρ‚ΠΎΡ‚ элСмСнт, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ мСньшС ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΠΈΠ· своих сосСдСй. Π‘Ρ‡ΠΈΡ‚Π°Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ Π»ΠΎΠΊΠ°Π»ΡŒΠ½Ρ‹ΠΉ ΠΌΠΈΠ½ΠΈΠΌΡƒΠΌ Π² массивС Π΅ΡΡ‚ΡŒ. ΠŸΠ΅Ρ€Π²Ρ‹ΠΉ ΠΈ послСдний элСмСнт Π² качСствС Π»ΠΎΠΊΠ°Π»ΡŒΠ½Ρ‹Ρ… ΠΌΠΈΠ½ΠΈΠΌΡƒΠΌΠΎΠ² Π½Π΅ Ρ€Π°ΡΡΠΌΠ°Ρ‚Ρ€ΠΈΠ²Π°Ρ‚ΡŒ.

Π—Π°Π΄Π°Ρ‡ΠΈ Π½Π° срСзы

Условный ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ Π½Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ.

Π’Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅:

var n:=ReadInteger; var a:=ReadArrReal(n); var k:=ReadInteger; a[k-1 : : k].Print;

Условный ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ Π½Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ.

Условный ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ Π½Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ.

Условный ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ Π½Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ

Π’Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅:

var n:=ReadInteger; var a:=ReadArrReal(n); var srez:=a[1::2]+a[::2]; Print(srez);

Условный ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ Π½Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ

Π’Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅:

var n:=ReadInteger; var a:=ReadArrReal(n); var k:=ReadInteger; var l:=ReadInteger; var srez:=a[k-1:l].Average; print(srez);

Π’Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅:

var n:=ReadInteger; var a:=ReadArrReal(n); print(a[1::2].min);

Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ

Настоящий динамичСский массив Π½Π° Turbo Pascal

Π”ΠΎΠ±Ρ€ΠΎΠ³ΠΎ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ суток!

Если Π²Ρ‹ студСнт ΠΈ Π²Π°ΠΌ Π½Π°Π΄ΠΎ срочно ΡΠΊΠ°Ρ‚Π°Ρ‚ΡŒ β€” листайтС Π²Π½ΠΈΠ· ΠΊ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅

Данная Ρ‚Π΅ΠΌΠ° Π½Π΅ ΠΈΠΌΠ΅Π΅Ρ‚ Π½ΠΈΡ‡Π΅Π³ΠΎ ΠΎΠ±Ρ‰Π΅Π³ΠΎ с Ρ€Π΅Π°Π»ΡŒΠ½ΠΎΡΡ‚ΡŒΡŽ, вСдь язык Pascal Π½ΠΈΠΊΠ΅ΠΌ Π½Π΅ воспринимаСтся Π²ΡΠ΅Ρ€ΡŒΠ΅Π·, Ρ‚Π΅ΠΌ Π±ΠΎΠ»Π΅Π΅ Turbo Pascal. Однако ΠΎΠ½ Π΅Ρ‰Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ Π² ΠΎΠ±ΡƒΡ‡Π°ΡŽΡ‰ΠΈΡ… цСлях Π² Π’Π£Π—Π°Ρ…. И сСгодня послС написания Π»Π°Π±ΠΎΡ€Π°Ρ‚ΠΎΡ€ΠΊΠΈ я ΠΎΠ±Π½Π°Ρ€ΡƒΠΆΠΈΠ», Ρ‡Ρ‚ΠΎ ΠΏΡ€ΠΎ динамичСский массив Π² ΠΈΠ½Ρ‚Π΅Ρ€Π½Π΅Ρ‚Π΅ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ ΠΎΡ‡Π΅Π½ΡŒ ΠΌΠ°Π»ΠΎ β€” Π½Π΅ нашСл Π½ΠΈΡ‡Π΅Π³ΠΎ. (Π° Π½Π°Π΄ΠΎ Π±Ρ‹Π»ΠΎ ΠΎΡ‡Π΅Π½ΡŒ сильно)

Π§Ρ‚ΠΎ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Π·Π½Π°Ρ‚ΡŒ

Π’ΠΈΠΏ Pointer ΠΏΡ€Π΅Π΄Π½Π°Π·Π½Π°Ρ‡Π΅Π½ для адрСса ячСйки памяти. Часто ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ для Ρ€Π°Π±ΠΎΡ‚Ρ‹ с динамичСской ΠΎΠ±Π»Π°ΡΡ‚ΡŒΡŽ памяти, Π½Π°Π·Ρ‹Π²Π°Π΅ΠΌΠΎΠΉ ΠΊΡƒΡ‡Π΅ΠΉ. ΠŸΡ€ΠΎ устройство памяти Π² MS DOS(Π’ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ Turbo Pascal ) ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½ΠΎ.

Для Ρ€Π°Π±ΠΎΡ‚Ρ‹ с динамичСской ΠΏΠ°ΠΌΡΡ‚ΡŒΡŽ Π² TP ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Ρ‹ (ΠΈΠ· Ρ‚Π΅Ρ…, Ρ‡Ρ‚ΠΎ Π½Π°ΠΌ Π½ΡƒΠΆΠ½Ρ‹).

Рассмотрим ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ

Π’ var ΠΌΡ‹ создаСм ссылку Π½Π° ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ Ρ‚ΠΈΠΏΠ° integer. ΠœΡ‹ ΠΏΠΎΠΊΠ° Π½Π΅ Π²Ρ‹Π΄Π΅Π»ΠΈΠ»ΠΈ ΠΏΠ°ΠΌΡΡ‚ΡŒ ΠΏΠΎΠ΄ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ Ρ‚ΠΈΠΏΠ° integer, Π° Π²Ρ‹Π΄Π΅Π»ΠΈΠ»ΠΈ ΠΏΠΎΠ΄ адрСс. ΠŸΠ΅Ρ€Π΅Ρ…ΠΎΠ΄ΠΈΠΌ ΠΊ основной ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅. Π’Π΅ΠΏΠ΅Ρ€ΡŒ выдСляСм ΠΏΠ°ΠΌΡΡ‚ΡŒ ΠΈΠΌΠ΅Π½Π½ΠΎ ΠΏΠΎΠ΄ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ. Π§Ρ‚ΠΎΠ±Ρ‹ ΠΎΠ±Ρ€Π°Ρ‚ΠΈΡ‚ΡŒΡΡ ΠΊ Π·Π½Π°Ρ‡Π΅Π½ΠΈΡŽ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ, Π½Π°Π΄ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΡŽ разымСнования (^). Π§Ρ‚ΠΎΠ±Ρ‹ ΠΏΡ€ΠΎΠΈΠ»Π»ΡŽΡΡ‚Ρ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Ρ€Π°Π±ΠΎΡ‚Ρƒ, присвоим Π΅ΠΉ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅, Π° Π·Π°Ρ‚Π΅ΠΌ Π½Π°ΠΏΠ΅Ρ‡Π°Ρ‚Π°Π΅ΠΌ Π΅Π΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅, ΡƒΠΌΠ½ΠΎΠΆΠ΅Π½Π½ΠΎΠ΅ Π½Π° Π΄Π²Π°. ПослС Ρ€Π°Π±ΠΎΡ‚Ρ‹ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΎΡΠ²ΠΎΠ±ΠΎΠ΄ΠΈΡ‚ΡŒ ΠΏΠ°ΠΌΡΡ‚ΡŒ(ΠΎΠ½Π° сама ΠΎΡΠ²ΠΎΠ±ΠΎΠ΄ΠΈΡ‚ΡŒΡΡ послС Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΡ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹, Π½ΠΎ ΠΏΡ€ΠΎΠ΄Π΅ΠΌΠΎΠ½ΡΡ‚Ρ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Ρ€Π°Π±ΠΎΡ‚Ρƒ всС ΠΆΠ΅ Π½Π°Π΄ΠΎ).

ΠŸΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Ρ‹ GetMem ΠΈ FreeMem ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‚ Π²Ρ‹Π΄Π΅Π»ΠΈΡ‚ΡŒ ΠΏΠ°ΠΌΡΡ‚ΡŒ начиная с ΡƒΠΊΠ°Π·Π°Π½Π½ΠΎΠΉ ячСйки, Ρ€Π°Π·ΠΌΠ΅Ρ€ΠΎΠΌ N Π±Π°ΠΉΡ‚, Π°Π½Π°Π»ΠΎΠ³ΠΈΡ‡Π½ΠΎ FreeMem освобоТдаСт N Π±Π°ΠΉΡ‚ начиная с ΡƒΠΊΠ°Π·Π°Π½Π½ΠΎΠ³ΠΎ адрСса

Π’Π΅ΠΏΠ΅Ρ€ΡŒ ΠΌΠΎΠΆΠ½ΠΎ Π½Π°ΠΊΠΎΠ½Π΅Ρ†-Ρ‚ΠΎ ΠΊ True динамичСским массивам. Π’ ΠΈΠ½Ρ‚Π΅Ρ€Π½Π΅Ρ‚Π΅ Π½Π΅Ρ‚ ΠΏΠΎΠ΄ΠΎΠ±Π½Ρ‹Ρ… ΠΏΡ€ΠΈΠΌΠ΅Ρ€ΠΎΠ², Π²Π΅Π·Π΄Π΅ прСдлагаСтся ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π½ΠΎ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚:

создадим массив ΠΈΠ· N (1-10 тысяч элСмСнтов Π² Π½Π°Π΄Π΅ΠΆΠ΄Π΅, Ρ‡Ρ‚ΠΎ элСмСнтов Π±ΡƒΠ΄Π΅Ρ‚ мСньшС), состоящий ΠΈΠ· ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»Π΅ΠΉ, Π·Π°Ρ‚Π΅ΠΌ Π½ΡƒΠΆΠ½ΠΎΠΌΡƒ количСству адрСсов выдСляСтся ΠΏΠ°ΠΌΡΡ‚ΡŒ ΠΏΠΎΠ΄ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ (ΠΏΡ€ΠΈ ΠΏΠΎΠΌΠΎΡ‰ΠΈ New() ).

Π£ ΠΌΠ½ΠΎΠ³ΠΈΡ… Ρ‚ΡƒΡ‚ Π²ΠΎΠ·Π½ΠΈΠΊΠ°Π΅Ρ‚ вопрос: «А Ρ‡Π΅? ВсСТ Π½ΠΎΡ€ΠΌΠ°Π»ΡŒΠ½ΠΎ, динамичСский» β€” Π½Π΅Ρ‚. Π’Ρ‹ сразу выдСляСтС ΠΏΠ°ΠΌΡΡ‚ΡŒ ΠΏΠΎΠ΄ 10 000 адрСсов* (ΠΊ слову Ρƒ вас вряд Π»ΠΈ Ρ‚ΠΎ Π²Ρ‹ΠΉΠ΄Π΅Ρ‚ Π±Π΅Π· Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… ΡƒΡ…ΠΈΡ‰Ρ€Π΅Π½ΠΈΠΉ), Π° это ΠΈ Ρ‚Π°ΠΊ Π·Π°Π½ΠΈΠΌΠ°Π΅Ρ‚ ΠΌΠ½ΠΎΠ³ΠΎ мСста, ΡΠΏΡ€Π°ΡˆΠΈΠ²Π°Π΅Ρ‚ΡΡ – Π·Π°Ρ‡Π΅ΠΌ?

А Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ всС ΠΆΠ΅ ΠΏΠΎΠΊΠ°ΠΆΡƒ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΡŽ

Π”Π°Π²Π°ΠΉΡ‚Π΅ ΠΏΠΎΠΏΡ€ΠΎΠ±ΡƒΡŽ ΠΎΠ±ΡŠΡΡΠ½ΠΈΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ Ρ‚ΡƒΡ‚ происходит

Для Π½Π°Ρ‡Π°Π»Π° ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΠΌ наши Ρ‚ΠΈΠΏΡ‹, надСюсь Ρ‚ΡƒΡ‚ всС понятно. НапишСм Π΄Π²Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ. Π’ Π½ΠΈΡ… ΠΏΡ€ΠΈ ΠΏΠΎΠΌΠΎΡ‰ΠΈ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ ΠΌΠ°Π³ΠΈΠΈ Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΠ΅ΠΌ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ доступ ΠΊ памяти. А ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½Π΅Π΅: ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ pa это ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ Π½Π° Ρ‚ΠΈΠΏ ElemType. Π’ Π΄Π°Π½Π½ΠΎΠΌ случаС это integer – 2 Π±Π°ΠΉΡ‚Π°. Π’ΠΎ Π΅ΡΡ‚ΡŒ, Ссли ΠΌΡ‹ возьмСм ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ Π·Π° Π½ΠΈΠΌ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ, Ρ‚ΠΎ ΠΎΠ½ Π±ΡƒΠ΄Π΅Ρ‚ Ρ‡Π΅Ρ€Π΅Π· 2 Π±Π°ΠΉΡ‚Π°. Π‘Π»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ ΠΏΡ€ΠΈ ΠΏΠΎΠΌΠΎΡ‰ΠΈ ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Ρ‹ inc(). Π­Ρ‚ΠΎ Ρ‚Π° самая малСнькая магия, ΠΏΡ€ΠΎ ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ ΠΌΠ½ΠΎΠ³ΠΈΠ΅ Π½Π΅ ΡΠ»Ρ‹ΡˆΠ°Π»ΠΈ, ΠΈ я Π½Π΅ нашСл упоминания ΠΎΠ± этой возмоТности языка. Π­Ρ‚ΠΎ Ρ‚ΠΎΡ‚ самый ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ доступ. А Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ Π΄Π΅Π»ΠΎ Π·Π° ΠΌΠ°Π»Ρ‹ΠΌ, ΠΌΡ‹ ΠΏΠ΅Ρ€Π΅ΠΌΠ°Ρ‚Ρ‹Π²Π°Π΅ΠΌ i-1 Ρ€Π°Π· ΠΈ ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅ΠΌ адрСс, ΠΏΠΎ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌΡƒ ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ i-Ρ‚Ρ‹ΠΉ элСмСнт массива. Для Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ setI устанавливаСм Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅, Π° для getI Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅ΠΌ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅. НС Π·Π°Π±Ρ‹Π²Π°Π΅ΠΌ ΠΏΡ€ΠΎ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΡŽ Ρ€Π°Π·Ρ‹ΠΌΠ΅Π½ΠΎΠ²Π°Π½ΠΈΠ΅.

Π‘ описаниСм Ρ‚ΠΈΠΏΠΎΠ² ΠΈ ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€ Π·Π°ΠΊΠΎΠ½Ρ‡ΠΈΠ»ΠΈ ΠΈ ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄ΠΈΠΌ ΠΊ var, Ρ‚ΡƒΡ‚ Π±Π΅Ρ€Π΅ΠΌ Π΄Π²Π΅ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ (подписаны Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅) word ΠΈ ΠΎΠ΄ΠΈΠ½ СдинствСнный ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ. Как Π²ΠΈΠ΄ΠΈΠΌ Ρƒ нас Π½Π΅Ρ‚ ΠΏΠΎΡ‡Ρ‚ΠΈ ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΠΉ Π½Π° Ρ€Π°Π·ΠΌΠ΅Ρ€ массива – максимальноС Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ N ΠΈ ΠΌΠ°ΠΊΡΠΈΠΌΠ°Π»ΡŒΠ½Ρ‹ΠΉ Ρ€Π°Π·ΠΌΠ΅Ρ€ ΠΊΡƒΡ‡ΠΈ (64 ΠšΠ±Π°ΠΉΡ‚).

Основная ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ°

Π’Π²Π΅Π΄Π΅ΠΌ ΠΊΠ°ΠΊΠΎΠ΅-Ρ‚ΠΎ N – Π΄Π»ΠΈΠ½Ρƒ массива, ΠΈ выдСляСм ΠΏΠΎΠ΄ Π½Π΅Π³ΠΎ ΠΏΠ°ΠΌΡΡ‚ΡŒ ΠΏΡ€ΠΈ ΠΏΠΎΠΌΠΎΡ‰ΠΈ ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Ρ‹ GetMem. ΠœΠ°Ρ‚Π΅ΠΌΠ°Ρ‚ΠΈΠΊΠ° простая, Π½Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ n элСмСнтов ΠΏΠΎ m Π±Π°ΠΉΡ‚(m это Ρ€Π°Π·ΠΌΠ΅Ρ€ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ Ρ‚ΠΈΠΏΠ° ElemType). Π”Π°Π»Π΅Π΅ простой ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Ρ€Π°Π±ΠΎΡ‚Ρ‹ с Π΄Π°Π½Π½Ρ‹ΠΌΠΈ, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ Π²Ρ‹ΡˆΠ΅ΠΎΠΏΠΈΡΠ°Π½Π½Ρ‹Ρ… Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ. И Π² ΠΊΠΎΠ½Ρ†Π΅ ΠΎΡ‡ΠΈΡ‰Π°Π΅ΠΌ ΠΏΠ°ΠΌΡΡ‚ΡŒ, Ρ€ΡƒΠΊΠΎΠ²ΠΎΠ΄ΡΡ‚Π²ΡƒΡΡΡŒ Ρ‚ΠΎΠΉ ΠΆΠ΅ Π»ΠΎΠ³ΠΈΠΊΠΎΠΉ, Ρ‡Ρ‚ΠΎ ΠΈ ΠΏΡ€ΠΈ Π²Ρ‹Π΄Π΅Π»Π΅Π½ΠΈΠΈ памяти.

Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ

Dynamic array/ru

Contents

ИспользованиС

ΠšΠΎΠ½Ρ†Π΅ΠΏΡ†ΠΈΡ

ΠžΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ динамичСского массива Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹Π΄Π΅Π»ΡΡ‚ΡŒ пространство Ρ‚ΠΎΠ»ΡŒΠΊΠΎ для указатСля. Π’ΠΎ врСмя выполнСния Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Π΅ ΠΏΠΎΠ΄ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ Π±ΡƒΠ΄ΡƒΡ‚ ΠΎΠ±Π΅ΡΠΏΠ΅Ρ‡ΠΈΠ²Π°Ρ‚ΡŒ ΡƒΠ΄ΠΎΠ±Π½ΠΎΠ΅ использованиС, Π½ΠΎ Ρ‡Ρ‚ΠΎ Π±ΠΎΠ»Π΅Π΅ Π²Π°ΠΆΠ½ΠΎ, синтаксис доступа ΠΊ элСмСнтам массива ΠΏΡƒΡ‚Π΅ΠΌ помСщСния индСксов Π² ΠΊΠ²Π°Π΄Ρ€Π°Ρ‚Π½Ρ‹Π΅ скобки поддСрТиваСтся компилятором (Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½ ΠΊΠ°ΠΊ автоматичСскоС Ρ€Π°Π·Ρ‹ΠΌΠ΅Π½ΠΎΠ²Π°Π½ΠΈΠ΅ указатСля).

ΠžΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅

ΠžΠ΄Π½ΠΎΠΌΠ΅Ρ€Π½Ρ‹ΠΉ динамичСский массив опрСдСляСтся Ρ‚Π°ΠΊ:

ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, Ρ‡Ρ‚ΠΎ Ρ€Π°Π·ΠΌΠ΅Ρ€Π½ΠΎΡΡ‚ΡŒ [массива] Π½Π΅ ΡƒΠΊΠ°Π·Π°Π½.

Для опрСдСлСния ΠΌΠ½ΠΎΠ³ΠΎΠΌΠ΅Ρ€Π½ΠΎΠ³ΠΎ массива Π² качСствС Π±Π°Π·ΠΎΠ²ΠΎΠ³ΠΎ Ρ‚ΠΈΠΏΠ° указываСтся сам массив.

Π—Π°Π΄Π°Π½ΠΈΠ΅ размСрности

ΠŸΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Π° компилятора setLength ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ Π΄Π»ΠΈΠ½Ρƒ динамичСского массива ΠΏΡ€ΠΈ условии, Ρ‡Ρ‚ΠΎ памяти достаточно.

ΠŸΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Π° выдСляСт ΠΏΠ°ΠΌΡΡ‚ΡŒ для ΡΡ‚ΠΎΠ»ΡŒΠΊΠΈΡ… записСй Π±Π°Π·ΠΎΠ²ΠΎΠ³ΠΎ Ρ‚ΠΈΠΏΠ°, сколько ΡƒΠΊΠ°Π·Π°Π½ΠΎ, плюс Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π΄Π°Π½Π½Ρ‹Π΅ для управлСния. Π—Π°Ρ‚Π΅ΠΌ ΠΎΠ½Π° copies (ΠΊΠΎΠΏΠΈΡ€ΡƒΠ΅Ρ‚) всС элСмСнты старого массива Π² Π½ΠΎΠ²Ρ‹ΠΉ. НовыС поля, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… Ρ€Π°Π½ΡŒΡˆΠ΅ Π½Π΅ Π±Ρ‹Π»ΠΎ, ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΡƒΡŽΡ‚ΡΡ ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ встроСнного ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌΠ°.

Один вСсьма ΠΏΠΎΠ»Π΅Π·Π½Ρ‹ΠΉ Ρ„Π°ΠΊΡ‚ Π·Π°ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ΡΡ Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΠ΅ Π² нСизмСнности всСх Ρ€Π°Π·ΠΌΠ΅Ρ€ΠΎΠ² [статичСского массива] Π½Π΅ распространяСтся Π½Π° динамичСскиС массивы.

Π˜Π½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΡ

Начиная с FPC 3.0.0 Ρ‚ΠΈΠΏΡ‹ динамичСских массивов, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π½Π΅ ΡΠ²Π»ΡΡŽΡ‚ΡΡ Π°Π½ΠΎΠ½ΠΈΠΌΠ½Ρ‹ΠΌΠΈ, автоматичСски ΡΠ½Π°Π±ΠΆΠ°ΡŽΡ‚ΡΡ «конструктором», ΠΊΠ°ΠΊ это Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ ΡƒΠΆΠ΅ Π·Π½Π°ΠΊΠΎΠΌΠΎ ΠΏΠΎ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½ΠΎ-ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠΌΡƒ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΡŽ. Π­Ρ‚ΠΎ позволяСт ΠΎΠ±ΡŠΠ΅Π΄ΠΈΠ½ΠΈΡ‚ΡŒ Π²Ρ‹Π·ΠΎΠ²Ρ‹ setLength ΠΈ ΡΠ΅Ρ€ΠΈΡŽ присвоСния Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ Π² ΠΎΠ΄Π½ΠΎΠΌ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π΅:

ΠšΠΎΠ½Π΅Ρ‡Π½ΠΎ, Π²Ρ‹ Ρ‚Π°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π²ΠΊΠ»Π°Π΄Ρ‹Π²Π°Ρ‚ΡŒ массивы:

ΠžΠ±Ρ€Π°Ρ‰Π΅Π½ΠΈΠ΅

Π˜ΠΌΠ΅ΠΉΡ‚Π΅ Π² Π²ΠΈΠ΄Ρƒ, Ρ‡Ρ‚ΠΎ динамичСскиС массивы ΡΠ²Π»ΡΡŽΡ‚ΡΡ указатСлями. ΠŸΡ€ΠΈΡΠ²ΠΎΠ΅Π½ΠΈΠ΅ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… динамичСского массива Π΄Ρ€ΡƒΠ³ Π΄Ρ€ΡƒΠ³Ρƒ ΠΊΠΎΠΏΠΈΡ€ΡƒΠ΅Ρ‚ Π½Π΅ ΠΊΠ°ΠΊΡƒΡŽ-Π»ΠΈΠ±ΠΎ ΠΏΠΎΠ»Π΅Π·Π½ΡƒΡŽ Π½Π°Π³Ρ€ΡƒΠ·ΠΊΡƒ, Π° Ρ‚ΠΎΠ»ΡŒΠΊΠΎ адрСс. Π­Ρ‚ΠΎ отличаСтся ΠΎΡ‚ повСдСния статичСских массивов.

Волько с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ copy ΠΎΠ±Π° массива ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½Ρ‹ нСзависимо.

Π‘Π΅Π· <$rangeChecks on>Π²ΠΎΠ·ΠΌΠΎΠΆΠ΅Π½ Π²Ρ‹Ρ…ΠΎΠ΄ Π·Π° ΠΏΡ€Π΅Π΄Π΅Π»Ρ‹ массива. Π­Ρ‚ΠΎ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ ΠΏΡ€ΠΈ ΠΈΡ‚Π΅Ρ€Π°Ρ†ΠΈΠΈ ΠΏΠΎ динамичСским массивам Π½Π΅Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ Π±Π΅Π· low ΠΈ high Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ допустимыС индСксы (ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ являСтся Π½Π΅ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹ΠΌ, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ динамичСскиС массивы всСгда Π½Π°Ρ‡ΠΈΠ½Π°ΡŽΡ‚ΡΡ с нуля). Π’ качСствС Π°Π»ΡŒΡ‚Π΅Ρ€Π½Π°Ρ‚ΠΈΠ²Ρ‹ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Ρ†ΠΈΠΊΠ»Ρ‹ for… in, Ссли индСкс Π½Π΅ трСбуСтся.

ΠŸΠΎΠΌΠ½ΠΈΡ‚Π΅, Ρ‡Ρ‚ΠΎ sizeOf динамичСского массива соотвСтствуСт Ρ€Π°Π·ΠΌΠ΅Ρ€Ρƒ указатСля.

Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ

ДинамичСскиС массивы Π² ПаскалС

Как ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ ΠΎΠ΄Π½ΠΎΠΌΠ΅Ρ€Π½Ρ‹ΠΉ динамичСский массив Π² ПаскалС?

ДинамичСскиС массивы Π² Pascal

ДинамичСскиС массивы Π² ПаскалС Π½Π΅ ΠΈΠΌΠ΅ΡŽΡ‚ Π·Π°Ρ€Π°Π½Π΅Π΅ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠ³ΠΎ Ρ€Π°Π·ΠΌΠ΅Ρ€Π°.

Π Π°Π·ΠΌΠ΅Ρ€ динамичСских массивов ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΠ·ΠΌΠ΅Π½ΡΡ‚ΡŒΡΡ.

ДинамичСскиС массивы Π² ПаскалС ΠΏΡ€ΠΈΠΌΠ΅Ρ€

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ создания динамичСского массива Π² ПаскалС:

здСсь создан Π½ΠΎΠ²Ρ‹ΠΉ Ρ‚ΠΈΠΏ TIntMassiv, это динамичСский массив, Π΅Π³ΠΎ Ρ€Π°Π·ΠΌΠ΅Ρ€ Π½Π΅ извСстСн, ΠΈ пСрСмСнная Π΄Π°Π½Π½ΠΎΠ³ΠΎ Ρ‚ΠΈΠΏΠ° intMassiv.

Π Π°Π·ΠΌΠ΅Ρ€ динамичСского массива нСизвСстСн, Π½ΠΎ для Ρ€Π°Π±ΠΎΡ‚Ρ‹ с Ρ‚Π°ΠΊΠΈΠΌ массивом Ρ€Π°Π·ΠΌΠ΅Ρ€ Π½Π°Π΄ΠΎ ΡƒΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ. Π£ΡΡ‚Π°Π½Π°Π²Π»ΠΈΠ²Π°ΡŽΡ‚ Ρ€Π°Π·ΠΌΠ΅Ρ€ динамичСского массива Π² Паскаль с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ SetLength

здСсь установлСн Ρ€Π°Π·ΠΌΠ΅Ρ€ Π΄Π²Π° для массива intMassiv.

ΠžΡ‚ΡΡ‡Π΅Ρ‚ индСксов динамичСского массива Π² ПаскалС всСгда Π²Π΅Π΄ΡƒΡ‚ с нуля.

ΠŸΡ€ΠΈΡΠ²ΠΎΠΈΠΌ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΏΠ΅Ρ€Π²ΠΎΠΌΡƒ элСмСнту массива intMassiv, Π° индСкс ΠΏΠ΅Ρ€Π²ΠΎΠ³ΠΎ элСмСнта динамичСского массива всСгда Ρ€Π°Π²Π΅Π½ Π½ΡƒΠ»ΡŽ:

ΠŸΡ€ΠΈΡΠ²ΠΎΠΈΠΌ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Π²Ρ‚ΠΎΡ€ΠΎΠΌΡƒ элСмСнту массива intMassiv, Π° индСкс Π²Ρ‚ΠΎΡ€ΠΎΠ³ΠΎ элСмСнта динамичСского массива всСгда Ρ€Π°Π²Π΅Π½ 1:

ИзмСним Π΄Π»ΠΈΠ½Ρƒ динамичСского массива Π² сторону увСличСния:

здСсь ΠΌΡ‹ ΡƒΠ²Π΅Π»ΠΈΡ‡ΠΈΠ»ΠΈ Ρ€Π°Π·ΠΌΠ΅Ρ€ массива Π½Π° ΠΎΠ΄ΠΈΠ½ элСмСнт, ΠΎΠ½ добавился Π² ΠΊΠΎΠ½Π΅Ρ† ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰Π΅Π³ΠΎ массива.

ΠŸΡ€ΠΈΡΠ²ΠΎΠΈΠΌ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Π½ΠΎΠ²ΠΎΠΌΡƒ Ρ‚Ρ€Π΅Ρ‚ΡŒΠ΅ΠΌΡƒ элСмСнту массива intMassiv, Π° индСкс Ρ‚Ρ€Π΅Ρ‚ΡŒΠ΅Π³ΠΎ элСмСнта динамичСского массива всСгда Ρ€Π°Π²Π΅Π½ 2:

ИзмСним Π΄Π»ΠΈΠ½Ρƒ динамичСского массива Π² сторону ΡƒΠΌΠ΅Π½ΡŒΡˆΠ΅Π½ΠΈΡ:

здСсь ΠΌΡ‹ ΡƒΠΌΠ΅Π½ΡŒΡˆΠΈΠ»ΠΈ Ρ€Π°Π·ΠΌΠ΅Ρ€ массива Π½Π° Π΄Π²Π° элСмСнта, ΠΏΡ€ΠΈ этом послСдниС Π΄Π²Π° элСмСнта ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰Π΅Π³ΠΎ массива ΡƒΠ΄Π°Π»ΠΈΠ»ΠΈΡΡŒ.

ПослС окончания Ρ€Π°Π±ΠΎΡ‚Ρ‹ с динамичСским массивом освобоТдаСм ΠΏΠ°ΠΌΡΡ‚ΡŒ, Π²Ρ‹Π΄Π΅Π»Π΅Π½Π½ΡƒΡŽ для Π½Π΅Π³ΠΎ:

Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ

Π”ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΉ

Π’Π°Ρˆ адрСс email Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ ΠΎΠΏΡƒΠ±Π»ΠΈΠΊΠΎΠ²Π°Π½. ΠžΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ поля ΠΏΠΎΠΌΠ΅Ρ‡Π΅Π½Ρ‹ *