Массивы
Что такое массив?
Основное предназначение современных компьютеров — обработка большого количества данных. При этом надо как-то обращаться к каждой из тысяч (или даже миллионов) ячеек с данными. Очень сложно дать каждой ячейке собственное имя и при этом не запутаться. Из этой ситуации выходят так: дают имя не ячейке, а группе ячеек, в которой каждая ячейка имеет собственный номер. Такая область памяти называется массивом.
Массив — это группа переменных одного типа, расположенных в памяти рядом (в соседних ячейках) и имеющих общее имя. Каждая ячейка в массиве имеет уникальный номер.
Для работы с массивами нужно в первую очередь научиться:
- выделять память нужного размера под массив;
- записывать данные в ячейку массива;
- читать данные из ячейки массива.
Чтобы использовать массив, надо его объявить: определить тип массива (тип входящих в него элементов), выделить место в памяти и присвоить имя. Имена массивов строятся по тем же правилам, что и имена переменных.
В школьном алгоритмическом языке массивы называются таблицами. При их объявлении к названию типа данных добавляется слово таб:
целтаб А[1:5]
вещтаб V[0:5]
логтаб L[-5:5]
симяаб S[65:90]
В квадратных скобках через двоеточие записываются границы индексов — номеров ячеек массива. В приведённом примере массив А — это массив целых значений, ячейки имеют номера от 1 до 5. Массив вещественных значений V содержит 6 элементов с номерами от нуля до 5. В логическом массиве L ячейки нумеруются от -5 до 5, а в символьном массиве S — от 65 до 90. В школьном алгоритмическом языке объявлять массивы (как и переменные) можно в любом месте программы.
В языке Паскаль массивы объявляются в блоке объявления переменных (выше ключевого слова begin) и начинаются ключевым словом array (в переводе с англ. — массив). Объявления, аналогичные приведённым на школьном алгоритмическом языке, выглядят так:
var A: array[1..5] of integer;
V: array[0..5] of real;
L: array[-5..5] of boolean;
S: array[65..90] of char;
Минимальный и максимальный индексы разделяются двумя
Для того чтобы обратиться к элементу массива, нужно записать имя массива и в квадратных скобках — индекс нужного
Нумерация с нуля часто используется в языках программирования, например в языке Си и родственных ему языках.элемента, например А[3]. Индексом может быть не только число, но значение целой переменной или арифметического выражения целого типа.
В следующем примере массив заполняется квадратами первых натуральных чисел:
алг Массив program qq;
нач const н=Ю;
цел i, N=10 var A: array[l..N] of integer;
целтаб A[1:N] i: integer;
нц для i от 1 до Ы begin
A[i):=i*i for i:=l to N do
кц A[i]:=i*i;
кон end. T
В школьном алгоритмическом языке можно при объявлении массива указывать вычисляемые границы индексов, зависящие от переменных. В данном случае массив А состоит из 10 элементов, потому что к моменту его объявления в переменной N было число 10.
В Паскале при объявлении границ индексов массивов можно использовать константы — постоянные величины, имеющие имя. В приведённом примере с помощью ключевого слова const объявлена константа N, равная 10. Константы обычно вводятся выше блока объявления переменных. Использование констант очень удобно, потому что, при изменении размера массива в программе нужно поменять только одно число — значение этой константы.
Далее во всех примерах мы будем считать, что в программе объявлен целочисленный массив А с индексами от 1 до N, а также целочисленная переменная i, которая будет обозначать индекс элемента массива. Чтобы ввести такой массив или вывести его на экран, нужно использовать цикл, т. е. ввод и вывод массива выполняется поэлементно:
нц для i от 1 до N for i:=l to N do begin
вывод 'А[' , i, '] =' write('A[',i,'] = ');
ввод A[i] read(A[i])
кц end;
нц для i от 1 до N for i:=l to N do
вывод A[i], ' ' write(A[i],' ');
В этом примере перед вводом очередного элемента массива на экран выводится подсказка. Например, при вводе 3-го элемента будет выведено: А[3]=. После вывода каждого элемента ставится пробел, иначе все значения сольются в одну строку.
В учебных примерах массивы часто заполняют случайными числами:
нц для 1 от 1 до N for i:=l to N do begin
A[i]:=irand(20,100) A[i]:=20+randora(81);
вывод А[i], ' ' write(A[i], ' ')
кц end;
Перебор элементов
Перебор элементов состоит в том, что мы в цикле просматриваем все элементы массива и, если нужно, выполняем с каждым из них некоторую операцию. Для этого удобнее всего использовать цикл с переменной, которая изменяется от минимального до максимального индекса. Для массива, элементы которого имеют индексы от 1 до N, цикл выглядит так:
нц для i от 1 до N for i: = 1 to N do begin
кц end;
Здесь вместо многоточия можно добавлять операторы, работающие с элементом A[i].
Во многих задачах нужно найти в массиве все элементы, удовлетворяющие заданному условию, и как-то их обработать. Простейшая из таких задач — подсчёт нужных элементов. Для решения этой задачи нужно ввести переменную-счётчик, начальное значение которой равно нулю. Далее в цикле (от 1 до N) просматриваем все элементы массива. Если для очередного элемента выполняется заданное условие, то увеличиваем счётчик на 1. На псевдокоде этот алгоритм выглядит так:
Счётчик:=0
нц для i от 1 до N
если условие выполняется для А[i] то
счётчик:=счётчик+1
все
кц
Предположим, что в массиве А записаны данные о росте игроков баскетбольной команды (в сантиметрах). Найдем количествоигроков, рост которых больше 180 см, но меньше 190 см. В следующей программе используется переменная-счётчик count:
> |
цел count=0 count:=0;
нц для i от 1 до N for i:=l to N do
если 180<A[i] if (180<A[i])
и A[i]<190 то and (A[i]<190)
count:=count+l then count:=count+l;
все
кц
Теперь усложним задачу: требуется найти средний рост этих игроков. Для этого в отдельной переменной будем складывать все нужные значения, а после завершения цикла разделим эту сумму на количество найденных элементов. Начальное значение переменной sum, в которой накапливается сумма, тоже должно быть равно нулю.
цел count=0, sum=0 count:=0; sum:=0;
нц для i от 1 до N for i:=l to N do
если 180<A[i] if (180<A[i))
и A[i]<190 то and (A[i]<190)
count:=count+l then begin
sum:=sum+A[i] count:=count+l
все sum:=sum+A[i]
кц end;
write(sum/count);
Вопросы и задания
1.Что такое массив? Зачем нужны массивы?
2.Зачем нужно объявлять массив?
3.Как объявляются массив?
4. Как вы думаете, почему элементы массива расположены в памяти компьютера рядом?
4.Как обращаются к элементу массива!
5.Могут ли индексы элементы массива начинаться с 0? С -5?
6.Почему размер массива лучше вводить как константу, а не как число?
7.Как ввести массив и вывести его на экран?
8.Как заполнить массив случайными числами в диапазоне от 100 до 200?
Подготовьте сообщение
а) Массивы в языке СИ
б) «Списки и словари в языке Python