Фортран
Фортран (алб. фортранчег, англ. Forth-Run) — великий и могучий псевдоязык программирования, изобретённый военными для засекречивания стратегических разработок. Фортран создавался при непосредственном участии лаборатории психологических исследований Пентагона и содержит новейшие разработки в области НЛП и зомбирования.
Отличительной особенностью Фортрана является его небывалая криптографическая мощь — написанную на Фортране программу можно ввести в компьютер, отладить, выполнить, но совершенно невозможно прочесть. По этой причине спецслужбы и военные всего мира отдают предпочтение Фортрану, что делает его на три с половиной головы выше других языков программирования в области шпионажа и психологической обработки населения вероятного противника.
- 1 Версии языка
- 2 Особенности языка
- 2.1 Типы данных
- 2.2 Структура программы
- 2.3 Некоторые факты
- 2.4 Ошибки
- 2.5 Пример программы на Фортране
Версии языка [ править ]
Фортран II — первая версия языка, в целях секретности названная второй. Как только вражеская разведка начала искать третью версию, так вышел
IDE для разработки на Fortran
Фортран IV — вторая версия языка, в целях секретности названная четвёртой. Тут спецслужбы вероятного противника сообразили, что нумерация идёт по степеням двойки, и начали охотиться за версией VIII. Но следующая версия носила название
Фортран 66 — третья версия языка, в целях секретности носящая номер 66. При первом же взгляде на название и текст программ, номер следующей версии угадывался автоматически — 666. Но нет! Следующим был
Фортран 77 — четвёртая версия языка, в целях секретности носящая номер 77. Специально созданная разведгруппа ГРУ в полном составе отправлена в закрытый санаторий. Вновь созданная комиссия по исследованию Фортрана приходит к однозначному выводу: Пентагон просто сменил систему нумерации, и следующей будет версия 88. Однако в действительности на смену Фортрану 77 пришёл
Фортран 98 — пятая версия языка, в целях секретности носящая номер 98. Государственная комиссия по расследованию приняла решение нумеровать дальнейшие версии любым понравившимся двузначным числом, но тут вышел
Фортран 2003 — седьмая версия языка, в целях секретности вышедшая вместо шестой и носящая номер 2003. После этого Государственный Комитет Безопасности разума разведчиков постановил не смотреть на номер версии, а заняться непосредственно изучением языка.
Особенности языка [ править ]
- Компилятор языка Фортран называется транслятором.
Фортран позволяет:
- Изменять значение любой константы в программе.
- Называть одну и ту же переменную разными именами, в том числе и именами, совпадающими с написанием операторов.
- Выходить из цикла где-то посередине и возвращаться обратно (идеальное средство запутывания программы).
- Выходить из цикла где-то посередине и не возвращаться обратно.
Типы данных [ править ]
Фортран поддерживает следующие типы данных:
Структура программы на Fortran
- Логический. Имеет значения .T. и .F. Обозначается как LOGICAL*1
- Символьный. Операции над этим типом не определены. Обозначается как CHARACTER
- Целый. Нужен только для индексации массивов. Никак не обозначается, или (в особо патологических случаях) обозначается как INTEGER. Известно, что переменные с именами, начинающимися с букв I,J,K,L,M,N, являются целыми по вторникам и четвергам с 9.00 до 21.00 с перерывом на обед.
- Вещественный. Вещественными считаются все переменные, которые забыли или поленились объявить иначе. Однако, вещественную переменную можно объявить и в явном виде с помощью оператора REAL. Особо тонким троллингом в программировании на Фортране являются объявления типа REAL INTEGER или REAL LOGICAL, после чего программа становится уже совершенно нечитабельной.
- Комплексный. Ради разнообразия обозначается как COMPLEX.
Структура программы [ править ]
Структура среднестатистической Фортран-программы напоминает ведро спагетти, высыпанное на новогоднюю ёлку.
Некоторые факты [ править ]
- Все, что вы напишете в первых пяти символах каждой строки, может быть использовано против вас.
- Некоторые строки могут быть проигнорированы транслятором.
- Не все метки имеют смысл. Некоторые нужны просто для красоты.
- Структура некоторых команд наталкивает на мысль о том, что создатели языка заботились в первую очередь о нечитабельности программы. Человек, не знакомый с Фортраном, ни за что не сможет догадаться, что делает, например, команда DO 69331 MPOT=4, 19, 1135.
- Рекурсия — происки врагов. Употребление рекурсии в Фортране карается зависанием программы.
- Натыкаясь на ошибку, транслятор по умолчанию в качестве диагностики выдаёт слово «кретин». Попытки изменить эту унизительную диагностику обречены на провал.
- Фортран умеет извлекать квадратные корни из отрицательных чисел, издевательски хихикая при этом. Транслятор автоматически присваивает полученному результату комплексный тип, однако не сообщает об этом программисту. Все последующие операции с этим результатом, соответственно, ведут к появлению в программе все большего количества невесть откуда взявшихся комплексных переменных. Получается снежный ком с непредсказуемыми последствиями. Например, в результате работы программы население города Свинограда внезапно оказывается равным 465726,82+19,4i человек, о чём немедленно докладывают лично Путину.
- Помните перфокарты?
- Ввод-вывод Фортрана вызывает у программистов суицидальные позывы.
- Оператор CALL способен вызвать Сотону.
- И несмотря на всё это, сложные вычислительные модули (например, операции над семимерными матрицами, которые никому и нафиг не нужны) до сих пор пишутся на Фортране.
Ошибки [ править ]
- Каждая программа на Фортране является одной большой ошибкой. По умолчанию об этой ошибке транслятор не сообщает.
- Каждая правильно работающая программа на Фортране содержит нечётное (в отличие от других языков) количество ошибок.
Что, чёрт возьми, делают операторы STOP и CONTINUE?
Пример программы на Фортране [ править ]
Ниже приведён пример идеальной программы на Фортране. Идеальной в том смысле, что эта программа не делает абсолютно ничего, при этом запутана до посинения мозгов и, как ни странно, не содержит ошибок.
PROGRAM PROGRAM COMMON /COMMON/ COMMON(100) CALL CALL (COMMON) STOP END SUBROUTINE CALL(SUBROUTINE) CALL SUBROUTINE RETURN END
Это интересно [ править ]
- Полное собрание сочинений В. И. Ленина было переведено на Фортран для распространения в Зимбабве. По какой-то причине, практическое применение переписки Ленина с Плехановым в отдельно взятой африканской стране приняло неожиданный для всех оборот, когда количество миллионеров среди зимбабвийского населения перевалило отметку 97,2%.
Источник: absurdopedia.net
Фортран 90
Для разработки параллельных программ часто используется язык программирования Фортран . Это одно из наиболее эффективных средств программирования вычислительных задач. Далее приводится краткое описание языка.
Формат записи исходного текста
Для записи исходного текста программы на Фортране могут использоваться фиксированный и свободный форматы.Первый из них характерен для стандарта Фортран 77 , второй применяется в Фортране 90 и более новых версиях . Фортран 90 поддерживает также фиксированный формат, что обеспечивает совместимость со старыми стандартами записи. При записи исходного текста в фиксированном формате строка содержит 72 позиции. Первые пять позиций отведены для меток, а шестая может быть пустой или содержать любой, отличный от пробела символ. В последнем случае строка считается строкой продолжения и при обработке компилятором присоединяется к предыдущей строке программы. Оператор может занимать позиции с 7 по 72.
В свободном формате записи все позиции строки равноправны, ее длина составляет 132 символа.
Структура программы
Программа на Фортране состоит из главной программы и, возможно, некоторого числа подпрограмм.Подпрограммы могут быть функциями или процедурами,внешними, внутренними или модульными. Различные программные компоненты могут компилироваться раздельно.
Первым оператором главной программы является её заголовок PROGRAM . За ним следует имя программы:
Имя программы обязательно начинается с буквы, затем могут идти буквы, цифры и символы подчеркивания, например:
Максимальная длина любого имени в программах на Фортране — 31 символ. Первым оператором подпрограммы может быть только ее заголовок FUNCTION или SUBROUTINE . Последней строкой программного компонента должна быть строка с оператором END . Заключительный оператор главной программы может иметь также следующий вид:
END PROGRAM ИМЯ_ПРОГРАММЫ
ИМЯ_ПРОГРАММЫ является необязательной частью оператора.
После заголовка следуют описания переменных, констант, меток, подпрограмм и других объектов, используемых в программе. Эта ее часть называется разделом описаний.После раздела описаний следует раздел операторов.
Базовые типы данных
Перечень встроенных типов в порядке возрастания их ранга дан ниже.
- LOGICAL(1) и BYTE
- LOGICAL(2)
- LOGICAL(4)
- INTEGER(1)
- INTEGER(2)
- INTEGER(4)
- REAL(4)
- REAL(8)
- COMPLEX(8)
- COMPLEX(16)
У каждого встроенного типа Фортрана есть несколько разновидностей, которые отличаются друг от друга диапазоном значений и некоторыми другими характеристиками.
Значение символьного типа CHARACTER представляет собой строку символов. Длина строкового значения в Фортране может быть произвольной и задается с помощью параметра LEN в предложении описания строковой переменной, например:
CHARACTER(LEN = 430) :: Shakespeare_sonet
Предложение описания
Предложение описания переменных в Фортране 90 имеет вид:
ТИП[, АТРИБУТЫ] :: СПИСОК_ПЕРЕМЕННЫХ
В списке имена переменных разделяются запятыми, а ТИП задает общий тип переменных, являясь идентификатором типа:
REAL, PARAMETER :: salary = 2000
В Фортране 90 используются следующие атрибуты объектов:
- PARAMETER — объект является именованной константой ;
- PUBLIC — объект является доступным за пределами модуля;
- PRIVATE — объект недоступен за пределами модуля;
- POINTER — объект является ссылкой (указателем);
- TARGET — объект можно использовать в качестве адресата в операторах назначения ссылок;
- ALLOCATABLE — объект является динамическим массивом ;
- DIMENSION — объект является массивом;
- INTENT — определяет вид связи для параметра процедуры (т. е., является входным, выходным или и входным и выходным);
- OPTIONAL — необязательный параметр процедуры;
- SAVE — сохранять значение локальной переменной подпрограммы в промежутке между ее вызовами;
- EXTERNAL — для внешней функции ;
- INTRINSIC — для внутренней функции.
Буквальные константы
Буквальные числовые константы записываются обычным образом. Комплексная буквальная константа записывается в круглых скобках:
- (0., 1.) — соответствует мнимой единице i ;
- (2., 1.) — соответствует комплексному числу 2 + i .
Имеются две буквальные логические константы:
- .TRUE . — «истина»;
- .FALSE . — «ложь».
Буквальная символьная константа обрамляется апострофами, которые не входят в значение, а являются ограничителями значения. Вместо апострофов могут быть использованы кавычки.
Арифметические и логические операции
Арифметические операции Фортрана (в порядке убывания приоритета):
- ** — возведение в степень;
- *, / — умножение, деление;
- -, + — вычитание, сложение.
Минус (-) и плюс (+) используются также как знаки унарных операций: В Фортране поддерживаются следующие операции отношения :
.LT . | меньше | |
.LE . | меньше или равно | |
.GT . | > | больше |
.GE . | >= | больше или равно |
.EQ . | == | Равно |
.NE . | / = | не равно |
Для значений комплексного типа действительны только операции «равно» ( .EQ .) и «не равно» ( .NE .).
.NOT . | Логическое отрицание |
.AND . | Логическое пересечение (умножение, логическое «И») |
.OR . | Логическое объединение (сложение, логическое «ИЛИ») |
. EQV .и .NEQV . | Логические эквивалентность и неэквивалентность (логические равенство и неравенство) |
Массивы
Массивы описываются с помощью атрибута DIMENSION :
REAL, DIMENSION(1:100) :: C
Параметром этого атрибута должен быть список экстентов (экстент — количество элементов массива для каждого измерения) описываемых массивов в виде
(экстент_1, экстент_2, . экстент_n)
Число экстентов определяет ранг массива. Каждый экстент записывается в виде:
REAL, DIMENSION(0:10, 2, -3:3,11) :: FGRID
Если значение нижней границы опущено, ее значение полагается равным 1. В некоторых случаях, список экстентов сводится к списку разделенных запятыми двоеточий, число которых равно рангу массива. Только число экстентов задается при объявлении динамического массива :
REAL, ALLOCATABLE, DIMENSION(:, 🙂 :: BE_LATER
Динамический массив — это массив, размер которого определяется при выполнении программы, тогда же происходит и выделение памяти под него. Пример:
PROGRAM dyn_array IMPLICIT NONE INTEGER SIZE REAL, ALLOCATABLE, DIMENSION(:) ::array WRITE(*, *) ‘SIZE?’ READ(*, *) SIZE IF(SIZE > 0) ALLOCATE(array(SIZE)) … IF(ALLOCATED(array)) DEALLOCATE(array) END PROGRAM dyn_array
Оператор описания массива может не содержать атрибута DIMENSION , форма массива может быть указана непосредственно после его идентификатора:
REAL X(10, 20, 30), Y(100), Z(2, 300, 2, 4)
Пример программы
Решение нелинейного уравнения методом Ньютона
PROGRAM NEWTON IMPLICIT NONE REAL (8) :: X, DX, F, DF X = 3.3 ! НАЧАЛЬНОЕ ПРИБЛИЖЕНИЕ DO ! НЬЮТОНОВСКИЕ ИТЕРАЦИИ DX = F(X) / DF(X) ! ВЫЧИСЛЕНИЕ ШАГА X = X — DX ! ВЫЧИСЛЕНИЕ ОЧЕРЕДНОГО ПРИБЛИЖЕНИЯ IF(DX
Источник: intuit.ru
Fortran учебник
Начало работы с Fortran
Фортран — это язык, широко используемый в научном сообществе из-за его пригодности для численного расчета. Особенно привлекательной является его интуитивная запись в виде массива, которая упрощает запись быстрых векторизованных вычислений.
Несмотря на свой возраст, Fortran по-прежнему активно развивается с многочисленными реализациями, включая GNU, Intel, PGI и Cray.
Версии
ФОРТРАН 66 | Первая стандартизация ASA (теперь ANSI) | 1966-03-07 |
ФОРТРАН 77 | Фиксированная форма, историческая | 1978-04-15 |
Фортран 90 | Бесплатная форма, стандарт ISO, операции с массивом | 1991-06-15 |
Фортран 95 | Чистые и элементарные процедуры | 1997-06-15 |
Fortran 2003 | Объектно-ориентированное программирование | 2004-04-04 |
Fortran 2008 | Co-Массивы | 2010-09-10 |
Установка или настройка
Fortran — это язык, который может быть скомпилирован с использованием компиляторов, поставляемых многими поставщиками. Различные компиляторы доступны для разных аппаратных платформ и операционных систем. Некоторые компиляторы являются свободным программным обеспечением, некоторые могут использоваться бесплатно, а некоторые требуют покупки лицензии.
Наиболее распространенным свободным компилятором Fortran является GNU Fortran или gfortran. Исходный код доступен из GNU в составе GCC, сборника компиляторов GNU. Бинарные файлы для многих операционных систем доступны по адресу https://gcc.gnu.org/wiki/GFortranBinaries . Распределения Linux часто содержат gfortran в своем диспетчере пакетов.
Другие компиляторы доступны, например:
- EKOPath by PathScale
- LLVM (бэкэнд через DragonEgg)
- Oracle Developer Studio
- Компилятор Absoft Fortran
- Компилятор Intel Fortran
- Компилятор Fortran NAG
- Компиляторы PGI
В HPC-системах часто доступны специализированные компиляторы, доступные системному провайдеру, например, компиляторы IBM или Cray .
Все эти компиляторы поддерживают стандарт Fortran 95. Обзор состояния Fortran 2003 и статуса Fortran 2008 различными компиляторами предлагается Форумом ACM Fortran и доступен в Вики-версии Fortran.
Привет, мир
Любая программа Fortran должна включать end качестве последнего оператора. Поэтому простейшая программа Fortran выглядит так:
Вот несколько примеров программ «привет, мир»:
print *, «Hello, world» end
С помощью оператора write :
write(*,*) «Hello, world» end
Для ясности теперь принято использовать инструкцию program для запуска программы и присвоения ей имени. Затем оператор end может ссылаться на это имя, чтобы сделать его очевидным, о чем идет речь, и дать компилятору проверить правильность кода. Кроме того, все программы Fortran должны содержать implicit none оператор. Таким образом, минимальная программа Fortran должна выглядеть следующим образом:
program hello implicit none write(*,*) ‘Hello world!’ end program hello
Следующий логический шаг от этого момента — это увидеть результат приветственной мировой программы. В этом разделе показано, как добиться этого в среде Linux. Мы предполагаем, что у вас есть некоторые основные понятия команд оболочки , в основном вы знаете, как добраться до терминала оболочки. Мы также предполагаем, что вы уже настроили среду fortran . Используя предпочтительный текстовый редактор (блокнот, блокнот ++, vi, vim, emacs, gedit, kate и т. Д.), Сохраните программу приветствия выше (скопируйте и вставьте) в файл с именем hello.f90 в вашем домашнем каталоге. hello.f90 — ваш исходный файл. Затем перейдите в командную строку и перейдите в каталог (домашний каталог?), Где вы сохранили исходный файл, затем введите следующую команду:
>gfortran -o hello hello.f90
Вы только что создали свою исполняемую программу hello world. В техническом плане вы просто скомпилировали свою программу. Чтобы запустить его, введите следующую команду:
>./hello
На вашем терминале оболочки вы должны увидеть следующую строку.
> Hello world!
Поздравляем, вы только что написали, скомпилировали и запустили программу Hello World.
Квадратное уравнение
Сегодня Fortran в основном используется для численного расчета. Этот очень простой пример иллюстрирует основную программную структуру для решения квадратичных уравнений:
program quadratic !a comment !should be present in every separate program unit implicit none real :: a, b, c real :: discriminant real :: x1, x2 print *, «Enter the quadratic equation coefficients a, b and c:» read *, a, b, c discriminant = b**2 — 4*a*c if ( discriminant>0 ) then x1 = ( -b + sqrt(discriminant)) / (2 * a) x2 = ( -b — sqrt(discriminant)) / (2 * a) print *, «Real roots:» print *, x1, x2 ! Comparison of floating point numbers for equality is often not recommended. ! Here, it serves the purpose of illustrating the «else if» construct. else if ( discriminant==0 ) then x1 = — b / (2 * a) print *, «Real root:» print *, x1 else print *, «No real roots.» end if end program quadratic
Нечувствительность к регистру
Прописные и строчные буквы алфавита эквивалентны в наборе символов Fortran. Другими словами, Fortran нечувствителен к регистру . Такое поведение контрастирует с чувствительными к регистру языками, такими как C ++ и многие другие.
Как следствие, переменные a и A являются a и той же переменной. В принципе можно написать программу следующим образом
pROgrAm MYproGRaM .. enD mYPrOgrAM
Это хороший программист, чтобы избежать таких уродливых выборов.
Источник: learntutorials.net
Hello World на Fortran
Ну что же, начнём знакомство с “мёртвым” языком программирования Фортран. Хотя на самом деле он не такой уж и мёртвый — он до сих пор поддерживается, развивается и используется. Особенно в научной среде непрограммистов. Для чего, в общем-то, изначально он и был создан.
Первый вопрос у начинающего программиста — как писать программы на каком-либо языке (в нашем случае на Фортране).
Второй вопрос — где писать программы.
Начну со второго вопроса. Компиляторов Фортрана существует довольно много, как бесплатных, так и платных. Но для ознакомления с языком я советую воспользоваться онлайн-интерпретатором. Их тоже существует немало. Например, можно использовать этот.
И теперь напишем нашу первую программу на Фортране:
PROGRAM Hello PRINT *, «Hello World» END PROGRAM Hello
Если вы написали эту программу в онлайн-компиляторе, ссылка на который приведена выше, то теперь щёлкните по зелёной кнопочке RUN, которая находится над редактором исходного кода:
Если вы не допустили ошибок, то в нижней части окна появится результат работы программы. В нашем случае это будет строка «Hello World» .
Ну а теперь давайте разберем программу.
Программа начинается с ключевого слова PROGRAM . Затем пишем имя программы. Имя может быть любым допустимым с точки зрения синтаксиса.
Заканчивается программа словами END PROGRAM , за которыми также надо написать имя программы (оно должно быть таким же, как и в начале программы).
Фортран не чувствителен к регистру. То есть вам необязательно писать ключевые слова большими буквами. Вы можете написать PROGRAM , Program или program . Всё это будет работать точно также.
Ну а теперь сама программа:
PRINT *, «Hello World»
Во-первых, обратите внимание на отступ. В данном случае он необязателен, но вообще отступы в Фортране играют такую же важную роль, как и в Python (теперь, думаю, вы понимаете, какой язык вдохновил разработчика Python на его создание).
PRINT — это оператор вывода. С его помощью выполняется вывод на экран. После имени оператора ОБЯЗАТЕЛЬНО требуется спецификатор формата. В нашем случае это звёздочка, что означает произвольный формат (то есть без форматирования — просто вывод данных).
Затем можно через запятую перечислить выражения, которые надо вывести на экран. В нашем случае это всего одна строковая константа, которая и будет выведена на экран:
Строки в Фортране заключаются в двойные кавычки. Но можно использовать и одинарные (хотя точно не знаю, может это допускается не во всех реализациях языка).
Если же вместо константы вы укажете, например, имя переменной, то будет выведено значение этой переменной.
Ну вот и всё. Ваша первая программа на загадочном и забытом Фортране готова и даже работает. С чем вас и поздравляю.
На самом деле Фортран забыт совершенно незаслуженно. Он такой же простой, как и Python (а в чём-то может даже и проще). И его вполне можно использовать для решения повседневных задач, для каких-то экспериментов и т.п.
Источник: info-master.su