"Информатика", Семакин И.Г., Залогова Л.А., Русаков С.В., Шестакова Л.В.
Массив в Паскале позволяет хранить под одним именем много значений одного типа и обращаться к каждому по индексу. Это удобно, когда нужно обработать целую последовательность чисел, оценок или измерений: вместо отдельных переменных используют элементы массива и цикл. При описании массива задают диапазон индексов и тип данных, а затем вводят, просматривают и изменяют значения. На этой основе строят алгоритмы поиска, подсчёта и вычисления суммы.
Текст подготовлен нейронной сетью по теме параграфа и не заменяет учебник — важные факты и формулировки сверяйте с ним.
Массив — упорядоченная совокупность однотипных данных, к каждому элементу которой обращаются по индексу. Иными словами, это ряд ячеек, собранных под одним именем. Массив нужен, когда программа должна работать с набором значений, а не с одной величиной.
Элемент массива — отдельное значение массива, имеющее тот же тип данных, что и остальные элементы. Например, если массив предназначен для целых чисел, каждое его значение должно быть целым. Такое правило помогает программе правильно хранить и обрабатывать все элементы.
Индекс массива — номер, однозначно определяющий положение элемента в массиве. По индексу программа выбирает нужное место, даже если значений много. Индекс — это не само значение, а способ указать, где оно находится.
Описание массива — запись в Паскале, задающая имя массива, диапазон индексов и тип его элементов. Например, в описании можно указать, что массив a содержит целые значения с индексами от 1 до 10. По этой записи программа понимает, сколько элементов доступно и какие данные допустимо в них помещать.
Если хранить десять результатов измерений в отдельных переменных, каждую пришлось бы отдельно объявлять и указывать в командах. Массив объединяет их под одним именем, поэтому похожие действия можно выполнять для значений по очереди. Это особенно удобно, когда элементов много или их количество меняется: вместо набора почти одинаковых команд достаточно одного алгоритма.
В Паскале массив описывают в разделе переменных с помощью конструкции array. В ней указывают диапазон индексов, затем после of — тип элементов, например: a: array[1..10] of integer. Диапазон задаёт, какие номера разрешены, а тип сообщает, какие значения можно хранить. Эти сведения фиксируют заранее, чтобы программа могла отводить подходящее место и проверять использование массива.
К отдельному элементу обращаются, записывая имя массива и индекс в квадратных скобках: a[i]. Имя указывает, в каком массиве искать, а индекс выбирает конкретную ячейку. Поэтому при i = 4 выражение a[i] означает элемент a[4], а не весь массив. Если вместо индекса подставить другой допустимый номер, программа выберет другое значение.
Чтобы ввести или просмотреть все элементы, обычно используют цикл, в котором индекс последовательно меняется от нижней границы до верхней. На каждом повторении команда обращается к очередному элементу, например a[i]. Цикл избавляет от необходимости писать отдельную команду для каждой ячейки и уменьшает риск пропустить значение. Ту же схему применяют для изменения и проверки элементов.
Алгоритм обработки зависит от задачи, но часто строится как последовательный просмотр массива. Для суммы сначала задают накопителю значение 0, затем прибавляют к нему нужные элементы; для подсчёта заводят счётчик и увеличивают его, когда условие выполнено. Максимум или минимум находят сравнением: начальное значение берут из первого элемента, затем сравнивают с ним остальные и при необходимости обновляют результат. Отдельно можно сохранять индекс элемента, на котором найден новый максимум или минимум.
| Характеристика | Что задаётся или обозначается | Пример в Паскале |
|---|---|---|
| Имя массива | Идентификатор, под которым массив используется в программе | a |
| Диапазон индексов | Множество допустимых номеров элементов | 1..10 |
| Тип элементов | Общий тип данных всех значений массива | integer |
| Обращение к элементу | Имя массива и конкретный индекс | a[i] |
| Количество элементов | Число индексов в заданном диапазоне | 10 |
Сначала по таблице определите допустимые индексы и тип значений, а затем проверьте, как записывается обращение к одному элементу. Количество элементов диапазона от L до R включительно равно R − L + 1. Например, у диапазона 1..10 десять индексов.
Дан массив из 8 целых чисел. Нужно ввести значения и найти сумму тех из них, которые больше нуля. Просматриваем каждый элемент по очереди, но прибавляем к сумме не все значения, а только положительные. Для массива с индексами 1..8 решение можно построить так:
Проверка на простом примере помогает убедиться, что отрицательные числа не добавляются. Для массива 2, −3, 5, 0, −1, 4, −6, 1 сумма положительных значений равна 12. Ответ: сумма положительных элементов равна 12.
Дан массив из 10 целых чисел. Требуется найти наибольшее значение и его порядковый номер. Нельзя начинать поиск максимума с произвольного числа: если все значения окажутся меньше него, результат будет неверным. Поэтому за начальный максимум принимают первый элемент массива.
Индекс 1 уже использован как начальный кандидат, поэтому повторно сравнивать его не требуется. Например, если наибольшее значение стоит на пятом месте, программа сохранит max равным этому значению, а k равным 5. Ответ задачи — найденный максимум и его порядковый номер.
Дан массив из 12 целых чисел. Нужно подсчитать, сколько значений меньше среднего арифметического всех элементов. Сначала среднее ещё неизвестно, поэтому за один проход нельзя сразу надёжно посчитать подходящие элементы. Удобно сначала найти сумму, затем вычислить среднее и пройти массив второй раз.
Сравнение выполняется строго: элементы, равные среднему, не учитываются. Например, для значений 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12 среднее равно 6,5, и меньше него шесть элементов. Ответ: 6 элементов.
Обращение к элементу с индексом вне объявленного диапазона приводит к выбору несуществующего элемента. Так ошибаются, когда границы массива путают с количеством значений или неверно задают начало цикла. Проверьте, что каждый используемый индекс находится между объявленными границами включительно.
Попытка записать в массив данные разных типов нарушает его описание. Например, в массив целых чисел нельзя поместить вещественное значение как элемент того же типа без подходящего преобразования. Перед вводом и присваиванием сверяйте тип значения с типом, заданным после of.
Путаница между индексом и значением приводит к неверным условиям и вычислениям. В записи a[i] буква i обозначает номер, а всё выражение a[i] — значение элемента с этим номером. Чтобы проверить себя, произнесите запись словами: «значение массива a по индексу i».
Неправильная граница цикла может исключить первый или последний элемент массива. Это часто происходит, если цикл начинают не с нижней границы или заканчивают на единицу раньше верхней. Сопоставьте начало и конец цикла с описанием массива и отдельно проверьте обработку обоих крайних индексов.
Для работы с массивами нужны переменные, типы данных, присваивание, условия и циклы: без них нельзя задать и обработать элементы. Массивы применяют для последовательностей чисел, результатов измерений, оценок и других наборов однотипных данных. На этих же данных строят алгоритмы поиска и сортировки. Если значения расположены в строках и столбцах, используются таблицы и двумерные массивы.
Можно ли хранить в одном массиве целые числа и вещественные значения?
Нет, у всех элементов одного массива должен быть общий заранее заданный тип. Если нужны и целые, и вещественные значения, их обычно хранят в разных массивах или приводят к одному подходящему типу.
Почему индекс массива не всегда начинается с единицы?
Начальный и конечный индексы задаются в описании массива, поэтому первый индекс может быть, например, 0 или 1. Важно обращаться только к номерам, включённым в объявленный диапазон.
Чем отличается индекс элемента от значения элемента?
Индекс показывает положение элемента, а значение — данные, которые в нём хранятся. Например, в записи a[3] число 3 — индекс, а a[3] обозначает значение третьего элемента массива.
Как узнать количество элементов массива по его диапазону индексов?
Нужно вычесть нижнюю границу из верхней и прибавить единицу. Например, диапазон 1..10 содержит 10 элементов: 10 − 1 + 1 = 10.
Почему при обработке массива часто используют цикл for?
Цикл for удобно повторяет одни и те же действия для последовательных индексов. Если границы цикла совпадают с диапазоном массива, можно последовательно обработать каждый его элемент.
§ 18. Массивы в Паскале