, ПДО по программированию и робототехнике

с. п. ЦТТ, КГБОУ ДОД ХКЦРТДиЮ

ИНФОРМАТИКА 9 -11 классы

МАССИВЫ. ОДНОМЕРНЫЕ МАССИВЫ


Хранение однотипных данных в виде таблицы

Массив – совокупность однотипных данных, хранящихся в последовательных ячейках памяти и имеющих общее имя. Ячейки называются элементами массива. Все элементы пронумерованы по порядку, и этот номер называется индексом элемента массива.

Все элементы массива имеют один и тот же тип. Сам массив при этом имеет имя – одно для всех элементов. Для обращения к конкретному элементу массива необходимо указать имя массива и (в квадратных скобках) индекс элемента.

Простейший вид массива – одномерный массив (рис. 1).

А

10

3

-8

14

25

12

10

1

1

2

3

4

5

6

7

8

Рис. 1. Условное изображение одномерного массива в виде строки

А – имя массива, числа в клетках таблицы – элементы массива.

Рассмотрим запись А [3] = - 8. В этой записи:

А – имя массива,

3 – номер элемента массива (индекс),

А [3] – обозначение 3-го элемента массива,

-8 – значение 3-го элемента массива.

2. Основные действия по работе с массивами

Распространенные действия с массивами:

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

Далее рассмотрим более подробно некоторые действия с блок-схемами, примерами и заданиями.

2.1. Описание массива на языке Паскаль

<Имя массива>:array [<тип индекса>] of  <тип компонентов>

НЕ нашли? Не то? Что вы ищете?

Здесь <тип компонентов> - это тип данных, который имеет каждый элемент массива, а <тип индекса> - границы изменения индекса.

Например: Var A: array [1..10] of integer;

Здесь тип индекса – интервальный, изменяется в интервале от 1 до 10, тип данных (элементов массива) – целый.

2.2. Заполнение массива случайными числами и

вывод массива на экран

Рассмотрим задачу, в которой требуется с помощью датчика случайных чисел создать одномерный массив и вывести его на экран. Блок-схема алгоритма показана на рис.2.


Рис. 2. Блок-схема алгоритма заполнения одномерного массива

случайными числами и вывода массива на экран

Пример 1. Основные действия по работе с массивами

Program Massiv1;

uses Crt;

const  {I. Раздел описания констант, т. е. постоянных величин,

  определяемых в программе заранее и не изменяющихся по ходу

  выполнения программы}

N=10;  {Имена констант не используются для имен переменных величин

  (из раздела var)}

Var

A: array [1..N] of integer;  {1..N – тип индекса. Для индекса выбран интервальный тип, 

  т. е. интервал целых чисел от 1 до N, где N определено в разделе  const}

i: integer;  {Переменная, хранящая индекс элемента массива,

  к которому идет обращение}

Begin

{II. Задание значений элементов массива как случайных чисел}

Randomize;  {Инициализация датчика случайных чисел}

{Задание элементов массива}

For i:=1 to N do  {Переменная i изменяется в цикле от 1 до N, т. е. мы

  по очереди перебираем все элементы массива}

A[i]:=Random(100);  {В очередной элемент массива A[i] записываем случайное число

  от 0 до 99. Обратите внимание: i – номер элемента массива (принято

  говорить «индекс»), A[i] – значение элемента массива}

{III. Вывод элементов массива на экран в одну строку}

ClrScr;

Writeln (‘Введенный массив’);

For i:=1 to N do

Write (a[i]:4);  {На каждый элемент массива выделяется по 4 позиции строки

  чтобы они не склеивались при выводе!}

writeln;  {Этот «пустой» оператор вывода отработает только один раз и 

  переведет курсор на новую строку для дальнейшей работы}

readln

end.

В данном примере, мы заполнили массив случайными числами от 0 до 99. Это обеспечила нам функция random(100). А если нам нужно получить случайные числа в другом диапазоне – например, не от нуля? Расчет нужно сделать такой: функция random(N) выдаст N различных чисел от 0 до N-1. Если нам нужно, чтобы наименьшим числом диапазона было K, значит, необходимо прибывать это K к random(N). Наибольшее число, которое будет выдавать в этом случае формула random(N)+K, будет наибольшим числом диапазона.

Задание 1.1. Оформите эту программу (пример 1) так, чтобы задание массива и вывод его элементов на экран выполнялись в одном цикле. Вам понадобится составной оператор для тела цикла begin…end.

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

2.3. Заполнение массива с клавиатуры

В следующем примере массив описывается в новом разделе – разделе описания типов пользователя (type). Вариант описания массива, приведенный в примере 2, в большей степени соответствует грамотному стилю оформления программы.

Пример 2. Ввод с клавиатуры одномерного массива целых чисел и вывод его элементов на экран с противоположным знаком.

Program Massiv2;

const

N=10;

type  {Раздел описания типов переменных. Эти типы определяет сам 

  пользователь, т. е. мы определяем тип одномерного массива из n целых

  чисел}

Mas=array [1..N] of integer;  {1..N – тип индекса. Для индекса выбран интервальный

  тип т. е. интервал целых чисел от 1 до N, где N определено в разделе 

  const}

Var

Line: Mas; {Line-одномерный массив, его тип определен нами как Mas}

i: integer;  {Переменная, хранящая индекс элемента массива,

  к которому идет обращение}

Begin

{IV. Ввод массива с клавиатуры}

For i:=1 to N do  {Обращение к элементам массива происходит в цикле, по 

  очереди}

Begin  {Начало цикла ввода элементов массива}

Write (‘Введите элемент с индексом’, i, ‘:’);

Readln (Line[i]) {Обращаемся к i-му элементу массива (Line[1], Line[2] и т. д.}

end; {Конец цикла ввода элементов массива}

{Вывод элементов происходит также в цикле:}

For i:=1 to N do  {Перебираем все N элементов массива}

Write (-Line[i]:5);  {10 элементов выводятся в строку.

  Выводим все элементы массива с противоположным знаком}

writeln;  {После вывода массива элементов – переход на новую строку}

readln

end.

Задание 2.1. Выполните следующие действия:

- создать одномерный массив А из 10 целых чисел (с помощью датчика случайных чисел);

- вывести массив на экран в виде строки чисел;

- подсчитать сумму элементов массива (блок-схема алгоритма показана на рис. 3);

- вывести сумму на экран.

Рис. 3. Блок-схема алгоритма вычисления суммы

элементов одномерного массива

2.4. Поиск максимального элемента массива

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

Пример 3. Программа поиска максимального элемента в массиве и его индекса (см. блок-схему алгоритма на рис. 4).

Program Maximum;

const N=10;

Mas=array [1..N] of integer; 

Var

A: Mas;

i: integer;  {Счетчик цикла}

Max: integer;  {Переменная для хранения величины максимального элемента}

Imax: integer;  {Переменная для хранения индекса максимального элемента}

Begin  {Тело программы}

{Заполним элементы массива значениями датчика случайных чисел и выведем весь

полученный массив на экран в одном цикле}

Randomize;

For i:=1 to N do

Begin

A[i]:=-50+Random(101);

Write (A[i]:5)

End;

Writeln;

{V. Поиск максимального элемента и его индекса в массиве}

Imax: =1;  {Сначала считаем, что первый элемент массива и есть максимальный}

Max: =A[1];  {Его индекс и величину записываем соответственно в переменные

  Imax и  Max}

For i:=2 to N do {Сравним нашего кандидата в максимумы со всеми остальными

  элементами массива (со второго до последнего)}

if Max < A[i] then {Если наш кандидат в максимумы оказался меньше текущего

  элемента…}

Begin

Max: =A[i];  {…то будем считать теперь кандидатом в максимумы

  текущий элемент}

Imax: =i  {Запомним его значение и индекс в переменных Imax и Max}

End;

Writeln (‘Максимальный элемент в массиве =’, Max:5);

Writeln (‘Его индекс = ‘, Imax:5);

Readln

End.

Рис. 4. Блок-схема алгоритма поиска максимального элемента

массива и его индекса

Замечание: в процессе поиска максимума не обязательно хранить обе величины – номер максимума и его значение. Достаточно хранить одну, в зависимости от поставленной задачи.

Задание 3.1. Выполните поиск максимального и минимального элемента в массиве за один цикл (блок-схема алгоритма показана на рис.5).

Задание 3.2. В одномерном массиве из 10 элементов определить местоположение минимального элемента. Обнулить элементы, стоящие до него, но не сам этот элемент. (Обнулить – значит  записать 0 на место элемента, т. е. выполнить A[i]:=0). Измененный массив вывести на экран.

Рис. 5. Блок-схема алгоритма поиска индексов  максимального и

минимального элементов массива за один цикл

Задание 3.3. В одномерном массиве из 10 элементов определить местоположение минимального и максимального элементов. Обнулить элементы, стоящие между ними, а также сами эти элементы.

Контрольные вопросы

Продолжите предложение и ответьте на вопросы:

а) Массив – это …

б) Одномерный массив имеет следующие действия: …

в) Способ описания элементов массива через раздел констант:

г) Как называется параметр, определяющий место элемента в массиве?

д) Сколько элементов в массиве A=2, -2, 2, -2, 2?

е) Доступ  элементу массива осуществляется по ….