Информатика
Глава 10. Описание языка Basic назад оглавление вперед

10.7. Массивы

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

Рассмотрим пример. Предположим, что в памяти ЭВМ каким-то образом получена (может быть, просто введена) последовательность 10 чисел. Пусть требуется найти максимальное из введенных чисел, а затем разделить каждый элемент последовательности на максимальный элемент.

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

Нужно, следовательно, каким-то образом запоминать значения, из которых выбирается максимальный элемент. Способ, который нам уже знаком,— использование переменных. Чтобы запомнить десять чисел, нужно десять различных переменных. Пусть это переменные A, B, C, D, E, F, G, H, S, T. Чтобы найти максимальное из этих значений (Р), нужно, положив вначале Р=А, сравнивать Р по очереди со всеми остальными переменным” и заменять Р. на новое значение, если значение очередной переменной больше Р (т. е. максимального из всех предшествующих). Программа, считая, что значения А, . . ., Т уже находятся в памяти, будет, например, иметь вид

……………………………..
P=A
IF B>P THEN P=B
IF C>P THEN P=C
IF D>P THEN P=D
………………………………

и т.д., пока не будут просмотрены все переменные.

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

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

Массив, вспоминая аналогию с ящиками, можно представить себе как несколько одинаковых ящиков, скрепленных вместе. На всю конструкцию как целое повешен один ярлык с именем массива (например, А). Все ящики в одной такой конструкции перенумерованы, начиная с 1. Ящики — это элементы массива. Номер ящика — значение индекса элемента массива (рис. 3.1). Чтобы получить доступ к нужному ящику, нужно указать имя массива и его индекс. Индекс записывается в круглых скобках после имени массива. Если нужно присвоить, например, значение 5 третьему элементу массива А, нужно написать

A (3)=5

Рис. 10.1.

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

A (1)=5
A (2)=5
A (3)=5
A (4)=5
A (5)=5

Индекс может быть переменной, поэтому то же самое можно выполнить и другим способом:

FOR I=1 TO 5
    A (I)=5
NEXT I

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

Имя массива образуется так же, как имя переменной (буква или буква и цифра). В Basic массивы могут быть одномерные и двумерные. В двумерном массиве каждый элемент идентифицируется номером строки и номером столбца, на пересечении которых он расположен. Положение элемента в массиве определяется индексами: одним — для одномерных массивов и двумя — для двумерных. При записи элемента массива индекс (индексы) записывается в круглых скобках после имени массива. Если индексов два, то они разделяются запятой. В качестве индексов могут употребляться любые арифметические выражения. Если значение арифметического выражения содержит дробную часть, то при определении индекса она отбрасывается. Появление отрицательного значения индекса вызывает сообщение об ошибке.

Переменные с индексами (элементы массива) могут употребляться в программе так же, как простые переменные (в левой части оператора присваивания, в арифметических выражениях и т. п.)

Под массивы, так же как и под переменные, машина должна выделять память. Вспомним, что под переменную одна ячейка памяти выделялась, как только эти переменная первый раз встречалась в программе. Для массивов такой способ не годится. Ведь машина должна выделить память сразу под весь массив. А при первом появлении переменной с индексом в программе еще не известно, сколько ячеек памяти требуется выделить под весь массив. Поэтому машина должна получить эту информацию отдельно. Ей нужно сообщить, какие массивы будут использованы в программе и каков размер каждого массива. Эта информация задается в операторе описания массивов DIM. В операторе DIM указываются имя массива и в круглых скобках верхние границы изменения индексов, которые должны быть целыми положительными числами (нижняя граница фиксирована и равна 1). В Basic могут использоваться массивы как числовые, так и символьные. Например; оператор

DIM A (3), B (4, 5), T$(12)

описывает два числовых массива: А, состоящий из трех элементов (А (1), А (2), А(3)), и В, содержащий 4 строки и 5 столбцов, и символьный массив Т$, состоящий из 12 элементов.

В соответствии с оператором DIM в памяти ЭВМ выделяется место для размещения этих массивов. Так, для массива А будут выделены три ячейки памяти, для массива В — двадцать ячеек, для массива Т$ — двенадцать ячеек памяти. Под двумерный массив выделяется линейный участок памяти, в котором массив располагается по строкам.

Описание массива должно появляться в программе до первого обращения к элементам этого массива. Для улучшения структуры программы описание всех массивов рекомендуется давать в начале программы.

Замечания.

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

2. В рассматриваемом варианте языка Basic фиксированное минимальное значение индексов равно 0 (а не 1, как указано выше), что является некоторым расширением возможностей языка по сравнению с используемым вариантом. Так, в соответствии с оператором DIM С (10), В (4, 5) машина всегда выделяет 11 и 30 ячеек памяти для размещения массивов С и В соответственно. Однако нумерация элементов с нуля для большинства задач неудобна и в дальнейшем изложении не используется. Все элементы массивов, имеющие индексы, равные нулю, будем далее игнорировать без дополнительных замечаний, т.е. будем считать, например, что в соответствии с описанием массивов

DIM C (10), B (4, 5)

массив С содержит десять элементов, массив В содержит четыре строки и пять столбцов.

В Basic не определены операции с массивами. Поэтому любая обработка массивов, а также ввод-вывод массивов осуществляется поэлементно.

Например, ввод одномерного массива А, содержащего 10 элементов, можно осуществить при помощи операторов

DIM A (10)
FOR I=1 TO 10
   INPUT A (I)
NEXT I

Ввод двумерного массива В размером 4х5 можно осуществить при помощи операторов

DIM B (4, 5)
FOR I=1 TO 4
  FOR J=1 TO 5
     INPUT B (I, J)
  NEXT J
NEXT I

При одном выполнении оператора INPUT вводится один элемент массива (после набора на клавиатуре значения очередного элемента массива нужно нажать клавишу ENTER).

Ввод двумерного массива в приведенной программе осуществляется по строкам.

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

DIM B (4, 5)
………………………
  FOR I=1 TO 4
    FOR J=1 TO 5
      PRINT B (I, J);
    NEXT J
    PRINT
  NEXT I

Элементы одной строки будут выводиться в плотном формате. Оператор PRINT осуществляет возврат каретки перед печатью новой строки.

Пример 10.12. В сессию 10 студентов одной группы сдали по 5 экзаменов. Результаты сессии представлены в виде матрицы М(10х5). Определить средний балл по каждому предмету. Результаты получить в виде одномерного массива С, содержащего 5 элементов.

Решение. Просуммируем элементы каждого столбца матрицы М и, разделив на число студентов, поместим результат в соответствующий элемент массива С (см. программу 10.12).

Для наглядности исходные данные задаются в программе в операторах DАТА. В одном операторе DАТА заданы оценки всех студентов по одному предмету, т. е. элементы одного столбца матрицы М. Ввод матрицы М осуществляется по столбцам.

Программа 10.12

DIM M(10,5) ,C(5)
DATA 5,4,5,3,4,3,3,3,4,4
DATA 5,5,3,5,3,4,5,4,5,4
DATA 3,4,5,3,4,5,3,3,3,3
DATA 4,4,4,4,4,5,4,4,3,3
DATA 4,3,3,3,5,4,3,3,5,5
FOR J=1 TO 5
  FOR I=1 TO 10
    READ M (I, J)
  NEXT I
NEXT J
FOR J=1 TO 5
  S=0
  FOR I=1 TO 10
    S=S+M (I, J)
  NEXT I
  C(J)=S/10
NEXT J
PRINT “ТАБЛИЦА СРЕДНИХ БАЛЛОВ ПО ЭКЗАМЕНАМ”
FOR I=1 TO 5
  PRINT C (I),
NEXT I
PRINT
END

ТАБЛИЦА СРЕДНИХ БАЛЛОВ ПО ЭКЗАМЕНАМ

3.8

4.3

3.6

3.9

3.8

 


назад оглавление вперед

 

Яндекс.Метрика