Основные приемы работ в среде msdev. Константы, переменные, выражения, функции в языке Fortran. Линейные алгоритмы. Управляющие конструкции языка Fortran


Скачать 320.07 Kb.
НазваниеОсновные приемы работ в среде msdev. Константы, переменные, выражения, функции в языке Fortran. Линейные алгоритмы. Управляющие конструкции языка Fortran
страница4/4
ТипДокументы
1   2   3   4

ENDDO DX




6. Массивы
Массив – это именованный набор из конечного числа объектов одного типа . Массив обеспечивает доступ к некоторому множеству данных при помощи одного имени. Также имя массива используется для обеспечения доступа к элементу или группе элементов(сечению) массива.

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

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

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

Протяженность = Верхняя граница – нижняя граница + 1

Пример:

Real a(2,3), c(4:5,-1:1)  описаны массивы а и с.

Форма массива а (2,3) (протяженность первого измерения=2-1+1=2, протяженность второго измерения=3-1+1=3). Форма массива с (2,3) (протяженность первого измерения=5-4+1=2, протяженность второго измерения = 1-(-1)+1=3). Массивы а и с имеют одинаковую форму. Такие массивы называются согласованными.
Объявление массивов

Статические:

  1. С помощью операторов описания типа

а) integer a(0:10);

б) integer, parameter:: n=10, m=0

integer a(m:n).

2. С помощью Dimension

а) integer, dimension(10):: a ! dimension как атрибут;

а) integer a

dimension a(10) ! dimension как оператор.

  1. Одновременное объявление массивов разной формы

real, dimension(10):: a, b, b2(15), d(3,4) ! приоритет у явного

описания формы
Динамические:

  1. С помощью атрибутов Pointer и Allocatable

а) real, pointer:: a(:), c(:), d(:) -! объявлены три одномерных масси-

ва-ссылки a, c, d;

б) integer, allocatable:: b(:,:) ! объявлен двумерный размещаемый

массив b;

в) real, allocatable, target:: t(:) ! объявлен размещаемый массив-

адресат t.

  1. С помощью оператора ALLOCATABLE

integer, dimension(:,:):: b


allocatable b.

Для выделения реальной памяти под массивы-ссылки и размещаемые массивы применяется специальный оператор ALLOCATE. Примеры:

а) real, pointer:: a(:)

allocate(a(10)) ! прикрепление ссылки к области памяти в необходимом

месте программы;

б) real, pointer:: a(:) ! массив-ссылка

real, target:: t(10) ! массив-адресат

a => t ! массив-ссылка и массив-адресат должны быть одного типа и одно-

го ранга;

в) integer, dimension(6):: a=(/5,7,-10,8,-23,56/)

integer, allocatable:: c(:)

allocate(c(15)) ! выделение области памяти под массив с в необходимом

месте программы

allocate(c(size(a)) ! выделение памяти под массив с, равной размеру масси-

ва а.

allocate(c(count(mask=a>0)) – выделение памяти под массив с, равной коли-

честву положительных элементов массива а.

Для освобождения выделенной оператором ALLOCATE памяти используется оператор DEALLOCATE. Пример:

integer, allocatable:: e(:) ! объявление размещаемого массив е

real, pointer:: ra, b(:) ! объявление скаляра-ссылки ra и массива-ссылки b

allocate(e(10), ra, b(20)) ! выделение памяти под массивы e и b и под скаляр ra

………………………..

deallocate(e, ra, b) ! освобождение динамической памяти
Инициализация массивов

Инициализацию массивов(задание начальных данных элементам массивов) можно осуществить несколькими способами.

Инициализация одномерных массивов:

  1. в операторах описания типа:

integer a(10)/1,2,3,4,5,1,7,2,12,9/

  1. с помощью оператора data:

integer a(10)

data a/1,2,3,4,5,1,7,2,12,9/

  1. с помощью конструктора массива:

integer:: a(10)=(/ 1,2,3,4,5,1,7,2,12,9/) ! в конструкторе массива

пробел между слешем и скобкой не допускается.

  1. в операторах присваивания:

real b(5), a(5)

b=sin(t) ! всем элементам массива b будет присвоено значения

функции sin(t)

a=2*(/3,3,4,4,6/) ! все элементы массива a, заданные с помо-

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

  1. использование в конструкторе массивов встроенных Do – циклов

а) integer a(5)

a = (/(i , i =1,5)/)

встроенный Do – цикл

! элементы массива a получат значения i, равные 1,2,3,4,5

б) logical f1(10)

f1=(/(.true.,k=1,5),(.false.,k=6,10)/)

! в конструкторе массива два встроенных цикла, массив f1 получит значения: T T T T T F F F F F
Инициализация двумерных массивов:

  1. с помощью оператора DATA:

integer b(2,3)

data b/1,8,4,9,6,10/ ! значения вводятся по столбцам

  1. в операторах описания типа:

integer b(2,3) / 1,8,4,9,6,10 / ! значения вводятся по столбцам

  1. с помощью функции RESHAPE

integer a(5,2),b(2,3),i,j

a=reshape((/(2*i,i =2,11)/), shape=(/5,2/))

b=reshape((/1,3,5,7,8,10/),shape=(/2,3/))

! в функции RESHAPE вначале задается конструктор массива, а затем из него формируется массив по форме массива shape.
Размещение массивов в памяти

Одномерный массив: Элементы массива занимают в памяти компьютера непрерывный, последовательный отрезок памяти.

Пусть описан массив: integer:: a(10) = (/3,8,9,5,12,167,-4,6,-1,0/)

Его элементы в памяти компьютера будут располагаться следующим образом:

а

3

8

9

5

12

167

-4

6

-1

0

а(1) а(2) а(3) а(4) а(5) а(6) а(7) а(8) а(9) а(10)

При этом а(i) - текущий элемент массива, где i - индексная переменная, может быть целым выражением, например, а(2*k), a(k+2*j).

Двумерный массив: Память компьютера одномерная, поэтому элементы двумерного массива также занимают в памяти компьютера непрерывный, последовательный отрезок. В языке Фортран элементы двумерного массива упорядочены по столбцам.

Пусть описан массив: real, dimension(2,3):: b /1.5,6.,7.1,-123.6,0.,1.78/

Такой массив можно представить в виде таблицы:








j







1

2

3


i

1

b(1,1)

b(1,2)

b(1,3)

2

b(2,1)

b(2,2)

b(2,3)

В памяти компьютера элементы этого массива будут располагаться в виде непрерывной последовательности по столбцам:

b

1.5

6.

7.1

-123.6

0

1.78

b(1,1) b(2,1) b(1,2) b(2,2) b(1,3) b(2,3)

При этом b(i,j) - текущий элемент массива, i, j - индексные переменные, которые могут быть выражениями целого типа. Причем i - номер строки, j - номер столбца.
Элемент массива

В общем виде обращение к элементу массива может быть представлено

имя массива(список индексов)

Пусть объявлены массивы: integer fac(20), d(3,4).

Примерами обращений к элементам этих массивов могут быть:

fac(15), fac(I+1), fac(2*I) - обращения к элементам массива fac;

d(2,1), d(i+1, j*2), d(3, j-i) - обращения к элементам массива d.
Сечение массива

В FPS можно получить доступ не только к отдельному элементу массива, но и к некоторому подмножеству его элементов, которое называется сечением массива. Сечение массива может быть получено в результате применения индексного триплета или векторного индекса, которые при задании сечения подставляются вместо одного из индексов массива.
Индексный триплет:

Общий вид индексного триплета

[нижняя граница]:[верхняя граница][:шаг]

Каждый из параметров триплета является целочисленным выражением. Шаг может быть >0 и <0. Индексный триплет задает последовательность индексов, в которой первый элемент равен его нижней границе, а каждый последующий больше(меньше) предыдущего на величину шага.

Примеры:

  1. Пусть объявлен одномерный массив: real d(15)

Его возможные сечения:

а) d(5:15:5) - это сечение позволяет обратиться к элементам d(5), d(10), d(15);

б) d(15:6:-3) - можно обратиться к элементам d(15), d(12), d(9), d(6);

в) d(5::5) - то же, что и а), при этом верхняя граница опущена, по умолчанию ,

она принимается равной верхней границе экстента массива d;

г) d(::5) - можно обратиться к элементам массива d(1), d(6), d(11), при этом

нижняя и верхняя границы триплета опущены, по умолчанию они

принимаются равными верхней и нижней границам экстента массива d;

д) d(2:6:int(5/2)) - можно обратиться к элементам d(2), d(4), d(6), шаг при этом

задан в виде целочисленного выражения;

е) d(:) - обращение ко всем элементам массива d.

  1. Пусть объявлен двумерный массив: integer b(3,6)

Примеры его возможных сечений:

а) b(2:3,2:6:2) - для такого объявления доступны следующие элементы массива:




2

4

6

2

b(2,2)

b(2,4)

b(2,6)

3

b(3,2)

b(3,4)

b(3,6)

б) b(2, :) - обращение ко второй строке массива b;

в) b(:,6) - обращение к шестому столбцу массива b;

г) b(:,:) - обращение ко всем элементам массива b.

Векторный индекс:

Это одномерный целочисленный массив, содержащий значения индексов. Векторный индекс в отличие от индексного триплета позволяет извлечь в сечение массива произвольное подмножество элементов массива.

Примеры:

  1. real a(10), b(5,5)

integer vi(3),vj(2) ! объявление векторных индексов vi и vj

vi=(/1,3,5/) ! инициализация вектора vi

vj=(/2,5/) ! инициализация вектора vj

a(vi)=1.5 ! инициированы элементы массива a(1), a(3), a(5)

b(2,vj)=7 ! инициированы элементы массива b(2,2), b(2,5)

b(vi,vj)=0 ! инициированы следующие элементы массива:




2

5

1

b(1,2)

b(1,5)

3

b(3,2)

b(3,5)

5

b(5,2)

b(5,5)

  1. real a(3,6), b(5) ! объявление массивов a и b

data a/5*3, 5*4,8*0/ ! инициализация массива a

b=a(2,(/1,3,4,5,6/)) ! векторный индекс задан в виде конструктора масси-

ва, в вектор b будут записаны элементы второй стро-

ки массива a из столбцов с номерами 1,3,4,5,6.
1   2   3   4

Похожие:

Основные приемы работ в среде msdev. Константы, переменные, выражения, функции в языке Fortran. Линейные алгоритмы. Управляющие конструкции языка Fortran iconЛитература Храмцов П. Б., Брик С. А., Русак А. М., Сурин А. И. Основы...
Курс посвящен изучению языка гипертекстовой разметки html. Рассматриваются основные конструкции языка, приемы разметки и связь с...

Основные приемы работ в среде msdev. Константы, переменные, выражения, функции в языке Fortran. Линейные алгоритмы. Управляющие конструкции языка Fortran iconВведение в науку о языке
Назовите основные разделы науки о языке и единицы языка, изучаемые в этих разделах

Основные приемы работ в среде msdev. Константы, переменные, выражения, функции в языке Fortran. Линейные алгоритмы. Управляющие конструкции языка Fortran iconСправочник по разговорному английскому языку ( материалы сайта http//teach-learn narod ru )
Данное пособие по английской разговорной речи содержит фразы, необходимые для общения в большинстве повседневных ситуаций. Предлагаемый...

Основные приемы работ в среде msdev. Константы, переменные, выражения, функции в языке Fortran. Линейные алгоритмы. Управляющие конструкции языка Fortran iconВопросы по учебной дисциплине
Как связаны язык и общество? Как связаны язык и речь? Каковы основные уровни языка?Как отражаются в русском языке материальная и...

Основные приемы работ в среде msdev. Константы, переменные, выражения, функции в языке Fortran. Линейные алгоритмы. Управляющие конструкции языка Fortran iconРабочая программа выполняет две основные функции
Программа рассчитана на изучение французского языка по 2 часа в неделю 68 часов в учебном году

Основные приемы работ в среде msdev. Константы, переменные, выражения, функции в языке Fortran. Линейные алгоритмы. Управляющие конструкции языка Fortran iconПрактичность теории Пресс-конференция Вопрос к тексту
Художник учится смешивать краски и наносит мазок на холст. Музыкант учится этюдам. Журналист и писатель осваивают приемы письменной...

Основные приемы работ в среде msdev. Константы, переменные, выражения, функции в языке Fortran. Линейные алгоритмы. Управляющие конструкции языка Fortran iconМетодическая разработка практического занятия для студентов пм 05...
Освоить основные приемы массажа, научиться использовать вспомогательные приемы массажа, освоить методику проведения массажа различных...

Основные приемы работ в среде msdev. Константы, переменные, выражения, функции в языке Fortran. Линейные алгоритмы. Управляющие конструкции языка Fortran iconКвалификация
В результате освоения дисциплины студенты должны уметь осуществлять коммуникации на иностранном языке в профессиональной среде и...

Основные приемы работ в среде msdev. Константы, переменные, выражения, функции в языке Fortran. Линейные алгоритмы. Управляющие конструкции языка Fortran iconМетодические указания к лабораторным работам по курсу «Программирование...
Цель работы: приобретение практических навыков работы в интегрированной среде C, изучение структуры программы на языке С

Основные приемы работ в среде msdev. Константы, переменные, выражения, функции в языке Fortran. Линейные алгоритмы. Управляющие конструкции языка Fortran iconНаша компания предлагает две программы получения высшего образования...
С обучением на венгерском языке. Данный вариант возможен даже для тех кто не знает венгерского языка, в данном случае наши специалисты...

Вы можете разместить ссылку на наш сайт:


Все бланки и формы на filling-form.ru




При копировании материала укажите ссылку © 2019
контакты
filling-form.ru

Поиск