Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Обработка массивов (теория)

.pdf
Скачиваний:
40
Добавлен:
13.03.2016
Размер:
270.86 Кб
Скачать

1

Массивы

Массив – это набор однотипных и однородных данных. Каждая отдельная величина называется компонентой

массива.

Вся совокупность компонент определяется одним именем. В языке Pascal тип компонент может быть

любым,

кроме файлового типа. То есть компоненты массива сами могут быть составными значениями. Тип элементов

массива

называется базовым типом. Массивы относят к структурам с произвольным доступом. Главные

характеристики массива – тип его элементов и их количество. Количество элементов массива зависит от количества индексов и диапазона их изменения. Количество индексов массива называется размерностью массива. Для доступа к отдельному элементу к имени массива добавляется индекс (номер элемента). Индексы массива должны быть определенного скалярного типа, их можно вычислять, то есть на место индексирующей константы можно подставить любое выражение этого скалярного типа. Одномерный массив (вектор) – массив, в котором элементы нумеруются одним индексом. Многомерные массивы – это массивы, элементами которых являются массивы. Чаще всего в практических задачах используются двумерные массивы. В них элементы нумеруются двумя индексами. Элементы могут иметь любой тип, кроме файлового, индексы могут быть любого ограниченного типа. При обращении первый индекс – номер строки массива, второй – номер столбца.

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

Имя_массива: array[ограниченный тип] of тип_элементов;

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

2

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

type

Color =(red, yellow, green);

var

col: array[Color] of integer;

Можно объявить тип массива, а затем объявить переменные этого типа.

type

Colors = array[Color] of integer;

var

c1, c2: Colors;

При объявлении переменной типа массива можно его инициализировать:

const

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

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

const

S:array[0..2] of char = (‘a’, ’b’, ’c’);

const

S:array[0..2] of char = ‘abc’;

3

Массив символов – это строка, поэтому с ним можно обращаться как со строкой:

var S: array[0..10] of char;

S:=’abcdefghijk’;

Число символов в строке не должно превышать объявленного размера массива. Двумерный массив можно объявить следующим образом:

var

c: array[1..10] of array [1..3] of integer;

или

var

c: array[1..10, 1..3] of integer;

Можно сначала определить соответствующий тип, а затем – переменные или типизированные константы этого

типа.

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

Первый способ – с использованием типизированных констант, например:

type

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

const

raM10: Dim10 = ( 0, 2.1, 4, 5.65, 6.1, 6.7, 7.2, 8, 8.7, 9.3 );

4

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

type

Dim3x2= Array[1..3,1..2] of integer;

const

iaM3x2: Dim3x2= ( (1, 2), (3, 4), (5, 6) );

Массив можно заполнить с помощью процедуры FillChar:

FillChar( var V; NBytes: Word; B: Byte );

Эта процедура заполняет участок памяти однобайтовым значением. Например, для обнуления массива A[1..10] of Real можно записать:

FillChar(A, 40, 0);

или

FillChar(A, SizeOf(A), 0);

Для массивов одного типа определены операции присваивания. Компилятор считает, что переменные имеют один тип только в случаях, если они явно определены через некоторый поименованный тип, или если они объявлены в одном списке. К символьным массивам применимы функции работы со строками. Для ввода или вывода массива в список ввода или вывода помещается переменная с индексом, а операторы ввода или вывода выполняются в цикле.

Чтобы заполнить массив произвольными числами используется функция Random (датчик случайных чисел). Диапазон случайных чисел в данном случае включает числа от 0,0 до 1,0. Чтобы изменить диапазон, необходимо

5

воспользоваться формулой: a + (b – a)* Random, где а – левая граница значений, а b – правая. Чтобы получить неповторяющиеся элементы массива используют процедуру Randomize.

Randomize;

for i:=1 to n do

a[i]:=-5+10* Random;

Рассмотрим некоторые стандартные алгоритмы, используемые при работе с одномерными массивами.

1.Найти сумму элементов одномерного массива var S: Real; A: array[1..10] of Real; i: integer;

begin

writeln(‘Введите 10 элементов массива’); for i:=1 to 10 do readln(A[i]);

S:=0;

for i:=1 to 10 do S:=S+A[i];

writeln(‘Сумма элементов массива равна ’, S:10:3) end.

6

2.Найти произведение элементов одномерного массива var P: Real; A: array[1..10] of Real; i: integer;

begin

writeln(‘Введите 10 элементов массива’); for i:=1 to 10 do readln(A[i]);

P:=1;

for i:=1 to 10 do P:=P*A[i];

writeln(‘Произведение элементов массива равна ’, S:10:3) end.

7

3.Найти максимальный элемент одномерного массива и его номер. var Max: Real; A: array[1..10] of Real; i, max_n: integer;

begin

writeln(‘Введите 10 элементов массива’); for i:=1 to 10 do readln(A[i]);

Max:=A[1];

for i:=1 to 10 do

if A[i]>Max then begin Max:=A[i]; max_n:=i;

end;

writeln(‘Максимальный элемент массива’, Max:10:3); writeln(‘Номер максимального элемента массива равна ’, max_n)

end.

8

4.Из массива А, состоящего из n элементов удалить m-й по номеру элемент

…………..

begin

write ('Введите n'); readln (n); writeln('Введите m'); readln(m);

for i:=1 to n do begin write ('a[',i,']='); readln (a[i])

end;

for i:=m to n-1 do a[i]:=a[i+1];

n:=n-1;

for i:=1 to n do write (a[i],' ');

readln end.

9

5.В массив А, состоящий из n элементов, добавить после k-го элемента значение 100.

…………..

begin

……………..

for i:=n+1 downto k+2 do a[i]:=a[i-1];

a[k+1]:=100;

n:=n+1;

for i:=1 to n do write (a[i],' ');

readln end.

10

Если при решении каких-либо задач используются двумерные массивы, то следует помнить о том, что:

элемент лежит на главной диагонали, если номер строки элемента совпадает с номером столбца;

− элемент лежит ниже главной диагонали, если номер строки i больше номера столбца j;

− элемент находится выше главной диагонали, если если номер строки i меньше номера столбца j;

− элемент лежит на побочной диагонали, если выполняется равенство

номер строки i + номер столбца j – 1 = n.

Для ввода и вывода двумерного массива можно использовать следующий код (в этом примере рассматривается

массив, состоящий из целых чисел):

 

 

writeln ('Введите число строк и столбцов');

 

writeln ('Введенный массив');

 

readln (n, m);

 

for i:=1 to n do begin

writeln ('Введите массив');

 

for j:=1 to m do

for i:=1 to n do begin

 

write(a[i,j]:4);

for j:=1 to m do

 

writeln;

read(a[i,j]);

 

end;

readln;

 

 

end;