Читайте также: |
|
Программа на FORTRAN 77 была часто спроектирована по блок-схеме. Этот вид проектирования ведет естественно к коду, составленному из фрагментов проверки и ветвления программ, он будет труден для внесения изменений, в частности для увеличения размера программы, он потребует большой отладки и в нем будет очень мало повторного использования. Новые методы проектирования программ включают декомпозицию больших проблем на малые проблемы до тех пор, пока решения не станут тривиальными. Новый стандарт Fortran 90 предоставляет конструкции управления, которые делают более легкими реализацию новых методов проектирования программного обеспечения.
В язык включены три новые конструкции для записи цикла.
з
DO / END DO*
END DO заменяет традиционный помеченный оператор завершения CONTINUE для цикла DO. При этом метка в операторе DO не обязательна.
Ниже приводится пример бесконечного цикла, который может быть закончен условным оператором GOTO.
name: DO выполняемые операторы END DO name
Обычный оператор цикла DO имеет следующую новую упрощенную форму без номера оператора,
name: DO i = целое_выраж_1, целое_выраж_2, целое_выраж_3 выполняемые операторы END DO nameгде i так называемая управляющая переменная, и где целое_выраж_3 необязательно.
з
DO WHILE *
Оператор обеспечивает повторение блока до тех пор, пока условие верно.
name: DO WHILE (логическое_выражение) выполняемые операторы END DO nameИмя здесь не обязательно, но может быть использовано для следующих циклов в целях индикации, когда нужны итерации, с операторами завершения CYCLE или EXIT.
S1: DO
IF (X Y) THEN
Z = X
EXIT S1
END IF
CALL NEW(X)
END DO
N = 0
LOOP1: DO I = 1, 10
J= I
LOOP2: DO K =1, 5
L = K
N = N +1
END DO LOOP2
END DO LOOP1
В последнем случае конечные значения переменных будут следующими, в полном соответствии со стандартом, I = 11, J = 10, K = 6, L = 5, и N = 50.
Именовать цикл не обязательно. Заметим, что этот тип имени ограничивает конструкции цикла DO, CASE или IF...THEN...ELSE...ENDIF. Старые возможности с номерами операторов все еще допустимы, также и в свободной форме.
з
Конструкция CASE *
Заменяет запутанную конструкцию IF/ELSE IF или вычисляемые GO TO. Делает код более легким для понимания и для записи.
Новая команда такова
SELECT CASE (выражение) CASE блок-переключатель блок CASE блок-переключатель блок CASE DEFAULT блок по умолчанию END SELECTТипичная конструкция:
SELECT CASE(3*I-J)! управляющая переменная это 3*i-j CASE(0)! для значения нуль:! вы вычисляете код здесь CASE(2,4:7)! для значений 2, 4, 5, 6, 7:! вы вычисляете код здесь CASE DEFAULT! и для всех остальных значений! вы вычисляете код здесь:! END SELECTЕсли CASE DEFAULT отсутствует и не находится альтернатива, вычисление продолжается прямо с оператора, за END SELECT без выдачи сообщения об ошибке. Другой пример:
INTEGER FUNCTION SIGNUM(N) SELECT CASE (N) CASE (:-1) SIGNUM = -1 CASE (0) SIGNUM = 0 CASE (1:) SIGNUM = 1 END SELECT END
! Еще один пример использования конструкции CASE
! (c)Copyright 1993, Lahey Computer Systems, Inc. All RIGHTS RESERVED
! Test: case1
!
! Legal - все возможные типы case-значение-диапазон для integer*4
!
integer*4 i
integer n /9/, a (9) /1,-11,81,31,41,51,61,71,25/
do 50 j = 1, n
i = a (j)
select case (i)
case (1)
print*,"should be 1, is ",i
case (: -11)
print*,"should be 11 or less, is ",i
case (81:)
print*,"should be 81 or greater, is ",i
case (31: 32)
print*,"should be 31 or 32, is ",i
case (41, 50:51, 61:61, 71:72)
print*,"should be 41, 50, 51, 61, 71, or 72, is ",i
case default
print,"should be any other number, is ",i
end select
50 continue
end
з
CYCLE, EXIT *
Прерывает отдельную итерацию цикла DO или весь цикл прежде чем завершится повторяемый блок. Уменьшает потребность в GO TO.
з
Дата добавления: 2015-11-14; просмотров: 52 | Нарушение авторских прав
<== предыдущая страница | | | следующая страница ==> |
Вид семейства | | | Выражения для массивов |