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

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

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

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

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

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

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

Отсюда и название самого языка: For mula Tran slator или же «переводчик формул». Т.е. изначально язык был ориентирован на людей без специальной подготовки, а значит должен был быть максимально простым.

Что ж, простота создателям удалась. Классическая первая программа выглядит следующим образом:

Program hw write(*,*) "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 (*,*) n if (n.le.0) then write (*,*) "Отрицательное или ноль" else do i=1,n s=s+i end do write (*,*) "Сумма=", s end 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, позволяющий проводить высокопараллельные расчеты на видеокартах. Таким образом, пациент более чем жив, а значит программисты на Фортран остаются востребованными до сих пор.

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

А теперь я хотел бы вернуться к изначально затронутой теме об обучении программированию, и попытаться тезисно сформулировать основные плюсы Фортрана при выборе его в качестве первого языка.
  • Фортран очень прост в обучении, синтаксис понятен неподготовленному человеку. Познав основы, легко переучиться на любой другой язык.
  • Бесплатный набор средств позволяет не получать лишних вопросов от правообладателей.
  • Язык знаком преподавателям, так как существует давно, а учителя у нас в основном представители старшего поколения.
  • Широко распространен по всему миру и является кладезем всевозможных библиотек.
  • Стандартизирован, кроссплатформеннен и совместим с более ранее ревизиями.
  • Полезен для студентов технических, а особенно физмат специальностей, ввиду ориетации на научные и инженерные вычисления.
  • Актуален и востребован и по сей день.
Так почему же не Фортран?

Лекция 3. Структура программы. Реализация алгоритма линейной структуры на Фортране.

Структура программы на Фортране

Программа в общем случае состоит из головной (MAIN) программы и подпрограмм (SUBROUTINE и (или) FUNCTION).

    В головной программе запрограммирован весь алгоритм решения задачи.

    Программа всегда начинает и завершает выполнение в головной программе .

    В подпрограмме запрограммирована логически законченная часть алгоритма.

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

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

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

    Библиотеки стандартных программ состоят из подпрограмм, написанных профессионалами.

СТРУКТУРА ФОРТРАН - ПРОГРАММЫ

Общая структура основной (головной) Фортран - программы (MAIN PROGRAM ):

[ PROGRAM имя программы ]

[ ! КОММЕНТАРИИ ]

[ неисполняемые операторы - объявления ]

[ исполняемые операторы ]

END [ PROGRAM [имя программы ] ]

    – НЕОБЯЗАТЕЛЬНАЯ ЧАСТЬ КОНСТРУКЦИИ

    ТЕКСТ, ИЗОБРАЖЕННЫЙ ЗДЕСЬ КРАСНЫМ КУРСИВОМ ИМЕЕТ ВПОЛНЕ ОПРЕДЕЛЕННЫЙ СМЫСЛ И ЗАПИСЫВАЕТСЯ В СООТВЕТСТВИИ С ТРЕБОВАНИЯМИ ЯЗЫКА

    END ОПЕРАТОР ОБЯЗАТЕЛЬНО ЗАВЕРШАЕТ ПРОГРАММУ

Определение. Операторы – последовательность символов, которая задает определенные действия. Операторы делятся на: исполняемые и неисполняемые.

Исполняемые операторы задают действия над данными. Различают следующие типы таких операторов:

1. Операторы обработки информации.

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

    Операторы чтения (ввода)

    Операторы записи (вывода)

2. Операторы, управляющие работой программы во времени.

Неисполняемые операторы служат для описания типа данных или некоторых элементов программы, поэтому их часто называют операторами описания или просто описаниями или объявлениями.

Комментарии предназначены человеку для документирования программы и для улучшения понимания алгоритма и операторов.

Алгоритм линейной структуры

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

Рассмотрим возможныев таких алгоритмах действия (шаги алгоритма и соответствующие им операторы Фортрана).

Операторы начала и конца программы

Первая строка программы рассматривается как начало программы. В современных версиях Фортрана принято оформлять программу оператором начала программы, за которым указывается имя программы:

PROGRAM {имя программы}

Обычно имя программы выбирают так, чтобы оно отражало назначение (содержание) программы. Например, PRIMER, SUMMA и т.д.:

PROGRAM PRIMER_1 ! имя программы PRIMER_1

PROGRAM POISK ! имя программы указывает на ее содержание

Оператор начала программы не обязателен, а вот заканчиваться программа должна обязательно оператором конца программы – END (см. раздел «Структура Фортран-программы). В Фортране-90 каждый оператор обычно занимает отдельную строку. Если в строке записывается несколько операторов, они разделяются точкой с запятой «; ».

Операторы ввода/вывода

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

Рассмотрим простой ввод данных с клавиатуры, для которого используется оператор READ, для вывода результатов на экран – оператор PRINT.

Общий вид операторов и правила работы с ними приведены ниже. Например, требуется ввести значения четырех переменных t, y, k и f:

READ* , t, y, k, f ! В списке ввода имена переменных отделяются запятыми

Такой оператор означает ввод четырех значений переменных последовательно с клавиатуры. На этапе выполнения программы, значения вводятся с клавиатуры, они должны быть разделены друг от друга либо запятыми, либо пробелами, либо нажатием ENTER. Пока не будут введены все значения из списка, выполнение программы будет блокировано. Примеры ввода значений:

0.56 -2.756 100 0.003 ! Числа отделяются пробелом или

0.56, -2.756, 100, 0.003 ! Числа отделяются запятой или

0.56 ! Числа отделяются клавишей ENTER

В результате выполнения оператора ввода, переменная t получит значение 0.56, y получит значение -2.756, k будет равно 100, а f – 0.003. В списке ввода можно использовать только имена переменных, констант, и вводятся они в той же последовательности с клавиатуры, как было задано в операторе.

Для вывода результатов в алгоритме предусматривается специальный шаг – вывод:

ВЫВОД список вывода

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

Список вывода также может содержать поясняющие результат текстовые строки, например, вывод ′q=′, q, ′ масса m=′, m

В фортран – программе этот шаг алгоритма в простейшем случае заменяется оператором

PRINT* , список вывода

В списке вывода можно использовать, кроме переменных и констант, поясняющий текст, который заключается в апострофы или кавычки. Например, задан оператор вывода на экран

PRINT *,’x=’,x,’ y=’,y

Пусть в результате выполнения некоторых вычислений программы, x стало равным 3.09, а y = 5.01. Тогда на экране компьютера появится следующая строка:

Таким образом, текст, взятый в апострофы в операторе вывода, будет напечатан без изменения, а на месте имен переменных будут отображены их значения.

Наличие звездочки и запятой после слова READ/PRINT обязательны! Звездочка * означает, что значения переменных вводятся/выводятся на экран «по умолчанию», в том стандартном виде, который закодирован в Фортране.

Список вывода оператора PRINT может содержать:

    имена переменных,

    строковые константы (записываются в одиночных или двойных кавычках) для пояснения результатов и вывода текста,

    арифметические выражения. В этом случае сначала вычисляется значение арифметического выражения, а затем вычисленное значение выводится на экран.

Примеры:

PRINT*, ″WWOD M,N ″ ! вывод на экран текстовой подсказки для ввода

PRINT*, z, y ! Вывод только значений переменных z и y

PRINT*, ″ Z= ″, z, ″ Y= ″, y ! Вывод значений переменных z и y с пояснением

Вывод значения корня квадратного из числа 2 с пояснением:

PRINT*, " SQRT(2.0) =" , SQRT(2.0)

    Каждый оператор вывода формирует одну запись.

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

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

Одним из наиболее распространенных шагов алгоритмов в математических задачах является вычисления по формулам. Результатам вычислений по формулам часто присваивают свои обозначения (имена переменных), чтобы пользоваться ими в дальнейшем.

Для записи операции присваивания будем в дальнейшем использовать символ = (не следует путать его с обычным знаком равенства).

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

Шаг алгоритма, в котором описывается вычисление по формулам или осуществляется явное задание значений, будем называть присваиванием. В блок-схеме такой шаг алгоритма изображается с помощью блока обработки. В Фортран – программе его заменяет арифметический оператор присваивания.

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

Это выполняемый оператор, с помощью которого проводятся вычисления по формулам, задаются начальные значения, осуществляется «пересылка» значений из одной ячейки памяти в другую (переприсваивание значений).

Общий вид этого оператора: x = АВ,

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

Для компьютера этот оператор - указание о выполнении следующих действий:

1) вычислить значение арифметического выражения (АВ) в правой части оператора при текущих значениях входящих в него переменных;

2) привести значение полученного результата к типу переменной, находящейся в правой части оператора;

3) присвоить переменой, находящейся в правой части оператора, вычисленное и приведенное к типу переменной значение результата.

Примеры

REAL:: A=3.4, F=5.25, B=9.7

A=F ! значение переменной F присваивается переменной A

J=B ! значение переменной B присваивается переменной J

PRINT*, “A=”,A,” F=”,F,” J=”,J ! вывод результатов на экран

A=5.25 F=5.25 J=9

INTEGER:: J=2, I

REAL:: A=3.3, F=5.25, B

Переменной B присваивается результат вычисления! выражения J*A+F , преобразованного к вещественному типу

PRINT*, “B=”, B ! вывод результата на экран

Переменной I присваивается результат вычисления! выражения J*A+F , преобразованного к целому типу

PRINT*, “ I=”, I ! вывод результата на экран

В результате выполнения программы, на экране увидим следующий результат:

Рассмотрим примеры программ, составленных на основе линейного алгоритма.

Для значений x=0.2, , , d = x + b .

Блок-схема алгоритма:

Программа примера 3 :

T=(B*Z-SIN(Z)) / (Y+C*D*(Y*Z)**(1./7.))

PRINT*,” T=”,T

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

Пример 4. Составить программу вычисления площади вписанной в треугольник окружности , радиус , где –периметр треугольника.

Исходными данными задачи являются стороны треугольника a, b, c. Составьте блок-схему алгоритма самостоятельно.

Программа примера 4 :

program primer_4

parameter (pi=3.14159) !оператор задания констант

print*, “ Vvedite a, b, c” ! вывод поясняющего текста на экран

read*, a,b,c ! ввод длин сторон треугольника

p=a+b+c ! вычисление периметра треугольника

r=sqrt((p – a)*(p – b)*(p – c))/p) ! вычисление радиуса, вписанной окружности

s=pi*r**2 ! определение площади окружности

print*,” s=”,s ! вывод результата

В указанном примере число π имеет имя pi , поскольку в Фортране можно использовать только латинские буквы.

Вопросы к Лекции 3:

    Какова структура программы на Фортране?

    Для чего используются подпрограммы?

    Что содержит основная Фортран-программа (MAIN)?

    Изобразите схематично общую структуру программы на Фортране.

    Что такое подпрограмма?

    Что хранится в библиотеках стандартных программ?

    Дайте определение оператора.

    Что называется исполняемыми операторами?

    Какие операторы называют неисполняемыми?

    Какие операторы относятся к операторам обработки информации?

    Для чего нужны комментарии в программе?

    Что называют алгоритмом линейной структуры?

    Какая последовательность действий характерна для программы, реализующей линейный алгоритм?

    Как записывается оператор начала программы? Обязателен ли он?

    Запишите оператор конца программы в общем виде. Обязателен ли этот оператор при написании программы?

    Для чего используется оператор ввода? Как правильно он записывается?

    Как выглядит общий вид оператора вывода на экран?

    Для чего в записи операторов ввода/вывода используется символ звездочка *?

    Как можно разделять переменные при вводе их значений с клавиатуры?

    Какой порядок ввода переменных должен соблюдаться?

    Какие данные можно выводить с помощью оператора ввода?

    Для каких целей предназначен оператор вывода?

    Как можно вывести текст на экран компьютера?

    Запишите оператор вывода двух переменных a=4.5, k=3.

    Как оформить оператор вывода двух переменных a=4.5, k=3 с пояснительным текстом?

    Что называется оператором присваивания?

    Что представляет собой арифметический оператор присваивания?

    Запишите общий вид оператора присваивания.

    Какие действия должен выполнить компьютер в результате выполнения оператора присваивания?

    К какому типу приводится результирующее значение переменной, полученное в результате вычисления арифметического выражения?

    Почему в программе часто заменяют, где возможно, операцию возведения в степень операцией умножения?

Алфавит - в программировании – система неразложимых, уверенно отличимых друг от друга символов (букв, цифр, знаков препинания и др. символов), используемых для построения языков программирования.

Синтаксис - сторона языка программирования, которая описывает структуру программ как наборов символов. Синтаксису языка противопоставляется его семантика. Синтаксис языка описывает «чистый» язык, в то же время семантика приписывает значения различным синтаксическим конструкциям.

Сема́нтика - в программировании - система правил определения поведения отдельных языковых конструкций. Семантика определяет смысловое значение предложений алгоритмического языка.

Языки программирования низкого уровня – Автокод, Ассемблер,

Языки программирования высокого уровня -Фортран, Алгол, Кобол, Паскаль, Бейсик, Си++, Пролог

Языки программирования сверхвысокого уровня – APL, Алгол-68

Вычислительные Языки программирования - Фортран, Паскаль, Алгол, Бейсик, Си

Языки символьной обработки – Лисп, Пролог, Снобол и др.

Языки первого поколения:

Машинные коды были языком программирования первого поколения

Языки второго поколения:

Ассемблер

Языки третьего поколения:

эти языки часто обозначаются как языки «высокого» уровня.

Языки четвертого поколения:

Бейсик, Кобол, Си и Паскаль

Языки программирования пятого поколения:

Пролог, ЛИСП, Си++, Visual Basic, Delphi.

Язык программирования Фортра́н (Fortran)

Первый язык программирования высокого уровня, имеющий транслятор. Создан в период с 1954 по 1957 год группой программистов под руководством Джона Бэкуса в корпорации IBM. Название Fortran является акронимом от FORmula TRANslator (переводчик формул). Фортран широко используется в первую очередь для научных и инженерных вычислений. Одно из преимуществ современного Фортрана - большое количество написанных на нём программ и библиотек подпрограмм. Большинство таких библиотек является фактически достоянием человечества: они доступны в исходных кодах, хорошо документированы, отлажены и весьма эффективны. Поэтому изменять, а тем более переписывать их на других языках программирования накладно, несмотря на то, что регулярно производятся попытки автоматического конвертирования FORTRAN-кода на современные языки программирования.

Современный Фортран (Fortran 95 и Fortran 2003) приобрёл черты, необходимые для эффективного программирования для новых вычислительных архитектур, позволяет применять современные технологии программирования, в частности, ООП.

Эволюция стандартов языка

Фортран - жёстко стандартизированный язык, именно поэтому он легко переносится на различные платформы. Новые стандарты языка в значительной мере сохраняют преемственность с более старыми, что позволяет использовать коды ранее написанных программ и их модифицировать.

FORTRAN 77 (1980)

Введено множество улучшений:

Введены операторы открытия и закрытия файла (OPEN, CLOSE) и вывода на стандартное устройство - PRINT.

Добавлены строковый тип данных и функции для его обработки.

Введён блочный оператор IF и конструкция IF THEN - ELSE IF THEN - END IF, а также оператор включения фрагмента программы INCLUDE.

Введена возможность работы с файлами прямого доступа.

Увеличена максимальная размерность массива с 3 до 7. Сняты ограничения на индексы массива.

Усовершенствованы и расширены возможности работы с процедурами.

Введено понятие внутреннего файла (каковыми являются массивы, числовые и строковые переменные). Внутренние файлы позволяют, в частности, осуществлять преобразование число-строка и строка-число стандартным операторами чтения и записи READ и WRITЕ.

Fortran 90 (1991)

Значительно переработан стандарт языка.

Введён свободный формат написания кода. Появились дополнительные описания IMPLICIT NONE, TYPE, ALLOCATABLE, POINTER, TARGET, NAMELIST.

Введены управляющие операторы и конструкции. Добавлены DO … END DO (вместо завершения цикла меткой), DO WHILE, оператор передачи управления на начало цикла CYCLE, конструкция выбора SELECT CASE (для замены громоздких конструкций IF и операторов GOTO), а также заключительный оператор программной единицы, модульной или внутренней процедуры END.

Введён инструментарий указателей и функции для работы с оперативной памятью (по аналогии с языком С).

Введены операторы работы с динамической памятью (ALLOCATE, DEALLOCATE, NULLIFY).

Добавлены программные компоненты MODULE, PRIVATE, PUBLIC, CONTAINS, INTERFACE, USE, INTENT.

Введено маскирование присваивания массивов (присваивание при выполнении наложенного на элементы массива логического условия без использования операторов условия), а также работа с сечениями массивов. Введён оператор и конструкция WHERE для частичной замены циклов (правая часть оператора присваивания не изменяется). Маскирование присваивания распространяется практически на все операторы, конструкции и функции, оперирующие с массивами.

Стандартные операции присваивания, сложения, вычитания, а также деления и умножения на число распространены на массивы и их секции, определяемые сечениями. В этом случае осуществляется поэлементное присваивание.

Появились новые встроенные функции, в первую очередь для работы с массивами. Функции для вычислений в массивах: ALL(лог. произведение) и MASK(логическое сложение), COUNT(число истинных элементов), PRODUCТ(произведение элементов массива), SUM(сложение элементов массива), DOT_PRODUCT (скалярное произведение), MATMUL (умножение матриц). Добавились справочные функции, а также функции переформирования и свёртки массивов.

В языке появились элементы ООП. Введены производные типы данных. Отдельно объявлен список устаревших черт языка, предназначенных для удаления в будущем.

Добавлены дополнительные функции для работы со строковыми данными, в частности, функции TRIM (удаление завершающих пробелов) и REPEAT(кратное копирование строки) и функции выравнивания по левой и правой границам.

Fortran 95 (1997)

Коррекция предыдущего стандарта. Введён оператор и конструкция FORALL, позволяющие более гибко, чем оператор и конструкция WHERE, присваивать массивы и заменять громоздкие циклы. FORALL позволяет заменить любое присваивание сечений или оператор и конструкцию WHERE, в частности, обеспечивает доступ к диагонали матрицы. Данный оператор считается перспективным в параллельных вычислениях, способствуя более эффективному, чем циклы, осуществлению распараллеливания.

Fortran 2003 (2004)

Дальнейшее развитие поддержки ООП в языке. Взаимодействие с операционной системой. Добавлены также следующие возможности:

Асинхронный ввод-вывод данных.

Средства взаимодействия с языком C

Усовершенствование динамического размещения данных

Стандартом предполагается поддержка средствами языка параллельных вычислений (Co-Arrays Fortran). Также предполагается увеличить максимальную размерность массивов до 15, добавить встроенные специальные математические функции и др.

* "Магия ПК" 2000 №6(28), С. 49–50.

В 1955 году увидел свет первый алгоритмический язык высокого уровня FORTRAN (FORmula TRANslator – транслятор формул). Он использовался в основном для решения научно-технических и инженерных задач, а разработали его сотрудники фирмы IBM под руководством Джона Бэкуса . Чуть позже, в 1957 году, Джон Бэкус и его сотрудники установили в IBM (Beстингхауз) первый компилятор языка Фортран. Программисты, ранее работавшие исключительно на Ассемблере, скептически относились к возможностям высокопроизводительного языка высокого уровня, поэтому основным критерием при разработке стандартов на Фортран и создания компиляторов с этого языка была эффективность исполняемого кода. Кстати, термин "компилятор" тогда еще широко не использовался, хотя уже был введен Грейс Хоппер – единственной в США женщиной-адмиралом, которую называли также "первой леди программирования и бабушкой Кобола".
Большинство операторов Фортрана транслировались непосредственно в одну–две машинные команды, простые синтаксические конструкции и активное использование меток и goto позволяло получить очень быстрый код, и в результате программы на Фортране подчас работали быстрее ассемблерных. Сама внутренняя структура оттранслированной программы была также очень простой – весь код, все подпрограммы и все данные вместе с общим блоком размещались исключительно в статической памяти, из-за чего, правда, невозможно было использовать рекурсию.
Поскольку Фортран был первым языком высокого уровня, отвечающим нуждам большинства пользователей того времени, да еще и простым в изучении, распространился он очень быстро.
Из-за широкого распространения этого языка и появления множества Фортран-программ (преимущественно вычислительного характера) насущным стал вопрос его стандартизации. Сначала это был стандарт Fortran IV 1964 года, затем, по мере появления новых идей, в 1978 году был принят новый стандарт Fortran 77 (f77) с большим числом более современных и гибких синтаксических расширений. Сегодня наиболее распространенным вариантом Фортрана являются Fortran 90 (f90) и Fortran 95 . Группа энтузиастов заканчивает работу над суперверсией языка F2k, которая будет опубликована в этом году.
Хотя в новые версии языка вносились подчас как ненужные дополнения (например, расширения, связанные с динамической аллокацией памяти), так и полезные, типа модульной организации программы, работы с частями массивов и др., сегодня этот язык нельзя назвать перспективным для изучения, так как синтаксис его значительно устарел.
Однако тем, кому довольно часто приходится решать различные вычислительные задачи, совсем не обязательно каждый раз брать в руки учебник по математике и "начинать с нуля". В 90% подобных случаев то, что вы ищете, уже давно реализовано и отлажено на Фортране. Поэтому, скорее всего, жизнь Фортрану обеспечена надолго.
Есть и еще одна, сравнительно молодая ниша для Фортрана – параллельные вычисления, где строгая семантика языка позволяет получать высокопроизводительные программы. Обычно используется стандарт f90, немного расширенный набором операторов для указания пригодных к распараллеливанию частей программы. Параллельный Фортран имеет свой стандарт HPF (High Performance Fortran). Тем не менее фанаты Фортрана, девизом которых стала легендарная фраза "Зачем мне изучать другие языки, когда я могу всё написать на Фортране", ощущали его очевидную непригодность для крупномасштабных проектов, связанную с привязанностью к синтаксису 50-х годов, и пытались ввести в него модные идеи ООП, но объектный Фортран в качестве стандарта так и не появился.
Среди бесплатно распространяемых версий Фортрана наиболее известен f2c, реализованный для всех UNIX-систем и преобразующий текст Фортран-программы в Си-код. Для DOS имеется версия bcf77, распространяемая бесплатно. Из коммерческих версий в первую очередь надо отметить Microsoft Fortran, позволяющий создавать dll-библиотеки, и Watcom Fortran, генерирующий высокоэффективный код. Для задач, требующих высокой точности вычислений, предназначен компилятор фирмы MicroWay. А вообще различные по качеству компиляторы Фортрана имеются на абсолютно всех компьютерных платформах.
Однако основная заслуга Фортрана в другом. Когда появилась необходимость в разработке очень крупных проектов, недостатки Фортрана, связанные в первую очередь с "тяжелой" отладкой, стали излишне обременительны. Поэтому Фортран послужил сильнейшим стимулом для развития теории отладки и тестирования программ. Появились сотни синтаксических верификаторов Фортран-текстов, вылавливающих скрытые логические ошибки. В дальнейшем из этого направления выросли такие теоретические области программирования, как эквивалентные оптимизирующие преобразования программ, высокоуровневая компиляция, автоматическое тестирование и т.д. Так что про Фортран забывать никак нельзя. Использовать его в качестве инструментария в задачах системной интеграции, наверное, не имеет смысла, но то, что было наработано лучшими программистами за 30–40 лет, вполне может ускорить процесс разработки. По крайней мере, программных "кирпичиков" для Фортрана ныне существует несравненно больше, чем для других языков программирования. ■

* * *
Джон Бэкус родился 3 декабря 1924 в Филадельфии, штат Пенсильвания, в богатой семье, детские годы провел в Вилмингтоне. Закончив школу в 1942 году, он поступил в университет штата Вирджиния на химический факультет (по настоянию отца-химика), но спустя некоторое время перестал заниматься и в 1943 году был призван на военную службу.
Бэкус начинал служить в бригаде противовоздушной обороны в форте Stewart, штат Джорджия, но впоследствии был направлен в колледж для изучения медицины.
Некоторое время он с увлечением работал в городской больнице, но в 1946 году охладел к этой работе, оставил армию и переехал в Нью-Йорк, хотя не знал за что браться и как жить дальше.
Через некоторое время Бэкус поступил в школу подготовки радиотехников. "У меня был очень хороший преподаватель, и он попросил, чтобы я вычислил характеристики некоторых схем. Это было страшно утомительно, но крайне интересно".
Вскоре Бэкус поступил в Колумбийский университет (Нью-Йорк), чтобы изучать математику, где и получил высшее образование (1949 г.). Незадолго перед тем, как закончить обучение, он посетил компьютерный центр IBM на Мэдисон Авеню. И здесь удача во второй раз улыбнулась ему – в 1950 году Бэкус стал программистом компании IBM.
О доминировании IBM в компьютерной индустрии впервые заговорили в 1952 году. Всё началось с модели 701, известной также под именем Defence Calculator (оборонный вычислитель). Сразу после выпуска модели 701 специалисты подразделения прикладных исследований приступили к ее совершенствованию (1955–1956 годы).

Наиболее серьезные изменения предложил внести Джон Бэкус, впоследствии принимавший активное участие в создании компьютера 704. В частности, благодаря ему появилась технология так называемого "ускоренного кодирования" (speed-coding), позволившая заметно упростить написание программ для 701. "Возможность ускоренного формирования кода для машины 701, которая представляла собой одноадресный компьютер с фиксированной запятой без индексных регистров, превратила ее в систему с плавающей запятой, произвольной адресацией и индексными регистрами, – вспоминал Бэкус. – Таким образом, пользователям больше не нужно было мучиться с двоичным кодом".
Уже тогда появились первые компоненты технологии быстрого написания программ, которая используется сегодня. Фактически данная система стала предшественницей аналогичных комплексов, которые были выпущены в 50–60 годах и впоследствии вытеснены языками высокого уровня.
А в 1955 году Бэкус "изобрел" Фортран, первый машинный язык высокого уровня. Впоследствии, вспоминая этот период, Бэкус скажет: "Мы не знали, к чему стремиться, и не знали, как это сделать". Первоначально все работы планировалось завершить в начале 1954 года, однако разработка языка завершилась практически через два года.
Первая версия компилятора состояла из 25000 строк машинного кода, записанного на магнитной ленте. Каждая IBM 704 обеспечивалась копией программы с руководством по программированию на 51 странице.
В 1959 году Бэкус разработал грамматические правила для описания синтаксиса языков высокого уровня (нормальная форма Бэкуса-Наура, сокращенно БНФ).
В 1976 году Джон Бэкус был награжден Национальной медалью за вклад в науку, а с 1991 года перестал заниматься компьютерной тематикой.

Владимир Буслаев

OCR: fir-vst, 2016

Впервые я услышал о Фортране в раннем детстве от отца. Он рассказывал, что в 70-х годах ему приходилось часами выстаивать очереди к едва ли не единственной ЭВМ в ВУЗе, дабы используя перфокарту запустить примитивный код. Признаюсь честно, с тех пор и до недавнего времени (несмотря на полученное техническое образование) я пребывал в полной уверенности, что Фортран остался где-то далеко там, в мире, где носителями информации выступают странные картонки с дырками, а компьютеры стоят так дорого, что воспринимаются, как настоящий аттракцион.

Каково же было моё удивление, когда я узнал, что Фортран не просто ещё где-то используется, он развивается, востребован и по-прежнему актуален. Если вы также до этого момента полагали, что Фортран давно носит статус мертвеца, то вот вам несколько интересных фактов, почему он ещё ходит.

Пережил минимум 10 обновлений

В действительности, тот Фортран о котором вы слышите от преподавателей в школе или университете был создан в период с 1954 по 1957 года. Он вошёл в историю, как первый полностью реализованный язык высокого уровня, совершил маленький прорыв в IT-мире, но по сути был не слишком удобен и функционален. “Допиливать” его в IBM принялись практически сразу, уже в 1958 году появился FORTRAN II и параллельно FORTRAN III. Но более-менее приличный вид он приобрёл лишь в 70-х, когда появились достаточно портативные машины, когда был разработан полноценный стандарт IBM FORTRAN IV, и появился FORTRAN 66 с циклами, метками, условными операторами, командами ввода/вывода и прочими по современным меркам примитивными возможностями.

Последняя версия появилась в 2010 году, её название Fortran 2008 (как видите, в ходе истории, название перестало писаться исключительно заглавными буквами), отличительной чертой которой являются всевозможные параллельные вычисления, положительно сказывающиеся, как на скорости обработки данных, так и на размерности обрабатываемых массивов. Кроме того, на 2018 год запланирован выход Fortran 2015. Из анонса следует, что в нём будет улучшена интеграция с С, а также устранены текущие недоработки.

Входит в 30 самых популярных языков программирования

На сегодняшний день 0,743% запросов в поисковых системах относительно языков программирования посвящену именно Фортрану. Чтобы вы поняли, насколько это круто, просто представьте, что такие языки, как Lisp, Scala, Clojure, LabVIEW, Haskell, Rust и VHDL, находятся в рейтинге ниже.

Может работать на Android (и не только)

Компиляторы для Фортана за его долгую историю разрабатывались такими компаниями, как IBM, Microsoft, Compaq, HP, Oracle, благодаря чему сегодня язык совместим с Windows, Mac OS и Linux. Более того, удобное приложение с компилятором теперь можно взять с собой, благодаря приложению CCTools для Android. Можно запустить компилятор и на вашем iPhone, но в этом случае немного поколдовать.

Конкурирует с MATLAB

Пока в этом тексте не было сказано главного, а именно области применения Фортрана. Так вот это язык, востребованный в науке и инженерии, полностью или частично применяемый для прогноза погоды, океанографии, молекулярной динамики, сейсмологического анализа. В общем, это самый настоящий “Data Science”-язык родом из времени, когда в массовую продажу впервые поступил калькулятор.

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

По сути, главным конкурентом Фортрана на сегодняшний день является MATLAB, который более универсален, более функционален и удобен. Однако MATLAB при этом имеет строгие ограничения по используемому ПО, достаточно дорого стоит и в большинстве случаев просто излишен.

Имеет относительно безоблачное будущее

Безусловно, мы не можем предсказать, что будет через 10-20 лет, и как за это время изменится IT-мир. Однако, если посмотреть на возможных новых конкурентов для Фортрана (таких, как Go), их главный недостаток - универсализация. То есть создатели Fortran очень быстро наметили целевую аудиторию в виде учёных, их мнение и пожелания имеют приоритетное значение. Поэтому трудно представить, что завтра они откажутся от своего “спецзаказа” ради какой-то модной тенденции. Именно на основании этого можно утверждать, что ещё одно поколение Фортран отходит смело.

А потом они просто выпустят новую версию.