OberonCore
https://forum.oberoncore.ru/

Важно ли, что-бы выход из блока был именно "at the bottom"?
https://forum.oberoncore.ru/viewtopic.php?f=82&t=2541
Страница 1 из 1

Автор:  kemiisto [ Четверг, 08 Апрель, 2010 22:30 ]
Заголовок сообщения:  Важно ли, что-бы выход из блока был именно "at the bottom"?

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

Автор:  Info21 [ Пятница, 09 Апрель, 2010 10:10 ]
Заголовок сообщения:  Re: Важно ли, что-бы выход из блока был именно "at the botto

kemiisto писал(а):
И правильно ли я тут "полный проход" увидел?
Правильно.

Автор же оптимизирует.

Страница 1 из 1 Часовой пояс: UTC + 3 часа
Powered by phpBB® Forum Software © phpBB Group
https://www.phpbb.com/