72649

Понятие массива

Доклад

Информатика, кибернетика и программирование

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

Русский

2014-11-26

18.25 KB

2 чел.

 Понятие массива

Массивом называется совокупность переменных одного типа, обозначаемая именем с индексами в круглых скобках. Например, вектор с компонентами u1, u2, ..., un, можно представитьодномерным массивом

U(I), 1≤I≤N,

а матрицу с компонентами Ai,j можно представить двумерным массивом

A(I,J), i≤ I ≤ N, 1≤ J ≤ M;

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

Оператор описания массива DIMENSION

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

Примеры:

DIMENSION А(10,30),BK(500),IU(40)

Здесь первый массив — двумерный, а второй и третий — одномерные. Первый индекс в массиве А изменяется от 1 до 10, второй от 1 до 30. Во втором и третьем массивах индексы из меняются соответственно от 1 до 500 и от 1 до 40.

 Совмещение описания массива с описанием типа переменных

Описание размерности массива может быть совмещено с описанием типа переменных. Поэтому запись

REAL KLM, XF

INTEGER FR, SS

DIMENSION KLM(15,15),FR(100),XF(10),SS(5,5)

эквивалентна записи

INTEGER FR(100), SS(5,5)

REAL KLM(15,15), XF(10)

Описание массива в программе может быть произведено только один раз.

Оператор PARAMETER

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

PARAMETER (<имя>=<константа>,<имя>=<константа>,...)

Здесь <имя> — символическое имя, образованное по правилам Фортрана. Тогда, например, запись

DIMENSION A1(100,200), A2(100,200), B(200,100)

эквивалентна записи

PARAMETER (N1=100, N2=200)

DIMENSION A1(N1,N2)A2(N1,N2),B(N2,N1)

Такая запись позволяет упростить изменение размерности при модификации программы.

1.6. Обращение к элементу массива

При обращении к элементу массива необходимо указывать его имя и индексы, которые могут быть либо константами, либо арифметическими выражениями целого типа, например

V=A(I,J)+B(3.2*L+7)

В этом случае целые переменные I,J,L должны быть заданы в предыдущей части программы.

Ввод и вывод массива

При вводе и выводе массивов используются два основные способа:

• ввод-вывод массива по имени;

• с помощью цикла.

Первый способ (пример)

DIMENSION A(10), B(3,4)

READ(*,*) A,B

В этом случае должны быть последовательно введены 10 чисел которые соответствуют элементам массива А, а затем введены 12 чисел, которые соответствуют элементам массива В, согласно их последовательности расположения в памяти.

Второй способ (пример)

DIMENSION А(10), В(3,4)

READ(*,*) N,L,M,(A(I),I=1,N), ((B(I,J),J=1,L),I=1,M)

В этом случае числа N,L,M подчиняются ограничениям N≤10, L≤4, М≤3, поскольку в противном случае мы выйдем за границы расположения элементов массивов. Этот способ удобнее, в программе используется меньшее количество элементов массива, нежели то, которое задано в операторах размерности. В этом примере сначала вводятся три целых числа N,L,M, и затем последовательно N элементов массива А, а затем L*M элементе массива B в последовательности

В(1,1),В(1,2),...В(2,1),В(2.2),..

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

READ(*,*)N,L,M,(A(I),I=1,N),((B(I,J),I-1,M),J=1,L)

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

Вывод массива отличается от их ввода только заменой оператора READ на оператор WRITE.

Использование массивов

Рассмотрим следующую задачу.

Ввести с клавиатуры N≤100 чисел и найти их сумму/произведение. Соответствующая программа может иметь вид

Сумма

Произведение

DIMENSION А(100)

READ (*,*)N,(A(I),I =1,N)

S=0.0

DO 5 I=1,N

S=S+A(I)

5 CONTINUE

WRITE (*,*)S

STOP

END

DIMENSION А(100)

READ (*,*)N,(A(I),I =1,N)

P=1.0

DO 5 I=1,N

P=P*A(I)

5 CONTINUE

WRITE (*,*)P

STOP

END

Характеристики массивов

Массив характеризуется числом измерений, которых может быть не более семи. Число измерений массива называется его рангом. Массив ранга 1 называют вектором, а ранга 2 - матрицей. Объект ранга 0 является скаляром.

Число элементов массива называется его размером. Также массив характеризуется формой, которая определяется его рангом и протяженностью (экстентом) массива вдоль каждого измерения. Например, оператор

real, dimension (2, 3, 10) :: b

объявляет массив b ранга 3, размера 2*3*10 = 60 и формы (2, 3, 10). Протяженность массива по первому измерению равна двум, по второму - трем, а по третьему - десяти.

Каждая размерность массива может быть задана нижней и верхней границами,  которые разделяются двоеточием. Например:

real, dimension(4:5, -1:1, 0:9) :: с ! Форма массива (2, 3, 10)

Ранг, форма и размер массивов b и с совпадают. Такие массивы называются со-

гласованными.

Нижняя граница и последующее двоеточие при объявлении массива могут быть опущены, тогда по умолчанию нижняя граница принимается равной единице.

Способы объявления массивов

Помимо использованного способа массив можно объявить и без применения атрибута DIMENSION, например все последующие объявления дают двумерный целочисленный массив:

integer, parameter :: m = 2, n = 4

integer a(m, n) ! или a(1:m, 1:n)

или

integer b

dimension b(m, n) ! Оператор DIMENSION

или

integer, dimension(m, n) :: с ! Атрибут DIMENSION

Существуют разные способы объявления и размещаемых массивов:

integer, allocatable :: а(:, :)

или

integer, dimension(:, :) :: b

allocatable b ! Оператор ALLOCATABLE

или

integer с

dimension c(:, :) ! Оператор DIMENSION

alocatable с

или

integer, alocatable, dimension (:, :):: d

Конструктор массива

В Фортране можно, используя конструктор массива, задать одномерный массив. Конструктор массива имеет вид:

(/ список-значений /)

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

Пример массива - буквальной константы: (/1,2, 3, 4, 5 /). Такой массив может быть использован в выражении, например:

integer a(5)

а = 2 * (/ 1, 2, 3, 4, 5 /)

write(*, *) a ! 2 4 6 8 10

Список-значений может содержать последовательность скаляров, встроенных DO-циклов и массивов любого ранга. Каждое значение списка может быть результатом выражения.

Встроенный DO-цикл имеет вид:

(выражение, dovar = start, stop [, inc])

dovar - целочисленная скалярная переменная (параметр цикла). start, stop, inc -целочисленные константные выражения, определяющие диапазон и шаг изменения dovar. Если inc отсутствует, то шаг устанавливается равным единице.

Встроенный DO-цикл добавляет в список значений

MAX(INT(stop - start + inc)/inc), 0)

элементов. Выражение может содержать dovar. Возможна организация вложенных встроенных DO-циклов.

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


 

А также другие работы, которые могут Вас заинтересовать

31080. Органонеспецифические неодонтогенные опухоли челюстных костей 57 KB
  Опухолеподобные поражения костей: 1 фиброзная дисплазия; 2 центральная гигантоклеточная гранулема; 3 херувизм; 4 эозинофильная гранулема; 5 болезнь Педжета; 6 коричневая опухоль гиперпаратиреоидизма. КОСТЕОБРАЗУЮЩИЕ ОПУХОЛИ Доброкачественные: Злокачественные: остеома остеогенная саркома...
31081. Челюстная киста 20.03 KB
  К одонтогенным дизонтогенетическим кистам относят: 1 первичную примордиальную или кератокисту; 2 фолликулярную зубосодержащую кисту; 3 парадентальную периодонтальную кисту; 4 кисту прорезывания зуба; 5 десневую гингивальную кисту. К одонтогенным приобретенным кистам относят радикулярную околокорневую кисту воспалительного генеза. Среди них выделяют: 1 кисты резцового носонебного канала; 2 глобуломаксиллярная; 3 носогубная носоальвеолярная киста преддверья полости рта. Перечисленные кисты и одонтогенные и...
31082. Фиброзная дисплазия челюстных костей 16.37 KB
  Образование увеличивается медленно годы десятилетия но может привести к тяжелой деформации лица за счет разрастания клеточноволокнистой остеогенной ткани Макроскопически: границы разросшейся сероватобелесоватого вида опухолеподобной ткани нечеткие размытые без образования капсулы; беловатокрасные опухолеподобные очаги разной плотности в зависимости от степени выраженности их минерализации имеются многочисленные кисты заполненные желтоватой или красноватой жидкостью и полупрозрачные участки хряща до 3 см в диаметре....
31083. Одонтогенная инфекция 20.53 KB
  Пато и морфогенетически все эти заболевания связаны с острым гнойным апикальным или обострением хронического верхушечного периодонтита нагноением кист челюсти гнойным пародонтитом альвеолитами воспаление костной альвеолы после удаления зуба. Остит воспаление костной ткани челюсти за пределами периодонта зуба. Острый периостит челюсти представляет собой острое воспаление надкостницы альвеолярного отростка верхней или альвеолярной части нижней челюсти иногда распространяющееся на надкостницу тела челюсти. В большинстве случаев процесс...
31084. Слюнно-каменная болезнь (сиалолитиаз) 15.17 KB
  Механизм развития слюннокаменной болезни обусловлен взаимодействием перечисленных этиологических факторов: при застое слюны в протоках происходит повышение ее вязкости и увеличение содержание белков и солей. При слюннокаменной болезни необходимо удаление пораженной слюнной железы.
31085. Максимизация прибыли фирмы на всех типах рынков 71.5 KB
  Максимизация прибыли фирмы на всех типах рынков 8. Условия максимизации прибыли на рынке совершенной конкуренции Совершенно конкурентная фирма является ценополучателем и в связи с этим кривая спроса фирмы на рынке совершенной конкуренции отличается абсолютной эластичностью рис. Кривые спроса и предложения совершенно конкурентной фирмы Совершенный конкурент может продать любое количество продукта который произвел по существующей или более низкой цене но если цена выше чем существующая то предполагается что спрос будет равен нулю....
31086. Экономика неопределенности и риска 88 KB
  Ограничение по заимствованию можно таким образом представить следующим образом: C1 Y1 где C1 потребление в первый период жизни до выхода на пенсию Y1 соответственно доход получаемый в первый период. Это дополнительное ограничение для домашнего хозяйства называют ограничением по заимствованию или ограничением ликвидности.1 показано каким образом ограничение ликвидности сужает возможности выбора для домашнего хозяйства. Если домашнее хозяйство не имеет возможности занимать средства то оно сталкивается с дополнительным...
31087. Общественное воспроизводство и общественное производство 174.5 KB
  Существование производства в котором принимает участие лишь отдельное лицо так же бессмысленно как существование и развитие языка без общения людей совместно живущих и общающихся между собой. Вовторых в процессе производства между людьми возникают производственные отношения социальноэкономическое содержание которых определяется господствующей формой собственности на средства производства. А любой процесс производства который рассматривается в непрерывном потоке своего возобновления является в то же время процессом воспроизводства....
31088. Система национальных счетов 61.5 KB
  Валовой национальный и валовой внутренний продукт Обобщающим показателем объема производства в национальной экономике является валовой продукт ВП который подразделяется на ВВП и ВНП: Валовый внутренний продукт ВВП это совокупная рыночная стоимость всего объема конечного производства товаров и услуг созданных на территории данной страны в течение года с использованием факторов производства принадлежащих как данной стране так и другим странам. ВНП отличается от ВВП на сумму сальдо полученных данной страной доходов изза рубежа и...