ВУЗ: Нижегородский государственный технический университет
Категория: Учебное пособие
Дисциплина: Информатика
Добавлен: 23.10.2018
Просмотров: 5129
Скачиваний: 18
51
3.5.Программирование задач на одномерные и
двумерные массивы. Введение
В предыдущем разделе были рассмотрены основные принципы работы с
простыми переменными, характеризующимися тем, что имеют определенное
имя и занимают в памяти ЭВМ одну условную ячейку.
В действительности число элементарных ячеек - бит, занимаемых пере-
менной, зависит от ее типа (целая, вещественная, расширенная целая, расши-
ренная вещественная) и от разрядности ЭВМ. Но для простоты будем считать,
что простая переменная занимает в памяти одну условную поименованную
ячейку.
В отличие от простых индексированные переменные занимают в памяти
ЭВМ несколько ячеек, имеющих одно и то же имя, но разные номера (индек-
сы). Индексом может быть целое положительное число либо переменная целого
типа (имя которой начинается с букв i, j, k, l, m, n). При изображении индекси-
рованной переменной на блок-схеме индексы записываются подстрочным
шрифтом, например, x
i
, a
12
и т.д. В программе индексы записываются после
имени переменной в скобках, если имеется два индекса, то они разделяются за-
пятой, например, x(i), a(1,2) и т.д.
Совокупность индексированных переменных, имеющих одно имя, назы-
вается массивом. В зависимости от наличия у индексированной переменной
одного или двух индексов, различают одномерный или двумерный массивы. На
рисунке приведен пример организации в памяти ЭВМ простых переменных и
массивов.
Память компьютера не безгранична, поэтому в отличие от простых пере-
менных при работе с массивами необходимо прежде всего зарезервировать
нужное число ячеек памяти. Для каждого массива это число определяется его
размерностью - общим количеством элементов. Описание оператора, осуществ-
ляющего резервирование места в памяти, а также других необходимых для ра-
боты с массивами операторов, приводится далее.
52
Простые переменные
Двумерный массив а(4,4)
ira
v1 y
a11 a12 a13 a14
a21 a22 a23 a24
Одномерный массив
x(5)
a31 a32 a33 a34
x1 x2 x3 x4
x5
a41 a42 a43 a44
Операторы Фортрана при работе с массивами
Отметим, что все рассмотренные ранее операторы, применяемые при ра-
боте с простыми переменными, годятся и для массивов. В то же время необхо-
димо указать на наличие специальных операторов, без применения которых ра-
бота с индексированными переменными либо невозможна, либо затруднитель-
на.
Оператор описания массива
Структура оператора:
DIMENSION a(4,4), x(5)
Служит для отведения необходимого места в памяти ЭВМ для работы с
массивами. В данном случае отводится 16 ячеек в памяти ЭВМ для двумерного
массива a(4,4), содержащего 4 строки и 4 столбца, а также 5 ячеек для одно-
мерного массива x(5). Оператор всегда ставится в начале программы.
Оператор организации цикла
Ранее рассматривалась организация циклического алгоритма с помощью
операторов присваивания и условного перехода. При работе с массивами по-
стоянно приходится сталкиваться с циклами. Особенностью является наличие
целой переменной цикла (обычно приходится перебирать индексы), целых па-
раметров цикла и во многих случаях - единичного шага. В этом случае целесо-
образно применять специальный оператор DO - END DO. Его структура:
DO i=N1,N2,N3
тело цикла по i
END DO
Здесь i - переменная цикла, N1 - начальное значение переменной цикла
(обычно единица), N2 - конечное значение переменной цикла (наибольшее зна-
53
чение i), N3 - шаг (поскольку шаг во многих случаях равен единице, его можно
опускать).
При работе с двумерным массивом, как правило, используется двойной
цикл. При этом будем использовать переменную i для перебора строк и пере-
менную j для перебора столбцов:
DO i=N1,N2,N3
DO j=M1,M2,M3
тело цикла по j тело цикла по i
END DO
END DO
В качестве тела цикла могут выступать различные алгоритмы: ввод и вы-
вод массивов, суммирование, нахождение количества и произведения элемен-
тов массива, максимального и минимального элементов и др. Базовые алгорит-
мы, необходимые для решения задач на одномерные и двумерные массивы,
рассмотрены далее.
Ввод и вывод массивов
После того, как отработает оператор DIMENSION, в памяти ЭВМ будет
отведено необходимое место для массива. Это - как строительство нового дома:
уже есть комнаты, но еще нет жильцов. Для «заселения» жильцов - заполнения
пустых ячеек исходными данными - необходимо использование циклического
алгоритма. Телом цикла в данном случае является оператор ввода числовых
данных с клавиатуры. Пусть требуется ввести в память ЭВМ числовые данные
массива x(5). В этом случае фрагмент блок-схемы и программы имеет следую-
щий вид:
Блок-схема
Программа на Фортране
WRITE(*,*)’Массив x(5)’
DO i=1,5
READ(*,*) x(i)
END DO
x(5)
i=1
x
i
i=i+1
i
≤ 5
да
нет
54
Аналогичную структуру имеет блок-схема и программа вывода массива,
только в этом случае телом цикла служит блок (оператор) вывода:
Блок-схема
Программа на Фортране
WRITE(*,*)’Массив x(5)’
DO i=1,5
WRITE(*,*) x(i)
END DO
Для ввода и вывода двумерных массивов используется двумерный цикл.
Пусть требуется ввести в память ЭВМ матрицу а(7,6). Фрагмент блок-схемы и
программы имеет вид:
Блок-схема
Программа на Фортране
DIMENSION a(7,6)
WRITE(*,*)’Введите матрицу a(7,6)’
DO i=1,7
READ(*,*) (a(i,j),j=1,6)
END DO
i=1
i=i+1
i
≤ 5
да
нет
x
i
a(7,6)
j=1
a
ij
j=j+1
j
≤ 6
да
нет
i=1
i=i+1
i
≤ 7
да
нет
55
Примечание. В данном случае используется конструкция, называемая
«неявным циклом». Неявный цикл по переменной j позволяет осуществлять
ввод матрицы по строкам (числа внутри строки вводятся через запятую, по
окончании ввода строки следует нажать «Enter»).
Аналогично выглядит алгоритм вывода матрицы a(7,6) на печать. В этом
случае также используется двумерный цикл, а телом внутреннего цикла служит
блок (оператор) вывода. В программе также следует использовать «неявный
цикл» по столбцам. В этом случае матрица выводится в привычной для нас
форме, а фрагмент блок-схемы и программы имеет следующий вид:
Блок-схема
Программа на Фортране
WRITE(*,*)’ Матрица a(7,6)’
DO i=1,7
WRITE (*,*) (a(i,j),j=1,6)
END DO
Суммирование, нахождение произведения
и количества элементов массива
Рассмотрим задачу суммирования элементов массива. Пусть дан одно-
мерный массив x(5) и требуется найти сумму его элементов. Предварительно
мы зарезервировали место в памяти ЭВМ и осуществили ввод данных в ячейки
массива, например, x{1,3,-2,0,5}. Для суммирования нам понадобится еще одна
ячейка - простая переменная s, которую мы должны положить равной нулю.
j=1
j=j+1
j
≤ 6
да
нет
i=1
i=i+1
i
≤ 7
да
нет
a
ij