Справочник от Автор24
Поделись лекцией за скидку на Автор24

История развития языка Фортран: основные элементы языка Фортран

  • 👀 562 просмотра
  • 📌 534 загрузки
Выбери формат для чтения
Загружаем конспект в формате doc
Это займет всего пару минут! А пока ты можешь прочитать работу в формате Word 👇
Конспект лекции по дисциплине «История развития языка Фортран: основные элементы языка Фортран» doc
Лекция № 2 История развития языка Фортран. Основные элементы языка Фортран. Константы, переменные, выражения, функции. Линейные алгоритмы. Язык программирования служит двум связанным между собой целям: он дает программисту аппарат для записи (кодирования) действий, которые должны быть выполнены, и формирует концепции, которыми пользуется программист, размышляя о том, что делать. Первой цели отвечает язык близкий к машине, который позволяет программисту легко оперировать основными машинными ресурсами. Второй цели отвечает язык близкий к решаемой задаче, который позволяет выражать просто и коротко любые концепции ее решения. Каждый конкретный компьютер способен работать с программами, написанными на его собственном машинном языке. Существует почти столько же разных машинных языков, сколько и компьютеров, но все они суть разновидности одной идеи: простые операции в двоичных числах производятся с максимально высокой скоростью. Можно писать программы непосредственно на машинном языке, хотя это и сложно. На заре вычислительной техники (в начале 1950-х г.г.), машинный язык был единственным языком. Для спасения программистов от сурового машинного языка программирования, были созданы языки высокого уровня (немашинные языки), которые стали своеобразным связующим звеном между человеком и машинным языком компьютера. Языки высокого уровня работают при помощи трансляционных программ, которые вводят исходный код (гибрид английских слов и математических выражений), и заставляет компьютер выполнять соответствующие команды, которые даются на машинном языке. Одним из самых старейших языков программирования высокого уровня является язык Фортран. Он занимает почетное место среди современных языков программирования. Это один из первых языков программирования высокого уровня и с самого своего рождения он предназначен для решения сложных вычислительных задач. Несмотря на свой «почтенный» возраст, Фортран постоянно обновляется. В среднем один раз в 10 лет выходит новый стандарт языка, учитывающий современное состояние программирования с одной стороны и пожелания программистов-прикладников с другой. Один раз в 5 лет выпускается стандарт, который включает относительно небольшие дополнения и изменения. История языка Фортран Удачная «биография» языка во многом была определена личностью человека, который руководил его разработкой. Это – Джон Бэкус. В 1942 он окончил школу, но к учебе, по его собственному признанию, относился несерьезно. По окончании школы Джон по совету отца поступил в университет Вирджинии и приступил к изучению химии, но в 1943 году бросил учебу и ушел в армию. В армии Бэкус был направлен на обучение в медицинский госпиталь со специализацией в области нейрохирургии, но учеба не пошла и там. Бэкус считал, что она сводилась к зубрежке, а места размышлениям в ней не было, и через девять месяцев на карьере медика был поставлен крест. Бэкус переехал в Нью-Йорк. Размышляя о смысле жизни, Джон пришел к неожиданному выводу, что для полного комфорта ему необходим аппарат для высококачественного воспроизведения музыки. Таких аппаратов в то время не было. Бэкус решил взять судьбу в собственные руки и отправился в школу радиотехников. Здесь он встретил первого в жизни учителя, который вызвал у него доверие. Учитель попросил Джона помочь ему с расчетом характеристик радиосхем. Сравнительно простой расчет усилителя вызвал у Бэкуса интерес к математике. Бэкус поступил в Колумбийский университет Нью-Йорка и стал изучать математику. Университет Джон закончил в 1949 году. Незадолго до окончания университета он посетил вычислительный центр фирмы IBM, куда вскоре и был принят на работу программистом. Именно в IBM Бэкус возглавил работы по разработке первого языка высокого уровня Фортран (Fortran, от Formula translator – переводчик формул на машинный язык). Первая коммерческая версия языка была выпущена в 1957 году, которая получила название Фортран ||. В 1962 году на рынке появилась новая версия языка – Фортран |V. В 1966г. – Фортран 66. В 1978г. – Фортран 77. Затем были стандарты Фортран 90, Фортран 95, Фортран 2003. Новые последующие версии не исключают использование старых программ на Фортране, они лишь рассматривают возможности языка. Язык Фортран до сих пор продолжает развиваться и совершенствоваться, оказывая влияние на создание и развитие других языков. Например, Фортран заложен в основу диалогового языка Бейсик, очень популярного для решения небольших задач и обучения алгоритмическим навыкам в практике программирования. Алфавит языка Фортран 1. 26 букв английского алфавита; 2. 10 цифр 0,1,2,3,4,5,6,7,8,9; 3. символ пробел; 4. специальные символы = + - * / ( ) , . $ ‘ “ % < > ? : ; & ! 5. знак подчеркивания. Основные элементы языка Фортран К основным элементам языка Фортран относятся константы, переменные, выражения, функции. Термины константы и переменные распространяются на скаляры, массивы, а также на элементы массивов, сечения массивов, подстроки, компоненты структур. Типы данных разделяются на встроенные и производные (создаваемые пользователем). Каждый встроенный тип данных характеризуется параметром разновидности KIND. Для числовых типов данных этот параметр описывает точность и диапазон изменения. Для символьного типа данных в FPS (Fortran Power Station) существует только одна разновидность (KIND=1). Параметр KIND указывается в скобках после имени типа. Каждый встроенный тип имеет стандартную, задаваемую по умолчанию разновидность. Стандартная разновидность, как правило, в скобках не указывается. Каждой разновидности соответствует число байт памяти, отводимое под объект. Встроенные типы данных: 1. Целый – INTEGER (стандартная разновидность), BYTE, INTEGER(1), INTEGER(2), INTEGER(4) Число байт памяти под объекты целого типа для перечисленных разновидностей соответственно равны 4, 1, 1, 2, 4. 2. Вещественный – REAL (стандартная разновидность), REAL(4), REAL(8), DOUBLE PRECISION Число байт памяти под объекты вещественного типа для перечисленных разновидностей соответствуют значениям - 4, 4, 8, 8. При KIND=8 вещественные данные имеют двойную точность. 3. Комплексный – COMPLEX (стандартная разновидность), COMPLEX(4), COMPLEX(8). Число байт памяти, отводимое под комплексные объекты, для перечисленных разновидностей соответственно равны – 8, 8, 16. При этом одна половина памяти отводится под реальную часть, а другая под мнимую. 4. Логический – LOGICAL (стандартная разновидность), LOGICAL(1), LOGICAL(2), LOGICAL(4) Число байт памяти, отводимое под логические объекты, для перечисленных разновидностей соответственно равны – 4, 1, 2, 4. Первый байт содержит значение либо 0 (.FALSE), либо 1 (.TRUE). Остальные байты имеют значение – null. 5. Символьный (текстовый) – CHARACTER, CHARACTER(n). Разновидность KIND для символьного типа всегда равна 1. Число байт, отводимое под символьный объект, равно соответственно 1 или n. При этом n принимает значения 1 n 32767. Тип данных задается с помощью операторов объявления типов данных. В самом общем виде оператор объявления типа данных может быть представлен как: имя типа [[[(KIND=значение)][, attrs]::] list Имя типа – один из перечисленных выше типов данных: INTEGER, REAL, REAL(8), COMPLEX, LOGICAL, CHARACTER. KIND задает значение разновидностей для каждого типа. Слово KIND может быть опущено, при этом в скобках указывается только значение разновидности. Если используется стандартный тип разновидности, то значение разновидности совсем отсутствует. attrs – один или более атрибут, описывающий представленные в list объекты данных. Если хотя бы один атрибут указан, то должен быть использован разделитель::. Атрибуты определяют дополнительные свойства данных. Возможные атрибуты: ALLOCATABLE, PARAMETR, POINTER, TARGET, DIMENSION, PRIVATE, PUBLIC и др. list – разделенный запятыми список имен объектов данных (переменных, констант, а также внешних, внутренних, операторных и встроенных функций). В Фортране допускается не объявлять данные целого и вещественного типа. При этом действует правило по умолчанию: данные, которые начинаются с букв I, J, K, L, M, N, имеют стандартный целый тип, остальные - стандартный вещественный. Это неявный способ задания типа данных. Данные комплексного, логического и символьного типа объявляются только явно (операторами объявления типа данных). Правило по умолчанию можно отменить с помощью оператора Implicit, который имеет вид: IMPLICIT type(letters) [, type(letters), …] type – один из встроенных или производных типов данных letters – список одиночных букв или диапазонов букв. Константы в Фортране В Фортране различают буквальные и именованные константы. Возможно задание арифметических (целых, вещественных, комплексных), логических и символьных буквальных констант. Целые константы – целые числа со знаком или без знака. +10, 10, -10_2 (после знака подчеркивания “_“ указано значение разновидности KIND = 2 для константы -10). Вещественные константы могут быть заданы в F-форме, E-форме и D-форме. F-форма задает числа с фиксированной точкой. E-форма и D-форма задают числа с плавающей точкой. Например число –51.234 можно представить в десятичной системе счисления как . Мантисса задает точность представления, а показатель степени задает порядок числа. (F - форма: -51.234, E - форма: -0.51234Е+2, D - форма: -0.51234D+2). F и E – формы могут задавать числа одинарной и двойной точности (4 и 8 байт памяти), например: 3.3_4; 3.3_8; 0.125E-4_8; 0.125E-4. D - форма задает числа только двойной точности. Комплексные константы – две целые или вещественные константы (реальная и мнимая часть), заключенные в скобки и разделенные запятой. Реальная и мнимая части могут быть заданы в F-форме, E-форме, D-форме: (2.33, 0.044), (0.233E1, 0.44E-1), (0.233D+1, 0.44D-1) Логические константы – их всего две: .TRUE. и .FALSE. Наличие обрамляющих точек обязательно. Символьные константы – последовательность одного или более символов 8-битового кода, заключенная в апострофы. Символьная строка + латинский символ С образуют СИ-строку. Существующие в СИ эскейп - последовательности можно использовать в FPS, представив их как СИ-строку (пример см. ниже) Именованные константы применяются для защиты данных от изменения в процессе вычислений, т.е. их нельзя изменить в операторах присваивания и READ. Задаются именованные константы с помощью оператора или атрибута PARAMETER (пример см. ниже). Переменная в Фортране Переменная – это объект, значение которого может изменяться в процессе выполнения программы. Атрибуты переменной – значение, тип и имя. Имя – это последовательность символов из букв и цифр, обязательно начинается с буквы, имеет не более 31 символа. Правильные имена: А1, Xmax, Vector и т.д. Неправильные имена: 1.LOES, A 1, A\45. Инициализация данных в Фортране Инициализация статических данных в Фортране осуществляется на этапе компиляции программы, а динамических - в процессе выполнения программы. К динамическим данным относятся переменные, объявленные с атрибутом POINTER (ссылки) и атрибутом ALLOCATABLE. Выделение памяти под динамические данные осуществляется либо после его прикрепления к размещенному адресату, либо с помощью оператора ALLOCATE. Освобождение динамической памяти происходит после выполнения оператора DEALLOCATE. (примеры см. ниже). Возможны два способа инициализации данных: а) в операторах объявления типа б) с помощью оператора DATA, общий формат которого: DATA список имен /список значений/ Объекты в списке имен и в списке значений перечисляются через запятые и находятся в строгом соответствии слева направо. Примеры объявления и инициализации данных Объявление данных целого типа: а) integer d1, d2 data d1, d2 /34, 100/ ! объявлены переменные d1 и d2 целого типа стандартной разновидности и инициированы оператором data; б) integer(2) d1/4/, d2/5/ ! объявлены переменные d1, d2 целого типа (KIND=2), при таком инициировании наличие разделителя :: необязательно; в) integer(1):: d1=4, d2=5 ! при такой форме инициирования разделитель :: обязателен; г) integer, parameter:: m = 4, n = 5 ! объявлены две именованные константы m и n; д) integer, pointer:: p ! объявлена динамическая переменная - ссылка p; integer, target:: k = 5 ! объявлен адресат k (с атрибутом target); p =>k ! ссылка прикрепленная к адресату. Объявление данных вещественного типа а) real d/123.5/, c/1.E-6/ ! объявлены и инициированы две переменные d и c вещественного типа стандартной разновидности; б) real(8):: a = 2D0, b = 0.35D4, c ! объявлены переменные a, b, c двойной точности; в) integer, parameter:: c = 4; real(c) a, b ! значение разновидности задано как именованная константа c; г) real, pointer:: c, d ! объявление ссылок c и d; real, target:: e=10 ! объявление и инициирование адресата e; allocate(c) ! выделение памяти переменной-ссылке c; d =>e ! прикрепление ссылки d к адресату e. Объявление данных комплексного типа. а) complex:: C1, C2 = (10.5, 11.3) ! объявлены комплексные переменные C1, C2 стандартной разновидности KIND = 4; б) complex (8):: C1=(10.5D0, -1.13D1), C2 ! объявлены комплексные переменные C1, C2 с KIND = 8. Объявление логических данных а) logical g1, g2 data g1,g2 /.true., .false./ ! объявлены логические переменные g1, g2 и инициированы в операторе data; б) logical:: g1 = .true., g2 = .false. Объявление символьных данных а) character(15):: st1=’example’, st2*20/’example_2’/ ! объявлены и инициированы две символьные переменные st1 длиной 15 символов и st2 длиной 20 символов; б) character(*), parameter:: st = ’example’ ! для задания длины используется символ * при определении именованной константы; в этом случае длина равна числу символов константы; в) character:: bell = ’\a’c – объявлена символьная переменная bell, которой присвоена СИ-константа, использующая эскейп – последовательность, соответствующую звуковому сигналу; г) character(20):: tx1 = ’computer Pentium3’, tx2*8 ! объявлена tx2 = tx1(10:17), строковая переменная tx1 длиной 20 символов и строковая переменная tx2 длиной 8 символов. Переменной tx2 присвоена подстрока переменной tx1. Подобно элементам в массиве, символы строки расположены в памяти компьютера последовательно один за другим. Обращение tx1(10:17) соответствует подстроке ‘Pentium3’. Запись tx1(i:i) обеспечивает доступ к i - му символу строки. Объявление данных по правилу умолчания и с помощью оператора Implicit а) i = 10.5 ! по умолчанию это целая переменная, результат присвоения =10; y = 15 по умолчанию это вещественная переменная результат присвоения =15.000000; б) Implicit integer(2) (p, c-e), real (k-m) ! переменные, которые будут начинаться с букв p или ce, будут иметь целый тип KIND=2, переменные, которые начинаются с букв km, будут иметь вещественный тип KIND=4. Выражения в Фортране Выражение представляет собой запись, указывающую, какие действия и над какими данными следует выполнить для получения требуемого результата. В Фортране различают арифметические, текстовые, логические выражения и выражения отношения. Арифметические выражения. Операндами арифметических выражений могут быть: • константы; • числовые переменные; • числовые массивы и их сечения; • вызовы функций целого вещественного и комплексного типа. Арифметические операции по приоритету в порядке возрастания: ** - возведение в степень; *, / - умножение, деление; унарные + и - ; +, - - сложение, вычитание. Операции выполняются слева направо в соответствии с приоритетом, кроме операции возведения в степень, которая выполняется справа налево . Целочисленное деление. Результатом деления целых чисел в Фортране является целое число без дробной части, например, 3/2=1, 1/2 = 0. Чтобы результат был вещественным, надо целое число представлять как вещественное либо с помощью точки, либо через встроенную функцию: 3./2. или real(3)/real(2). Возведение в целую отрицательную степень. (целочисленное деление). Чтобы этого избежать, надо 5.**(-3), тогда (результат вещественный). Возведение в целую степень осуществляется как Возведение в вещественную степень. вычисляется как , поэтому А не может быть отрицательным числом, т.е. (-3)**1.5 неверная запись в арифметическом выражении. Типы арифметических выражений . Определяются по следующим правилам: 1. Если операнды арифметических операций имеют один и тот же тип, то результат операции имеет тот же тип. 2. Если операнды имеют различный тип, то результат операции имеет тип операнда наивысшего ранга. Ранг типов операндов в порядке убывания: complex(8) или double complex complex(4) real(8) или double precision real(4) или real integer(4) или integer integer(2) integer(1) или byte Пример: Пусть: complex:: z1=(0.5,3.), z2=(3.4,0.3) !описаны две комплексные переменные real:: a=100.3, b !описаны две вещественные переменные integer(2):: c=5 !описана целая переменная b=a**2 + a*c - z1*z2 ! имеем арифметическое выражение тогда: a*a тип результата – real(4); a*c целое с преобразуется к типу real(4), тип результата - real(4); z1*z2 тип результата – complex(4); a**2+a*c тип результата - real(4); a**2+a*c-z1*z2 тип результата - complex(4); b=a**2+a*c-z1*z2 тип результата присвоения - real(4). Выражения отношения Выражения отношения сравнивают значения двух арифметических или символьных выражений. Могут сравнивать арифметическое выражение с символьным. При этом арифметическое выражение рассматривается как символьное – последовательность байтов. Результат выражения отношения - .TRUE. или .FALSE. Операндами операций отношения могут быть как скаляры, так и массивы. Операции отношения:  пробелы между символами не допускаются Если в выражении отношения один операнд – целый, а другой – вещественный, то целый преобразуется к вещественному. Символьные выражения сравниваются посимвольно, при этом сравниваются коды символов. Пример: ‘ABCD’>’BFG’  результат сравнения будет равен .FALSE., т.к. код символа А меньше кода символа В. Операнды выражения отношения могут быть комплексными, при этом можно будет применять только операции .NE.(/=) и .EQ.(= =). Логические выражения. Результатом логического выражения, также как и выражения отношения, является .TRUE. или .FALSE. Выполняются логические операции слева – направо по приоритету (например, .not., .and. ,.or.). При необходимости надо ставить скобки. Пример: вычислить результат логического выражения при Вычислив результат арифметических операций и операций отношения, получим: . В этом выражении сначала выполнится операция .not. (после чего выражение примет вид), затем операция .and. (после ее выполнения будет: ), и , наконец, окончательный результат: .true. Если в одном выражении встречаются операции типов, такие как арифметические, отношения, логические, то между ними соблюдается приоритет: арифметические, отношения, логические. Текстовые выражения Fortran содержит единственную символьную операцию – операцию конкатенации (//). Результатом операции является объединение символьных строк. Длина результирующей строки равна сумме длин строк – операндов. Операндами символьного выражения могут быть: • символьные константы и переменные; • символьные массивы и их сечения; • элементы символьных массивов; • вызовы символьных функций; • символьные подстроки; • символьные компоненты производного типа. Пример: character(12) st1,st2, st*24 data st1,st2/'power','fortran'/ print *,st1//st2//'station ! результатом операции конкатенации будет строка power fortran station ' st=st1(:len_trim(st1))//st2(:len_trim(st2)) ! результатом будет строка powerfortran print *,st end Встроенные функции в Фортране Встроенные функции входят в состав Фортрана и автоматически включаются в исполняемый код при обращении к ним в тексте программы. Перечислим часть встроенных функций, с которыми будем работать. Элементные функции преобразования данных: 1. Int(a [, kind]) – преобразует параметр a (целого, вещественного или комплексного типа) в целый тип разновидности kind; 2. Real(a [, kind]) - преобразует параметр a (целого, вещественного или комплексного типа) в вещественный тип разновидности kind; 3. Dble(a) - преобразует параметр a (целого, вещественного или комплексного типа) в вещественный тип разновидности Real(8) двойной точности; 4. Cmplx(x [, y] [,kind]) - преобразует целые, вещественные или комплексные параметры в комплексный тип разновидности kind; 5. Aimag(z) – возвращает мнимую часть комплексного числа z; 6. Rael(z) - возвращает действительную часть комплексного числа z; 7. Ichar(‘c’) – возвращает код символа c, тип кода – integer(4), код символа – character(1); 8. Char(i) – возвращает символ по коду i. Элементные числовые функции 1. Abs(a) – абсолютная величина целого, вещественного или комплексного аргумента a, результат- вещественное число или целое; 2. Aint(a, [, kind]) – обрезает вещественную величину a до целого числа в сторону 0, результат- вещественное число с разновидностью kind; 3. Mod(a, p) – возвращает остаток от деления двух чисел a и p, которые должны быть либо оба целые, либо оба вещественные. Математические элементные функции. 1. EXP(x) – возвращает для вещественного или комплексного x; 2. LOG(x) – возвращает для вещественного или комплексного x; 3. LOG10(x) – возвращает десятичный логарифм вещественного x >0; 4. SQRT(x) – возвращает квадратный корень для вещественного или комплексного x; 5. SIN(x) - возвращает sin(x) для вещественного или комплексного x; x – интерпретируется в радианах; 6. SIND(x) - возвращает sin(x) для вещественного или комплексного x; x – интерпретируется в градусах; 7. ASIN(x) – возвращает арксинус вещественного аргумента x (), выраженный в радианах в интервале ; 8. ASIND(x) - возвращает арксинус вещественного аргумента x (),выраженный в градусах в интервале ; 9. TAN(x) – возвращает тангенс вещественного аргумента x, x интерпретируется в радианах; 10. ATAN(x) – возвращает арктангенс вещественного аргумента x. Справочные функции. 1. KIND(x) – возвращает стандартное целое, равное значению параметра разновидности аргумента x; 2. HUGE (x) – для целого и вещественного x возвращает наибольшее значение, соответствующее разновидности типа аргумента x; 3. TINY(x) – для вещественного x возвращает наименьшее значение, соответствующее разновидности типа для вещественного числа x; 4. PRECISION(x) – для вещественного или комплексного x возвращает число значащих цифр, следующих после десятичной точки; 5. LEN_TRIM(st) – возвращает длину символьной строки st без хвостовых пробелов. Линейный алгоритм в Фортране Линейный алгоритм – это ряд операторов Фортрана, которые выполняются строго последовательно. Блок схема линейного алгоритма имеет вид:
«История развития языка Фортран: основные элементы языка Фортран» 👇
Готовые курсовые работы и рефераты
Купить от 250 ₽
Решение задач от ИИ за 2 минуты
Решить задачу
Помощь с рефератом от нейросети
Написать ИИ

Тебе могут подойти лекции

Смотреть все 588 лекций
Все самое важное и интересное в Telegram

Все сервисы Справочника в твоем телефоне! Просто напиши Боту, что ты ищешь и он быстро найдет нужную статью, лекцию или пособие для тебя!

Перейти в Telegram Bot