Читайте также:
|
|
Вы можете указать часть массива. Допустим, массив A специфицирован следующим образом
REAL, DIMENSION(-4:0, 7):: AТогда A(-3,:) указывает второй ряд матрицы, тогда как A(0:-4:-2, 1:7:2) указывает (в обратном порядке) каждый второй элемент в каждой второй колонке. Так же как переменные могут образовывать массивы, так и константы могут образовывать массивы.
Вырезки позволяют пользователю получить большее управление массивом путем использования тройки индексов и векторных индексов..
з
Конструкция WHERE
Конструкция позволяет задавать условия выполнения действий над массивами.
В следующем примере мы хотим защититься от отрицательных элементов X. Это задано следующей конструкцией
WHERE (x = 0.0) z = 4.0*y*sgrt(x) ELSEWHERE z = 0.0 END WHEREЗаметьте, что ELSEWHERE записано одним словом! Сравните с функцией SUM (конец следующей секции.
Сумма положительных значений членов массива записана и так
SUM (X, MASK = X.GT. 0.0)Такой оператор не может быть использован для того, чтобы избежать деления на ноль в случае суммирования 1/X, что есть слово-маска для определения, какие номера включены в суммирование, и либо ни одно из двух определенное значение не может быть вычислено или нет. Но в последнем случае Вы можете использовать конструкцию WHERE.
Присваивание маскированного массива позволяет пользователю сделать присваивание, базирующееся на маске по всему массиву.
! Пример использования распределяемого массива и конструкции where.
program main
integer number_of_students, number_of_tests
! Объявление массива 'scores' и 'letter_grade' как распределяемых allocatable и 2 мерные.
integer, allocatable, dimension(:,:):: scores
character(len=1), allocatable, dimension(:,:):: letter_grade
open(unit=1,file='grades',form='formatted',access='sequential')
read(1,10) number_of_students, number_of_tests
! Распределение памяти для массивов.
allocate (scores(number_of_students,number_of_tests))
allocate (letter_grade(number_of_students,number_of_tests))
read(1,10) ((scores(i,j),i=1,number_of_students), j=1,number_of_tests)
close(1)
! Используется конструкция where для присваивания значений массиву 'letter_grade',
! основанному на значениях массива 'scores'.
where(scores >= 90) letter_grade = 'A'
where(scores >= 80.and. scores < 90) letter_grade = 'B'
where(scores >= 70.and. scores < 80) letter_grade = 'C'
where(scores >= 60.and. scores < 70) letter_grade = 'D'
where(scores < 60) letter_grade = 'F'
write(*,*) letter_grade
deallocate(scores,letter_grade)! Освобождение памяти, использованной массивами.
10 format(i3,t5,i3)
end program
з
Встроенные
В Fortran 90 включены 75 новых встроенных функций:
В другом руководстве сказано, что Fortran 90 включает около 100 встроенных функций и очень много встроенных подпрограмм. Ряд функций позволяет иметь определенными атрибуты и допустимые параметры среды программирования, такие как наибольшее положительное число целое и с плавающей запятой, как доступ к системным часам. Включен генератор случайных чисел.
Все встроенные функции и подпрограммы описываются в соответствующем разделе.
Дата добавления: 2015-11-14; просмотров: 64 | Нарушение авторских прав
<== предыдущая страница | | | следующая страница ==> |
Выражения для массивов | | | Модули и процедуры |