
- •Одномерные массивы
- •1. Суммирование двух массивов одинакового размера
- •2 . Суммирование элементов массива
- •3 Определение числа элементов массива, удовлетворяющих заданному условию
- •4 Суммирование элементов массива, удовлетворяющих заданному условию
- •5 Инвертирование массива
- •6 Формирование массива из элементов другого массива, удовлетворяющих заданному условию
- •7 Поиск максимального (минимального) элемента в массиве с запоминанием его положения в массиве
- •8 Поиск заданного элемента в массиве
- •9 Циклический сдвиг элементов массива
- •10 Упорядочение Массива
МАССИВЫ
Чтобы хранить и обрабатывать сложные виды информации, нужно научиться строить нетривиальные структуры данных. Такие структуры создают путем объединения данных, в конечном итоге, простых типов. Составные части структурированных типов называются их компонентами.
В ТР существует ограничение на объем памяти, занимаемой значением любого структурированного типа. Этот объем не должен превышать 65520 байтов.
Одним из структурированных типов во многих алгоритмических языках является тип массив. Массив представляет собой совокупность фиксированного числа компонентов одного типа. Тип компонентов массива называется базовым типом.
Описание массива:
arrayarrrarray
array array
тип
индекса
базовый тип
[
array
Количество типов индекса, перечисленных в квадратных скобках, определяет размерность массива. Размер массива это общее число его компонентов.
Тип индекса должен быть упорядоченным типом. Чаще всего для типа индекса используют интервальный тип, реже перечисляемый или стандартный. Тип индекса не может быть четырехбайтовым.
Базовый тип может быть любым.
Одномерные массивы
Если указан только один тип индекса, массив является одномерным.
Примеры описаний одномерных массивов:
const MAXLEN=100;{константа удобна для изменения размера массива}
type t_vect =array[1.. MAXLEN] of integer;
var a : t_vect; {для хранения целочисленных последовательностей}
b : t_vect;
c, d : array[1.. MAXLEN] of integer;
point : array[(x, y, z)] of real; {для хранения координат точки или
вектора}
flag : array[‘A’..‘Z’] of boolen;
Массивы a, b, c, d имеют одинаковые размеры (=100). Размер массива point равен 3, flag 26.
Компоненты (элементы) массива занимают последовательные ячейки памяти. Объем памяти, выделяемой массиву, равен произведению размера массива на объем, занимаемый элементом. Переменная а занимает 100*2=200 байтов, point 3*6=18 байтов, flag 26*1=26 байтов.
Следует обратить внимание на то, что типы переменных a и с компилятор считает разными. Важным понятием в Паскале является понятие тождественности типов. Переменные имеют тождественные типы, если они определены в одной секции или через одно и то же имя типа.
Согласно приведенным выше описаниям, типы переменных a и b тождественны, так как переменные описаны с использованием имени типа t_vect. Переменные с и d тоже имеют тождественные типы, так как описаны в одной секции.
Над массивами любой размерности как над едиными целыми не определены никакие операции. Разрешено присваивание переменной типа массив значения переменной тождественного типа, то есть для совместимости массивов по присваиванию требуется тождественность типов.
Если массивы a и d инициализированы, то допустимы операторы b:=a и c:=d.
Имя массива является общим именем совокупности компонентов (элементов) массива. Обращение к отдельным компонентам массива осуществляется с помощью переменных с индексами:
Выражение в квадратных скобках должно иметь тип индекса. Например, a[1], d[MAXLEN div 2], point[x], point[y], flag[‘X’], flag[succ(‘G’)].
Переменные с индексами можно использовать в любом месте программы, где допустим базовый тип. Ввод и вывод массива производится покомпонентно, обычно в цикле for.
Примеры.
1. Суммирование двух массивов одинакового размера
Задано: массивы A =(a1,a2,...,an) , B =(b1,b2,...,bn).
Сформировать: массив C =(c1,c2,...,cn) , где Сi = Ai+Bi; i=1,2,...,n.
Задача сводится к организации цикла по i и вычислению Ci=Ai+Bi при каждом значении i от 1 до n.
Исходные данные:
N- размер массива;
A, B - массивы слагаемые размером N;
Результат: массив С - размером N;
Вспомогательные переменные: I - индекс - управляющая переменная цикла.
Procedure SUM_MAS (n : integer; A,B :mas; var C : mas);
{ где mas должен быть описан в главной программе в разделе описания типов , например так :
type mas = array[1..100 ] of real ;
тогда это будет процедура для суммирования двух одномерных массивов размером не более 100 элементов }
begin
for i := 1 to n do C[i] := A[i]+B[i];
end;