Типовые
задачи обработки одномерных числовых массивов
Массив
— это структура данных, предназначенная для хранения однородной информации.
Объясним.
Рассмотрим
задачу: «Известен рост 20 человек. Определить
среднее значение роста».
Для
решения можно в программе использовать 20 переменных величин: р1, р2, …, р20
—
и, обращаясь к каждой из них по имени, найти сумму значений роста, а затем
среднее значение. Но такой вариант неудобен в случаях, когда количество
значений роста большое, и невозможен, когда это количество на момент написания
программы неизвестно.
Можно
найти сумму так :
сумма := 0
нц для i от 1 до n
вывод нс, "Введите
значение роста очередного человека"
ввод р
сумма := сумма + р
кц
Однако
если нужно определить, сколько человек имеют рост больше среднего, то
придется после расчета среднего роста повторно вводить в программу 20 значений.
Это нецелесообразно. Желательно сохранить все введенные значения, а потом их
использовать для расчетов. Для этого в программе и нужно использовать
массив. Массив позволяет использовать для всех 20 значений роста общее имя
Рост. Для всех семи цветов радуги можно использовать массив с именем Радуга.
Обратим
внимание на то, что в начале статьи использовано слово «однородной». Под
однородной информацией понимается информация одного типа (числовая, текстовая и
т.д.) об объектах, одинаковых по смыслу. Например, информацию о весе тех же 20
человек хранить в одном массиве со значениями роста нецелесообразно — её
следует хранить в другом массиве1.
В
языке программирования Паскаль в таких случаях можно использовать один массив
данных типа «запись».
Каждое
отдельное значение массива называется «элемент массива». Элементы массива при
хранении массива в памяти имеют уникальные порядковые номера –
«индексы» (нумерация непрерывная). Чтобы обратиться в программе к значению
некоторого элемента массива, надо указать имя массива и в квадратных скобках —
индекс элемента.
Например:
вывод
нс, Радуга[3]
вывод
нс, Радуга[k]
если
Рост[13] > Рост[12]
то
…
Для
каждой рассмотренной задачи приведен фрагмент программы ее решения на
школьном алгоритмическом языке. Использованы следующие основные величины:
а
— имя массива;
n
— общее количество элементов массива (условно принято, что нумерация элементов массива
начинается с 1).
Смысл
остальных величин можно легко определить по их именам.
Принято,
что массив описан и заполнен значениями.
1.
Нахождение суммы всех элементов массива
сумма
:= 0
нц
для i от 1 до n
сумма := сумма + а[i]
кц
|Вывод
результата или использование его в расчетах
…
Пример.
В массиве записана масса каждого из n предметов, загружаемых в автомобиль.
Определить
общую массу груза.
Решение:
сумма
:= 0
нц
для i от 1 до n
сумма := сумма + а[i]
кц
вывод
нс, "Общая масса всех предметов равна ", сумма
2.
Нахождение суммы элементов массива с заданными свойствами
(удовлетворяющих
некоторому условию)
сумма
:= 0
нц
для i от 1 до n
если <условие>
то
сумма := сумма + а[i]
все
кц
|Вывод
результата или использование его в расчетах
…
Примечание.
Здесь условие в условном операторе (команде если) может определяться
значением
элемента массива а[i] либо его индексом i.
3.
Нахождение количества элементов массива с заданными свойствами
количество
:= 0
нц
для i от 1 до n
если <условие>
то
количество := количество + 1
все
кц
|Вывод
результата или использование его в расчетах
…
Примечание.
В данном случае условие в условном операторе (команде если)
определяется значением элемента массива а[i]. Количество элементов, зависящих
от значения индекса i, может
быть
найдено без использования оператора цикла (убедитесь в этом!).
4.
Нахождение среднего арифметического значения элементов массива с
заданными свойствами
сумма
:= 0
количество
:= 0
нц
для i от 1 до n
если <условие>
то
сумма := сумма + а[i]
количество := количество + 1
все
кц
|Подсчет
результата
среднее_арифметическое
:= сумма / количество
|Вывод
результата или использование его в расчетах
…
Обращаем
внимание на то, что многократно определять значение
среднее
арифметическое в «теле» условного оператора (команды если) необходимости
нет. Это можно сделать один раз после окончания оператора цикла. Однако может
оказаться, что чисел, удовлетворяющих заданному условию, в массиве не окажется.
В этом случае при расчете будет иметь место деление на ноль, что недопустимо.
Правильное оформление:
…
|Подсчет
и вывод результата
если
количество > 0
то
среднее_арифметическое := сумма/количество
вывод нс, "Среднее арифметическое: ", среднее_арифметическое
иначе
вывод нс, "Чисел, удовлетворяющих условию, в массиве нет"
все
5.
Изменение значений элементов массива с заданными свойствами
нц
для i от 1 до n
если <условие>
то
а[i] := …
все
кц
6.
Вывод на экран элементов массива с заданными свойствами
вывод
нс, "Элементы массива, удовлетворяющие условию: "
нц
для i от 1 до n
если <условие>
то
вывод а[i], " "
все
кц
Приведенный
фрагмент имеет один недостаток — если в массиве нет элементов,
удовлетворяющих
заданному условию, то первая команда вывод будет излишней.
Необходимо
предварительно определить количество чисел в массиве с заданными свойствами
(см.
задачу 3), а затем оформить фрагмент в виде:
если
количество > 0
то
вывод нс, "Элементы массива, удовлетворяющие условию: "
нц для i от 1 до n
если <условие>
то
вывод а[i], " "
все
кц
иначе
вывод нс, "Чисел, удовлетворяющих условию, в массиве нет"
все
7.
Нахождение номеров (индексов) элементов массива с заданными свойствами
Оставьте свой комментарий
Авторизуйтесь, чтобы задавать вопросы.