Описание языка Fortran

Структура Fortran-программы. Описание переменных, правила умолчания и операторы. Стандартные математические функции. Вычисляемый оператор перехода. Общие области, подпрограмма Block Data. Обработка внешних файлов. Файлы с графическими шрифтами.

Рубрика Программирование, компьютеры и кибернетика
Вид реферат
Язык русский
Дата добавления 10.06.2013
Размер файла 46,6 K

Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже

Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.

Размещено на http://www.allbest.ru/

Глава 1. ОПИСАНИЕ ЯЗЫКА FORTRAN

В этой главе содержится краткое описание языка FORTRAN 77, соответствующее компилятору Microsoft FORTRAN Optimizing Compiler Version 5.00.

1.1 Структура FORTRAN-программы

FORTRAN - позиционный язык; это означает, во-первых, что операторы языка должны располагаться в строго определенных позициях, и, во-вторых, что значение символа может зависеть от его местонахождения. Каждая строка FORTRAN-программы может содержать не более одного оператора. Операторы записываются в позициях с 7-й по 72-ю. Если оператор не умещается на одной строке, его можно продолжить на следующей строке, записав в 6-й позиции любой символ, кроме пробела и символа 0. В 6-й позиции начальной строки допускается символ 0. Позиции с 1-й по 5-ю могут содержать метки. Метка в языке FORTRAN - это натуральное число (можно с ведущими нулями). Пустые строки допускаются. Комментарий занимает целую строку, в первой позиции строки комментария должен стоять один из символов *, C или c. Второй тип комментария - комментарий в остатке строки, он отделяется от оператора символом “ ! ”. И наконец, в любой строке позиции с 73-й и до конца строки есть позиции комментария. Пробелы допускаются в любом месте оператора, компилятор считает пробелы значащими только внутри символьных констант, в других местах они игнорируются. Это означает, в частности, что можно вставлять пробелы в идентификаторы : MYNUMBER и MY NUMBER и M Y N U M B E R - это корректная запись одного и того же идентификатора. Компилятор не различает в идентификаторах строчные и прописные буквы. Длина идентификатора может быть любой, но учитываются только шесть первых символов. Ключевые слова языка FORTRAN не резервируются никогда, их можно использовать в любых целях.

Последним оператором программы должен быть оператор END , первым оператором может быть (но не обязательно) оператор

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

Кроме операторов текст программы может содержать так называемые метакоманды, которые дают возможность устанавливать и менять режимы компиляции. Метакоманда начинается с символа $, который записывается в первой позиции. Одна из метакоманд - $INCLUDE - включает в текст программы внешний файл, она записывается в виде $INCLUDE:'имя файла'

1.2 Типы данных. Константы

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

INTEGER*1 - аналогичен char в языке C и ShortInt в языке PASCAL;

INTEGER*2 - аналогичен int в языке C и Integer в языке PASCAL;

INTEGER*4 - аналогичен long в языке C и LongInt в языке PASCAL;

INTEGER - соответствует либо INTEGER*2, либо INTEGER*4 - в зависимости от настройки компилятора, по умолчанию это INTEGER*4. Явно задать длину данных типа INTEGER можно с помощью метакоманды $STORAGE:2 или $STORAGE:4

REAL*4 (или REAL) - аналогичен float в языке C и Single в языке PASCAL;

REAL*8 (или DOUBLE PRECISION) - аналогичен double в языке C и Double в языке PASCAL;

COMPLEX*8 (или COMPLEX) - комплексные числа, действительная и мнимая части которых имеют тип REAL*4

COMPLEX*16 - комплексные числа, действительная и мнимая части которых имеют тип REAL*8

Логические типы данных:

LOGICAL*1

LOGICAL*2

LOGICAL*4

LOGICAL - соответствует либо LOGICAL*2, либо LOGICAL*4, в зависимости от настройки компилятора, по умолчанию это LOGICAL*4. Длина типа LOGICAL также определяется метакомандой $STORAGE.

Символьные типы данных:

CHARACTER - символ,

CHARACTER*длина - строка символов.

Вообще говоря, различие между символом и символьной строкой в языке FORTRAN не проводится, CHARACTER или CHARACTER*1 - это строка из одного символа.

Целые константы в языке FORTRAN могут иметь основание от 2 до 36 и записываются в виде [ [ основание ] # ] константа . Если опущены основание и символ #, то константа считается десятичной, если опущено только основание, то константа 16-ричная. Например: 2#11111111, 3#100110, 255, #FF, 19#D8. В целых константах с основанием, большим 10, в качестве дополнительных цифр используются латинские буквы A=10, B=11, ... ,Z=35. Все целые константы имеют тип INTEGER.

Вещественные константы записываются с фиксированной или плавающей точкой и имеют по умолчанию тип REAL : 2. , -.05 , 1E0 , -.3E-7 . В константах двойной точности вместо буквы E пишется D : 1D0 , -67.3D-7 .

Логические константы записываются в виде .FALSE. или .TRUE.

Строковые константы записываются либо в виде 'символы' , либо в виде 'символы' C. Последняя запись называется C-строкой (т.е. это строка, организованная так же, как в языке C), она всегда заканчивается 0-символом (который явно не записывается) и может содержать специальные символы \n, \t, \v, \b, \r, \f, \a, \', \”, \\, \8-ричный номер , \x16-ричный номер. Например, 'это - FORTRAN-строка' или 'это - \"C-строка\"\n\a'C .

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

( действительная часть , мнимая часть )

Для записи действительной и мнимой частей можно использовать любые константы, в том числе и целые : (-1,0.5) , (2D0,-3.5) .

1.3 Описание переменных, правила умолчания, операторы

IMPLICIT, DATA, PARAMETER

Переменные в языке FORTRAN описываются в виде:

тип имя1 , имя2 , ...

Язык FORTRAN допускает использование нигде не описанных переменных, в этом случае их тип определяется правилами умолчания: идентификаторы, начинающиеся с I, J, K, L, M, N, имеют тип INTEGER, все остальные - тип REAL. Стандартные правила умолчания для неописанных переменных можно изменить с помощью оператора IMPLICIT:

IMPLICIT тип ( буквы ) , ...

Здесь тип - описание типа, буквы - список латинских букв. В списке букв можно использовать конструкцию буква - буква , задающую диапазон, например:

IMPLICIT REAL*8 (D,F-H,W-Z,A), INTEGER*1 (B,C,I-K)

Явное описание типа переменной во всех случаях отменяет правило умолчания для этой переменной. Правила умолчания можно полностью отменить оператором IMPLICIT NONE. Если в программе есть такой оператор, то каждая переменная должна быть явно описана.

Инициализировать переменные, т.е. присвоить им начальные значения можно в операторе DATA :

DATA список имен / список констант /

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

DATA a,b,i,j,k,c /1.2,3.141,2*5,-100,0/,x,y/2*0/

Операторы DATA должны располагаться в тексте программы после всех операторов описания и до первого исполняемого оператора. Переменные также могут инициализироваться непосредственно в операторе описания, например:

REAL a/1.2/, b/3.141/, c/0/, x/0/, y/0/

INTEGER i/5/, j/5/, k/-100/

но в этом случае нельзя инициализировать список имен, каждая переменная должна быть инициализирована отдельно (но повторители при инициализации массивов использовать можно).

Для определения именованных констант служит оператор PARAMETER, аналогичный оператору CONST в языке PASCAL:

PARAMETER ( имя = константное выражение , ... )

Можно предварительно описать тип константы в операторе описания типа, например:

LOGICAL*1 TRUE

REAL*4 b,c

PARAMETER(TRUE=.TRUE.,b=-1.5353,c=2)

PARAMETER(Number=#FF)

Именованные константы могут использоваться точно так же, как и неименованные, в частности, при инициализации переменных в операторах DATA или операторах описания.

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

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

имя = выражение

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

В языке FORTRAN существует пять арифметических операций: сложение + , вычитание - , умножение * , деление / , возведение в степень ** . Операция ** имеет наивысший приоритет и выполняется в последовательности справа налево, остальные операции выполняются слева направо. Операция деления / для вещественных операндов означает вещественное деление, для целых операндов - деление нацело (точно так же, как в языке C). Если операнды арифметической операции имеют разные типы, то они приводятся к одному типу согласно правилу старшинства типов : INTEGER*1 < INTEGER*2 < INTEGER*4 < REAL*4 < REAL*8 < COMPLEX*8 < COMPLEX*16 . Если один операнд имеет тип REAL*8, а второй - COMPLEX*8, то оба они приводятся к типу COMPLEX*16. Кроме того, компилятор следит за корректностью выполнения целочисленных вычислений, поэтому результат арифметической операции над операндами INTEGER*1 будет иметь тип INTEGER*2, а результат арифметической операции над операндами INTEGER*2 будет иметь тип INTEGER*4.

Операции сравнения записываются в виде .LT. - меньше, .LE. - меньше либо равно, .GT. - больше, .GE. - больше либо равно, .EQ. - равно, .NE. - не равно. Они применимы к арифметическим и символьным операндам. Для комплексных операндов определены лишь операции .EQ. и .NE. Результат операции сравнения имеет тип LOGICAL.

Логические операции применимы к логическим операндам и записываются в виде .NOT. - логическое отрицание, .AND. - логическое “и”, .OR. - логическое “или” , .EQV. - эквивалентно, .NEQV. - не эквивалентно; обратите внимание, что ни одна операция сравнения, в том числе .EQ. и .NE., к логическим операндам неприменима.

Для символьных операндов определена только одна операция - операция сцепления // .

Приоритеты операций в языке FORTRAN определены следующим образом : ** > { * , / } > { + , - } > // > {.EQ. , .NE. , .LT. , .LE. , .GT. , .GE.} > .NOT. > .AND. > .OR. > .EQV. > .NEQV.

1.5 Стандартные математические функции

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

INT(integer/real/complex) INTEGER

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

ABS(integer/real/complex) integer/real

означает, что функция ABS может иметь аргумент любого числового типа и возвращает значение того же типа для целых и вещественных аргументов, значение типа REAL*4 для аргумента COMPLEX*8 и значение типа REAL*8 для аргумента COMPLEX*16. Во всех случаях имя типа, записанное большими буквами, означает только этот конкретный тип, а имя типа, записанное малыми буквами, - любой из подходящих типов:

а) преобразование к целому типу:

1. INT(integer/real/complex) INTEGER

2. INT1(integer/real/complex) INTEGER*1

3. INT2(integer/real/complex) INTEGER*2

4. INT4(integer/real/complex) INTEGER*4

б) преобразование к вещественному типу:

5. REAL(integer/real/complex) REAL*4

6. DREAL(integer/real/complex) REAL*8

в) преобразования символа в число:

7. ICHAR(character) INTEGER*1

г) преобразование числа в символ:

8. CHAR(integer) CHARACTER

д) целая часть числа:

9. AINT(real) real

10. DINT(real) REAL*8

е) округление:

11. ANINT(real) real

12. DNINT(real) REAL*8

13. NINT(real) INTEGER

ж) абсолютная величина числа:

14. ABS(integer/real/complex) integer/real

15. IABS(integer/real/complex) integer

16. DABS(integer/real/complex) REAL*8

з) знак числа (функции возвращают абсолютную величину первого аргумента, умноженную на знак второго аргумента):

17. SIGN(integer/real,integer/real) integer/real

18. ISIGN(integer/real,integer/real) INTEGER

19. DSIGN(integer/real,integer/real) REAL*8

и) остаток от деления:

20. MOD(integer/real,integer/real) integer/real

21. AMOD(integer/real,integer/real) REAL*4

22. DMOD(integer/real,integer/real) REAL*8

к) положительная разность (функции возвращают разность первого и второго аргумента, если она положительна, или 0):

23. DIM(integer/real,integer/real) integer/real

24. IDIM(integer/real,integer/real) INTEGER

25. DDIM(integer/real,integer/real) REAL*8

л) максимальное и минимальное значение (функции допускают любое количество аргументов):

26. MAX(integer/real,...) integer/real

27. MAX1(integer/real,...) INTEGER

28. AMAX1(integer/real,...) REAL*4

29. DMAX1(integer/real,...) REAL*8

30. MIN(integer/real,...) integer/real

31. MIN1(integer/real,...) INTEGER

32. AMIN1(integer/real,...) REAL*4

33. DMIN1(integer/real,...) REAL*8

м) произведение с двойной точностью:

34. DPROD(integer/real,integer/real) REAL*8

н) мнимая часть и комплексно сопряженное число:

35. IMAG(complex) real

36. DIMAG(complex) REAL*8

37. CONJG(complex) complex

38. DCONJG(complex) COMPLEX*16

о) квадратный корень:

39. SQRT(integer/real/complex) real/complex

40. DSQRT(integer/real) REAL*8

41. CSQRT(integer/real/complex) COMPLEX*8

42. CDSQRT(integer/real/complex) COMPLEX*16

п) экспонента:

43. EXP(integer/real/complex) real/complex

44. DEXP(integer/real) REAL*8

45. CEXP(integer/real/complex) COMPLEX*8

46. CDEXP(integer/real/complex) COMPLEX*16

р) натуральный логарифм:

47. LOG(integer/real/complex) real/complex

48. ALOG(integer/real) REAL*4

49. DLOG(integer/real) REAL*8

50. CLOG(integer/real/complex) COMPLEX*8

51. CDLOG(integer/real/complex) COMPLEX*16

с) десятичный логарифм:

52. LOG10(real) real

53. ALOG10(integer/real) REAL*4

54. DLOG10(integer/real) REAL*8

т) тригонометрические функции:

55. SIN(integer/real/complex) integer/real/complex

56. DSIN(integer/real) REAL*8

57. CSIN(integer/real/complex) COMPLEX*8

58. CDSIN(integer/real/complex) COMPLEX*16

59. COS(integer/real/complex) integer/real/complex

60. DCOS(integer/real) REAL*8

61. CCOS(integer/real/complex) COMPLEX*8

62. CDCOS(integer/real/complex) COMPLEX*16

63. TAN(real) real

64. DTAN(integer/real) REAL*8

65. COTAN(real) real

66. DCOTAN(integer/real) REAL*8

у) обратные тригонометрические функции:

67. ASIN(real) real

68. DASIN(integer/real) REAL*8

69. ACOS(real) real

70. DACOS(integer/real) REAL*8

71. ATAN(real) real

72. DATAN(integer/real) REAL*8

73. ATAN2(real,real) real

74. DATAN2(integer/real,integer/real) REAL*8

ф) гиперболические функции:

75. SINH(real/complex) real

76. DSINH(integer/real/complex) REAL*8

77. COSH(real/complex) real

78. DCOSH(integer/real/complex) REAL*8

79. TANH(real/complex) real

80. DTANH(integer/real/complex) REAL*8

х) битовые функции:

81. NOT(integer) integer - битовое отрицание

82. IAND(integer,integer) integer - битовое “и”

83. IOR(integer,integer) integer - битовое “или”

84. IEOR(integer,integer) integer - битовое исключающее “или”

85. ISHL(integer,integer) integer - сдвиг влево, если второй аргумент положителен, или вправо, если второй аргумент отрицателен. Функция полностью аналогична операциям ShL и ShR в языке PASCAL и операциям << и >> в языке C

86. ISHA(integer,integer) integer - “арифметический” сдвиг, в отличие от ISHL при сдвиге вправо старший - знаковый бит заполняет все освободившиеся позиции

87. ISHC(integer,integer) integer - циклический сдвиг, осуществляет циклическую перестановку битов, ни один бит при этом не теряется

88. BTEST(integer,integer) LOGICAL - возвращает .TRUE., если бит первого аргумента с номером, заданным вторым аргументом, единичный. Биты нумеруются от младшего к старшему, номер самого младшего бита равен 0.

89. IBCLR(integer,integer) integer - зануляет бит первого аргумента с номером, равным второму аргументу

90. IBSET(integer,integer)integer заединичивает бит первого аргумента с номером, равным второму аргументу

91. IBCHNG(integer,integer) integer - меняет значение бита на противоположное

1.6 Ввод-вывод

Язык FORTRAN предоставляет средства для бесформатного и форматного ввода-вывода данных. Вывод на экран осуществляется оператором

PRINT формат , список вывода

формат - это или строка формата, или метка формата, или символ *, что означает вывод без форматирования; список вывода - это любое количество произвольных выражений, разделенных запятыми. Логические данные при выводе изображаются буквами T и F. Для ввода с клавиатуры служит оператор

READ формат , список ввода

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

Метка формата - это метка специального оператора FORMAT :

метка FORMAT( список форматов )

Этот оператор является невыполняемым и может стоять в любом месте программы. Список форматов есть последовательность элементов формата (называемых также для краткости форматами), разделенных запятыми. Список форматов очень похож по своей структуре на строку формата функции printf в языке C. Он может содержать форматы данных и управляющие элементы формата. Существуют следующие форматы данных:

Формат

Тип данных

Синтаксис

I

целые

In / In.c

F

вещественные

Fn.d

E

вещественные

En.d / En.d.e

D

REAL*8

Dn.d

G

вещественные

Gn.d / Gd.e

A

символьные

A / An

L

логические

Ln

Z

любые данные

Z / Zn

Здесь n - размер поля вывода, т.е. количество позиций, отведенных для вывода значения, c - количество выводимых цифр числа, d - количество дробных цифр, e - количество цифр порядка. Если в формате I задано количество цифр и оно больше, чем количество цифр в выводимом значении, то число дополняется слева нулями, если оно меньше, чем необходимо, то данный параметр игнорируется. Если при выводе по форматам I,F,E,D,G задан слишком маленький размер поля, то выводятся только символы *. Вещественные числа с плавающей точкой представляются при выводе в виде: знак. мантисса E знак порядка порядок . По формату Z все данные выводятся в их внутреннем представлении и изображаются 16-ричным числом.

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

Любой формат данных может иметь повторитель - целую константу, которая записывается непосредственно перед форматом, например, 5F12.7. Можно записывать повторители для групп форматов, тогда форматы, входящие в группу, заключаются в круглые скобки, такие скобочные конструкции могут быть вложенными, например, 3(2F10.2,E12.3E1,4(I6.5))

Существуют следующие управляющие форматы :

`строка' - “строка” - вывод строки,

nHсимволы - “литерал” - вывод n символов,

/ - переход на следующую строку,

nX - вывод n пробелов,

Tn - переход на n-ю позицию,

TLn - смещение влево на n позиций,

TRn - смещение вправо на n позиций,

SP - включение режима вывода знака + для чисел,

SS - выключение режима вывода знака + для чисел.

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

0 - пропуск строки,

+ - вывод на ту же строку,

остальные - переход на новую строку.

Каждый новый оператор PRINT всегда начинает вывод с начала новой строки.

Форматный ввод с клавиатуры не очень удобен и используется редко (за исключением формата A), главным образом форматный ввод применяется при чтении файлов. При вводе запрещены управляющие форматы “строка” и “литерал”, управляющие форматы SP и SS игнорируются. Форматы Tn, TLn, TRn, / действуют точно так же, как и при выводе, формат nX пропускает n позиций во входном потоке. При вводе чисел можно использовать управляющие форматы:

BN - игнорирование пробелов внутри числа (действует по умолчанию),

BZ - интерпретация пробелов внутри числа как нулей,

kP - умножение введенного значения на 10-k.

Формат kP также используется при выводе чисел по формату F, в этом случае он означает умножение выводимого значения на 10k. Действие форматов данных при вводе таково:

- формат In (второй параметр игнорируется) - целое число вводится из очередных n позиций;

- форматы Fn.d , En.d , Dn.d , Gn.d (все форматы при вводе идентичны, параметр e игнорируется) - вещественное число вводится из очередных n позиций, если в константе нет десятичной точки, то последние d цифр интерпретируются как дробные;

- формат A - значение символьной переменной (без апострофов) считывается до конца строки, при необходимости усекается справа;

- формат An - значение символьной переменной (без апострофов) считывается из очередных n позиций, при необходимости усекается слева;

- формат Ln - логическое значение считывается из очередных n позиций, оно может представляться любой последовательностью символов, начинающейся буквой T(t) или F(f), перед этой буквой может быть символ “.” и любое количество пробелов.

- форматы Z , Zn - 16-ричное значение вводится до конца строки или из очередных n позиций и передается в память, занимаемую переменной; так же, как для формата A, если n не задано, то вводимое значение усекается справа, если задано, то слева. Если, напротив, вводимое значение слишком короткое, то оно дополняется слева нулями.

Бесформатный ввод осуществляется почти так же, как в языке PASCAL: данные во входном потоке разделяются любым количеством пробелов или запятыми, числовые константы представляются в любом корректном виде, но символьные константы нужно заключать в апострофы. Каждый оператор READ всегда начинает ввод с новой строки.

Формат можно задать и непосредственно в операторах PRINT и READ, для этого вместо метки формата записывается строка `(список форматов)', список форматов - точно такой же, как в операторе FORMAT, круглые скобки и апострофы обязательны.

1.7 Оператор СОNTINUE. Операторы перехода

Условные операторы

Оператор CONTINUE - пустой оператор, он не выполняет никаких действий и используется, как правило, для улучшения структуры программы. Он практически всегда имеет метку.

Оператор перехода в языке FORTRAN имеет три разновидности: безусловный, вычисляемый и по предписанию. Безусловный оператор перехода записывается в виде:

GOTO метка

Вычисляемый оператор перехода:

GOTO (список меток)целое выражение

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

GOTO целая переменная

Этой целой переменной предварительно должна быть присвоена одна из меток программы специальным оператором:

ASSIGN метка TO переменная

Целочисленная переменная, которой оператором ASSIGN была присвоена метка, допускает еще одно применение - ее можно использовать в операторах READ и PRINT вместо метки формата. Обратите внимание, что обычный оператор присваивания переменная=метка в этом случае не годится.

Условный оператор IF в языке FORTRAN также имеет три формы: логический IF, арифметический IF и блочный IF. Логический оператор IF записывается в виде:

IF (логическое выражение)оператор

Здесь оператор - это любой выполняемый оператор, кроме логического и блочного IF. Логический IF содержит только один исполняемый оператор и не имеет ELSE-конструкции, его используют в самых простых условных алгоритмах. Вторая форма условного оператора - арифметический оператор IF :

IF (арифметическое выражение)метка1,метка2,метка3

Он выполняется следующим образом: вычисляется арифметическое выражение (оно не должно быть комплексным), если его значение отрицательно, то осуществляется переход на метку метка1, если оно равно 0, то осуществляется переход на метку метка2, и если оно положительно - на метку метка3.

Блочный оператор IF является обобщением логического условного оператора и соответствует по своим возможностям и структуре условным операторам в языках PASCAL и C :

IF(логическое выражение)THEN

операторы

ELSEIF(логическое выражение)THEN

операторы

...................................

ELSE

операторы

ENDIF

Формально ELSEIF, ELSE и ENDIF являются отдельными операторами и обязательно должны записываться в отдельной строке. Последовательности операторов после IF, ELSEIF, ELSE называют соответственно IF-блоком, ELSEIF-блоком и ELSE-блоком. В любом из блоков можно записать любое количество операторов. Операторы ELSEIF и ELSE могут отсутствовать, но оператор ENDIF обязателен. Операторы, входящие в блоки, сами могут быть условными, что позволяет записывать сколь угодно сложные условные конструкции.

Оператор выбора SELECT CASE аналогичен оператору CASE в языке PASCAL:

SELECT CASE(выражение)

CASE(список значений)

операторы

........................

CASE DEFAULT

операторы

END SELECT

Выражение должно иметь целый, логический тип или тип CHARACTER*1. Список значений состоит из константных выражений соответствующего типа, разделенных запятыми или двоеточиями, например:

SELECT CASE (i**2+3-m)

CASE (-10:1,3,12,22:40)

PRINT*,'A'

CASE (-30:-15,8:10,19,-12)

GOTO 111

CASE DEFAULT

GOTO 222

END SELECT

В любом месте программы можно использовать оператор

STOP [параметр]

который прекращает выполнение программы. Здесь параметр - либо пусто, либо строка символов, либо целая константа в диапазоне от 0 до 99999. Если оператор используется без параметра, то на экран выдается сообщение STOP - Program terminated. Если параметр задан строкой символов, то на экран выводится только эта строка. Если параметр задан целой константой, то выводится сообщение Return code константа.

Оператор PAUSE служит для временной приостановки выполнения программы и имеет точно такой же синтаксис, как и оператор STOP. Если оператор выполнен без параметра, то на экран выводится сообщение Pause - Please enter a blank line (to continue) or a DOS command . Если задан параметр - символьная строка, то выводится эта строка, если задан параметр - константа, то выводится сообщение Pause - константа. После этого пользователь может совершить одно из трех действий: ввести пустую строку, ввести любую команду DOS или ввести слово COMMAND, затем любое количество команд DOS, а затем команду EXIT. После выполнения этих операций выполнение программы продолжается обычным образом.

fortran программа графический оператор

1.8 Операторы цикла

Оператор цикла DO (аналогичный оператору цикла FOR в языке PASCAL) записывается в виде:

DO[метка]переменная=начальное значение,конечное

значение[,приращение]

Если в операторе задана метка, то последним оператором тела цикла является оператор с такой меткой, если метка не задана, то тело цикла должно заканчиваться специальным оператором END DO. Переменная цикла может иметь любой арифметический тип, кроме комплексного. Начальное, конечное значение и приращение - любые арифметические выражения, кроме комплексных. Если приращение не задано, оно считается равным 1. Последний оператор тела цикла не может быть: безусловным GOTO, GOTO по предписанию, арифметическим IF, блочным IF, оператором DO. Во всех случаях можно последним оператором цикла записывать оператор CONTINUE. Допускаются вложенные циклы, они могут заканчиваться одним и тем же оператором, т.е. иметь одну и ту же метку цикла. Запрещается изменять значение переменной цикла в теле цикла, такая попытка рассматривается как синтаксическая ошибка.

Оператор цикла DO WHILE полностью аналогичен по своему действию оператору While в языке PASCAL :

DO [метка] WHILE(логическое выражение)

Такой цикл может заканчиваться либо меткой, либо оператором END DO. Для выхода из любого типа цикла служит оператор EXIT, выполняющий те же действия, что оператор break в языках C и PASCAL.

Оператор CYCLE завершает текущий шаг цикла и передает управление оператору DO или DO WHILE, он аналогичен оператору continue в языках C и PASCAL.

1.9 Функции LOC, LOCFAR, LOCNEAR

Язык FORTRAN не дает возможности непосредственно работать с адресами переменных, как в языке PASCAL и, особенно, C. Единственные средства языка, связанные с адресами - это встроенные функции LOC, LOCFAR и LOCNEAR. Они возвращают адрес аргумента (но это может быть не только переменная). Функция LOCFAR возвращает дальний адрес (тип INTEGER*4), функция LOCNEAR - ближний адрес (тип INTEGER*2), а функция LOC эквивалентна в дальней модели памяти LOCFAR, а в ближней модели - LOCNEAR.

1.10 Массивы

Существуют два способа описания массива - описание измерений массива в операторе DIMENSION плюс описание типа элементов массива, или описание измерений массива непосредственно в операторе описания типа. Оператор DIMENSION записывается следующим образом :

DIMENSION имя массива([нижняя граница:]верхняя граница[,...])

Нижняя граница измерения массива по умолчанию равна 1. Оператор DIMENSION никак не определяет тип элемента массива, но только количество и длины его измерений. Границы измерений могут задаваться любыми арифметическими константными выражениями. Если какая-либо граница задана вещественным значением, оно преобразуется к целому отбрасыванием дробной части. Язык FORTRAN не задает никаких ограничений на размер массива и суммарный размер данных программы. Если тип элемента массива должен отличаться от типа, определенного по умолчанию, необходимо явно определить этот тип обычным образом:

тип имя массива

Можно не пользоваться оператором DIMENSION для описания массива, одновременно описывая тип элементов и измерения массива:

тип имя массива([нижняя граница:]верхняя граница[,...])

Инициализировать массивы можно в операторе DATA, так же, как и простые переменные (можно использовать повторители). Элементы многомерных массивов располагаются в памяти не так, как в языках Паскаль и C: первым меняется самый левый индекс. Пусть массив описан как DIMENSION x(3,3), тогда его элементы будут записаны в памяти в таком порядке : x11, x21, x31, x12, x22, x32, x13, x23, x33. Для сравнения такой же массив в программе на Паскале или C : x11, x12, x13, x21, x22, x23, x31, x32, x33. Элементы массива в программе можно использовать так же, как простые переменные соответствующего типа (кроме оператора DO),обращение к элементу массива имеет вид:

имя массива(индексное выражение,...)

Индексное выражение может быть целого или вещественного типа. Массивы можно целиком вводить оператором READ и выводить оператором PRINT. Массиву можно присвоить массив с таким же описателем измерений, тип элементов при этом может быть разным. Массиву можно присвоить скалярное выражение - это присваивание будет выполнено для каждого элемента массива. Массивы могут быть операндами выражений, например, запись PRINT*,SIN(a) вполне корректна. Операция над массивом означает последовательное выполнение этой операции над каждым элементом массива, результат выражения есть массив такой же структуры с элементами соответствующего типа.

При вводе и выводе массивов (и не только массивов) можно задавать так называемые неявные циклы. Неявный цикл ввода-вывода записывается в виде:

(список ввода-вывода,переменная цикла=начало,конец[,приращение])

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

1.11 Подпрограммы SUBROUTINE, FUNCTION и INTERFACE

В языке FORTRAN так же, как в языке PASCAL, есть подпрограммы-процедуры (SUBROUTINE) и подпрограммы-функции (FUNCTION). Оператор заголовка процедуры имеет вид:

SUBROUTINE имя процедуры(параметр[[атрибуты]][,...])

параметр - это или имя параметра (допускаются параметры - переменные, массивы и подпрограммы), или символ *. Тип параметра в операторе SUBROUTINE не указывается; если это необходимо, параметры описываются внутри процедуры. Процедура заканчивается оператором END и располагается вне любой другой подпрограммы и главной программы так же, как в языке C. Подпрограммы могут находиться в том же файле, что и главная программа, или в других файлах. Процедура вызывается в главной программе или в другой подпрограмме специальным оператором вызова CALL:

CALL имя(список аргументов)

Рекурсия в языке FORTRAN запрещена. Количество и типы аргументов в операторе CALL должны точно соответствовать количеству и типам параметров в операторе SUBROUTINE. Все параметры по умолчанию передаются в процедуры по адресу, это означает, что все действия над параметрами в процедуре фактически осуществляются над аргументами. Чтобы передать аргумент по значению, необходимо в операторе SUBROUTINE для соответствующего параметра задать атрибут VALUE. Атрибуты задаются в квадратных скобках после имени параметра. Параметр процедуры может быть массивом любой размерности. Такой параметр должен быть обязательно описан внутри процедуры. В описании измерений массива-параметра можно использовать не только константы, но и параметры-переменные данной процедуры, что позволяет записывать процедуры, которые могут обрабатывать массивы переменного размера. Кроме того, разрешается верхнюю границу последнего измерения параметра-массива задавать символом *. Если предполагается, что нижняя граница индекса всегда равна 1, то одномерный массив-параметр описывается в виде имя(*). Параметры-массивы также можно объявлять с атрибутом VALUE, но в этом случае они не могут иметь переменный размер.

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

INTRINSIC список имен

если это любая другая функция или процедура, то следует использовать оператор

EXTERNAL список имен

Некоторые стандартные функции запрещено использовать в качестве аргументов.

Формальным параметром процедуры может быть *. Аргументом, соответствующим такому параметру, должна быть конструкция *метка. Параметры такого типа используются следующим образом : внутри процедуры можно записывать любое количество операторов

RETURN

или

RETURN целое выражение

Первый оператор приводит к завершению процедуры и передаче управления оператору, следующему за оператором CALL в вызывающей программной единице. Второй оператор также завершает выполнение процедуры, но управление передается оператору с меткой, равной значению одного из аргументов. Значение целочисленного выражения после RETURN определяет порядковый номер метки среди аргументов-меток. Например, программа

SUBROUTINE A ( *,*,x,*,* )

INTEGER x

IF(x.LT.0) RETURN 1

IF(x.EQ.0) RETURN 2

IF(x.LE.10) RETURN 3

RETURN 4

END

CALL A( *100,*200,5,*300,*400)

STOP '0'

100 STOP '1'

200 STOP '2'

300 STOP '3'

400 STOP '4'

END

выведет на экран символ 3.

Оператор заголовка подпрограммы-функции записывается в виде:

[тип] FUNCTION имя(список параметров)

Если тип функции явно не указан, он определяется правилами умолчания. Список параметров функции аналогичен списку параметров процедуры, но не допускаются параметры - метки. Тип функции может быть целым, вещественным, комплексным, логическим и символьным. Если тип функции отличается от предполагаемого по умолчанию, то его нужно описать в вызывающей программной единице. Список параметров функции может быть пустым, в этом случае в заголовке функции можно не записывать и ( ), но при вызове функции даже с пустым списком параметров список аргументов задается обязательно в виде ( ). Внутри функции необходимо присвоить имени функции возвращаемое значение, точно так же, как в языке PASCAL. Можно использовать оператор RETURN, но без параметра (так как запрещены параметры-метки).

Подпрограммы SUBROUTINE и FUNCTION, находящиеся в других файлах или в библиотеках, можно описать в специальных подпрограммах INTERFACE. Такое описание дает возможность компилятору проверить соответствие типов аргументов и параметров при вызове подпрограмм. Подпрограмма INTERFACE имеет следующую структуру :

INTERFACE TO заголовок процедуры или функции

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

END

Подпрограмма INTERFACE должна находиться в том же файле, что и вызывающая программная единица.

1.12 Общие области, подпрограмма BLOCK DATA

Оператор EQUIVALENCE

В языке FORTRAN отсутствует возможность описания глобальных имен, все имена переменных и массивов являются локальными и определены только в той подпрограмме, где они описаны. Взамен FORTRAN предоставляет аппарат общих областей. Общая область описывается в виде:

COMMON [/имя/] список

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

Для инициализации переменных из именованных общих областей служит специальный тип подпрограммы - BLOCK DATA. Подпрограмма BLOCK DATA имеет такую структуру:

BLOCK DATA [имя]

описания общих областей

операторы DATA

END

К подпрограммам BLOCK DATA не нужно специально обращаться, они выполняются автоматически. В программе может быть сколько угодно подпрограмм BLOCK DATA, но только одна неименованная.

Оператор EQUIVALENCE позволяет совмещать по памяти различные переменные и массивы, в том числе и данные разных типов. Оператор записывается в виде:

EQUIVALENCE (список объектов)[,...]

Здесь список объектов - это разделенные запятыми имена переменных, имена массивов и элементы массивов. Количество совмещаемых объектов не ограничено. Существует несколько ограничений на использование оператора EQUIVALENCE :

1) совмещения не должны противоречить друг другу;

2) совмещаемые переменные и массивы нельзя инициализировать в операторе описания типа, но только в операторе DATA;

3) нельзя совмещать два объекта, если оба они входят в общие области;

4) не рекомендуется совмещать символьные и несимвольные объекты.

1.13 Символьные переменные

Символьные, или строковые, переменные описываются в виде:

CHARACTER[*общая длина] имя[*длина] , ...

Если задан описатель длина для какой-либо переменной, то он отменяет для этой переменной действие описателя общая длина. Если длина вообще не задана, она считается равной единице. Наибольшая возможная длина строки равна 32767. Символьные переменные можно инициализировать в операторе DATA и операторе присваивания. Если присваиваемое значение длиннее, чем переменная, то оно усекается справа, если короче, то дополняется справа пробелами. Таким образом, символьные переменные в языке FORTRAN имеют фиксированную длину. Неинициализированные символьные переменные заполнены 0-символами. Допускаются символьные массивы любой размерности.

Именованные символьные константы задаются обычным образом в операторе PARAMETER, но такие константы должны быть дополнительно описаны в операторе CHARACTER. Символьные переменные можно выводить оператором PRINT* и вводить оператором READ*, но при вводе символьные значения следует задавать в апострофах. При форматном вводе-выводе используется формат A.

Существует только одна символьная операция - // - конкатенация или сцепление строк. Кроме того, к символьным данным применимы операции сравнения .EQ., .NE., .LT., .LE., .GT., .GE.

Имеется возможность непосредственного обращения к любой подстроке символьной переменной, для этого используется псевдопеременная “подстрока”:

имя строки([начало]:[конец])

где начало и конец - целочисленные выражения, задающие номера первого и последнего символов, образующих подстроку. Если не задано начало, то подстрока начинается с первого символа строки, если не задан конец, то подстрока включает весь остаток строки ( но символ : обязательно должен быть записан). Точно так же можно обратиться к подстроке элемента символьного массива. Подстрока может не только быть операндом выражения, но также стоять в левой части оператора присваивания, вводиться оператором READ и инициализироваться в операторе DATA, т.е. подстрока может использоваться точно так же, как и настоящая символьная переменная.

Для обработки символьных данных в языке FORTRAN есть две встроенные функции:

LEN(character) INTEGER - возвращает длину строки, но, поскольку строки в языке FORTRAN имеют фиксированную длину, возвращаемое значение всегда есть максимальная длина строки или длина строки по описанию.

INDEX(character,character) INTEGER - возвращает номер символа в первом аргументе, начиная с которого второй аргумент входит в первый или 0.

Параметрами подпрограмм могут быть символьные переменные или символьные массивы. Они должны быть соответствующим образом описаны в процедуре. Длину строки можно задавать константой, переменной или использовать описатель неопределенной длины (*). Отметим, что именно для таким образом описанных строк-параметров и используется функция LEN.

1.14 Операторные функции

Операторная функция записывается в виде:

имя(список параметров)=выражение

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

1.15 Внешние файлы

Для обработки внешних файлов в языке FORTRAN существуют операторы:

OPEN - открытие файла;

CLOSE - закрытие файла;

READ - чтение из файла;

WRITE - запись в файл;

INQUIRE - опрос файла;

BACKSPACE - переход к предыдущей записи;

REWIND - переход в начало файла;

ENDFILE - запись признака конца файла

и встроенная функция EOF.

Синтаксис оператора OPEN таков:

OPEN([UNIT=]устройство [,FILE=имя файла] [,MODE=режим]

[,ACCESS=способ доступа] [,STATUS=статус файла]

[,FORM=тип записей] [,RECL=длина записи]

[,BLANK=интерпретация пробелов]

[,BLOCKSIZE=размер буфера][,ERR=метка]

[,IOSTAT=код ошибки])

устройство- целая константа от -32767 до 32767, или целое выражение, или *. Задает номер устройства, к которому присоединяется файл. Устройство * всегда связано с клавиатурой и экраном, его переопределить нельзя. Устройство 0 по умолчанию связано с клавиатурой и экраном, 5 - с клавиатурой, 6 - с экраном, но эти устройства можно использовать и для других целей;

имя файла - символьное выражение, можно задать `', тогда программа во время выполнения самостоятельно попросит ввести имя файла;

режим - `READ', `WRITE' или `READWRITE' (по умолчанию);

способ доступа - `DIRECT' или `SEQUENTIAL' (по умолчанию);

статус файла - `OLD', `NEW', `UNKNOWN' (по умолчанию) или `SCRATCH'. `SCRATH' определяет временный файл, который будет уничтожен перед окончанием программы, такой файл не должен иметь имени;

тип записей - `FORMATTED' (по умолчанию для `SEQUENTIAL'), `UNFORMATTED' (по умолчанию для `DIRECT') или `BINARY';

длина записи - целое выражение, игнорируется для `SEQUENTIAL';

интерпретация пробелов - `ZERO' или `NULL' (по умолчанию);

размер буфера - целое выражение, автоматически округляется до числа, кратного 512;

метка - метка оператора, которому передается управление при возникновении ошибки. Если этот параметр не задан, то ошибка открытия файла приводит к аварийному завершению программы;

код ошибки - целая переменная, которая возвращает 0, если операция завершилась успешно.

Оператор CLOSE записывается так:

CLOSE([UNIT=]устройство[,STATUS=статус файла]

[,ERR=метка] [,IOSTAT=код ошибки])

статус файла - `DELETE' (по умолчанию для временных файлов) или `KEEP'(по умолчанию для всех остальных);

метка - метка оператора, которому передается управление при возникновении ошибки;

код ошибки - целая переменная, которая возвращает 0, если операция завершилась успешно.

Оператор READ для ввода из внешнего файла:

READ([UNIT=]устройство[,[FMT=]формат][,REC=номер записи]

[,END=метка-1][,ERR=метка-2][,IOSTAT=код ошибки])

номер записи - целое выражение, задается только для файлов прямого доступа, записи нумеруются начиная с 1;

код ошибки - возвращает отрицательное значение, если достигнут конец файла, положительное значение, если произошла ошибка чтения, и нулевое значение при успешном завершении операции.

Оператор WRITE записывается в виде :

WRITE([UNIT=]устройство [,[FMT=]формат] [,REC=номер записи]

[,ERR=метка] [,IOSTAT=код ошибки])

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

Оператор INQUIRE позволяет получить все характеристики файла или устройства. Он записывается в форме запроса об устройстве:

INQUIRE([UNIT=]устройство [,NAME=name] [,NUMBER=number]

[,EXIST=exist] [,NAMED=named] [,OPENED=opened] [,MODE=mode]

[,ACCESS=access] [,DIRECT=direct] [,SEQUENTIAL=sequential]

[,FORM=form] [,FORMATTED=formatted] [,UNFORMATTED=unformatted] [,BINARY=binary] [,RECL=recl]

[,BLANK=blank] [,BLOCKSIZE=blocksize] [,ERR=метка]

[,IOSTAT=код ошибки])

или в форме запроса о файле:

INQUIRE(FILE=имя файла ... )

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

name - имя файла,

number - номер устройства,

exist - .TRUE. , если файл существует,

named - .TRUE. , если файл имеет имя,

opened - .TRUE. , если файл присоединен к устройству,

mode - `READ', `WRITE', `READWRITE' или `UNKNOWN'

access - `SEQUENTIAL', `DIRECT' или `UNKNOWN' ,

direct - `YES', `NO' или `UNKNOWN' ,

sequential - `YES', `NO' или `UNKNOWN' ,

form - `FORMATTED', `UNFORMATTED' или

`UNKNOWN' ,

formatted - `YES', `NO' или `UNKNOWN' ,

unformatted - `YES', `NO' или `UNKNOWN' ,

binary - `YES', `NO' или `UNKNOWN' ,

recl - длина записи в байтах,

blank - `NULL', `ZERO' или `UNKNOWN' ,

blocksize - размер буфера в байтах.

Оператор BACKSPACE устанавливает файловый указатель на начало предыдущей записи и может использоваться в двух формах :

BACKSPACE устройство

или

BACKSPACE([UNIT=]устройство[,ERR=метка]

[,IOSTAT=код ошибки])

Оператор REWIND устанавливает файловый указатель на начало файла:

REWIND устройство

или

REWIND([UNIT=]устройство[,ERR=метка][,IOSTAT=код ошибки])

Оператор ENDFILE записывает в файл признак конца файла, усекая таким образом файл:

ENDFILE устройство

или

ENDFILE([UNIT=]устройство[,ERR=метка][,IOSTAT=код ошибки])

Эти три оператора работают и для текстовых файлов.

В языке FORTRAN есть всего одна встроенная функция для обработки файлов

EOF(integer)

Функция возвращает истинное значение, если при вводе достигнут конец файла.

Из текстового файла можно читать числа в свободном формате, т.е. READ(номер устройства,*, ... ) ... Но если числа записаны в файле совершенно произвольным образом, то прочесть их не так просто, как в языках PASCAL и С, потому что каждое выполнение оператора READ - это чтение новой строки.

Кроме внешних устройств, которые определяются своим номером и связываются с каким-либо внешним файлом, можно использовать так называемые внутренние устройства - символьные переменные или массивы. Открывать и закрывать такие устройства не нужно, а операторы READ и WRITE записываются в виде

READ/WRITE(UNIT=имя,FMT=формат)список ввода/вывода

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

1.16 Структуры

Структуры в языке FORTRAN аналогичны записям в языке PASCAL и структурам в языке C. Структурные переменные описываются в программе в два этапа: сначала описывается структурный тип в операторе STRUCTURE :

STRUCTURE /имя типа/

описания элементов

END STRUCTURE

а затем описываются переменные в специальном операторе RECORD :

RECORD/имя типа/ имя переменной[описатель измерений]...

Допустимы вложенные структуры и массивы структур, структуры могут быть параметрами подпрограмм. Элемент структуры записывается в виде:

имя структуры.имя элемента

точно так же, как в языках PASCAL и C. Целые структуры нельзя вводить или выводить, подобно массивам; для них не работает оператор DATA.

1.17 Динамические массивы

В языке FORTRAN отсутствуют средства для произвольных операций с динамической памятью, как в языках PASCAL и C. Вместо них можно использовать динамически распределяемые (или просто динамические) массивы. Память под такие массивы отводится не при компиляции программы, а по мере необходимости во время выполнения, а после использования может быть освобождена. Динамические массивы описываются со специальным атрибутом ALLOCATABLE :

имя[ALLOCATABLE] описатель измерений

Причем описатель измерений динамического массива имеет вид

( : , : , ... , : )

и задает только размерность массива, которая равна количеству двоеточий (двоеточия разделяются запятыми). Выделяется память для динамического массива оператором ALLOCATE :

ALLOCATE (имя описатель измерений [,STAT=код ошибки])

Описатель измерений в операторе ALLOCATE записывается уже полностью, но, в отличие от обычных массивов, границы измерений могут задаваться любыми выражениями. Существует одно ограничение на использование динамических массивов - их можно использовать как скалярные переменные только в списках ввода-вывода, но не в операторе присваивания и не в арифметических выражениях. Память, отведенная под динамический массив, освобождается оператором DEALLOCATE :

DEALLOCATE (имя[,STAT=код ошибки])

1.18 Графика

Для использования в программе графической библиотеки необходимо включить в программу операторы:

INCLUDE `FGRAPH.FI'

INCLUDE `FGRAPH.FD`

или метакоманды

$INCLUDE:'FGRAPH.FI'

$INCLUDE:'FGRAPH.FD'

для подключения файлов, содержащих описания графических процедур и функций (подпрограммы INTERFACE), а также для описания констант и переменных. Графический режим устанавливается функцией

INTEGER*2 FUNCTION SetVideoMode (mode)

INTEGER*2 mode

Аргумент mode может быть, например, одной из констант:

$MAXRESMODE =-3 - графический режим максимального разрешения;

$MAXCOLORMODE =-2 - графический режим максимальной цветности;

$DEFAULTMODE =-1 - возврат к оригинальному режиму.

Функция возвращает 0 в случае неудачи. Аналогична InitGraph в языках PASCAL и C.

Получить информацию о текущем экранном режиме можно с помощью процедуры:

SUBROUTINE GetVideoConfig(s)

STRUCTURE/videoconfig/

INTEGER*2 numxpixels ! число пикселов по X

INTEGER*2 numypixels ! число пикселов по Y

INTEGER*2 numtextcols ! число текстовых колонок

INTEGER*2 numtextrows ! число текстовых строк

INTEGER*2 numcolors ! число цветов

INTEGER*2 bitsperpixel ! число битов на пиксел

INTEGER*2 numvideopages ! число доступных видеостраниц

...

Подобные документы

  • Основные приёмы и возможности алгоритмических языков программирования Fortran. Табуляция функции на языке Fortran, ее графический вид и блок-схема алгоритма. Выполнение расчетов на алгоритмическом языке Фортран. Текст (листинг) Fortran-программы.

    курсовая работа [31,9 K], добавлен 15.02.2011

  • Степень переносимости исходного кода между различными платформами. Первый язык программирования высокого уровня, имеющий транслятор. Программа Fortran, ее версии, отличия от других программ. Составление программ на языке программирования Fortran.

    курсовая работа [45,5 K], добавлен 04.06.2014

  • Характеристики операторов языка Си. Операторы безусловного и условного перехода: if, if-else, if-else if. Оператор переключатель switch. Оператор цикла с предусловием while, постусловием do-while. Упрощение логических выражений, взаимозаменяемость циклов.

    лабораторная работа [30,0 K], добавлен 06.07.2009

  • Принцип работы основных операторов языка программирования Turbo-Paskal: оператор присваивания, выбора Case, безусловного перехода, цикла, уловный, составной. Формальное описание и вызов функции и процедуры. Требования к списку фактических параметров.

    реферат [261,8 K], добавлен 09.02.2011

  • Машинные коды и ассемблер. Первые языки программирования высокого уровня. Язык программирования FORTRAN. Достоинства и недостатки ALGOL. Научные и бухгалтерские программы. Основные принципы, которые соблюдались при создании языка программирования Basic.

    курсовая работа [407,4 K], добавлен 21.06.2014

  • Общая характеристика языков программирования. Описание языка Паскаль: основные субъекты языка; структура Паскаль-программы; типизация и объявление данных. Операторы присваивания и выражения. Структурные операторы, организация ветвлений и циклов.

    дипломная работа [276,6 K], добавлен 26.01.2011

  • История создания и применение языка Basic. Стандартные математические и строковые функции. Операции и выражения языка. Блоки данных и подпрограммы. Операторы управления, цикла, ввода-вывода и преобразования информации. Константы, переменные, массивы.

    контрольная работа [2,3 M], добавлен 04.05.2015

  • Разработка блока распараллеливания последовательной программы с языка Fortran на язык Fortran-DVM/OpenMP. Реализация блока DVM/OpenMP-эксперт на основе компонента DVM-эксперт. Тестирование системы алгоритмами Якоби, верхней релаксации и методом Гаусса.

    дипломная работа [218,3 K], добавлен 15.10.2010

  • Программирование вычислительных процессов на языке FORTRAN для обеспечения взаимодействия системы "Человек-Производство-Природа". Использование массивов для составления циклов подсчета уровня экологического загрязнения, затрат на переработку отходов.

    курсовая работа [2,0 M], добавлен 30.05.2014

  • Краткая характеристика встроенного языка. Формат исходных текстов программных модулей. Комментарии, формат операторов, зарезервированные слова. Структура программного модуля. Базовые типы данных, правила их преобразования. Оператор объявления переменных.

    реферат [30,3 K], добавлен 23.01.2011

  • Особенности параллельного программирования высокопроизводительных многопроцессорных или многомашинных вычислительных комплексов. Основные положения и понятия стандартов MPI и OpenMP. Средства компиляции параллельных операторов для языков C и Fortran.

    лекция [177,9 K], добавлен 22.10.2014

  • Общая характеристика языка программирования Турбо Паскаль: операторы, циклы, файлы. Процедуры и функции модуля Crt. Структурная и функциональная схема программы учета учащихся, таблица идентификаторов. Список и описание использованных подпрограмм.

    курсовая работа [702,9 K], добавлен 29.01.2011

  • Разработка программы, моделирующей игру "Кости". Использование в программе генератора псевдослучайных чисел. Схема иерархии модулей. Описание работы программы. Регистрация игрока, окно программы. Определение языка программирования, основные операторы.

    курсовая работа [3,2 M], добавлен 29.07.2010

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

    курсовая работа [26,4 K], добавлен 01.12.2009

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

    курсовая работа [400,6 K], добавлен 10.11.2016

  • Разработка программы, которая выполняет удаление элементов внешних таблиц, а также очистку файлов, вывод таблиц на экран. Описание программного продукта. Выбор языка программирования. Схема информационных потоков. Комплект поставки и инсталляция.

    курсовая работа [180,0 K], добавлен 09.03.2009

  • Структура программы PL/SQL. Секция заголовка блока. Элементы, объявленные в секции объявлений базового блока. Приоритет операций выражения. Управление выполнением программы. Конструкция и синтаксис цикла LOOP. Оператор GOTO и метки, пример использования.

    лекция [356,3 K], добавлен 14.02.2014

  • Описание предметной области. Характеристика программных средств. Описание компонентов, интерфейс программы. Описание процедур и функций. Вызов и загрузка программы. Испытание методом белого и черного ящика на ошибки кода программного приложения.

    курсовая работа [2,2 M], добавлен 26.04.2015

  • Изучение строкового типа данных, построение классов обработки строк. Описание программы, выводящей слова, состоящие только из гласных латинских букв (a, e, i, o, u). Операторы для проверки корректности вводимых значений c помощью условного оператора if.

    контрольная работа [12,7 K], добавлен 26.05.2016

  • Символьные типы данных, работа со строками, составление блок-схемы алгоритма и программы для работы с массивами. Организация программы с использованием процедур и функций. Процедуры и функции, использующиеся при обработке файлов; компонентные файлы.

    контрольная работа [52,9 K], добавлен 03.10.2010

Работы в архивах красиво оформлены согласно требованиям ВУЗов и содержат рисунки, диаграммы, формулы и т.д.
PPT, PPTX и PDF-файлы представлены только в архивах.
Рекомендуем скачать работу.