Как работают циклы `DO` в Fortran 66? - PullRequest
4 голосов
/ 29 июля 2011

Я читаю старую книгу, которую я нашел в магазине подержанных книг (снова). Этот метод называется «Методы Фортрана - с особым акцентом на нечисловые приложения» - А. Колин Дей, опубликованный издательством Cambridge University Press в 1972 году. В конце концов, очень важно быть в курсе последних достижений в разработке программного обеспечения; -)

Эта книга претендует на то, чтобы охватить Фортран-66 (X3.9-1966), он же Фортран-IV, с небольшим отклонением от этого стандарта для DATA утверждений, которые здесь не актуальны.

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

Вот один пример ...

    DO 15 I = 1, 87
    J = I - 44

В строке DO 1 и 87, по-видимому, представляют включающий диапазон для цикла - I принимает значения от 1 до 87 включительно, поэтому J принимает значения от -43 до +43 включительно. Однако, что означает 15?

Другой пример ...

    N = 1
    DO 33 I = 1, 10
    ...
33  N = N + N

В этом случае 33 выглядит как метка или номер строки - предположительно последняя строка, выполненная перед повторением (или выходом) цикла. Но 33 - это нечетное число, выбранное в качестве произвольной метки.

РЕДАКТИРОВАТЬ Это была ошибка - см. Ответ по duffymo - Как работают циклы `DO` в Фортране 66?

И следующий пример после этого ...

    DO 33 I = 1, 10
    N = 2 ** (I-1)

Снова используя те же 33, но без любой строки, явно помеченной этим.

Я в замешательстве, потому что это короткие фрагменты, вырванные из контекста? Что означает n в DO n ...?

Ответы [ 3 ]

4 голосов
/ 30 июля 2011

Вот полная программа, которая должна ответить на некоторые ваши вопросы.Этот исторический вопрос легко проверить ... FORTRAN IV по-прежнему поддерживается многочисленными компиляторами, хотя части FORTRAN IV либо официально устарели, либо, на мой взгляд, должны быть устаревшими.Я скомпилировал и проверил эту программу как с g77 (которая близка к устаревшей, так как она долго не поддерживается), так и с gfortran.

Вот пример программы:

      implicit none

      integer i
      real q

      q = 1.0
      do i=1, 10
         q = q * 1.5
      end do
      write (6, *) "modern loop: q =", q

      q = 1.0
      do 100 i=1, 10
         q = q * 1.5
  100 continue
      write (6, *) "loop with continue: q =", q

      q = 1.0
      do 200 i=1, 10
  200 q = q * 1.5
      write (6, *) "loop without continue: q =", q

      stop
      end

И как скомпилировать ее с помощью gfortran: gfortran -ffixed-form -ffixed-line-length-none -std = gnu test_loops.for -o test_loops.exe

Ваш вопрос: если вы завершаете цикл с помеченной строкой, которая является исполняемым кодом, является ли эта строка частью цикла?Вывод программы ясно показывает, что помеченная линия является частью цикла.Вот вывод gfortran:

современный цикл: q = 57.665039
цикл с продолжением: q = 57.665039
цикл без продолжения: q = 57.665039

4 голосов
/ 29 июля 2011

Номер строки сообщает коду, куда идти после завершения цикла.

Да, числа являются нечетными, произвольными и бессмысленными.Это часть того, что делает Фортран трудным для чтения и понимания.

0 голосов
/ 06 июня 2015

Число 15, известное как «Метка», было решено программистом.В зависимости от организационных стандартов эти цифры контролировались и следовали определенным правилам.Хотя некоторые программисты не придерживались стандартов, и их код был беспорядочным;Комментарии и отступы также были частью стандартов, которым следовало большинство.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...