§ 2.2. Одномерные массивы целых чисел

Информатика 9 класс Босова § 2.2. Одномерные массивы целых чисел

§ 2.2. Одномерные массивы целых чисел

Информатика. 9 класса. Босова Л.Л. Оглавление


Ключевые слова:

  • массив
  • описание массива
  • заполнение массива
  • вывод массива
  • обработка массива
  • последовательный поиск
  • сортировка

До сих пор мы работали с простыми типами данных. При решении практических задач данные часто объединяются в различные структуры данных, например в массивы. В языках программирования массивы используются для реализации таких структур данных, как последовательности1 (одномерные массивы) и таблицы (двумерные массивы).

  • 1 Например, числовые последовательности в математике.

Упорядоченное множество однотипных переменных (элементов массива), которым можно присвоить общее имя, различающихся номерами (индексами), называют массивом.

Мы будем рассматривать одномерные массивы.

Решение разнообразных задач, связанных с обработкой массивов, базируется на использовании таких типовых алгоритмов, как:

  • суммирование значений элементов массива;
  • поиск элемента с заданными свойствами;
  • сортировка массива.

Описание массива целых чисел

Перед использованием в программе массив должен быть описан, т. е. должно быть указано имя массива, количество элементов массива и их тип. Это необходимо для того, чтобы выделить участок памяти нужного размера для хранения массива. Общий вид описания одномерного массива:

var <имя_массива>: array [<мин_знач_индекса> ..
<макс_знач_индекса>] of <тип_элементов>;

Пример

var a: array [1..10] of integer;

Здесь описан массив а из 10 целочисленных значений. При выполнении этого оператора в памяти компьютера будет выделено место для хранения десяти целочисленных переменных.

Массив, элементы которого имеют заданные начальные значения, может быть описан в разделе описания констант:

const b: array [1..5] of integer = (1, 2, 3, 5, 7);

В этом случае не просто выделяются последовательные ячейки памяти — в них сразу же заносятся соответствующие значения.

Заполнение массива

Заполнять массив можно либо вводя значение каждого элемента с клавиатуры, либо присваивая элементам некоторые значения в программе. При этом может использоваться цикл с параметром.

Например, для ввода с клавиатуры значений элементов описанного выше массива а используется следующий цикл с параметром:

for i:=1 to 10 do read (a[i])’;

Задавать значения элементов массива можно с помощью оператора присваивания. Например:

for i:=1 to 10 do a[i] :=i;

В следующем фрагменте программы организовано заполнение целочисленного массива а, состоящего из 10 элементов, случайными числами, значения которых изменяются в диапазоне от 0 до 99:

randomize;
for i:=1 to 10 do a[i]:=random(100);

Вывод массива целых чисел

Во многих случаях бывает полезно вывести значения элементов массива на экран. Так, если значения массива генерировались случайным образом, то необходимо знать, каков исходный массив. Также нужно знать, каким стал массив после обработки.

Значения элементов массива можно вывести в строку, разделив их пробелом:

for i:=1 to 10 do write (a[i], ‘ ‘);

Более наглядным является следующий вариант вывода с комментариями:

for i:=1 to 10 do writeln (‘a[‘, i, ‘] = ‘ , a[i]);

На основании рассмотренных примеров запишем программу, в которой осуществляется: заполнение целочисленного массива а, состоящего из 10 элементов, случайными числами, значения которых изменяются в диапазоне от 0 до 99; вывод массива а на экран.

§ 2.2. Одномерные массивы целых чисел

Вычисление суммы элементов массива

Пример. В некотором населённом пункте n домов. Известно, сколько людей проживает в каждом из домов. Составим алгоритм подсчёта количества жителей населённого пункта.

Исходные данные (количество жильцов) здесь представлены с помощью одномерного массива а, содержащего n элементов: а[1] — количество жильцов дома 1, а[2] — количество жильцов дома 2, …, а[n] — количество жильцов дома n. В общем случае a[i] — количество жильцов дома i, где i принимает целочисленные значения от 1 до  Результат работы алгоритма обозначен через s.

§ 2.2. Одномерные массивы целых чисел

Суммирование элементов массива осуществляется по тому же принципу, что и суммирование значений простых переменных: за счёт поочерёдного добавления слагаемых:

  • 1) определяется ячейка памяти (переменная а), в которой будет последовательно накапливаться результат суммирования;
  • 2) переменной s присваивается начальное значение 0 — число, не влияющее на результат сложения;
  • 3) для каждого элемента массива из переменной s считывается её текущее значение и складывается со значением элемента массива; полученный результат присваивается переменной а.

Описанный процесс наглядно можно изобразить так:

§ 2.2. Одномерные массивы целых чисел

Запишем соответствующую программу на языке Паскаль.

§ 2.2. Одномерные массивы целых чисел

Сравните программы n_2 и n_3. Выделите в них общие блоки. Обратите внимание на различия.

Последовательный поиск в массиве

В программировании поиск — одна из наиболее часто встречающихся задач невычислительного характера.

Можно выделить следующие типовые задачи поиска:

  • 1) найти наибольший (наименьший) элемент массива;
  • 2) найти элемент массива, значение которого равно заданному значению.

Для решения таких задач в программе необходимо организовать последовательный просмотр элементов массива и сравнение значения очередного просматриваемого элемента с неким образцом.

§ 2.2. Одномерные массивы целых чисел

Рассмотрим подробно решение задач первого типа: нахождение наибольшего (наименьшего) элемента.

Представим себе одномерный массив в виде стопки карточек, на каждой из которых написано число. Тогда идея поиска наибольшего элемента массива может быть представлена следующим образом:

  • 1) возьмём верхнюю карточку (первый элемент массива), запомним имеющееся на карточке число (запишем его мелом на доске) как наибольшее из просмотренных; уберём карточку в сторону;
  • 2) возьмём следующую карточку; сравним числа, записанные на карточке и на доске; если число на карточке больше, то сотрём число, записанное на доске, и запишем там то же число, что и на карточке; если же новое число не больше, то на доске оставим имеющуюся запись; уберём карточку в сторону;
  • 3) повторим действия, описанные в п. 2, для всех оставшихся карточек в стопке.

В итоге на доске будет записано самое большое значение элемента просмотренного массива. Так как доступ к значению элемента массива осуществляется по его индексу, то при организации поиска наибольшего элемента в одномерном массиве можно искать его индекс. Обозначим искомый индекс imax. Тогда описанный выше алгоритм в сформированном нами массиве а на языке Паскаль можно записать так:

§ 2.2. Одномерные массивы целых чисел

Если в массиве несколько элементов, значения которых равны максимальному значению, то данная программа найдёт первый из них (первое вхождение). Подумайте, что следует изменить в программе, чтобы в ней находился последний из максимальных элементов. Как следует преобразовать программу, чтобы с её помощью можно было найти минимальный элемент массива?

Результатом решения задачи второго типа (нахождение элемента массива, значение которого равно заданному значению) может быть:

  • n — индекс элемента массива такой, что а[n] = х, где х — заданное число;
  • сообщение о том, что искомого элемента в массиве не обнаружено.

Сортировка массива целых чисел

Под сортировкой (упорядочением) массива понимают перераспределение значений его элементов в некотором определённом порядке.

Порядок, при котором в массиве первый элемент имеет самое маленькое значение, а значение каждого следующего элемента не меньше значения предыдущего элемента, называют неубывающим.

Порядок, при котором в массиве первый элемент имеет самое большое значение, а значение каждого следующего элемента не больше значения предыдущего элемента, называют невозрастающим.

Цель сортировки — облегчить последующий поиск элементов: искать нужный элемент в упорядоченном массиве легче.

Вы уже встречались с сортировкой при работе с базами данных. Сейчас мы рассмотрим один из возможных вариантов1 реализации механизма этой операции — сортировку выбором.

  • 1 С другими способами сортировки вы познакомитесь на уроках информатики в 10-11 классах.

Сортировка выбором (например, по невозрастанию) осуществляется следующим образом:

  • 1) в массиве выбирается максимальный элемент;
  • 2) максимальный и первый элементы меняются местами (первый элемент считается отсортированным);
  • 3) в неотсортированной части массива снова выбирается максимальный элемент; он меняется местами с первым неотсортированным элементом массива;
  • 4) действия, описанные в п. 3, повторяются с неотсортированными элементами массива до тех пор, пока не останется один неотсортированный элемент (его значение будет минимальным).

Рассмотрим процесс сортировки выбором на примере массива а = {0, 1, 9, 2, 4, 3, 6, 5}.

§ 2.2. Одномерные массивы целых чисел

В этом массиве из восьми элементов операцию выбора максимального элемента мы проводили 7 раз. В массиве из n элементов такая операция будет проводиться n-1 раз. Объясните почему.

Приведём фрагмент программы, реализующий описанный алгоритм:

for i:=l to n-1 do
begin
imax:=i;
for j:=i+1 to n do if a[j]>a[imax] then imax:=j;
x:=a[i];
a[i]:=a[imax];
a[imax]:=x
end;

Здесь мы использовали один цикл внутри другого. Такая конструкция называется вложенным циклом.

Запишите полный текст программы и выполните её на компьютере для рассмотренного в примере массива а.

На сайте «Интерактивные демонстрации по программированию» (http://informatika.kspu.ru/flashprog/demos.php) вы сможете поработать с интерактивными наглядными пособиями для того, чтобы более полно представить процесс сортировки выбором и другими способами.


САМОЕ ГЛАВНОЕ

Массив — это поименованная совокупность однотипных элементов, упорядоченных по индексам, определяющим положение элементов в массиве. В языках программирования массивы используются для реализации таких структур данных, как последовательности и таблицы. Перед использованием в программе массив должен быть описан. Общий вид описания одномерного массива: var <имя_массива>: array [<мин_знач_индекса> ..
<макс_знач_индекса>] of тип_элементов;

Заполнять массив можно либо вводя значение каждого элемента с клавиатуры, либо присваивая элементам некоторые значения в программе. При заполнении массива и его выводе на экран используется цикл с параметром.

При решении разнообразных задач, связанных с обработкой массивов, используются такие типовые алгоритмы, как: суммирование элементов массива; поиск элемента с заданными свойствами; сортировка массива.


Вопросы и задания к § 2.2. Одномерные массивы целых чисел

1. Ознакомьтесь с материалами презентации к параграфу, содержащейся в электронном приложении к учебнику. Какими слайдами вы могли бы дополнить презентацию?

2. Может ли массив одновременно содержать целые и вещественные значения?

3. Для чего необходимо описание массива?

4. Что вы можете сказать о массиве, сформированном следующим образом? а) for i:=1 to 10 do а[i]:=random(101)-50; б) for i:=1 to 20 do a[i]:=i; в) for i:=1 to 5 do a[i]:=2*i-l;

5. Запишите на языке Паскаль программу решения задачи, рассмотренной в примере 21 § 3.4. Считайте количество жильцов дома случайным числом из диапазона от 50 до 200 человек, а число домов n = 30.

6. Напишите программу, которая вычисляет среднюю за неделю температуру воздуха. Исходные данные вводятся с клавиатуры.

7. Дан массив из десяти целых чисел. Определите, сколько элементов этого массива имеют максимальное значение.

8. В классе 20 учеников писали диктант по русскому языку. Напишите программу, подсчитывающую количество двоек, троек, четвёрок и пятёрок, полученных за диктант.

9. В целочисленных массивах а и b содержатся длины катетов десяти прямоугольных треугольников (a[i] — длина первого катета, b[i] — длина второго катета i-ro треугольника). Найдите треугольник с наибольшей площадью. Выведите его номер, длины катетов и площадь. Предусмотрите случай, когда таких треугольников несколько.

10. Занесите информацию о десяти европейских странах в массивы n (название страны), к (численность населения), s (площадь страны). Выведите названия стран в порядке возрастания плотности их населения.


§ 2.1. Решение задач на компьютере

§ 2.2. Одномерные массивы целых чисел

§ 2.3. Конструирование алгоритмов