Pascal. Массивы
Массив - это последовательность данных одного типа - элементов массива. Доступ к каждому элементу осуществляется по его индексу, в качестве которого могут выступать порядковые (перечисляемые) типы данных, чаще всего используются целые числа.
Размер массива (количество элементов) задается при объявлении в блоке var. Например, объявляем массив с именем massiv из 10 элементов, каждый из которых - целое число:
var
massiv : array[1..10] of integer;
Обычно индекс массива начинается с 1, хотя это необязательно. В PascalABC 0 в индексе статического массива не используется. Статический массив - это массив, размер которого определяется при объявлении и который не может быть изменен в процессе выполнения программы.
Присвоим пятому элементу этого массива значение 14:
massiv[5] := 14;
В качестве индекса массива можно использовать выражение, значение которого явлется порядковым номером элемента. Но если результатом выражения будет индекс, не входящий в объявленный диапазон, то программа при выполнении выдаст ошибку.
Например, введем 10 целых чисел в массив, а затем выведем его:
const
N = 10; // Для размера массива удобно ипользовать константу
var
massiv : array[1..N] of integer;
begin
for var i:= 1 to N do readln(massiv[i]);
for var i:= 1 to N do write(massiv[i],' ');
writeln;
end.
Массивы могут быть многомерными, в которых доступ к элементам осуществляется по нескольким индексам. Например, для двухмерного массива, часто называемым таблицей или матрицей, используются два индекса: индексы строки и столбца.
Введем числа в двухмерный массив, состоящий из двух строк и пяти столбцов, а затем выведем его построчно:
var
table : array[1..2,1..5] of integer;
begin
for var i:= 1 to 2 do
for var j := 1 to 5 do readln(table[i,j]);
for var i:= 1 to 2 do
begin
for var j:= 1 to 5 do write(table[i,j],' ');
writeln;
end;
end.
Начальные значения элементам массива можно присваивать непосредственно при объявлении. Например:
type
months = (jan, feb, mar, apr, may, jun, jul, aug, sep, oct, nov, dec);
var
temperature: array[months] of real = (-5, -12, 2, 15, 16.5, 18.5, 20.8, 20.4, 17.3, 13.2, 3.3, -4.5);
begin
writeln(temperature[may]);
end.
В блоке type мы определили перечисляемый тип данных months, который использовали для индекса массива. Значения элементам присвоили при объявлении массива.
Примечание: В нижеследующих задачах предполагается решение с использованием массивов, они приведены для изучения методов работы с этой структурой данных.
Если иное не указано, то в условии задач следует считать массив из 10 целочисленных значений.
Задачи для самостоятельного решения
-
Пользователь вводит массив A из 10 целых чисел. Сформировать массив B, в котором все элементы следуют в обратном порядке (первый элемент в B является последним в A и т.д.).
-
Подсчитать разницу между суммой всех элементов с четными индексами и суммой всех элементов с нечетными индексами.
-
Подсчитать разницу между суммой всех четных и суммой всех нечетных элементов массива.
-
Проверить, является ли введенный массив симметричным (первый элемент равен последнему, второй - предпоследнему и т.д.).
-
Выяснить, все ли элементы введенного пользователем массива, различны.
-
Подсчитать среднее арифметическое всех положительных элементов массива.
-
Подсчитать количество элементов, равных максимальному в массиве.
-
Определить номера первого и последнего элементов, которые совпадают с максимальным элементом массива.
-
Определить количество элементов массива, которые больше суммы предшествующего и последующего элементов.
-
Определить, сколько элементов одного знака находится в конце массива и какого они знака. Отдельно рассмотреть случай, когда в конце массива находятся нули.
-
В массиве из 12 элементов хранится количество осадков в каждом месяце. Вывести таблицу из 3 столбцов, где для каждого месяца вывести его номер, количество осадков в нем и отклонение количества осадков в этом месяце от среднегодового.
-
Пользователь вводит основание системы счисления (1 < q < 10) и число. Перевести введенное число в q-ую систему счисления.
-
Произвести циклический сдвиг массива на одну позицию влево (т.е. второй элемент переставить на первое место, третий элемент - на второе и т.д., а первый элемент - на последнее).
-
Произвести циклический сдвиг массива на одну позицию вправо (т.е. предпоследний элемент переставить на последнее место и т.д., а последний элемент - на первое).
-
Пользователь вводит цифры некоторого билета в массив. Выяснить является ли билет счастливым (т.е. сумма элементов первой половины массива равна сумме элементов второй половины).