Пр_ФОРТР_01.ppt
- Количество слайдов: 68
СОВРЕМЕННЫЙ ФОРТРАН Гущин Олег Андрианович
Сейчас, когда Государство Российское ищет выход из тупика либеральных реформ, у определённой части россиян появились надежды на возрождение отечественной науки и индустрии. Этот сложный процесс предполагает также и переосмысление системы социальных ценностей. …общество вновь должно поднять престиж таких забытых ныне профессий, как инженер, физик, химик… Подавляющее большинство предлагаемых видов деятельности … связано с финансами или торговлей. Это: специалист по маркетингу, рекламе, кассир, бухгалтер, финансист, кладовщик, банковский работник, охранник, консультант, дилер, продавец, посредник, челнок и так далее. Понятно, что такая общественная конструкция не может быть устойчивой, … подвержена постоянно воспроизводимым катаклизмам, приводящим в конечном счёте к её уничтожению.
Существующее положение вещей не могло не отразиться и на системе приоритетов в области программирования. … молодёжь стремится освоить Delphi, C/C++, Java и им подобные. Популярны также и системы работы с базами данных типа Fox. Pro, Access, Oracle, Clarion и другие. Несомненно, что эти языки будучи в основной своей массе объектно-ориентированными, хорошо приспособлены для создания систем управления …, а также систем доставки данных, например в среде Internet. В то же время подобные языки мало пригодны для описания явлений природы и разного рода процессов (физических, химических, технологических…), которые, как правило, сами состоят из большого числа параллельно проходящих процессов.
К счастью, есть язык, ориентированный на решение научно-технических задач, и этим языком является Фортран динамично развивается и ныне он воплощен в стандартах Фортран 90 и 95. ИСТОРИЯ ФОРТРАНА
Фортра н (Fortran) — первый реализованный язык программирования высокого уровня. Создан в период с 1954 по 1957 год группой программистов под руководством Джона Бэкуса (John Backus) в корпорации IBM в качестве эффективной альтернативы ассемблеру для программирования на ПК IBM 704. .
n Название языка происходит от сокращения слов FORmula TRANslation – перевод формул. n Запись формул в привычном виде была одной из важных возможностей языка. Фортран был ориентирован на программирование вычислительных задач. Средства обработки нечисловой информации отсутствовали.
n Проект оказался очень успешным. Уже через год после завершения разработки языка на Фортране записывалось большинство программ для компьютеров IBM-704. n Успех объяснялся тем, что язык был довольно простым и не содержал конструкций, порождающих неэффективный код.
n К 1960 году существовали версии Fortran для компьютеров IBM 709, 650, 1620, 7090. Его большая популярность побуждала конкурирующих изготовителей компьютеров создавать компиляторы Fortran для своих компьютеров. Таким образом, уже к 1963 существовало более 40 компиляторов для разных платформ. Именно поэтому Fortran считают первым широко используемым языком программирования.
n В СССР Фортран появился позже, чем на Западе, поскольку поначалу у нас более перспективным языком считался Алгол. Во внедрении Фортрана большую роль сыграло общение советских физиков со своими коллегами из CERN (*), где в 1960 -х годах почти все расчёты велись с использованием программ на Фортране.
ЦЕРН (CERN) — Европейская организация по ядерным исследованиям, крупнейшая в мире лаборатория физики высоких энергий. Также иногда переводится как Европейский Центр ядерных исследований. Аббревиатура CERN произошла от фр. Conseil Européen pour la Recherche Nucléaire (Европейский совет по ядерным исследованиям). В русском языке обычно используется аббревиатура ЦЕРН находится на границе Швейцарии и Франции, вблизи Женевы. Соглашение по образованию ЦЕРНа было подписано в Париже 29 июня − 1 июля 1953 года представителями 12 европейских стран. Организация была образована 29 сентября 1954 года. В 2012 г. Россия подала заявку на вступление в ЦЕРН.
Первый советский компилятор с Фортрана был создан в 1967 г. для машины «Минск-2» , однако он не получил большой известности. Широкое внедрение Фортрана началось после создания в 1968 г. компилятора ФОРТРАН-ДУБНА для машины БЭСМ-6. n Машины ЕС ЭВМ, появившиеся в 1972 г. , уже изначально имели транслятор Фортрана ( «позаимствованный» с IBM-360 вместе с другим программным обеспечением). n
Фортран — жёстко стандартизированный язык, именно поэтому он легко переносится на различные платформы. Существует несколько международных стандартов языка: - FORTRAN IV (Позже положенный в основу FORTRAN 66 (1966)) - FORTRAN 77 (1978) (Появилось множество улучшений: строковый тип данных и функции для его обработки, блочные операторы IF, ELSE, END IF, оператор включения фрагмента программы INCLUDE и т. д. )
- 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. Появились новые встроенные функции, в первую очередь, для работы с массивами. Появились элементы ООП. Отдельно объявлен список устаревших черт языка, предназначенных для удаления в будущем.
- FORTRAN 95 (1997) (Коррекция предыдущего стандарта) - FORTRAN 2003 (2004) (Дальнейшее развитие поддержки ООП в языке. Взаимодействие с операционной системой)
В данный момент ведется разработка нового стандарта языка FORTRAN. Язык входит в состав среды программирования Microsoft Visual Studio.
Литература Бартеньев О. В. Современный Fortran. – М. : «Диалог-МИФИ» , 2000. – 448 с. Бартеньев О. В. Visual Fortran: новые возможности. – М. : «Диалог-МИФИ» , 1999. – 304 с.
Начало работы Compaq Visual Fortran Вызов или ПРОГРАММЫ/Compaq Visual Fortran 6/ Developer Studio или C: Program Files M V S Common MS dev 98 BIN Dfdev. exe
Среда CVF
Создание нового проекта Гл. меню File/New… -> форма (закладка Projects) выбора типа проекта 1. КОНСОЛЬНОЕ ПРИЛОЖЕНИЕ ИМЯ МЕСТО OK!
Вид консольного приложения Форма разновидности консольного проекта (после нажатия Ok)
Проект «Hello World»
Выполнение приложения Обработка файла: Компиляция, Линковка, Выполнение Гл. меню Build/Compile, Build/Rebuild All, Build/Execute.
2. «Пустой» проект Пункт Empty Project -> ЧИСТОЕ ПОЛЕ РЕДАКТОРА Для продолжения работы необходимо ИМЯ ФАЙЛА File/New… и в закладке Files занести тип файла. Или добавить файл в проект: Project/Add To Project/Files…) ТИП ИМЯ
2. «Простой» проект (Simple) После выбора имени файла и его типа: МОЖНО РАБОТАТЬ!
Выполнение Simple
Дополнение Hello
Графическое приложение Fortran Standard. Graphic СПРАВА Указать имя проекта и его место (для создания папки)! Появится кнопка Ok … Форма разновидности проекта (после нажатия Ok) Quick. Win (multiple windows) Standard. Graphics (single window) НАШ ОСНОВНОЙ ТИП ПРОЕКТА!
Пример графики
Редактирование текста Этапы обработки сопровождаются анализом ошибок в нижней части экрана. После указания ошибки можно перейти к ее локализации щелчком мышки на ее имени Click
«Цветной» редактор Составляющие текста можно выделить разными цветами: Tools/ Options… РАЗМЕР ШРИФТА
Пример «цветного» редактора
Завершение работы File/Close Workspace (Do you wont to close…? ) Сохранение файлов для продолжения работы: *. dsp – # Microsoft Developer Studio Project File *. dsw – Microsoft Developer Studio Workspace File *. f 90 – Исходные тексты ! НЕ СОХРАНЯТЬ папку [ Debug ] и ее файлы (obj, exe, …)
Фиксированный и свободный формат ПЕРФОКАРТА Холлерита СТРОКА ПРОГРАММЫ - ОДНА ПЕРФОКАРТА
Герман Холлерит Родители Германа были выходцами из Германии, в 1848 году они покинули родину … Герман Холлерит родился 29 февраля 1860 года. Умер в 1929 г. О младенческих годах Германа ничего не известно. (дело семейное). В школу он ходил с явной неохотой и имел среди учителей репутацию ребенка одаренного, но дурно воспитанного и ленивого. Не давались ему ни грамматика, ни каллиграфия, не приводили его в восторг ни отечественная история, ни труды основоположников молодого демократического государства. Значительно лучше дела обстояли с естественными и точными науками.
В 1879 году в возрасте 19 лет Герман Холлерит окончил горную школу при Колумбийском университете и поступил в статистическое управление при министерстве внутренних дел США. Чтобы закончить обработку результатов переписи населения 1880 года, бюро переписи населения, сотрудником которого он был, потребовалось в целом более 7 лет! Результаты очередной переписи (к 1890 году прирост населения составил более 3 миллионов) ожидались еще позже. Холлериту была поручена обработка информации о предпринимателях в промышленности по переписи 1880 года.
Однажды кондуктор в поезде, заносивший с помощью ручного компостера данные о пассажирах в какой-то бланк, навел его на мысль о перфокарте, которая содержала бы данные для переписи населения, и в 1884 году Холлерит уже обратился за патентом на "машину для переписи населения". Впоследствии он получил еще несколько десятков патентов за работы в этой области. ТАБУЛЯТОР ПЕРФОРАТОР
1896 году создатель машины для переписи (статистического табулятора) основал фирму по сбыту своих машин. Машина Германа Холлерита была весьма удачным изобретением, и в 1897 году ее даже купила Россия - также для обработки данных переписи населения. Однако позже, в 1911 году, автор "машины для переписи" продал свою фирму, которая, объединившись с некоторыми другими, стала называться Computer Tabulating Recording Co. , а позднее получила название International Business Mashines Corp. , сокращенно IBM.
Текст в фиксированном формате (выделена 6 -я колонка)
Проект 1 Ввести M, N, K Заполнить массив [M x N] сл. числами [-k/2, +k/2] Вывести на экран массив , минимальные значения каждой СТРОКИ и максимальные значения каждого СТОЛБЦА Предусмотреть цикл задачи (для повторных запусков) и очистку экрана при повторном запуске
Текст Пр_1 (1) program MAS_Mx. N ! 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
Текст Пр_1 (2) ЦИКЛ ЗАДАЧИ и ОЧИСТКА ЭКРАНА do call clearscreen($gclearscreen) «ОПЕРАТОРЫ РЕАЛИЗАЦИИ ЗАДАЧИ» col=settextcolor(15_2) print *, 'Press any Key or ESC'; ch = getchar. QQ() if(ch==CHAR(27))Exit enddo
Текст Пр_1 (3) col=settextcolor(15_2) print '(1 x, 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 print *, int(3. 9), nint(3. 9) TRUNK=3 b(i)=MINVAL(a(i, : )) ROUND=4 enddo do j=1, N c(j)=Max. Val(a(: , j)) enddo
Текст Пр_1 (4) do i=1, M col=settextcolor(INT 2(15)) write(*, '(100(I 4, $))')a(i, : n) col=settextcolor(INT 2(11)) write(*, '(I 4)')b(i) enddo col=settextcolor(INT 2(12)) write(*, '(100 I 4)')c(: n)
Выполнение проекта
Проект 2 Простой график последовательности сл. чисел [0, k) ПАРАМЕТРЫ: N – длина последовательности; k – const генератора сл. чисел
Текст Пр_2 (1) program Grafik ! ПРОСТОЙ ГРАФИК use msflib integer, parameter: : u 0=100 integer v 0, SX, SY, a(200), n, i, k, min, max, dn real cx, cy, rr, r integer(2) stat 2 character(40) st character ch integer u 1, u 2, v 1, v 2, oldcolor, SSX, SSY type(xycoord)t LOGICAL(4) status
Текст Пр_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 v 0=SSY-100; SX=SSX-200; SY=SSY-200 ! ПОЛЕ ГРАФИКА
Текст Пр_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(*, '(20 i 4)')a(: n); pause '1' write (*, *)min, max;
Текст Пр_2 (4) oldcolor=SETBKCOLORRGB(#330000) ! RGB (-> BGR) call clearscreen($gclearscreen) !BLUE stat 2=setcolor(15_2) stat 2=rectangle($gborder, u 0, v 0 -SY, u 0+SX, v 0) ! FRAME stat 2=initializefonts() stat 2=setfont("t'courier'h 14 w 8") r=max-min !Размах по оси Y cx=1. 0*SX/(n-1); cy=1. 0*SY/r do i=1, 5 ! ВЕРТИКАЛЬНАЯ ОСЬ v 1=v 0 -int((i-1)*SY/4); u 1=u 0; u 2=u 0 -3 call moveto(u 1, v 1, t); call lineto(u 2, v 1) write(st, '(f 6. 2)')min+(i-1)*r/4 ! Пч В СТРОКУ call moveto(u 0 -70, v 1 -7, t); call outgtext(st) enddo
Текст Пр_2 (5) if(n<100) then ; dn=5; else; dn=10 endif do i=1, n ! ГОРИЗОНТАЛЬНАЯ ОСЬ if((i==1). or. (mod(i, dn)==0). or. (i==n)) then u 1=u 0+int((i-1)*cx); v 1=v 0; v 2=v 0+3 call moveto(u 1, v 1, t); call lineto(u 1, v 2) write(st, '(i)')i if (i
Текст Пр_2 (6) stat 2=setcolor(14_2) ! ЖЕЛТЫЙ ГРАФИК do i=1, n-1 u 1=u 0+int((i-1)*cx); u 2=u 1+int(cx) v 1=v 0 -int((a(i)-min)*cy) v 2=v 0 -int((a(i+1)-min)*cy) call moveto(u 1, v 1, t); call lineto(u 2, v 2) enddo
"" src="https://present5.com/presentation/3/104058261_156320302.pdf-img/104058261_156320302.pdf-53.jpg" alt="Текст Пр_2 (7) ! ЗАВЕРШЕНИЕ ПРОГРАММЫ stat 2=setcolor(15_2); st ="Нажать любую клавишу или
Выполнение проекта
Программа на Fortran’е …алгоритмы и структуры данных…
Конструкция программы !*********** КОММЕНТАРИИ ****** ! ! PROGRAM: Begin ! ! PURPOSE: !************************ program Begin implicit none ! Variables (ЗДЕСЬ ВСЕ ПЕРЕМЕННЫЕ) ! Body of Begin (ЗДЕСЬ ТЕКСТ ТЕЛА ПРОГРАММЫ) end program Begin
Синтаксис оформления Главная программа [PROGRAM name_program] [операторы описания] [исполняемые операторы] [CONTAINS […] -> можно не писать! ПРОГРАММА ИЗ 3 -х БУКВ: END внутренние процедуры] END[PROGRAM [name_program]] Операторы SUBROUTINE, FUNCTION– могут только после CONTAINS. END может быть с меткой. Завершение возможно оператором STOP в любом месте
Использование программных единиц в проекте а) встроенные процедуры (SIN, ALOG, TRIM, …) б) подключаемые процедуры и модули (из библ. Фортрана и мат. библ. CVF ссылка Use) в) создаваемые при работе процедуры и модули Проектирование программы: выделение фрагментов, определены данные обмена, способ обмена (параметры, внешний носитель, Useассоциирование) В проект можно включить файл с исходным текстом (строка INCLUDE или директива $INCLUDE)
Внешние процедуры SUBROUTINE, FUNCTION. Выход в вызывающую программу: END или Return (м. б. несколько) Окончание внешних: END [SUBROUTINE [имя]] или END [FUNCTION [имя]] New! Для функции результат м. б. переименован в предложении RESULT МОГУТ БЫТЬ В ОТДЕЛЬНЫХ ФАЙЛАХ ПРОЕКТА (Удобнее для отладки)
Внутренние процедуры после оператора CONTAINS до завершающего END Тип внутренней функции: не должен объявляться в ее носителе (явный интерфейс) Окончание внутренних включают: END SUBROUTINE [имя] или END FUNCTION [имя]
МОДУЛИ MODULE name_module [раздел описаний] [CONTAINS модульные процедуры] END[MODULE [name_module]] Следующие за оператором CONTAINS модульные процедуры должны завершаться END SUBROUTINE [имя] или END FUNCTION [имя]
Объекты данных ВИДЫ ОБЪЕКТОВ ДАННЫХ: Переменные Константы Функции Имена: Начинаются с буквы, из латинских букв, цифр и символа подчеркивания Регистр букв не является значащим Типы ВСТРОЕННЫЕ: real, integer, … ПРОИЗВОДНЫЕ: (свои!)
Имена Фортрана по умолчанию При проходе по выполняемым операторам программа компилятор заводит имена, встречающиеся ему впервые ( т. е. те, которые не определены точно ), в соответствии с контекстом. Если имя используется как переменная, его тип определяется по первой букве имени : I, J, K, L, M или N по умолчанию принимаются целыми, а остальные буквы - действительными числами. Вы можете использовать оператор IMPLICIT для замены соответствия типа и начальной буквы. Это же правило используется при использовании имени в функции для определения типа возвратной величины.
Скаляры и массивы Real : : x 1=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)
Стандартные числовые типы 3 ТИПА: INTEGER, REAL, COMPLEX INTEGER -2’ 147’ 483’ 648 <-> +2’ 147’ 483’ 647 REAL (отрицательные) -3. 4028235 E+38 <-> -1. 1754944 E-38 число 0 (положительные) + 1. 1754944 E-38 <-> +3. 4028235 E+38 ДРОБНАЯ ЧАСТЬ МОЖЕТ СОДЕРЖАТЬ ДО 6 ДЕС. ЗНАКОВ COMPLEX Пара вещественных (для действительной и мнимой части) СТАНДАРТНЫЙ ТИП INTEGER, REAL - 4 байта Определяются операторами: Real a; Integer i, j, k complex z; … z = (2. 3, -9. 7) * 2. 2
Разновидности числовых типов Имя типа ([kind=] значение) список объектов Стандартную разновидность (4) можно не указывать ДОПУСТИМЫЕ РАЗНОВИДНОСТИ: INTEGER (1) INTEGER (2) INTEGER (4) Real, Complex(8) ДВОЙНАЯ ТОЧНОСТЬ
ПРАКТИКУМ Создать графическое приложение и выполнить упражнения (3 по выбору из файла Линейные алгоритмы. doc) Предусмотреть очистку экрана и цикл задачи. Текстовые строки выводить латинскими буквами (коротко!) Например: S rectangle Input L, W Result S = Завершающую строчку (Press any Key or
THE END


