Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
0043234_0ADD1_ayap.doc
Скачиваний:
2
Добавлен:
01.05.2025
Размер:
682.5 Кб
Скачать

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

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

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 столбцов (рис. 1). Обе размерности массива должны быть константами или константными выражениями. Имя типа указывается при описании переменных:

var a, b : mas2;

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

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

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

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

Рис. 1.

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

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]);

Для приведенного здесь порядка следования циклов элементы массива должны вводиться по строкам.

Пример #3.

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

Схема алгоритма приведена на рис. 2.

Рис. 2.

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.

Лекция 10

Строки

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

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

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

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

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

type str4 = string [4];

Здесь описан собственный тип данных с именем str4. Переменная этого типа занимает в памяти 5 байт. Длина строки должна быть константой или константным выражением.

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

const n = 15;

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

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

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

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

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