Слайд 1СОВРЕМЕННЫЙ ФОРТРАН
Гущин Олег Андрианович
Слайд 2Сейчас, когда Государство Российское ищет выход из тупика либеральных реформ,
у определённой части россиян появились надежды на возрождение отечественной науки
и индустрии. Этот сложный процесс предполагает также и переосмысление системы социальных ценностей.
…общество вновь должно поднять престиж таких забытых ныне профессий, как инженер, физик, химик… Подавляющее большинство предлагаемых видов деятельности … связано с финансами или торговлей. Это: специалист по маркетингу, рекламе, кассир, бухгалтер, финансист, кладовщик, банковский работник, охранник, консультант, дилер, продавец, посредник, челнок и так далее. Понятно, что такая общественная конструкция не может быть устойчивой, … подвержена постоянно воспроизводимым катаклизмам, приводящим в конечном счёте к её уничтожению.
Слайд 3Существующее положение вещей не могло не отразиться и на системе
приоритетов в области программирования. … молодёжь стремится освоить Delphi, C/C++,
Java и им подобные. Популярны также и системы работы с базами данных типа FoxPro, Access, Oracle, Clarion и другие. Несомненно, что эти языки будучи в основной своей массе объектно-ориентированными, хорошо приспособлены для создания систем управления …, а также систем доставки данных, например в среде Internet.
В то же время подобные языки мало пригодны для описания явлений природы и разного рода процессов (физических, химических, технологических…), которые, как правило, сами состоят из большого числа параллельно проходящих процессов.
Слайд 4ИСТОРИЯ ФОРТРАНА
К счастью, есть язык, ориентированный на решение научно-технических задач,
и этим языком является Фортран. Фортран динамично развивается и ныне
он воплощен в стандартах Фортран 90 и 95.
Слайд 5Фортра́н (Fortran) — первый реализованный язык программирования высокого уровня.
Создан в
период с 1954 по 1957 год группой программистов под руководством
Джона Бэкуса (John Backus) в корпорации IBM в качестве эффективной альтернативы ассемблеру для программирования на ПК IBM 704 .
Слайд 6Название языка происходит от сокращения слов FORmula TRANslation – перевод
формул.
Запись формул в привычном виде была одной из важных возможностей
языка. Фортран был ориентирован на программирование вычислительных задач. Средства обработки нечисловой информации отсутствовали.
Слайд 7Проект оказался очень успешным. Уже через год после завершения разработки
языка на Фортране записывалось большинство программ для компьютеров IBM-704.
Успех объяснялся
тем, что язык был довольно простым и не содержал конструкций, порождающих неэффективный код.
Слайд 8К 1960 году существовали версии Fortran для компьютеров IBM 709,
650, 1620, 7090. Его большая популярность побуждала конкурирующих изготовителей компьютеров
создавать компиляторы Fortran для своих компьютеров. Таким образом, уже к 1963 существовало более 40 компиляторов для разных платформ. Именно поэтому Fortran считают первым широко используемым языком программирования.
Слайд 9В СССР Фортран появился позже, чем на Западе, поскольку поначалу
у нас более перспективным языком считался Алгол. Во внедрении Фортрана
большую роль сыграло общение советских физиков со своими коллегами из CERN (*), где в 1960-х годах почти все расчёты велись с использованием программ на Фортране.
Слайд 10ЦЕРН (CERN) — Европейская организация по ядерным исследованиям, крупнейшая в мире лаборатория физики
высоких энергий. Также иногда переводится как Европейский Центр ядерных исследований. Аббревиатура
CERN произошла от фр. Conseil Européen pour la Recherche Nucléaire (Европейский совет по ядерным исследованиям). В русском языке обычно используется аббревиатура ЦЕРН.
ЦЕРН находится на границе Швейцарии и Франции, вблизи Женевы.
Соглашение по образованию ЦЕРНа было подписано в Париже 29 июня − 1 июля 1953 года представителями 12 европейских стран. Организация была образована 29 сентября 1954 года.
В 2012 г. Россия подала заявку на вступление в ЦЕРН.
Слайд 11Первый советский компилятор с Фортрана был создан в 1967 г.
для машины «Минск-2», однако он не получил большой известности. Широкое
внедрение Фортрана началось после создания в 1968 г. компилятора ФОРТРАН-ДУБНА для машины БЭСМ-6.
Машины ЕС ЭВМ, появившиеся в 1972 г., уже изначально имели транслятор Фортрана («позаимствованный» с IBM-360 вместе с другим программным обеспечением).
Слайд 12Фортран — жёстко стандартизированный язык, именно поэтому он легко переносится
на различные платформы. Существует несколько международных стандартов языка:
-
FORTRAN IV
(Позже положенный в основу FORTRAN 66 (1966))
- FORTRAN 77 (1978)
(Появилось множество улучшений: строковый тип данных и функции для его обработки, блочные операторы IF, ELSE IF, ELSE, END IF, оператор включения фрагмента программы INCLUDE и т.д.)
Слайд 13 - FORTRAN 90 (1991)
(Значительно переработан стандарт языка. Введён
свободный формат написания кода. Появились дополнительные описания IMPLICIT NONE, TYPE,
ALLOCATABLE, POINTER, TARGET, NAMELIST; управляющие конструкции DO … END DO, DO WHILE, CYCLE, SELECT CASE, WHERE; работа с динамической памятью (ALLOCATE, DEALLOCATE, NULLIFY); программные компоненты MODULE, PRIVATE, PUBLIC, CONTAINS, INTERFACE, USE, INTENT. Появились новые встроенные функции, в первую очередь, для работы с массивами. Появились элементы ООП. Отдельно объявлен список устаревших черт языка, предназначенных для удаления в будущем.
Слайд 14 - FORTRAN 95 (1997)
(Коррекция предыдущего стандарта)
-
FORTRAN 2003 (2004)
(Дальнейшее развитие поддержки ООП в языке. Взаимодействие
с операционной системой)
Слайд 15В данный момент ведется разработка нового стандарта языка FORTRAN. Язык
входит в состав среды программирования Microsoft Visual Studio.
Слайд 16Литература
Бартеньев О.В. Современный Fortran. – М.: «Диалог-МИФИ», 2000. – 448с.
Бартеньев
О.В. Visual Fortran: новые возможности. – М.: «Диалог-МИФИ», 1999. –
304 с.
Слайд 18 Начало работы
Compaq Visual Fortran
Вызов
или
ПРОГРАММЫ/Compaq Visual Fortran 6/ Developer Studio
или
C:\Program Files\
M V S\ Common\ MS dev98\ BIN\ Dfdev.exe
Слайд 20Создание нового проекта
Гл. меню File/New… -> форма выбора типа
проекта (закладка Projects)
1. КОНСОЛЬНОЕ ПРИЛОЖЕНИЕ
ИМЯ
МЕСТО
OK!
Слайд 21Вид консольного приложения
Форма разновидности консольного проекта (после нажатия Ok)
Слайд 23Выполнение приложения
Обработка файла: Компиляция, Линковка, Выполнение
Гл.меню Build/Compile, Build/Rebuild All,
Build/Execute.
Слайд 242. «Пустой» проект
Пункт Empty Project -> ЧИСТОЕ ПОЛЕ РЕДАКТОРА
Для
продолжения работы необходимо ИМЯ ФАЙЛА
File/New… и в закладке Files занести
тип файла. Или добавить файл в проект: Project/Add To Project/Files…)
ИМЯ
ТИП
Слайд 252. «Простой» проект (Simple)
После выбора имени файла и его типа:
МОЖНО
РАБОТАТЬ!
Слайд 28Графическое приложение
Fortran StandardGraphic
СПРАВА
Указать имя проекта и его место (для
создания папки)! Появится кнопка Ok …
Форма разновидности
проекта (после нажатия Ok)
QuickWin (multiple windows)
StandardGraphics (single window)
НАШ ОСНОВНОЙ ТИП ПРОЕКТА!
Слайд 30Редактирование текста
Этапы обработки сопровождаются анализом ошибок в нижней части экрана.
После указания ошибки можно перейти к ее локализации щелчком мышки
на ее имени
Click
Слайд 31«Цветной» редактор
Составляющие текста можно выделить разными цветами:
Tools/ Options…
РАЗМЕР
ШРИФТА
Слайд 33Завершение работы
File/Close Workspace
(Do you wont to close…?)
Сохранение файлов для
продолжения работы:
*.dsp – # Microsoft Developer Studio Project File
*.dsw –
Microsoft Developer Studio Workspace File
*.f90 – Исходные тексты
! НЕ СОХРАНЯТЬ папку [ Debug ] и ее файлы (obj, exe, …)
Слайд 34Фиксированный и свободный формат
ПЕРФОКАРТА Холлерита
СТРОКА ПРОГРАММЫ - ОДНА ПЕРФОКАРТА
Слайд 35Герман Холлерит
О младенческих годах Германа ничего не известно. (дело семейное).
В школу он ходил с явной неохотой и имел среди
учителей репутацию ребенка одаренного, но дурно воспитанного и ленивого. Не давались ему ни грамматика, ни каллиграфия, не приводили его в восторг ни отечественная история, ни труды основоположников молодого демократического государства. Значительно лучше дела обстояли с естественными и точными науками.
Родители Германа были выходцами из Германии, в 1848 году они покинули родину …
Герман Холлерит родился 29 февраля 1860 года . Умер в 1929 г.
Слайд 36В 1879 году в возрасте 19 лет Герман Холлерит окончил
горную школу при Колумбийском университете и поступил в статистическое управление
при министерстве внутренних дел США. Чтобы закончить обработку результатов переписи населения 1880 года, бюро переписи населения, сотрудником которого он был, потребовалось в целом более 7 лет! Результаты очередной переписи (к 1890 году прирост населения составил более 3 миллионов) ожидались еще позже. Холлериту была поручена обработка информации о предпринимателях в промышленности по переписи 1880 года.
Слайд 37Однажды кондуктор в поезде, заносивший с помощью ручного компостера данные
о пассажирах в какой-то бланк, навел его на мысль о
перфокарте, которая содержала бы данные для переписи населения, и в 1884 году Холлерит уже обратился за патентом на "машину для переписи населения". Впоследствии он получил еще несколько десятков патентов за работы в этой области.
ТАБУЛЯТОР
ПЕРФОРАТОР
Слайд 381896 году создатель машины для переписи (статистического табулятора) основал фирму
по сбыту своих машин. Машина Германа Холлерита была весьма удачным
изобретением, и в 1897 году ее даже купила Россия - также для обработки данных переписи населения. Однако позже, в 1911 году, автор "машины для переписи" продал свою фирму, которая, объединившись с некоторыми другими, стала называться Computer Tabulating Recording Co., а позднее получила название International Business Mashines Corp., сокращенно IBM.
Слайд 39Текст в фиксированном формате (выделена 6-я колонка)
Слайд 40Проект 1
Ввести M, N, K
Заполнить массив [M x N]
сл.числами [-k/2, +k/2]
Вывести на экран массив ,
минимальные значения каждой
СТРОКИ и
максимальные значения каждого СТОЛБЦА
Предусмотреть цикл задачи (для повторных запусков)
и очистку экрана при повторном запуске
Слайд 41Текст Пр_1 (1)
program MAS_MxN ! array [M x N]
! Min, Max Col,Row
use
msflib ! Модуль ГРАФИКИ
implicit none ! Явное описание всех переменных
integer,parameter::nn=100,mm=100 ! CONST
real(4)rnd ! Занимает 4 байта
integer(2) col
character ch
integer a(mm,nn),b(mm),c(nn),i,j,k,m,n
Слайд 42Текст Пр_1 (2)
ЦИКЛ ЗАДАЧИ и ОЧИСТКА ЭКРАНА
do
call clearscreen($gclearscreen)
«ОПЕРАТОРЫ
РЕАЛИЗАЦИИ ЗАДАЧИ»
col=settextcolor(15_2)
print *,'Press any Key or
ESC'; ch = getcharQQ()
if(ch==CHAR(27))Exit
enddo
Слайд 43Текст Пр_1 (3)
col=settextcolor(15_2)
print '(1x,a,$)','Input M,N,K ';read *,m,n,k
col=settextcolor(11_2)
call seed(777) ! Randomize
do i=1,M ; do j =1,N
call random(rnd) !сл.число [0..1)
a(i,j) = INT(k * rnd)- k/2 ! TRUNC
enddo; enddo
do i=1,M
b(i)=MINVAL(a(i,:))
enddo
do j=1,N
c(j)=MaxVal(a(:,j))
enddo
ТЕСТ:
print *,int(3.9),nint(3.9)
TRUNK=3
ROUND=4
Слайд 44Текст Пр_1 (4)
do i=1,M
col=settextcolor(INT2(15))
write(*,'(100(I4,$))')a(i,:n)
col=settextcolor(INT2(11))
write(*,'(I4)')b(i)
enddo
col=settextcolor(INT2(12))
write(*,'(100I4)')c(:n)
Слайд 46Проект 2
Простой график последовательности сл.чисел [0, k)
ПАРАМЕТРЫ:
N – длина
последовательности;
k – const генератора сл.чисел
Слайд 47Текст Пр_2 (1)
program Grafik ! ПРОСТОЙ ГРАФИК
use
msflib
integer,parameter:: u0=100
integer v0,SX,SY, a(200),n,i,k,min,max,dn
real
cx,cy,rr,r
integer(2) stat2
character(40) st
character ch
integer u1,u2,v1,v2,oldcolor,SSX,SSY
type(xycoord)t
LOGICAL(4) status
Слайд 48Текст Пр_2 (2)
TYPE (windowconfig) wc
!INTEGER(2) numxpixels !
Number of pixels on x-axis.
!INTEGER(2) numypixels !
Number of pixels on y-axis.
status = GETWINDOWCONFIG(wc)
SSX=wc.numxpixels; SSY=wc.numypixels
v0=SSY-100;
SX=SSX-200;SY=SSY-200 ! ПОЛЕ ГРАФИКА
Слайд 49Текст Пр_2 (3)
print *,'Bb n,k';read *,n,k; if(n>200) n=200
do i=1,n
call random_number(rr)
a(i)=int(k*rr)
enddo
min = MINVAL(a(:n)); max = MAXVAL(a(:n))
write(*,'(20i4)')a(:n); write (*,*)min,max;
pause '1'
Слайд 50Текст Пр_2 (4)
oldcolor=SETBKCOLORRGB(#330000) ! RGB (-> BGR)
call clearscreen($gclearscreen) !BLUE
stat2=setcolor(15_2)
stat2=rectangle($gborder,u0,v0-SY,u0+SX,v0) ! FRAME
stat2=initializefonts()
stat2=setfont("t'courier'h14w8")
r=max-min !Размах по оси Y
cx=1.0*SX/(n-1);cy=1.0*SY/r
do i=1,5 ! ВЕРТИКАЛЬНАЯ ОСЬ
v1=v0-int((i-1)*SY/4);u1=u0;u2=u0-3
call moveto(u1,v1,t); call lineto(u2,v1)
write(st,'(f6.2)')min+(i-1)*r/4 ! Пч В СТРОКУ
call moveto(u0-70,v1-7,t); call outgtext(st)
enddo
Слайд 51Текст Пр_2 (5)
if(n
endif
do i=1,n ! ГОРИЗОНТАЛЬНАЯ ОСЬ
if((i==1) .or. (mod(i,dn)==0) .or. (i==n)) then
u1=u0+int((i-1)*cx); v1=v0;v2=v0+3
call moveto(u1,v1,t); call lineto(u1,v2)
write(st,'(i)')i
if (i if(i==n)call moveto(u0+SX-60,v0+5,t)
call outgtext(st)
endif
enddo
Слайд 52Текст Пр_2 (6)
stat2=setcolor(14_2) ! ЖЕЛТЫЙ ГРАФИК
do i=1,n-1
u1=u0+int((i-1)*cx);u2=u1+int(cx)
v1=v0-int((a(i)-min)*cy)
v2=v0-int((a(i+1)-min)*cy)
call moveto(u1,v1,t); call lineto(u2,v2)
enddo
Слайд 53Текст Пр_2 (7)
! ЗАВЕРШЕНИЕ ПРОГРАММЫ
stat2=setcolor(15_2);st ="Нажать любую клавишу или "
stat2=setfont("t'Times New Roman Cyr'h18w8");
u1=wc.numxpixels-getgtextextent(st); v1=wc.numypixels-40
call
moveto(u1,v1,t); call outgtext(st)
oldcolor=SETBKCOLORRGB(oldcolor)
if(ichar(getcharQQ())==27)stop
enddo
end program
Слайд 55Программа на Fortran’е
…алгоритмы и структуры данных…
Слайд 56Конструкция программы
!********************** КОММЕНТАРИИ ***********
!
! PROGRAM: Begin
!
! PURPOSE:
!***********************************************
program Begin
implicit none
! Variables
(ЗДЕСЬ
ВСЕ ПЕРЕМЕННЫЕ)
! Body of Begin
(ЗДЕСЬ ТЕКСТ ТЕЛА
ПРОГРАММЫ)
end program Begin
Слайд 57Синтаксис оформления
Главная программа
[PROGRAM name_program]
[операторы описания]
[исполняемые операторы]
[CONTAINS
внутренние процедуры]
END[PROGRAM [name_program]]
[…] -> можно
не писать!
ПРОГРАММА ИЗ 3-х БУКВ:
END
Операторы SUBROUTINE, FUNCTION– могут только после
CONTAINS.
END может быть с меткой.
Завершение возможно оператором STOP в любом месте
Слайд 58Использование программных единиц в проекте
а) встроенные процедуры (SIN,ALOG, TRIM,…)
б) подключаемые
процедуры и модули (из библ. Фортрана и мат. библ. CVF
ссылка Use)
в) создаваемые при работе процедуры и модули
Проектирование программы:
выделение фрагментов, определены данные обмена, способ обмена (параметры, внешний носитель, Use-ассоциирование)
В проект можно включить файл с исходным текстом (строка INCLUDE или директива $INCLUDE)
Слайд 59Внешние процедуры
SUBROUTINE, FUNCTION.
Выход в вызывающую программу:
END или Return
(м.б. несколько)
Окончание внешних:
END [SUBROUTINE [имя]]
или
END [FUNCTION [имя]]
New! Для функции результат м.б. переименован в предложении RESULT
МОГУТ БЫТЬ В ОТДЕЛЬНЫХ ФАЙЛАХ ПРОЕКТА
(Удобнее для отладки)
Слайд 60Внутренние процедуры
после оператора CONTAINS до завершающего END
Тип внутренней функции:
не должен объявляться в ее носителе (явный интерфейс)
Окончание внутренних включают:
END SUBROUTINE [имя]
или
END FUNCTION [имя]
Слайд 61МОДУЛИ
MODULE name_module
[раздел описаний]
[CONTAINS
модульные процедуры]
END[MODULE [name_module]]
Следующие за оператором CONTAINS модульные процедуры
должны завершаться
END SUBROUTINE [имя]
или
END FUNCTION [имя]
Слайд 62Объекты данных
ВИДЫ ОБЪЕКТОВ ДАННЫХ:
Переменные Константы Функции
Имена: Начинаются с буквы, из латинских букв,
цифр и символа подчеркивания
Регистр букв не является значащим
Типы ВСТРОЕННЫЕ: real,
integer,…
ПРОИЗВОДНЫЕ: (свои!)
Слайд 63Имена Фортрана по умолчанию
При проходе по выполняемым операторам программа
компилятор заводит имена, встречающиеся ему впервые ( т.е. те, которые
не определены точно ), в соответствии с контекстом.
Если имя используется как переменная, его тип определяется по первой букве имени : I, J, K, L, M или N по умолчанию принимаются целыми, а остальные буквы - действительными числами.
Вы можете использовать оператор IMPLICIT для замены соответствия типа и начальной буквы .
Это же правило используется при использовании имени в функции для определения типа возвратной величины.
Слайд 64Скаляры и массивы
Real :: x1=1.1, y =.5, z !
:: (лексема!) начальное !присваивание
Integer ar(2,5), i, j, k
Character (40) st
! Массив символов – строка
Real, parameter :: Pi = 3.141593 ! CONST
Logical(1) flag !логическая переменная
! Значения: .FALSE. и .TRUE.
Real,dimension(10)::a=.5 ! Другое описание !массива
Протяженность измерений массива можно указать парой значений
Real ::c(-2:2,5:10)
Слайд 65Стандартные числовые типы
3 ТИПА: INTEGER, REAL, COMPLEX
INTEGER -2’147’483’648
+2’147’483’647
REAL (отрицательные) -3.4028235E+38 -1.1754944E-38
число
0
(положительные) + 1.1754944E-38 <-> +3.4028235E+38
ДРОБНАЯ ЧАСТЬ МОЖЕТ СОДЕРЖАТЬ ДО 6 ДЕС. ЗНАКОВ
COMPLEX Пара вещественных
(для действительной и мнимой части)
СТАНДАРТНЫЙ ТИП INTEGER, REAL - 4 байта
Определяются операторами: Real a; Integer i,j,k
complex z; … z = (2.3, -9.7) * 2.2
Слайд 66Разновидности числовых типов
Имя типа ([kind=] значение) список объектов
Стандартную разновидность (4)
можно не указывать
ДОПУСТИМЫЕ РАЗНОВИДНОСТИ:
INTEGER (1)
INTEGER (2)
INTEGER (4)
Real, Complex(4)
Real, Complex(8) ДВОЙНАЯ ТОЧНОСТЬ
Слайд 67Создать графическое приложение и выполнить упражнения (3 по выбору из
файла Линейные алгоритмы.doc)
Предусмотреть очистку экрана и цикл задачи.
Текстовые строки выводить
латинскими буквами (коротко!)
Например: S rectangle
Input L, W
Result S =
Завершающую строчку (Press any Key or
) вывести в нижнем правом углу!
ПРАКТИКУМ