Не уверен, что сюда... Читаю книжку по 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"...
И правильно ли я тут "полный проход" увидел?