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/ |