Не уверен, что сюда... Читаю книжку по Fortran, назрел вопрос.
Нужно считать с клавиатуры числа и вывести определённые статистические данные (среднее арифметическое и т.п.). Пускай ситуация такова, что все числа положительны и условие окончания ввода - отрицательное число. Вроде "полный проход": 
Код:
  WRITE (*, *) 'Enter number: '
  READ (*, *) x
  
  DO WHILE (x >= 0)
    n = n + 1
    sum_of_x = sum_of_x + x
 
    WRITE (*, *) 'Enter number: '
    READ (*, *) x
  END DO
Надеюсь, код будет понятен и тем, кто не знаком с Fortran. Понятно, что можно операторы ввода/вывода "запихать" в отдельную подпрограмму. Не суть.
Автор предлагает такой вариант:
Код:
  DO
    WRITE (*, *) 'Enter number: '
    READ (*, *) x
    
    IF (x < 0) EXIT
    
    n = n + 1
    sum_of_x = sum_of_x + x
  END DO
Вот значит какая штука. Цикл-пока в Fortran можно записать по-разному:
вариант 1Код:
DO WHILE (условие)
  ...
END DO
или
вариант 2Код:
DO
  ...
  IF (условие) EXIT
  ...
END DO
Первая конструкция является частным случаем более общей второй, у которой IF следует непосрдественно за заголовком цикла. А так можно это условие куда угодно "запихать". То есть можно заиметь и while, и repeat, и нечто среднее. 

 Пугающая универсальность...
Этих условий выхода может быть даже несколько. Начал читать Дейкстру. Он за то, что бы каждый программный блок имел "a single entry at the top and a single exit at the bottom." Конструкций с множеством EXIT, следовательно, нужно избегать. 
А вот как быть с конструкциями вариант 2? То есть важно ли, что-бы выход был именно  "at the bottom"? Ведь и в while выход отнюдь не "at the bottom"... 
 И правильно ли я тут "полный проход" увидел?