Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
УМК ОАиП.docx
Скачиваний:
0
Добавлен:
01.05.2025
Размер:
1.14 Mб
Скачать

Двумерные массивы

Элемент массива может быть любого типа, кроме файлового, следовательно, он может быть и массивом, например:

const n = 4; m = 3;

type mas = array [1 .. n] of integer;

mas2 = array [1 .. m] of mas;

Более компактно это можно записать так:

type mas2 = array [1 .. m, 1 .. n] of integer;

Здесь описан тип массива, состоящего из m массивов, каждый из которых содержит n целых чисел. Иными словами, это матрица из m строк и n столбцов (рис. 3.1). Обе размерности массива должны быть константами или константными выражениями. Имя типа указывается при описании переменных, например:

var a, b : mas2;

В памяти двумерный массив располагается по строкам.

a11 a12 a13 a14 a21 a22 a23 a24 a31 a32 a33 a34

| – 1–я строка – | – 2–я строка – | – 3–я строка – |

Строки массива ничем не отделены одна от другой, то есть прямоугольной матрицей двумерный массив является только в нашем воображении. При просмотре массива от начала в первую очередь изменяется правый индекс (номер столбца).

Рис. 3.1.  Матрица из m строк и n столбцов

К элементу двумерного массива обращаются, указывая номер строки и номер столбца, на пересечении которых он расположен, например:

a[1, 4] b[i, j] b[j, i]

ВНИМАНИЕ Компилятор воспринимает как номер строки первый индекс, как бы он ни был обозначен в программе.

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

const a : mas2 = ( ( 2, 3, 1, 0),

( 1, 9, 1, 3),

( 3, 5, 7, 0) );

С массивами в целом определена только одна операция — присваивание массивов одного типа (например, b := a ) . Все остальные действия выполняются с отдельными элементами. Например, чтобы ввести с клавиатуры двумерный массив, необходимо организовать вложенные циклы:

for i := 1 to m do

for j := 1 to n do read(a[i, j]);

В соответствии с приведенным здесь порядком следования циклов элементы массива должны вводиться по строкам (при этом неважно, как будут располагаться элементы массива, важен только порядок их следования).

Пример. Программа, которая для целочисленной матрицы 3x4 определяет среднее арифметическое ее элементов и количество положительных элементов в каждой строке.

Для нахождения среднего арифметического порядок перебора элементов массива (по строкам или по столбцам) роли не играет. Нахождение количества положительных элементов каждой строки требует просмотра матрицы по строкам (пример 3.3).

program sred_n;

const m = 3; n = 4;

var a : array [1 .. m, 1 .. n] of integer;

i, j, n_pos_el : integer;

sred : real;

begin

for i := 1 to m do

for j := 1 to n do read(a[i, j]);

sred := 0;

for i := 1 to m do begin

n_pos_el := 0;

for j := 1 to n do begin

sred := sred + a[i, j];

if a[i, j] > 0 then inc(n_pos_el);

end;

writeln('В ', i, '–й строке ', n_pos_el, ' положительных элементов');

end;

sred := sred / m / n;

writeln('Среднее арифметическое: ', sred:6:2);

end.

СОВЕТ Записывайте операторы инициализации накапливаемых в цикле величин непосредственно перед циклом, в котором они вычисляются.

Строки

Строки используются для хранения последовательностей символов. В Паскале существует три типа строк:

  1. стандартные ( string );

  2. определяемые программистом на основе string ;

  3. строки в динамической памяти

Строка типа string может содержать до 255 символов. Под каждый символ отводится по одному байту, в котором хранится код символа. Еще один байт отводится под фактическую длину строки. Таким образом, в памяти под одну переменную типа string всегда отводится 256 байт.

Для коротких строк использовать стандартную строку неэффективно, поэтому есть возможность самостоятельно задавать максимальную длину строки, которая должна быть константой или константным выражением. Например, ниже описан собственный тип данных с именем str4:

type str4 = string [4]; { переменная такого типа занимает в памяти 5 байтов }

Примеры описания строк:

const n = 15;

var s : string; { строка стандартого типа }

s1 : str4; { строка типа str4, описанного выше }

s2 : string [n]; { описание типа задано при описании переменной }

Инициализация строк, как и переменных других типов, выполняется в разделе описания констант.

const s3 : string [15] = 'shooshpanchik';

Внутреннее представление строки s3 представлено на рис. 3.2.

Рис. 3.2.  Внутреннее представление строки s3

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]