2015-07-24 4 views
0

Я работаю над фрагментом устаревшего кода F77 и пытаюсь его преобразовать в эквивалентный код F90. Я столкнулся с этими строками ниже и мог бы сообщить , если мое преобразование верное?Преобразование инструкции Go-to из FORTRAN 77 в Fortran 90

Fortran 77 код:

Subroutine area(x,y,z,d) 
do 15 j=1,10 
if (a.gt.b) go to 20 
15 CONTINUE 
20 Statement 1 
    Statement 2 
    Statement 3 
end subroutine 

Я попытался преобразовать его в F90 и придумал, как показано ниже:

Subroutine area(x,y,z,d) 
    dloop: do j=1,10 
    if (a>b) then 
     statement 1 
     statement 2 
     statement 3 
    else 
     write(*,*) 'Exiting dloop' 
     exit dloop 
    end if 
    end do dloop 
end subroutine 

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

+1

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

+1

Стоит также отметить: это уже код F90. – francescalus

+0

Чтобы убедиться, что ничего не пропало, следует упомянуть операторы, которые изменяют 'a' или' b', чтобы заставить оператор 'if' в конечном итоге получить' .true.'; Вы можете вставить только что-то вроде 'сделайте некоторые вычисления' в свой пример кода – innoSPG

ответ

4

Вы получили перевод немного неправильно ... Первый шаг, чтобы восстановить do петлю, которая закругляется на 15:

Subroutine area(x,y,z,d) 
do j=1,10 
    if (a.gt.b) go to 20 
enddo 
20 Statement 1 
    Statement 2 
    Statement 3 
end subroutine 

Теперь вы можете увидеть, что goto приводит «выпрыгивает из петли ». В этом конкретном примере, это эквивалентно exit, а код может быть записан в виде

Subroutine area(x,y,z,d) 
    do j=1,10 
    if (a.gt.b) exit 
    enddo 
    Statement 1 
    Statement 2 
    Statement 3 
end subroutine 
+0

Спасибо Vogt, позвольте мне попробовать. Тем не менее, мне интересно, что в этом выражении «если» нет «еще». Что произойдет, если утверждение ложно? –

+1

Если оператор оценивает значение FALSE, цикл продолжит свою следующую итерацию, пока не достигнет своего предела (в данном случае 10 итераций). – chw21

Смежные вопросы