Kievuz

Лекция 11 Операторы Фортрана

Лекция 11 Операторы Фортрана

Лекция 11 Операторы Фортрана

Выполняемые Невыполняемые (декларативные)
ПрисваиванияВвода/выводаУправления ОписанияРаспределения памятиЗаголовкиОстальные

Независимо транслируемая часть программы.

· Головная программа,

· подпрограмма-функция,

· подпрограмма-процедура,

· BLOCKDATA.

Порядок следования операторов в программном модуле

PROGRAM,BLOCKDATA,FUNCTION,SUBROUTINE
IMPLICIT PARAMETER ENTRY
COMMONDIMENSIONEQUIVALENCEEXTERNALINTRINSICОператоры описания типа FORMAT
Операторные функции DATA
Выполняемые операторы
END

11.3 Операторы присваивания

Oпepaтop пpиcвaивaния являетcя выпoлняeмым oпepaтopом. Он служит для переопределения знaчeния простой пepeмeнной или элeмeнтa мaccивa и имеет вид:

А=В

где А – арифметическая (логическая) переменная, В – арифметическое (логическое) выражение. Символ присваивания “=” означает, что величина А принимает значение выражения В, возможно преобразование типа результата к типу переменной.

Имя оператора – знак =.

I2 I4 R4 R8 C8 C16
I2 Ул [ ]ул [ ]ул [ ] -iул [ ] -iул
I4 О [ ]ул [ ]ул [ ] -iул [ ] -iул
R4 уп -i -iуп
R8 О -i -i
C8 0i 0i 0i 0iуп уп
C16 0i 0i 0iО 0i О

Обозначения:

ул – усечение старших разрядов;

уп – усечение младших разрядов;

[ ] – выбирается целая часть числа;

0 – дополняется нулями;

0i – добавляется нулевая мнимая часть;

-i – отбрасывается мнимая часть.

11.4 Оператор CONTINUE

Выполняемый пустой оператор – носитель метки. Играет важную роль в структурном программировании как средство отделения логики программы от вычислительных кодов.

11.5 Оператор безусловной передачи управления

Имя оператора – GOTO.

Формат записи – GOTO .

Осуществляется передача управления на оператор с меткой .

Существует ограничение на использование оператора GOTO – нельзя передавать управление внутрь тела цикла DO, а также внутрь блоков структурного оператора IF.

Пpимep:

GOTO 4022

4022 CONTINUE

11.6 Вычисляемый оператор передачи управления

Имя оператора – GOTO.

Формат записи – GOTO([,]…)[,]

гдe:

– мeткa выпoлняeмoгo oпepaтopa, находящегося в той же программной единице. Однa и тa жe мeткa мoжeт пoвтopятьcя в списке.

Вычисляется значение i целочисленного выражения. Если это значение в диапазоне от 1 до n, где n – количество меток в скобках, то управление передается оператору с меткой, стоящей на
i-том месте в списке меток.

Пpимep:

GOTO (15,17,84,3) k+1

Если k=2, то управление будет передано оператору с меткой 84.

Если k=7, то управление передается следующему оператору программы.

11.7 Оператор передачи управления по предписанию

Имя оператора – GOTO.

Формат записи – GOTO ([,]…)

гдe:

– мeткa выпoлняeмoгo oпepaтopa, находящегося в той же программной единице.

С помощью оператора ASSIGN TO целочисленная переменная связывается с конкретной меткой из списка меток оператора «GOTO по предписанию». На оператор с этой меткой будет передано управления при выполнении оператора «GOTO по предписанию». Если метка отсутствует в списке, управление передается следующему оператору.

Пример :

ASSIGN 10 TO I

GOTO I(4,10,777)

10 CONTINUE

11.8 Арифметический оператор условной передачи управления

Имя оператора IF

Формат записи

IF(),,

гдe:

,, – мeтки выпoлняeмых oпepaтopов, находящихся в той же программной единице.

Bычиcляeтся арифметическое выpaжeниe и упpaвлeниe пepeдaeтся oпepaтopу, пoмeчeннoму oднoй из oпиcaнныx мeтoк в cooтвeтcтвии c peзультaтoм вычисления выpaжeния.

Если значение выражения меньше нуля, то управление передается оператору с меткой , если значение выражения равно нулю, то управление передается оператору с меткой , если значение выражения больше нуля, то управление передается оператору с меткой .

Метки в списке меток могут повторяться. Оператор IF(A)17,17,17 эквивалентен оператору GOTO 17.

Пpимep:

I = 0

IF (I) 10,20,30

10 CONTINUE

20 CONTINUE

30 CONTINUE

11.9 Логический оператор условной передачи управления

Имя оператора IF

Формат записи IF()

Bычиcляeтся логическое выpaжeниe и, если значение .TRUE., то выполняется оператор , в противном случае управление передается следующему оператору. В качестве оператора может использоваться любой выпoлняeмый oпepaтop, кpoмe оператора цикла DO, логического и структурного операторов условной передачи управления.

Пpимep:

IF (I.EQ.O) J = 2

IF (X.GT.2.3) GOTO 100

100 CONTINUE

11.10 Структурный оператор условной передачи управления*

Формат оператора

IF () THEN

[ELSE

]

ENDIF

Строка ELSE с соответствующим блоком может отсутствовать.

Пepeдaвaть упpaвлeниe внутpь блоков нeдoпуcтимo.

Пpимep:

IF(I.GT.1000)THEN

ELSEIF(J.GT.100)THEN

ELSEIF(J.GT.10)THEN

ELSE

ENDIF

Конструкция

ELSEIF

эквивалентна

ELSE

IF

11.11 Оператор цикла с параметром

DO[,]=,[,]

Метка – метка конечного оператора цикла.

Переменная называется параметром цикла – переменная целого (любого арифметического*) типа.

Выражения в списке – выражения целого (любого арифметического*) типа.

Конечный оператор цикла должен находиться после оператора DO и содержаться в той же программной единице.

В качестве конечного оператора цикла можно использовать любой выполняемый оператор, кроме оператора безусловной передачи управления, арифметического оператора условной передачи управления, операторов STOP, RETURN, DO и логического оператора условной передачи управления с перечисленными выше операторами.

Операторы, расположенные после оператора DO, вплоть (включая) до конечного оператора цикла, составляют тело цикла.

Тело цикла выполняется последовательно для каждого значения параметра цикла начиная со значения до (включая) значения с шагом равным значению .

Если выражение отсутствует, то шаг изменения параметра цикла равен 1.

О вложенности операторов (гнезда операторов DO)

Предостерегающий пример:

INTEGER*2I

DO 100 I=32760,32767

. . .

100 CONTINUE

В этом примере параметр цикла объявлен как переменная целого типа длины 2 байта. При реализации цикла транслятор использует в качестве счетчика итераций 32-битное слово. Поэтому тело цикла будет выполнено благополучно, не смотря на то, что после последней итерации значение параметра цикла превышает максимальное двухбайтное целое.

Источник: http://kursak.net/lekciya-11-operatory-fortrana/

Лекция 11 11.1 Операторы Фортрана Выполняемые Невыполняемые декларат

Лекция 11 Операторы Фортрана
Работа добавлена на сайт TXTRef.ru: 2019-04-15

Выполняемые Невыполняемые (декларативные)
ПрисваиванияВвода/выводаУправления ОписанияРаспределения памятиЗаголовкиОстальные

Независимо транслируемая часть программы.

  1.  Головная программа,
  2.  подпрограмма-функция,
  3.  подпрограмма-процедура,
  4.  BLOCKDATA.

Порядок следования операторов в программном модуле

PROGRAM,BLOCKDATA,FUNCTION,SUBROUTINE
IMPLICIT PARAMETER ENTRY
COMMONDIMENSIONEQUIVALENCEEXTERNALINTRINSICОператоры описания типа FORMAT
Операторные функции DATA
Выполняемые операторы
END

Литература по Фортрану (в дополнение к списку 1 семестра): П. В. Соловьев. Fortran для персонального компьютера (Справочное пособие). М 1991

Лекция 11 Операторы Фортрана

стр 9

скачать

Выполняемые Невыполняемые (декларативные)
ПрисваиванияВвода/выводаУправления Описания Распределения памятиЗаголовкиОстальные

Независимо транслируемая часть программы.

  • Головная программа,
  • подпрограмма-функция,
  • подпрограмма-процедура,
  • BLOCKDATA.

Порядок следования операторов в программном модуле

PROGRAM,BLOCKDATA,FUNCTION,SUBROUTINE
IMPLICIT PARAMETER ENTRY
COMMONDIMENSIONEQUIVALENCEEXTERNALINTRINSICОператоры описания типа FORMAT
Операторные функции DATA
Выполняемые операторы
END

Oпepaтop пpиcвaивaния являетcя выпoлняeмым oпepaтopом. Он служит для переопределения знaчeния простой пepeмeнной или элeмeнтa мaccивa и имеет вид:

А=В
где А – арифметическая (логическая) переменная, В – арифметическое (логическое) выражение. Символ присваивания “=” означает, что величина А принимает значение выражения В, возможно преобразование типа результата к типу переменной.

Имя оператора – знак =.

I2 I4 R4 R8 C8 C16
I2 Ул [ ]ул [ ]ул [ ] -iул [ ] -iул
I4 О [ ] ул [ ] ул [ ] -iул [ ] -iул
R4 уп -i -iуп
R8 О -i -i
C8 0i 0i 0i 0iуп уп
C16 0i 0i 0iО 0i О

Обозначения:

ул – усечение старших разрядов;

уп – усечение младших разрядов;

[ ] – выбирается целая часть числа;

0 – дополняется нулями;

0i – добавляется нулевая мнимая часть;

-i – отбрасывается мнимая часть.

О бедном фортране замолвите слово

Лекция 11 Операторы Фортрана

Попробовать написать здесь свой первый пост меня подтолкнула статья о выборе первого языка программирования, где vt4a2h предлагает использовать для обучения C++. Да, на данную тему было сломано множество копий.

Я, как и наверное большинство школьников на просторах нашей необъятной Родины, начинал постигать азы через синий экран, но не смерти, а Turbo Pascal 7.0. Был конечно и Basic, с котором я впервые столкнулся в дошкольном возрасте на советском компьютере «Электроника».

Тогда он казался странным текстовым редактором, ведь компьютер глазами ребенка создан для игр. Однако уже в институте я познакомился с языком Fortran, познав который, я до сих пор недоумеваю, почему он не используется для обучения.

Да, многие скажут, что язык мертвый, не соответствует современным реалиям, а учебники с названием, как на картинке, вызывают лишь улыбку. Я попробую объяснить, чем же так замечателен этот язык и почему я его рекомендую в качестве первого языка. Если заинтересовало, добро пожаловать под кат.

Я считаю, что базис по основам программирования должен закладываться еще в школьные годы, хотя бы в старших классах.

Даже если в жизни компьютер будет использоваться только для набора текста в Word'е или для общения в социальных сетях, минимальные знания о том, что такое алгоритм и как структурировать последовательность действий, чтобы получить нужный результат, по крайней мере не повредят молодому отроку во взрослой жизни, а скорей всего помогут сформировать особый склад ума. Для того, чтобы уроки информатики были в радость, а не снились в кошмарных снах, обучаемый должен понимать, что он делает, как он это делает и почему получается так, а не иначе. Ведь по сути нужно правильно донести информацию о цикле и условном операторе, чтобы человек мог писать программы самостоятельно. При этом, чем проще синтаксис языка, тем легче понять логику написания кода. Если же человек научится составлять правильный алгоритм, то для программирования на других языках, ему понадобится только узнать синтаксис этого языка, а базис уже будет заложен.

Чем же так замечателен Фортран?

Обратимся к истории создания этого языка. Появился он в далекие 50-е годы прошлого века, когда компьютеры еще были большие, программистов было мало, а информатика не преподавалась в школе, да и вообще считалась лженаукой.

Нужен был простой язык, который помогал бы инженерам и ученым «скармливать» ЭВМ формулы, написанные на бумаге, пусть даже через перфокарты.

Отсюда и название самого языка: Formula Translator или же «переводчик формул». Т.е.

изначально язык был ориентирован на людей без специальной подготовки, а значит должен был быть максимально простым.

Что ж, простота создателям удалась. Классическая первая программа выглядит следующим образом: program hwwrite(*,*) 'Hello, World!'end
Синтаксис даже чуть проще Паскаля, нет необходимости ставить в конце строки “;” или “:” перед знаком равенства. Более того, людям, обладающих минимальным знанием английского языка, понять смысл простейшей программы не составит труда. Тут я хочу отметить, что Фортран имеет несколько ревизий стандартов, основными из которых являются 77 и 90 (при этом сохраняется преемственность). 77 Фортран действительно архаичен, есть ограничение на длину строки, и необходимо делать отступ в начале строки, что может вызвать у молодого кандидата в программисты культурный шок. Недаром программы, написанные на 77 Фортране, получили из уст моего знакомого емкое название «Брежневский код». Поэтому весь мой текст относится к стандарту языка 90 и новее. Для примера, приведу код для вычисления суммы неотрицательных целых чисел от 1 до n, вводимого с клавиатуры, написанный моей дипломницей при обучении её программированию с нуля. Именно на ней я испытал преподавание Фортрана в качестве первого языка. Надеюсь, что для неё это пошло на пользу, а мой экперимент удался. По крайней мере основы она усвоила за пару занятий, первое из которых ушло на лекцию про язык. program chisla implicit none ! Variables integer n,i,s ! Body of chisla s=0 write (*,*) 'Введите n' read (*,*) nif (n.le.0) then write (*,*) 'Отрицательное или ноль'else do i=1,n s=s+i end do write (*,*) 'Сумма=', send if end Нетрудно заметить, что как мы думаем, так и записываем код. Никаких сложностей у обучаемого не может возникнуть в принципе. Внимательный читатель конечно же спросит, что за implicit none и две звездочки в скобках через запятую. implicit none говорит нам, что мы явно указываем тип переменных, тогда как без данной записи компилятор будет сам угадывать тип. Первая звездочка означает, что ввод и вывод происходят на экран, а вторая говорит о том, что формат ввода-вывода определяется автоматически. Собственно, программы на Фортране выглядит не сложнее, чем написанный выше кусок кода.

А что насчет программной среды?

В школах, да и в любых госучреждениях, часто встает вопрос о программном обеспечении, в частности об его лицензионности. Потому как деньги на эти нужды особо не выделяются. По крайней мере в мое время, с этим была проблема, может сейчас ситуация изменилась в лучшую сторону. Для написания программ на Фортране подойдет любой текстовый редактор.

Если хочется подсветки синтаксиса, то можно использовать Notepad++ (поддерживает синтаксис только 77 стандарта) или SublimeText. Программу написали, чем будем компилировать? Тут все просто, можно использовать свободный GNU Fotran.

Если использование планируется некоммерческое, то разрешается замахнуться и на компилятор от Intel, который хорошо оптимизирован под одноименные процессоры и поставляется с минимально необходимым IDE. Т.е. порог вхождения весьма льготный. Лучшей средой разработки под Фортран по мнению многих пользователей остается Compaq Visual Fortran 6.

6, последняя версия которого увидела свет в начале 2000-х. Почему же так сложилось, что среда, основанная на Visual Studio 6.0, которая без танцев с бубном заводится максимум на Windows XP 32 bit, и имеет ограничение на используемую память, снискала такую популярность среди фортранщиков. Ответ приведен на рисунке ниже.

Это Compaq Array Visualizer, который представляет собой очень удобный инструмент по визуализации 1, 2 и 3-х мерных массивов в процессе отладки программы непосредственно из дебаггера. Как говорится, попробовав раз, ем и сейчас.

Дело в том, что Фортран сейчас используется в основном в науке (о чем будет сказано позже), в частности в той области, с которой я имею дело, а именно в физике атмосферы. При отладке программ массивы представляют собой различные метеорологические поля, такие как температура, давление, скорость ветра.

Искать ошибку в графических полях гораздо проще, чем в наборе цифр, тем более, обычно известно, как примерно должно выглядеть поле, поэтому очевидные ошибки отсекаются моментально. К сожалению, все наработки по компилятору перешли от Compaq к Intel.

Intel первоначально поддерживала Array Visualizer, правда, уже те версии были бледным отражением продукта от Compaq, работать с ними было не так удобно, как прежде, но хотя бы минимальная работоспособность поддерживалась. Увы, Intel перестала разрабатывать новые версии Array Visualizer'а, поставив крест на этом удобнейшем инструменте. Именно поэтому фортрановское сообщество в основной своей массе пишет программы и занимается их отладкой под Compaq Visual Fortran на Windows, а боевые расчеты запускает на серверах под Linux, используя Intel-овские компиляторы. Интел, пожалуйста, услышь мольбы пользователей, верни нормальный инструмент для визуализации массивов в свой дебаггер!

Место Фортрана в современном мире

А сейчас мы подошли к той самой теме, которая обычно вызывает бурную дискуссию с моими коллегами, использующими Matlab, которые утверждают, что описанный в данном посте раритетный язык ни на что не годится.

Тут я с ними не соглашусь. Дело в том, что Фортран исторически использовался в инженерных или научных расчетах, а потому со временем обрастал множеством готовых библиотек и кодами программ решения той или иной задачи.

Код в буквальном смысле передается из поколения в поколение, да еще и хорошо документируется. Можно найти множество готовых решений уравнений математической физики, линейной алгебры (здесь следует отметить удачную реализацию работы с матрицами), интегральных и дифференциальных уравнений и многого-многого другого. Наверное тяжело найти задачу из области физмат наук, для которой не был бы реализован алгоритм на языке Фортран. А если учесть отличную оптимизацию интеловских компиляторов под интеловские же процессоры, поддержку параллельных вычислений на высокопроизводительных кластерах, то становится понятно почему в научной среде этот язык занимает заслуженное первое место. Думаю, на любом суперкомпьютере можно найти установленный фортрановский компилятор. Большинство серьезных моделей, по крайней мере из области физики атмосферы, написаны именно на Фортране. Да-да, прогноз погоды, которым каждый интересуется время от времени, получается в ходе расчетов моделей, написанных на этом языке. Более того, язык не находится в стагнации, а постоянно совершенствуется. Так, после описанных раннее стандартов 77 и 90, появились новые редакции 95, 2003, 2008, поддержка которых внедрена в актуальные компиляторы. Последние версии Фортрана несколько освежили старый проверенный временем язык, превнеся поддержку современного стиля, добавив объектно-ориентированное программирование, отсутствие которого было чуть ли не самым главным козырем противников этого языка. Более того, The Portland Group выпустила PGI CUDA Fortran Compiler, позволяющий проводить высокопараллельные расчеты на видеокартах. Таким образом, пациент более чем жив, а значит программисты на Фортран остаются востребованными до сих пор.

Вместо послесловия

А теперь я хотел бы вернуться к изначально затронутой теме об обучении программированию, и попытаться тезисно сформулировать основные плюсы Фортрана при выборе его в качестве первого языка.

  • Фортран очень прост в обучении, синтаксис понятен неподготовленному человеку. Познав основы, легко переучиться на любой другой язык.

  • Бесплатный набор средств позволяет не получать лишних вопросов от правообладателей.
  • Язык знаком преподавателям, так как существует давно, а учителя у нас в основном представители старшего поколения.
  • Широко распространен по всему миру и является кладезем всевозможных библиотек.

  • Стандартизирован, кроссплатформеннен и совместим с более ранее ревизиями.
  • Полезен для студентов технических, а особенно физмат специальностей, ввиду ориетации на научные и инженерные вычисления.
  • Актуален и востребован и по сей день.

Так почему же не Фортран?

  • fortran
  • обучение программированию
  • compaq
  • intel

Источник: https://habr.com/post/202680/

ovdmitjb

Add comment