КрНУ

Інформаційний портал – Коледжу Кременчуцького національного університету імені Михайла Остроградського!

Массивы. Описание массивов. Действия над массивами.

Основные разделы темы.
1. Определение массива.
2. Характеристики массива.
3. Описание массива.
4. Описание границ.
5. Действия над одномерными массивами.
6. Функция Random.
Если работа программы связана с хранением и обработкой большого количества
однотипных переменных, для их представления в программе можно использовать
массивы. Данные в массивах сохраняются, как и в случае использования обычных переменных, только до конца работы программы. Для их долговременного хранения программа должна записать данные в файл.
Массив (array) – это конечный набор элементов одного (базового) типа, элементы
хранятся в последовательно размещенных ячейках оперативной
памяти и имеют общее имя.
Элементы массива пронумерованы, и обратиться к каждому из них можно по номеру (или нескольким номерам-например, для элемента таблицы задается номер строки и столбца). Номера элементов массива иначе называются индексами, а сами элементы массива-индексированными переменными.
Характеристики массива:
 тип — общий тип всех элементов массива;
 размерность — количество индексов массива;
 диапазон изменения индекса (индексов) — определяет количество элементов в массиве.
В математике понятию массив соответствуют понятия вектора и матрицы. Вектор
(одномерный массив) — это пример массива, в котором элементы нумеруются одним
индексом. Если в массиве сохраняется таблица значений (матрица), то такой массив
называется двумерным, его элементы нумеруются двумя индексами — номером строки и столбца соответственно. Массивы еще большей размерности (трехмерные, четырехмерные и т. д.) на практике встречаются достаточно редко.
Описание массивов.
1. Самый простой способ описания массива-это объявить переменную в разделе описания
переменных var с использованием зарезервированного слова array (то есть массив).
Для одномерного массива:
Var <Имямасиву>: array [<нижняя граница> . . <ВерхняМежа>] оf <Типэлементов>;
Пример.
Var а: array [1. .100] of integer; {100 элементов-целые числа }
b: array[0..50] of char; {51 элемент-символы }
Для двумерного массива:
Var <Имямасиву>: array [<Нижнямежаиндекс1> . . <ВерхняМежаІндекс1>,
<НижняМежаІндекс2> . . <ВерхняМежаІндекс2>] оf
<Типэлементов>;
Пример. В памяти компьютера расположена таблица чисел:
1 2 3 4
5 6 7 8
9 10 11 12
описание двумерного массива будет выглядеть так:
var у: аггау[1..3,1..4] of integer;
2. массив также можно описать как типизированную константу в разделе описания
констант. Элементы такого массива можно изменять в ходе программы, как и любые другие типизируемые константы.
Пример. const x: array[1..5] of integer=(l,3,5,7,9);
у: array [l..2,1..3] of integer=((1,3,5),(2,4,6));
3. Описать массив можно в разделе описания типов type, а затем объявить переменную в
разделе описания переменных var или в разделе констант const.
Пример. Опишем тип массива mymasyv, объявим постоянный массив (масивконстанту) zatraty типа mymasyv и переменные – массивы а, a1 типа mymasyv.
type mymasyv = array [1.. 10] of real;
const zatraty: mymasyv = (1.2, 1, 1, 2, 8, 2.4, 8.7, 3, 7, 1.3);
var а, al : mymasyv;
Описание границ
При объявлении массива нельзя задавать границы индексов с помощью переменных. Память под массив выделяется компилятором к выполнению программы, а переменные приобретают значения только в ходе ее выполнения.
При описании массива удобно использовать заранее определенные именованные константы, которые задают количество элементов.
Пример. Опишем двумерный действительный массив matrix с maxrow строк и maxcol
столбцов:
Const maxrow=10; maxcol=15;
Var matrix: array [1.. maxrow, l .. maxcol] of real;
Действия над массивами.
Над массивами определена единая команда присвоения. Например, команда а:= а1 все значения массива а1 присвоит соответствующим элементам остальные все операции определены только над элементами массива.
Доступ к элементам массива осуществляется так:
<Имя массива>[<индекс элемента>]
Индекс записывают в квадратных скобках, например, а[1] – Первый элемент массива а.
Элементу массива можно присвоить значение а[1]:= 15.1;
Заполнение массива данными
Массив, описанный как типизированная константа, уже содержит данные.
Массивы объявлены в разделе описания переменных, необходимо заполнить данными,
прежде чем выполнять с ними какие-либо действия.
В любом случае для заполнения массива используется цикл.
Наиболее удобен цикл for, причем для многомерных массивов применяются вложенные циклы.
1. Ввод с клавиатуры (“слепой”, без использования комментариев, на практике ввод элементов массива обычно сопровождается выводом соответствующих объясняющих текстов):
 вектора из 10 элементов:
for i:=1 to 10 do readln(а[i]);
 матрицы размером 5×4:
for i:=1 to 5 do
for j:=1 to 4 do readln(а[i,j]);
2. С помощью датчика случайных чисел.
Функция Random (<диапазон>) возвращает случайное число Х типа Word, что удовлетворяет условию 0< X < диапазона. Перед обращением к функции ее необходимо
инициализировать процедуру Randomize.
random 0.0 < X< 1.0 (тип real)
Random(b-a)+a a<X< b
Фрагмент программы заполнения одномерного массива х из п элементов случайными числами в диапазоне от 0 до 99 включительно выглядит так:
randomize; { инициализация датчика случайных чисел }
for i:=1 to n do x[i]:=random(100);
3. Присвоение заданных значений. Нередко приходится заполнять массив нулевыми значениями — обнулять его. Для матрицы размером n * m:
for i:=l to n do
for j : =1 to m do а[i,j]:=0;
Вывод массива.
Вывод значений элементов массива также выполняется в цикле for с использованием операторов write и writeln.
1. Вывод вектора из 5 элементов:
 в столбец:
for i:=1 to 5 do writeln(а[i]);
 в одну строку, через пробел-разделитель:
for i:=1 to 5 do write(а'[i] ‘);
 или с заданием формата, где под каждый элемент отводится 4 позиции:
for i:=1 to 5 do write(а[i]:4)
2. Вывод матриц в стандартной форме записи — по строкам и столбцам — выполняется с помощью оператора writeln; (без параметра). Он используется после вывода текущей строки матрицы для перехода курсора в начало следующей строки экрана:
for i:=1 to n do begin
for j:=1 to m do write(а[i,j]:4);
writeln;
end;
Замечание задания формата вывода помогает расположить матрицу на экране ровными столбцами.
Обработка массива
Часто нужно вычислить сумму элементов массива, их среднее арифметическое
значение или найти значения и номера максимального и минимального элементов, а
также изменить значение элементов массива и т.д. для одномерного и двумерного
массивов используются аналогично, но в случае двумерного массива нужны вложенные циклы.
Действия с одномерными массивами
Условимся, что в векторе а содержится n элементов.
1. Вычисление суммы элементов:
s:=0;
for i:=1 to n do s:=s+a[i]; { обычное накопление суммы в s }
2. Вычисления произведения элементов:
s:=1;
for i:=1 to n do s:=s*a[i]; { накопление произведения в s }
3. Подсчет количества элементов, удовлетворяющих какому-либо условию.
Например, подсчет количества четных чисел в целочисленном массиве:
k:=0;
for i:=1 to n do
if а[i] mod 2=0 then k:=k+1; { увеличиваем на 1 счетчик четных чисел, если число делится на 2 }
4. Перестановки элементов в массиве
При перестановках элементы массива меняются местами друг с другом. Хотя их значения в результате перестановок и не меняются, но меняется порядок прохождение элементов в массиве.
Для выполнения перестановок обычно используется третья переменная, которая
служит для временного хранения одного из элементов и играет роль буфера обмена.
Например, переставим местами первый и второй элементы массива а, используя для временного хранения переменную buf.
buf:=a[l]; а[l]:=a[2]; а[2]:=buf;
Задача 19:
Поиск максимального элемента массива и его номера.
Программа, формирующая одномерный массив случайных чисел, выполняет поиск
максимального элемента массива, а затем выводит на экран его значение и порядковый номер в массиве.
Const сount=10;
Var m: array [1..count] of byte;
Max,i,numer_max: byte;
{ формирование массива случайной функцией random(count*2) вывод массива на
экран}
randomize; { инициализация датчика случайных чисел }
for i:=1 to count do
begin
m[i]:= random (count*2)+1;
write(m’[i] ‘);
end;
writeln;
max:= m[1]; { Начинаем с первого элемента }
numer_max:=1;
for i:=2 to count do { проверить все элементы, начиная со второго }
begin
if m [i]>max then { если очередной элемент массива больше мах }
begin
{ то присвоить его значение max } max:=m [i];
{ и запомнить его порядковый номер } numer_max:=i;
end;
end;
write (‘максимальный элемент’, max);
writeln(‘ расположен на ‘, numer_max,’ месте’);
end.

Задание 10:
1. Модифицируйте задачу, чтобы найти минимальное число и поменять его с последним
элементом.
2. Модифицируйте задачу, чтобы найти сумму и произведение минимальное число и
максимального числа.