|
§ 62. МассивыМассивы Что такое массив? Основное предназначение современных компьютеров — обработка большого количества данных. При этом надо как-то обращаться к каждой из тысяч (или даже миллионов) ячеек с данными. Очень сложно дать каждой ячейке собственное имя и при этом не запутаться. Из этой ситуации выходят так: дают имя не ячейке, а группе ячеек, в которой каждая ячейка имеет собственный номер. Такая область памяти называется массивом. Массив — это группа переменных одного типа, расположенных в памяти рядом (в соседних ячейках) и имеющих общее имя. Каждая ячейка в массиве имеет уникальный номер. Для работы с массивами нужно в первую очередь научиться: - выделять память нужного размера под массив; - записывать данные в ячейку массива; - читать данные из ячейки массива. Чтобы использовать массив, надо его объявить: определить тип массива (тип входящих в него элементов), выделить место в памяти и присвоить имя. Имена массивов строятся по тем же правилам, что и имена переменных. В школьном алгоритмическом языке массивы называются таблицами. При их объявлении к названию типа данных добавляется слово таб: целтаб А[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.Как обращаются к элементу массива! 5.Могут ли индексы элементы массива начинаться с 0? С -5? 6.Почему размер массива лучше вводить как константу, а не как число? 7.Как ввести массив и вывести его на экран? 8.Как заполнить массив случайными числами в диапазоне от 100 до 200?
Подготовьте сообщение а) Массивы в языке СИ б) «Списки и словари в языке Python |
|