OberonCore

Библиотека  Wiki  Форум  BlackBox  Компоненты  Проекты
Текущее время: Вторник, 19 Март, 2024 06:28

Часовой пояс: UTC + 3 часа




Начать новую тему Ответить на тему  [ Сообщений: 2 ] 
Автор Сообщение
СообщениеДобавлено: Четверг, 08 Апрель, 2010 22:30 

Зарегистрирован: Воскресенье, 03 Февраль, 2008 12:50
Сообщения: 249
Не уверен, что сюда... Читаю книжку по 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"... :|
И правильно ли я тут "полный проход" увидел?


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Пятница, 09 Апрель, 2010 10:10 
Аватара пользователя

Зарегистрирован: Пятница, 25 Ноябрь, 2005 12:02
Сообщения: 8500
Откуда: Троицк, Москва
kemiisto писал(а):
И правильно ли я тут "полный проход" увидел?
Правильно.

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


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 2 ] 

Часовой пояс: UTC + 3 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Вся информация, размещаемая участниками на конференции (тексты сообщений, вложения и пр.) © 2005-2024, участники конференции «OberonCore», если специально не оговорено иное.
Администрация не несет ответственности за мнения, стиль и достоверность высказываний участников, равно как и за безопасность материалов, предоставляемых участниками во вложениях.
Без разрешения участников и ссылки на конференцию «OberonCore» любое воспроизведение и/или копирование высказываний полностью и/или по частям запрещено.
Powered by phpBB® Forum Software © phpBB Group
Русская поддержка phpBB