Электронный учебник

§ 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 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  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

Block title

Вход на сайт

Поиск

Календарь

«  Декабрь 2024  »
ПнВтСрЧтПтСбВс
      1
2345678
9101112131415
16171819202122
23242526272829
3031

Архив записей

Статистика


Онлайн всего: 26
Гостей: 26
Пользователей: 0