/
n-dimens
/
pascalabcnet
Обзор
Документация
Войти
/
n-dimens
/
pascalabcnet
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
Аналитика
Безопасность
master
PABCNetHelp/LangGuide/Types/staticarrays.html
91 строка
5 KB
samuraiGH
adding working-tree-encoding attribute (#3325)
07 ноя 2025, 16:12
Не верифицирован
07 ноя 2025, 16:12
cf1fd29
Код
Авторство
О чём код?
<html> <head> <object type="application/x-oleobject" classid="clsid:1e2a7bd0-dab9-11d0-b93a-00c04fc99f9e"> <param name="Keyword" value="array"> <param name="Keyword" value="of"> </object> <meta http-equiv="Content-Type" content="text/html; charset=windows-1251"> <title></title> <link rel="StyleSheet" href="../../default.css"> </head> <body> <H1>Статические массивы</H1> <h2>Описание статического массива</h2> <p>Статические массивы в отличие от <a href="dynamicarrays.html">динамических</a> задают свой размер непосредственно в типе. Память под такие массивы выделяется сразу при описании.</p> <p>Тип статического массива конструируется следующим образом:</p> <blockquote> <p><code><b>array</b> [</code><code class="codeit">тип индекса1</code><code>,</code><code class="codeit"> ...</code><code>, </code><code class="codeit">тип индексаN</code><code>] <b>of</b> </code><code class="codeit">базовый тип</code></p> </blockquote> <p>Тип индекса должен быть <a href="index_types.html">порядковым</a>. Обычно тип индекса является <a href="enum_subrange.html">диапазонным</a> и представляется в виде <code>a..b</code>, где <code>a</code> и <code>b</code> - константные выражения целого, символьного или перечислимого типа. Например:</p> <blockquote> <p><code><b>type</b> <br> MyEnum = (w1,w2,w3,w4,w5);<br> Arr = <b>array</b> [1..10] <b>of</b> integer;<br> <b>var</b> <br> a1,a2: Arr; <br> b: <b>array</b> ['a'..'z',w2..w4] <b>of</b> <b>string</b>;<br> c: <b>array</b> [1..3] <b>of array</b> [1..4] <b>of</b> real;</code></p> </blockquote> <h2>Инициализация статического массива</h2> <p>При описании можно также задавать инициализацию массива значениями:</p> <blockquote> <p><code><b>var</b> <br> a: Arr := (1,2,3,4,5,6,7,8,9,0);<br> cc: <b>array</b> [1..3,1..4] <b>of</b> real := ((1,2,3,4), (5,6,7,8), (9,0,1,2));</code></p> </blockquote> <h2>Присваивание статического массива</h2> <p>Статические массивы одного типа можно присваивать друг другу, при этом будет производиться копирование содержимого одного массива в другой:</p> <blockquote> <p><code>a1 := a2;</code></p> </blockquote> <h2>Вывод статического массива</h2> <p>Процедура write выводит статический массив, заключая элементы в квадратные скобки и разделяя их запятыми:</p> <blockquote><code><b>var</b> a: Arr := (1,2,3,4,5,6,7,8,9,0);<br> <strong>var </strong> m := array [1..3,1..3] of integer := ((1,2,3),(4,5,6),(7,8,9));<br>writeln(a); // [1,2,3,4,5]<br>writeln(m); // [[1,2,3],[4,5,6],[7,8,9]]</code></blockquote> <h2>Передача статического массива в подпрограмму</h2> <p>При передаче статического массива в подпрограмму по значению также производится копирование содержимого массива - фактического параметра в массив - формальный параметр:</p> <blockquote> <p><code><b>procedure</b> p(a: Arr); // передавать статический массив по значению - плохо!<br> ...<br> p(a1);</code></p> </blockquote> <p>Это крайне расточительно, поэтому статические массивы рекомендуется передавать <a href="../ProcFunc/params.html">по ссылке</a>. Если массив не меняется внутри подпрограммы, то его следует передавать как ссылку на константу, если меняется - как ссылку на переменную:</p> <blockquote> <p><code><strong>type</strong> Arr = <strong>array</strong> [2..10] <strong> of</strong> integer;<br><br><strong>procedure</strong> Squares(<strong>var</strong> a: Arr);<br><strong>begin</strong><br> <strong>for</strong> <strong> var</strong> i:= Low(a) <strong>to</strong> High(a) <strong>do</strong><br> a[i] := Sqr(a[i]);<br><strong>end</strong>;<br><br><strong>procedure</strong> PrintArray(<strong>const</strong> a: Arr);<br><strong>begin</strong><br> <strong>for</strong> <strong>var</strong> i:= Low(a) <strong>to</strong> High(a) <strong>do</strong><br> Print(a[i])<br><strong>end</strong>;<br> <br><strong>var</strong> a: Arr := (1,3,5,7,9,2,4,6,8); <br><br><strong> begin</strong><br> Squares(a);<br> PrintArray(a);<br><strong>end</strong>.</code></p> </blockquote> <p>Для доступа к нижней и верхней границам размерности одномерного массива используются функции Low и High.</p> </body> </html>