Файл: Митяков Информатика Часть 1.pdf

Добавлен: 23.10.2018

Просмотров: 5129

Скачиваний: 18

ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.
background image

  

51 

 

 

 

3.5.Программирование задач на одномерные и  

двумерные массивы. Введение 

В предыдущем разделе были рассмотрены основные принципы работы с 

простыми  переменными,  характеризующимися  тем,  что  имеют  определенное 

имя и занимают в памяти ЭВМ одну условную ячейку.  

В  действительности  число  элементарных  ячеек - бит,  занимаемых  пере-

менной,  зависит  от  ее  типа  (целая,  вещественная,  расширенная  целая,  расши-

ренная вещественная) и от разрядности ЭВМ. Но для простоты будем считать, 

что  простая  переменная  занимает  в  памяти  одну  условную  поименованную 

ячейку. 

В отличие от простых индексированные переменные занимают в памяти 

ЭВМ несколько ячеек, имеющих одно и то же имя, но разные номера (индек-

сы). Индексом может быть целое положительное число либо переменная целого 

типа (имя которой начинается с букв i, j, k, l, m, n). При изображении индекси-

рованной  переменной  на  блок-схеме  индексы  записываются  подстрочным 

шрифтом,  например,  x

i

,  a

12

  и  т.д.  В  программе  индексы  записываются  после 

имени переменной в скобках, если имеется два индекса, то они разделяются за-

пятой, например, x(i), a(1,2) и т.д. 

Совокупность  индексированных  переменных,  имеющих  одно  имя,  назы-

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

одного или двух индексов, различают одномерный или двумерный массивы. На 

рисунке  приведен  пример  организации  в  памяти  ЭВМ  простых  переменных  и 

массивов. 

Память компьютера не безгранична, поэтому в отличие от простых пере-

менных  при  работе  с  массивами  необходимо  прежде  всего  зарезервировать 

нужное  число  ячеек  памяти.  Для  каждого  массива  это  число  определяется  его 

размерностью - общим количеством элементов. Описание оператора, осуществ-

ляющего резервирование места в памяти, а также других необходимых для ра-

боты с массивами операторов, приводится далее. 

 


background image

  

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 - конечное значение переменной цикла (наибольшее зна-


background image

  

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 

≤ 5

да 

нет 


background image

  

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 

 5 

да 

нет 

x

i

a(7,6) 

j=1 

a

ij

j=j+1 

≤ 

да 

нет 

i=1 

i=i+1 

 7 

да 

нет 


background image

  

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 

 6 

да 

нет 

i=1 

i=i+1 

 7 

да 

нет 

a

ij