Процедуры и функции

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

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

Описание двумерного массива:

Var

A : Array [1..20,1..30] Of Integer;

Описан двумерный массив, соответствующий таблице, состоящей из 20 строк и 30 столбцов.

Отдельный элемент двумерного массива адресуется, естественно, двумя индексами. Например, ячейка, находящаяся в 5-й строке и 6-м столбце будет называться A[5,6].

Ввод двумерного массива:

а) С клавиатуры

For i:=1 to 20 do

For j:=1 to 30 do

Read (a[I,j]);

б) Автоматическое формирование массива

For i:=1 to 20 do

For j:=1 to 30 do

a[I,j] := random (50)-25;

Вывод двумерного массива в виде матрицы:

For i:=1 to 20 do begin

For j:=1 to 30 do

Write(A[i,j] :5)

Writeln;

End;

Для иллюстрации способов работы с двумерными массивами решим задачу: "Задать и распечатать массив 10х10, состоящий из целых случайных чисел в интервале [1,100]. Найти сумму элементов, лежащих выше главной диагонали."

При отсчете, начиная с левого верхнего угла таблицы, главной будем считать диагональ из левого верхнего угла таблицы в правый нижний. При этом получается, что элементы, лежащие на главной диагонали будут иметь одинаковые индексы (i=j), а для элементов выше главной диагонали номер столбца будет всегда превышать номер строки (j>i).

Program M2;

Uses Crt;

Var

A : Array[1..10,1..10] Of Integer;

i, j : Byte;

S : Integer;

Begin

Clrscr;

Randomize;

{формирование матрицы}

For i:=1 to 10 do Begin

For j:=1 to 10 do Begin

A[i,j]:=Random(100)+1;

{вывод матрицы}

For i:=1 to 10 do Begin

For j:=1 to 10 do

Write(A[i,j]:5);

Writeln:

End;

{подсчет суммы элементов выше главной диагонали}

S:=0;

For i:=1 to 10 do

For j:=1 to 10 do

If j>i Then S:=S+A[i,j]

Writeln('Сумма элементов выше гл. диагонали равна ',S)

End.

Если модель данных в какой-либо задаче не может свестись к линейной или плоской таблице, то могут использоваться массивы произвольной размерности. N-мерный массив характеризуется N индексами.

При решении сложных объемных задач часто целесообразно разбивать их на более простые. В этом случае говорят о подпрограммах. Использование подпрограмм позволяет сделать основную программу более наглядной, понятной, а в случае, когда одна и та же последовательность команд встречается в программе несколько раз, даже более короткой и эффективной.

В языке Паскаль существует два вида подпрограмм: процедуры и функции.

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

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

Формат описания процедуры:

Procedure <Имя процедуры> (<Имя форм. параметра 1>:<Тип>;

< Имя форм. параметра 2>:<Тип>);

<Раздел описаний>