1 семестр сессия / Bilet13
.docБилет №13.Структурный тип маcсив. Описание мас и доступ к эл мас.
Идея массива состоит в том, чтобы объединить в одно целое фиксированное количество элементов одного и того же типа. Суть концепции массива в Паскале заключается в том, чтобы объединить элементы в такую структуру, в которой эти элементы были бы линейно упорядочены (пронумерованы) так, чтобы к ним был прямой доступ через их номер. Номер элемента в массиве принято называть индексом элемента.
В Паскале допустимы только статические массивы. Это означает, что число элементов массива должно оставаться постоянным при обработке массива и быть указано при описании массива. Размер массива в Паскале не может быть представлен переменной, а только константой. Другими словами, размер массива должен быть известен в период компиляции программы, так как под него статически распределяется память.
Прежде чем использовать массив, его следует описать в разделе описаний программы. Общая форма описания массива имеет вид:
type <имя типа-массива> = array [ < тип индекса > ] of < тип элементов>;
где: <имя типа-массива> - имя, выбираемое программистом.
< тип индекса > - любой порядковый тип (кроме longint) или тип-диапазон.
< тип элементов > - любой тип Турбо Паскаля.
В качестве типа индекса часто используют тип-диапазон, указывающий границы индекса. Например:
type measure = array [ 1..16] of real; {тип -массив измерений}
var m1,m2: measure; {переменные-массивы измерений}
Кроме переменных допускается также описание типизированных констант-массивов, в котором элементы-константы перечисляются через запятую. Например:
сonst vect: array [1..8] of 0..9 = (0,0,0,0,1,2,3,4);
Если тип элементов - простой тип, то массив - одномерный (вектор). Однако тип элементов может быть в свою очередь тип-массив. В этом случае мы имеет дело с массивом более высокой размерности. Если тип элементов - одномерный массив, то описываемый массив - двумерный (матрица). Аналогичным образом можно получить трехмерные, четырехмерные массивы и т.д.
Двумерный массив (матрица) может быть описан в виде:
type <имя типа-массива>= array [<тип индекса1>] of array [<тип индекса2>] of <тип >;
Однако в Паскале допускается более компактная форма таких описаний, в которой вместо одного типа индекса используется список из нескольких типов индексов.
Для матрицы такое описание будет иметь вид:
type <имя типа-массива>=array[<тип индекса1,тип индекса2>]of <тип компонент>;
Например: type matr= array [ 1..16,1..8] of real; {тип - матрица 16х8}
var mt1,mt2: matr; {переменные типа matr}
Доступ к элементам массива осуществляется посредством так называемых индексированных имен, имеющих вид:
<имя переменной-массива > [<индексное выражение > ];
где : <индексное выражение > - выражение типа индекса (в частности, индексным выражением может быть переменная).
В случае, когда массив многомерный (имеет несколько индексов), доступ к элементу массива осуществляется по списку индексных выражений в виде:
<имя переменной-массива >[<индексное выражение1 >,<индексное выражение2 >, ...];
Например: m1[ j ] {значение j- элемента массива m1}
mt2[j+3, k] {значение элемента (j+3)-строки, k-столбца матрицы mt2}
Индексы, таким образом, предоставляют новый способ именования элементов, существенно отличный от имён простых переменных. По сути, индексированное имя (имя компонента массива) - вычислимое имя, т.е. такое, которое может изменяться при выполнении программы за счёт изменения значения индексного выражения. Это придает доступу по индексам весьма большую гибкость и удобство при обработке массивов.
Задача 4.2.6(13)
program Project13;
type mas=array[1..3,1..4] of Integer;
var a:mas;
i,j,l1,l2,d1,d2,s:Integer;
procedure p(x:mas; e1,e2:Integer; var n,k:integer);
var j,min:Integer;
begin
min:=x[1,e1];
n:=1;
k:=e1;
for j:=e1 to e2 do
for i:=1 to 3 do
if x[i,j]<min then
begin
min:=x[i,j];
n:=i;
k:=j;
end;
end;
begin
for i:=1 to 3 do
for j:=1 to 4 do
read(a[i,j]);
p(a,1,2,l1,d1);
p(a,3,4,l2,d2);
s:=a[l1,d1];
a[l1,d1]:=a[l2,d2];
a[l2,d2]:=s;
Writeln;
for i:=1 to 3 do begin
for j:=1 to 4 do begin
write(a[i,j],' ');
end; writeln; end;
Readln;
Readln;
end.