Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лекции Турбо Паскаль.doc
Скачиваний:
17
Добавлен:
22.03.2016
Размер:
307.71 Кб
Скачать

Массивы

Массивы относятся к стрктурированным типам данных, т.е. к данным, задающим множество сложных значений, каждое из которых образует совокупность нескольких значений другого типа. Массивы называют еще регулярными типами данных. Регулярный тип означает ряд. Массивы названы так, потому что объединяют однотипные (логически однородые) элементы, упорядоченные по индексам. Индексы определяют положение каждого элемента в массиве.

Таким образом, можно сказать, что массив – это структурированный тип данных, состоящий из фиксированного числа элементов, имеющих один и тот же базовый тип.

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

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

Элементы массва упорядочены в массиве так, что каждому элементу соответствует индекс (номер), определяющий положение элемента в последовательности. Т.о., доступ к определенному элементу осуществляется при помощи этого индекса. В качестве индекса может использоваться любое выражение скалярного (перечисляемого) типа,. Нельзя использовать в качестве индексов переменные вещественного типа.

Описание массива имеет вид:

Type

<имя>=array[<тип индексов>] of <тип элементов>;

где <имя> - имя типа массив,

<тип индексов>] – границы изменения индекса ( минимальное значение индекса .. максимальное значение индекса,

<тип элементов>; - тип значений, входящих в массив.

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

<минимальное значение> .. <максимальное значение>.

В зависимости от количества индексов массивы могут быть одномерными (вектор), двумерными (матрица), трехмерными (куб), .. n - мерными. Количество индексов ограничено лишь памятью компьютера.

Пример

type

a=array[1..10] of real;

c=array[‘a’..’z’] of integer;

k=array[1..50] of string[15];

var

d,m:a;

z:c,

r,w,p:k;

begin

d[1]:=1.2;

m[4]:=-3.25;

z[‘a’]:=12;

z[‘b’]:=-43;

r[1]:=’summa=’;

w[1]:=’Группа 1-71-1’;

end.

Массив может быть описан сразу в разделе переменных:

var

d,v:array[1..10] of real;

z:array[‘a’..’z’] of integer;

r,w,parray[1..50] of string[15];

Если в качестве базового типа используется другой массив, то образуется структура, описывающая многомерный массив.

Например,

Type

V=array[1..5] of integer;

w=array[1..6[ of v;

var

k:w;

Эта структура может быть записана в виде:

Var

K: array[1..6,1..5] of integer;

При этом первым индексом является номер строки (ее индекс изменяется в нашем примере от 1 до 6), вторым – столбца (от1 до 5). Таким образом, массив К состоит из 6 строк и 5 столбцов.

Элементы массива в памяти располагаются последовательно. Элементы с меньшими значениями индексов хранятся в более низких адресах памяти. Многомерные массивы хранятся так, что самый правый индекс изменяется первым. В нашем примере элементы массива будут храниться в следующей последовательности:

k1,1], k[1,2], k[1,3], k[1,4],k[1,5],k[1,6], k[2,1], k[2,2], k[2,3], … k[6,5].

При работе с массивами в логических операциях «=» и «<>», а также в операции присваивания «:=» можно использовать только имена массивов, если они имеют одинаковый тип индексов и одинаковый тип элементов и в перечисленных выше операциях участвуют все элементы.

Пример

var

a,b: array[1..5] of integer;

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

a=b – true, если значение каждого элемента массива a равно соответствующему значению элемента массива b.

a<>b – true, если хотя бы одно значение элемента массива a не равно соответствующему значению элемента массива b.

a:=b – все значения элементов массива b присваиваются соответствующим элементам массива a; массив b при этом остается неизменным.

Константы типа массив в разделе констант описываются следующим образом:

const

<имя>:<имя типа>=(<значения констант>);

<имя>:<тип>=(<значения констант>);

Пример

type

a=array[1..4] of integer;

const

b : :a=(2,-3,6,1);

c: array{0..9] of char=(‘a’,’b’,’c’,’d’,’e’,’f’,’j’,’I’,’h’);

d: array[1..3,1..4)] of integer=((-1,3.-6,9), (2,-3,5,-5), (0,8,-4,-7));

Пример:

Упорядочить квадратную матрицу А[8,8], содержащую положительные и отрицательные элементы, полученные случайным образом, таким образом, чтобы максимальный по абсолютной величине элемент в строке был диагональным.

program alt;

uses crt;

var

a::array[1..8,1..8] of real;

max:real;

n,i,j:integer;

begin

randomize;

clrscr;

writeln(‘Исходный массив а’);

for i:=1 to 8 do

begin

for j:=1 to 8 do

begin

a[I,j]:=random-0.5;

write(a[i,j]:6:2:

end; {for j}

writeln;

end; {for i}

for i:=1 to 8 do

begin

max:=a[i,1];

n:=1;

for j:=2 to 8 do

if abs(max)<abs(a[i,j])

then

begin

max:=a[I,j]; {запоминание нового максимального элемента строки n:=j; в переменной max и его места в строке в переменной n }

end; {then}

if n<>i { если максимальный элемент не диагональный }

then { то, переставить его с диагональным }

a[i,n]:=a[i,i];

a[i,i]:=max;

end; {then}

end; {for i}

writeln(‘Новый массив а’);

for i:=1 to 8 do

begin

for j:=1 to 8 do write(a[i,j]:6:2):

writeln;

end; {for i}

readln;

end.