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

Ввод матрицы делают построчным и бесформатным:

Integer,parameter::kolStr=2, kolStlb=3

! количество строк и столбцов

Integer::str,stlb ! номера строки и столбца

Real,dimension(1:kolStr,1:kolStlb):: A! массив

! либо диапазон индекса столбца = «:» – по умолчанию [1:kolStlb]

Read(1,*)(A(str,:),str=1,kolStr)

! либо циклы по секциям-строкам:

Read(1,*)(A(str,1:kolStlb), str=1,kolStr)

! либо вложенные неявные циклы – по столбцам внутри строк

Read(1,*)((A(str,stlb),stlb=1,:),str=1,kolStr)

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

Write(2,1)(A(str,:),str=1,kolStr)

1 format(‘Матрица’/3(f5.1))

В операторе Format целый повторитель kolStlb – длина строки матрицы:

1 format(‘Матрица’/<kolStlb>(f5.1))

Динамические массивы.

Размер статического массива не может быть изменен в процессе вычислений, что не всегда удобно при решении задач. Этого неудобства можно избежать, применяя динамические массивы. Работа с динамическим массивом требует (смотри пример программы):

a) описать динамический массив с атрибутом Allocatable, указывая количество измерений и не указывая размеров;

b) определить размер массива оператором ввода (для двумерного массива – количество строк и столбцов, для одномерного – количество элементов);

c) разместить массив в памяти оператором Allocate;

d) выполнить действия с массивом;

e) освободить память оператором Deallocate.

Пример

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

Рис.7. Блок-схема алгоритма для матрицы * — «В строке i все элементы равны 0» ** — «Координаты первого ненулевого элемента строки = [i, Num]»

Программа

Program Matrix; Implicit None

! студент (фамилия, имя) группа № работа № вариант №

Integer,Allocatable,dimension(:,:)::A ! динамическая матрица

Integer,Allocatable,dimension(:):: B ! динамический массив

Integer varStr,varStlb ! переменные размеры матрицы по измерениям

Integeri, j ! индексы строк и столбцов

Open(1,file=’in.txt’) ! файл с исходной матрицей

Open(2,file=’out.txt’) ! результирующий файл

Do! цикл по нескольким матрицам разной формы

Read(1,*,end=10)varStr,varStlb ! ввод размеров (строк, столбцов)

!размещение динамических массивов varStr строк, varStlb столбцов

Allocate(A(1:varStr,1:varStlb),B(1:varStlb))

! ввод массива - неявный цикл по секциям-строкам

Read(1,*) ( A(i,:), i = 1,varStr )

! По блок-схеме, составленной по заданию, написать программу

! Не забудьте добавить необходимые описания переменных и массивов

Deallocate(A) ! освобождение динамической памяти

Enddo

End Program Matrix

Результаты работы программы

Содержимое файла Out.txt c одной матрицей:

В исходной матрице 3 строки и 5 столбцов

Исходная матрица

0 -123 -33 12 -5

0 0 0 0 0

0 0 12 0 1

Координаты первого ненулевого элемента строки = [ 1, 2]

В строке 2 все элементы равны 0

Координаты первого ненулевого элемента строки = [ 3, 3]

Преобразованная матрица

0 123 -33 12 -5

0 0 0 0 0

0 0 -12 0 1

Контрольные вопросы

1. Что такое двумерный массив? Его аналоги в математике на примере двух массивов. Описание двумерных массивов в Fortran90, диапазоны индексов.

2. Форма – основная характеристика массива, напишите примеры конформных (одинаковых по форме) массивов.

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

4. Укажите порядок размещения элементов двумерных массивов в памяти компьютера. Приведите пример.

5. В программе объявлен двумерный массив A(12,12). Как его описать в Fortran90? Как записать в программе ссылку: а) на полный массив, б) на секцию массива, в) на элемент массива?

6. Допустим ли оператор присваивания к массивам, объявленным ниже? Почему?

RealA(2, -3:3), B(0:1, 0:6), C(-2:-1, 1:7)

A = cos(B**2)- 3*C

7. Поясните правила записи выражений в операторах присваивания с массивами на примерах.

8. Как работает оператор where? Приведитепримеры оператора where а) без блока; в) с одним блоком; с) с двумяблоками.

9. Что произойдет при выполнении оператора Read?

Real,dimension(1:12,1:12) A

Read (1,*) A(1, 12)

10. Как ввести первую строку массива, объявленного оператором

Real, dimension(1:20,1:12):: A?

11. Как вывести вторую строку массива, объявленного оператором

Real, dimension(1:20,1:12):: A?

12. Форматный вывод двумерного массива на примерах.

13. Что будет выведено при выполнении оператора Write?

Real, dimension(1:12, 1:12):: A

Write(*,*) A(12,12)

14. Что и как будет выведено при выполнении оператора Write?

Real, dimension(1:12, 1:12):: A

Write (*,11) A(10:12, 10:12)

11 Format(F10.2)

15. Объявите вещественный массив из 100 строк и 5 столбцов и напишите оператор Format и оператор вывода элементов массива:

a) заголовок «Результаты работы»;

b) далее элементы массива в виде матрицы.








Дата добавления: 2016-02-13; просмотров: 2345;


Поиск по сайту:

При помощи поиска вы сможете найти нужную вам информацию.

Поделитесь с друзьями:

Если вам перенёс пользу информационный материал, или помог в учебе – поделитесь этим сайтом с друзьями и знакомыми.
helpiks.org - Хелпикс.Орг - 2014-2024 год. Материал сайта представляется для ознакомительного и учебного использования. | Поддержка
Генерация страницы за: 0.011 сек.