WWW.DISS.SELUK.RU

БЕСПЛАТНАЯ ЭЛЕКТРОННАЯ БИБЛИОТЕКА
(Авторефераты, диссертации, методички, учебные программы, монографии)

 

МИНИСТЕРСТВО ОБЩЕГО И ПРОФЕСИОНАЛЬНОГО

ОБРАЗОВАНИЯ РФ

МОСКОВСКИЙ ГОСУДАРСТВЕННЫЙ ИНДУСТРИАЛЬНЫЙ

УНИВЕРСИТЕТ

Н.А. Берков

Н.Н. Беркова

УЧЕБНОЕ ПОСОБИЕ

АЛГОРИТМИЧЕСКИЙ ЯЗЫК ФОРТРАН 90

Москва 1998 ББК 32.973-01 УДК 681.3.06 Алгоритмический Язык Фортран 90: Учебное пособие. Берков Н. А., Беркова Н.Н.. – М: МГИУ, 1998 г. –96с.

Данное учебное пособие предназначено для студентов МГИУ, изучающих алгоритмический язык ФОРТРАН. Приводится описание основных типов данных и операторов языка Фортран стандарта 1990г. В работе рассмотрено большое число учебных примеров. Особое внимание уделяется графическим функциям. Все приведенные в пособии программы, отлаживались с использованием компилятора Microsoft Fortran 5.10 на ПЭВМ, совместимым с IBM/PC.

Рецензент: Пярнпуу А.А., д.ф-м.н., профессор каф. "Вычислительная математика и программирование" (МГАИ) Редактор: С.В. Мухин ЛР № 020407 от 12.02. Подписано в печать Сдано в производство Формат бумаги 60 x 90/16 Бум. множит.

Усл. печ. л. Уч.-изд. л. Тем. план 1998 г., № 1- Тираж Заказ © МГИУ, 1998.

Ротапринт МГИУ, 109280, Москва, Автозаводская, Введение Алгоритмический язык Фортран занимает особое место среди языков программирования. Появившись на заре вычислительной техники (в 1956г.), он непрерывно развивался и продолжает развиваться, пережив многие более поздние языки. Фортран трижды подвергался стандартизации: в 1966г. – Фортран 66, в 1977г. – Фортран 77 и в 1990г. – Фортран 90. Язык Фортран был разработан для решения научных и инженерных задач и до настоящего времени остается широко распространенным языком среди пользователей, занимающихся вопросами численного моделирования. Это объясняется следующими причинами:

1. Существованием огромных фондов прикладных программ на Фортране, накопленных за предыдущий период.

2. Наличием эффективных трансляторов для различных типов машин. Высокой эффективностью программного кода.

3. Переносимостью на другие типы ЭВМ, работающих в различных операционных системах, что достигается наличием стандартов языка.

4. Простотой конструкций языка.

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

Устаревшие, по мнению авторов, операторы, включенные для поддержания предыдущих стандартов, опущены.

1. Общие сведения 1.1. Алфавит При записи исходного текста программ используются следующие символы:

1. Прописные и строчные буквы латинского алфавита от A до Z.

2. Арабские цифры от 0 до 9.

3. Специальные символы : ” ( “, “ ) ”, “ + ”, “ - “, “ * ”, “ / ”, “ ‘ ”, “ : :, “ $ ”, “ !

“, точка, запятая и пробел.

Буквы русского алфавита и другие символы могут использоваться только в комментариях и в операторах ввода-вывода.

Примечание. Во всех операторах языка Фортран прописные и строчные буквы считаются одинаковыми, знак пробела игнорируется.

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

Константа – это данное, значение которого не изменяется во время выполнения программы.

Имя – это последовательность буквенно-цифровых символов, первым из которых является буква или символ «$». Имена (идентификаторы) служат для обозначения различных элементов программной единицы и должны быть уникальными.

Ключевое слово - последовательность символов, определяющий оператор.

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

Операции - определяют действия над данными.

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

Например. «GOTO 123» и «GO TO 1 2 3» - имеет один и тот же смысл.

Существует два формата записи программы: фиксированный и свободный.

1.3.1. Фиксированная форма записи программы Текст программы записывается так, что каждая строчка его разделена на позиций. На одной строчке может помещаться только один оператор. Основной текст программы записывается, начиная с 7-ой позиции по 72-ю включительно.

Если оператор не помещается на одной строке, то в 6-ой позиции следующей строки (строки продолжения) ставиться любой символ (отличный от пробела) и на ней продолжается запись оператора. Позиции с 73 по 80 могут быть заполнены любыми символами; на действие программы они не оказывают влияния. Позиции с 1 по 5 предназначены для меток операторов. Символ «$» в первой позиции указывает на метакоманду. Звездочка, прописная или строчная латинская C в первой позиции указывает, что данная строка является строкой-комментарием и эту строку компилятор не должен обрабатывать. Комментарий также можно ставить в конце любой строки после символа «!».



Если в программе используется метакоманда $FREEFORM, то программа вводится в свободном формате; при этом необходимо придерживаться следующих правил ввода программы:

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

операторы и метки могут начинаться с любой (включая первую) позиций;

для отделения метки оператора от первого символа пробел необязателен;

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

Пример.

С Программа в фиксированном формате $FREEFORM Приоритет логических операций с учетом скобок:

1) обращение к функциям (высший приоритет); 2) арифметические и текстовые операции; 3) операции отношения; 4).NOT.; 5).AND.; 6).OR.; 7) .EQV. и.NEQV. одинаковый (низший приоритет).

Примеры.

В программах на Фортране довольно часто используются логические выражения, которые принимают значения истина, если математические переменные x, y, z и т.д. заключены в какой-то диапазон:

1) x[0,3].

На Фортране это логическое выражение записывается: x.gt.0.and.x.le. На Фортране это логическое выражение записывается:

x.gt.0.and.y.le.x-y.and.z.gt.x**2+y**2.and.x+y+z.gt. 3) x(-,1] (1,2] (10, ).

На Фортране это логическое выражение записывается:

(x.le.0).or.(x.gt.1.and.x.le.2).or.(x.gt.10) Скобки в данном логическом выражении необязательны, т.к. приоритет.and. выше, чем.or.. Здесь скобки используются только для наглядности.

Существует всего лишь одна текстовая операция, называемая конкатенацией или сцеплением текстовых строк. Эта операция записывается в виде:

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

// - операция конкатенации или сцепления.

Значением текстового выражения является строка символов, полученная последовательным дописыванием к значению операнда A значения операнда B.

Длина результата равна сумме длин значений операндов. Например: значением текстового выражения ‘Петров’//’ Иван’//’ Леонидович’ будет строка ‘Петров Иван Леонидович’ длиной 22 байта.

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

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

2.5.1. Функции преобразования типов данных В таблицах данного подраздела приведены следующие сокращения типов переменных:

• int - любой целый тип (Integer*1, Integer*2, Integer*4);

• real - любой вещественный тип (Real*4, Real*8);

• char - Character*n;

• Выражения, записанные в квадратных скобках, необязательны.

int(gen) int,real int Преобразует аргумент произвольного типа Real(gen) int, real Real*4 Преобразует аргумент произвольного типа Float(int) int Real*4 Преобразует аргумент любого целого типа Dble(gen) int,real Real*8 Преобразует аргумент любого типа к вещественному типу с двойной точностью.

Ichar(char) char int Преобразует аргумент символьного типа в Char(int) int char Обратная функция к функции Ichar.

Функции гумента функции Aint(real) real real Усечение аргумента. Т.е. дробная часть отбрасывается.

Dint(dbl) Real*8 Real*8 Усечение аргумента.

Anint(real) real real Округление аргумента по правилам математики.

Dnint(dbl) Real*8 Real*8 Округление аргумента.

Nint(real) real int Округление аргумента.

Inint(dbl) Real*8 int Округление аргумента.

Abs(gen) int, real Совпадает с Вычисление абсолютного значения проаргументом извольного аргумента.

Iabs(int) int int Вычисление абсолютного значения аргумента целого типа.

Mod(genA, int или Совпадает с Возвращает остаток от деления A на B.

genB) real аргументом Mod(11,2) равно 1.Mod(23,5) равно 3.

Max(genaA, int или Совпадает с Возвращает максимальное значение, genB, [genC] real аргументом введенных аргументов. Число аргументов должно быть 2.

...) Min(genaA, int или Совпадает с Возвращает минимальное значение ввеgenB,[genC] real аргументом денных аргументов. Число аргументов...) Sqrt(gen) gen real*8 Вычисляет корень квадратный аргумента, который обязан быть неотрицательным.

Log(gen) gen real*8 Вычисляет натуральный логарифм Log10(gen) gen real*8 Вычисляет десятичный логарифм Sin(gen) gen real*8 Вычисляет синус. Аргумент в радианах.

Cos(gen) gen real*8 Вычисляет косинус. Аргумент в радианах.

Tan(gen) gen real*8 Вычисляет тангенс. Аргумент в радианах.

Cotan(gen) gen real*8 Вычисляет котангенс. Аргумент в радианах.

Lgt(charA, char log Сравниваются два символа на больше.

charB) Lge(charA, char log Сравниваются два символа на больше или равно.

charB) Lle(charA, char log Сравниваются два символа на меньше.

charB) Lle(charA, char log Сравниваются два символа на меньше или равно.

charB) Len(char) char int Определяет длину символьной строки.

Idex(charA, char int Возвращает номер позиции строки charB в charB.

charB, [gen]) Если введен третий параметр и он =.True., то поиск осуществляется с конца строки.

Len_Trim(char) char int Определяет длину символьной строки без хвостовых пробелов.

Scan(charA, char, int Возвращает номер позиции символа charB в строcharB,[gen]) log ке charB. Если введен параметр log и он =.True., то Verify(charA, char, int Возвращает номер позиции символа, не содержаcharB, [gen]) log щегося в charB в строке charB. Если введен параметр log и он =.True., то поиск осуществляется с IAND(intA, int Совпадает Возвращает результат логического побитоIntB) с аргумен- вого умножения аргументов.

NOT(intA) Возвращает результат логического побитового дополнения аргумента.

Если при выводе целая часть числа занимает больше w-(d+1) символов, то в отводимом для записи числа поле будут напечатаны *.

Пример: печать чисел по спецификации f6. Вещественные числа с порядком представляются с помощью спецификации E, общий вид которой:

где w общая длина поля, а d число цифр после десятичной точки в мантиссе, причем w должно быть больше d+6, так как в поле надо записать:

знак числа, десятичную точку, мантиссу, символ Е, знак порядка и величину порядка.

Пример: в спецификации Е11.4 записать числа -0.256 10 -0.2560Е- В спецификации Е могут быть записаны любые вещественные числа, поэтому ее хорошо использовать, особенно при выводе, когда неизвестен порядок величины. При выводе число округляется до значения, которое определяется количеством значащих цифр в мантиссе при заданной спецификации.

Спецификация вещественных величин двойной точности имеет вид:

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

Пример: печать в D16. -0. Спецификация логических величин имеет вид:

При вводе логических величин поле просматривается слева направо, и если первым встречается символ T, то переменной присваивается значение.true., иначе переменной присваивается значение.false.

При выводе символы T или F располагаются в крайней правой позиции поля, а остальная часть поля заполняется пробелами.

Отметим, что спецификации должны соответствовать типу вводимых или выводимых данных.

Спецификация G используется для ввода-вывода целых, вещественных и логических переменных. Ее формат При выводе целых и логических чисел она эквивалентна спецификациям Iw и Lw. При выводе вещественных чисел в зависимости от величины числа и параметров w и d числа выводятся либо в формате Fw.d, либо в формате Ew.d.

При этом действует правило: если число не умещается в формате с фиксированной запятой (формате F), то оно печатается в формате с плавающей запятой (формате E).

Спецификация A предназначена для ввода-вывода текстовых переменных.

Формат спецификации Aw или A, где w – количество позиций ввода-вывода.

Если w не указано, то предполагается, что данное занимает столько позиций, какова длина соответствующего элемента ввода-вывода. Если w меньше длины данного (l), то данное усекается слева на (l-w) позиций, а если больше, то слева дополняется (w-l) пробелами.

6.1.8. Текстовые константы и управляющие символы Текстовые константы и H-константы используются для вывода сообщений, заголовков и другой постоянной текстовой информации. Текстовые константы заключаются в кавычки ‘текст’. H-константы имеют вид nHтекст, где n – длина текстовой константы. Длина текстовой константы и H-константы не должны превышать 256 символов.

Спецификация X имеет вид nX и предназначена для пропуска n позиций.

Символы управления переходом на новую строку /, \.

При встрече символа / (слеш) происходит переход к следующей строке, а при встрече символа \ (обратный слеш) происходит запрещение перехода к следующей строке, и следующий вывод производится в конец данной строки.

Пример. Написать программу, которая разбивает строку длиной 255 символов на слова.

$freeform program str character*255 L read '(a)',L do i=1, if(L(i:i).ne.' '.and.i.lt.255.and.L(i+1:i+1).eq.' ') then Найден последний символ в слове print 2,L(i:i) ! вывести его и перейти к новой строке else if(L(i:i).ne.' ') then напечатать символ вначале или внутри слова не переходя на новую строку 1FORMAT(A1,\) 2FORMAT(A1) пропустить первый управляющий символ строки не переходя на новую 3FORMAT(1x,\) Пусть P1,...,Pk список переменных в операторе ввода или вывода, а S1,...,Sl список спецификаций в соответствующем операторе format, который связан с данной записью (строкой).

Количество символов в строке однозначно определяется списком спецификаций. Каждой спецификации в порядке слева направо отводится соответствующее поле в строке. При этом спецификации пробелов при вводе-выводе и спецификации текста при выводе присутствуют в соответствующих местах строки, без каких либо изменений.

Числовые и логические спецификации из списка S1,...,Sl в порядке слева направо ставятся с соответствие переменным P1,...,Pk, которые согласно этим спецификациям представляются в строке. Если список переменных меньше, чем количество числовых и логических спецификаций, то ввод-вывод осуществляется на первой строке до конца списка спецификаций, а последующие переменные вводятся или выводятся с новой строки вместе с переходом в начало списка спецификаций, и т.д. до конца списка переменных.

Запись повторяющихся спецификаций и групп спецификаций Запись m format(...,S,S,...,S,...) эквивалентна записи:

m format(...,NS,...) А запись m format(...,S1,...,Sn,...,,S1,...,Sn,...) эквивалентна записи m format(...,N(S1,...,Sn),...) При форматном выводе первый символ интерпретируется как управляющий. Если в качестве первого символа стоит символ 0, то происходит переход через две строки; 1 – переход в начало следующей строки; + – не происходит переход к следующей строке; любой другой символ – переход к следующей строке.

Примеры.

Пример: Бесформатный ввод с клавиатуры числа a и форматный вывод на экран числа на a+1, b=a+2 и c=a+3.

program redd integer*2 a,b,c write (*,*) ' Введите целое число a' read (*,3) a b=a+ c=a+ write (*,4) a+1,b,c 3 format (I2) 4 format (2x,' 1-е Число=',i2,2(' следующее число=',I3)) При вводе и выводе массивов используется два основных способа - вводвывод массива по имени или с помощью неявного «цикла».

1-й способ:

program arr integer*2 A(10),B(3,4) read(*,*) A,B В этом случае должны быть последовательно введены 10 чисел, которые соответствуют элементам массива A, а затем введены 12 чисел, которые соответствуют элементам массива B, согласно их последовательности расположения в памяти.

Второй способ (неявный цикл):

integer*2 A(10),B(3,4) read(*,*) (A(I),I=1,10),((B(I,J),J=1,4),I=1,3) Этот способ удобнее, когда в программе используется меньшее количество элементов массивов, нежели то, которое задано в операторах размерности.

Например:

integer*2 A(10),B(3,4) read(*,*) n,l,m,(A(I),I=1,n),((B(I,J),J=1,l),I=1,m) В этом случае числа n, l, m подчиняются ограничениям n10, l4, m3, поскольку в ином случае мы выйдем за границы расположения элементов массивов.

В этом примере сначала вводятся 3 целых числа n, l, m и затем последовательно n элементов массива А, а затем l*m элементов массива В по столбцам, т.е.:

В(1,1), B(1,2),...,B(2,1), B(2,2),...

В этом случае последовательность ввода элементов В не совпадает с порядком их хранения в памяти. Если записать:

read(*,*) n,l,m,(A(I),I=1,n),((B(I,J),J=1, m),I=1, l ) то порядок ввода элементов массива В, и порядок из размещения в памяти, будет одинаковый.

Вывод массива отличается только заменой оператора read на write.

Так, строка программы:

write(*,*) A,B последовательно выводит массивы A и В.

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

Общий вид его таков: (имя(p), p=iн, iк, h), где имя имя массива; p параметр цикла; iн, iк, h начальное, конечное значения и шаг параметра цикла. Если h=1, его можно опустить.

6.1.11. Ввод-вывод, управляемый именованным списком. Оператор

NAMELIST

Для ввода данных очень удобно использовать именованные списки. При помощи оператора NAMELIST/ /, где имя списка, описывается список. Затем при помощи оператора READ(N,) считываются переменные из списка.

Среди исходных данных должен быть блок p1=,p2=,…, pn=, Переменные в списке исходных данных могут быть в произвольном порядке. Часть переменных можно не вводить. Тогда их значения при вводе не изменяются. Этим приемом широко пользуются для присвоения переменным значения по умолчанию. При вводе массивов можно применять кратный ввод. Это когда n переменным присваивается одинаковое значение. В этом случае после числа одинаковых переменных ставится символ * (звездочка), а затем значение этих переменных.

Пример. Написать участок программы, который вводит массив A размерностью 100. Первые 50 элементов =1, а остальные 0.

REAL A(100) NAMELIST /L1/ A OPEN(7,FILE=’TESTname.DAT’) READ (7,L1) Исходные данные для данной программы должны быть следующими:

A=50*1.,50*0., В файле данные должны быть введены со второй позиции, или, более правильно, после первой позиции.

6.2. Ввод-вывод с использованием файлов Данные часто бывает удобно хранить в файлах, а не вводить их каждый раз с клавиатуры. Можно иметь несколько файлов с данными и считывать данные то из одного, то из другого. Иногда удобно записывать результаты работы программы в файл, чтобы сохранять их там.

Полное описание операторов ввода-вывода в файлы достаточно сложно и объемно. Мы ограничимся только основными операторами и их параметрами.

6.2.1. Открытие и закрытие файлов. Операторы OPEN, CLOSE Опишем процедуру организации ввода-вывода с использованием файлов. В этом случае файл, с которого будет осуществляться ввод-вывод, нужно связать с каналом ввода-вывода. Для этого используется оператор открытия файла вида open(n, file = ’’) где n - номер канала, которым может быть любое целое число, меньше 32767, а имя файла является именем файла, который уже существует (при вводе из файла) или будет создан (при выводе в файл).

Если указанное имя файла - пустое имя (file = ’ ’), то выполняются следующие шаги:

1) Программа пытается считать имя файла из списка имен, указываемых в командной строке (если они там есть), используемой для активизации программы. При исполнении последовательных операторов open выполняется считывание последовательных параметров из командной строки.

2) Если таких операторов open больше, чем параметров в командной строке (или параметры не указаны), то программа выводит просьбу ввести имя файла с клавиатуры, примерно в следующей форме:

File name missing or blank - Please enter name UNIT n?, где n - номер канала.

Пример. Форматный ввод с клавиатуры числа a и вывод в файл read2.dat числа на 2 большего.

program redd Аналогично осуществляется и чтение из файла.

Пример. Форматный ввод из файла read4.dat числа a и вывод в файл read2.dat числа на 2 большего.

open(11, file='read2.dat') open(12, file='read4.dat') write (11,*) 'число a=',a Файл может быть отделен от канала ввода-вывода с помощью оператора закрытия файла, который имеет вид close(n) Одновременно с закрытием канала файл может быть удален, если использовать оператор:

close(n, status =’delete’) После закрытия канала его номер становится свободным и может быть использован при открытии нового канала с другим файлом.

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

Иногда бывает удобно не связывать номер канала ввода-вывода с именем конкретного файла, т.е. номер канала n присутствует в операторе read или write, но он не открыт оператором open. Тогда мы получаем сообщение, аналогичное случаю, когда указанное имя файла - пустое имя (file = ’ ’), File name missing or blank - Please enter name UNIT n?, После этого вопроса на клавиатуре нужно набрать имя файла, которое вы хотите связать с номером канала n ввода-вывода.

Большинство файлов на языке Фортран являются внешними, т.е. находящимися на внешних устройствах (жестких дисках, лазерных дисках, дискетках и т.д.). Иногда удобнее вывести результаты не на внешнее устройство, а в текстовую переменную. Внутренним файлом является символьная переменная, символьный элемент структуры, символьная подстрока, символьный массив или не символьный массив. Применение внутренних файлов рассмотрим на примере.

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

$DEBUG !отладочный режим (при ошибке выводит номер строки, где была program test ! Тестовая программа call printreal("Число Пи=",3.14) call printreal("Число 1=",0.000000012345671) call printreal("Число 2=",0.00000012345671) call printreal("Число 3=",0.12345671) call printreal("Число 4=",0.012345671) call printreal("Число 5=",12345671.) call printreal("Число 6=",1234.5671) call printreal("Число 7=",1234567.1) call printreal("Число 8=",12345671) Subroutine printreal(S,a) Character S*10, form*6,ftm* Integer d,e n=Alog10(abs(a))!Порядок числа if(n.gt.0) n=n+ If(n.Lt.-7.Or.n.Gt.7) Then form=' E15.7' Else if(n.lt.0) d=9-n form='f 9.1 ' write(form(2:3),100) d !Вывод в подцепочку ширины поля write(form(5:6),100) e ! Вывод в подцепочку количество знаков после End If ftm='(1x,a,'//form//')' ! Формат вывода Print ftm,S,a 100 format(i2) 7. Графическое программирование Необходимо различать текстовый и графический режимы.

Текстовые режимы разделяют текстовый экран на строки и столбцы.

Если экран поддерживает текстовый режим, отображающий 25 строк и столбцов, то строки нумеруются значениями от 1 до 25 начиная с верхней строки. Столбцы нумеруются от 1 до 80 слева направо. Номер строки всегда указывается прежде номера столбца. Процедуры работы с текстом используют координаты в виде строк и столбцов.

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

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

Введем несколько определений:

База-точка с координатами (0,0)-левый верхний угол экрана. В этой точке начинаются оси абсцисс (х) и ординат (у).

Горизонтальное направление представляется осью абсцисс. Координаты меняются слева направо.

Максимальное значение по этой оси - 640 (пиксель).

Вертикальное направление представляется осью ординат. Координаты меняются от 0 до 480 (сверху вниз).

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

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

Программа пользователя, использующая графические процедуры, компонуется с библиотекой graphics.lib, являющейся составной частью стандартного пакета Фортрана.

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

Разработка всех графических программ может быть представлена в виде следующих шагов:

Подключение графической библиотеки.

Установка видеорежима.

Определение параметров видеоконфигурации.

Создание и манипуляция графическими фигурами.

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

7.1. Основные функции графического режима Каждая программа, использующая графическую библиотеку, должна также явно объявлять любые процедуры. Т.е. или написать интерфейс для каждого вызова процедуры, или интерфейс для включаемых файлов fgraph.fi и fgraph.fd.

Эти файлы содержат объявления, необходимые для доступа ко всем библиотечным графическим процедурам. Для использования их следует включить файл fgraph.fi в начало каждого исходного файла программы пользователя, а файл fgraph.fd в каждую подпрограмму, которая вызывает графическую процедуру.

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

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

Замечание. В графическом режиме программы пишутся только в фиксированном формате. Это вызвано тем, что подстановочные файлы fgraph.fi и fgraph.fd написаны в фиксированном формате, т.е. Freemode использовать нельзя.

7.1.1. Функции установки графического режима SETVIDEOMODE SETVIDEOMODE. Синтаксис этой функции: dummy=setvideomode(mode), где dummy переменная типа integer*2, которая возвращает данная функция.

Если dummy=0, то при выполнении функции произошла ошибка. Параметр mode означает тип графического адаптера компьютера.

Нами дальше используется следующие значения параметра mode:

$MAXRESMODE — выбирается режим с максимальным разрешением для данного типа компьютера.

$DEFAULTMODE — убрать графический режим. Используется для возвращения в стандартный текстовый режим. Надо использовать при завершении работы в графическом режиме Приведем простейшую программу, работающую в графическом режиме.

Для этого рассмотрим еще одну достаточно важную графическую функцию setpixel, которая рисуют всего лишь одну точку на экране в указанном месте.

Синтаксис : dummy=setpixel(x,y) Пример. Нарисовать прямую горизонтальную линию посредине экрана.

dummy=setvideomode( $MAXRESMODE ) ! инициализировать dymmy=setpixel(i,240) !поставить точку (пиксель) на экране (i,240) read(*,*)! ждать пока нажмем любую клавишу dummy=setvideomode($DEFAULTMODE) ! убрать графический режим В данном примере рисуются одна: прямая горизонтальная линия. Цикл выполняется 640 раз. Внутри цикла ставится одна точка. Набор из 640 точек образуют прямую линию.

Синтаксис dummy=setcolor(color) Функция setcolor устанавливает текущий цвет символов в соответствии с параметром color.

Функция setcolor принимает значение integer*2 в качестве параметра, являющегося индексом цвета.

Индекс цвета, принимаемый по умолчанию, - наивысший пронумерованный индекс цвета в текущей палитре.

Пример: Нарисовать синусоиду и ось х разными цветами.

INCLUDE 'FGRAPH.FI' INCLUDE 'FGRAPH.FD' dummy=setvideomode( $MAXRESMODE ) dummy=setcolor(i/40+1) dummy=setpixel(i,240) dummy=setpixel(i,240-int2(240.*sin(i/100.))) dummy=setvideomode($DEFAULTMODE) !

7.1.4. Получение конфигурации графической среды.

GETVIDEOCONFIG

Процедура getvideoconfig возвращает текущую конфигурацию графической среды в виде структуры videoconfig, которая определена в файле fgraph.fd.

Эту процедуру следует вызывать перед вводом видеорежима для предотвращения возможных проблем несовместимости.

Ее вызов имеет вид:

Call getvideoconfig(video) Полезно знать, какие показатели можно определить с ее помощью, поэтому ниже приведена структура videoconfig.

Структура videoconfig имеет следующий вид:

STRUCTURE/ videoconfig/ INTEGER2* numxpixels !Число пиксель по оси х INTEGER2* numypixels ! Число пиксель по оси у INTEGER2* numtextcols !Допустимое число столбцов INTEGER2* numtextrows ! Допустимое число строк INTEGER2* numcolors !Число индексов цвета INTEGER2* bitsperpixel !Число разрядов на пиксель INTEGER2* numvideopage !Число видеостраниц INTEGER2* mode !Текущий видеорежим INTEGER2* adapter !Активный видеоадаптер INTEGER2* monitor !Активный дисплейный монитор INTEGER2* memory !Память видеоадаптера в Кбайтах

END STRUCTURE

Поля структурной переменной типа videoconfig инициализируются при выходе из процедуры getvideoconfig.

В любом текстовом режиме, включая монохромный, функция getvideoconfig возвращает 32 значения для заданного количества допустимых цветов, где цвета со значениями от 0 до 15 интерпретируются как нормальные, а от16 до 31 - как мерцающие цвета (с номерами от 0 до 15).

Пример: Написать программу, которая выводит число точек на мониторе.

IF( setvideomode( $MAXRESMODE ).EQ. 0 ) + STOP 'Error: не могу определить графическую моду монитора' c определение числа точек на мониторе dummy=setvideomode($DEFAULTMODE) ! убрать графический режим write(*,*) ' Число точек на мониторе' write(*,*) 'По оси х',maxx write(*,*) 'По оси y',maxy 7.2. Изображение графических элементов Процедуры графической библиотеки компилятора языка Фортран позволяют рисовать геометрические фигуры, используя задаваемую пользователем систему координат. Они используют заданные атрибуты: стиль изображения линий, маску заполнения цветом, цвет фона и цвет изображения.

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

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

Dummy=arc(x1,y2,x2,y2,x3,y3,x4,y4) Процедуры arc выполняют рисование эллиптических дуг.

Центр дуги есть центр ограничивающего прямоугольника, определяемого точками (x1,y1) для левого верхнего угла и (x2,y2) для правого нижнего. Дуга начинается в точке ее пересечения с вектором, определяемым точкой (x3,y3), и заканчивается в точке пересечения с вектором, определяемым точкой (x4,y4).

Дуга рисуется с использованием текущего цвета. Поскольку дуга не определяет замкнутую область, то она не заполняется цветом.

Пример: программа, которая рисует текущим цветом дугу на экране.

status = setvideomode( $MRES16COLOR ) status = arc( 80, 50, 240, 150, 80, 50, 240, 150 ) READ( *, * ) ! Нажать ENTER для выхода из графического режима status = setvideomode( $DEFAULTMODE ) Dummy= lineto(x,y) Функция lineto рисует линию из текущей позиции до заданной точки (x,y). Линия рисуется с использованием текущего цвета и стиля изображения.

При отсутствии ошибок функция lineto устанавливает текущую позицию в точку (x,y).

7.2.3. Изменение текущей позиции. MOVETO Call moveto(x1,y1,xy) Функция moveto выполняет перемещение без рисования из текущей позиции в заданную точку (x1,y1).

Функция moveto возвращает координаты предыдущей позиции в виде структуры xycoord, определенной в файле fgraph.fd.

Функция moveto часто используется в паре с функцией lineto.

Пример: Подпрограмма, которая рисует линию из точки с координатами (x1,y1) до точки с координатами (x2,y2).

subroutine line(x1,y1,x2,y2) call moveto(int2(x1),int2(y1),xy) dummy=lineto(int2(x2),int2(y2)) Dummy= ellipse(control, x1,y2,x2,y2) Функция ellipse выполняет процедуру рисования эллипса.

Ограничивающая линия отображается текущим цветом. Центр эллипса это центр ограничивающего прямоугольника, определяемого точками (x1,y2) для левого верхнего угла и (x2,y2) для правого нижнего.

Параметр control может быть одной из символьных констант:

$GFILLINTERIOR - Заполнение эллипса текущим цветом с использованием текущей маски заполнения.

$GBORDER - Рисование только контура эллипса.

7.2.5. Рисование прямоугольника. RECTANGLE Dummy= rectangle(control,x1,y1,x2,y2) Функция rectangle выполняет рисование прямоугольника определяемого точками (x1,y1) - для левого верхнего угла и (x2,y2) - для правого нижнего.

Параметр control аналогичен описанному ранее для процедуры ellipse.

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

Call clearscreen(area) Процедура clearscreen очищает экран, заполняя ее цветом фона (текущим).

Параметр area может быть одной из следующих символических констант (определенных в файле fgraph.fd):

$GCLEARSCREEN - Очистка и заполнение цветом всего экрана.

$GVIEWPORT - Очистка только текущей области просмотра.

$GWINDOW - Очистка только текущего текстового окна.

Пример: Рисуется прямоугольник, потом экран очищается и другим цветом рисуется эллипс.

IF( setvideomode( $MAXRESMODE ).EQ. 0 ) + STOP 'Error: не могу определить графическую моду монитора ' dummy = rectangle( $GFILLINTERIOR, 10, 10, 200, 100) read(*,*) !Ждать нажатия ENTER call clearscreen($GCEARSCREEN) dummy = ellipse( $GFILLINTERIOR,10,10, 200,100) call clearscreen($GCEARSCREEN) 7.2.7. Рисование многоугольника. POLYGON dummy= polygon(control, lppoints,cpoints) Функция выполняет рисование многоугольника, координаты точек которого заданы в структуре lppointds.

RECORD /xycoord/ lppoints(*) Параметр cpoints задает число точек многоугольника.

Параметр control аналогичен описанному ранее для процедуры ellipse.

Пример: Нарисуем на экране 16 звездочек и раскрасим их разными цветами.

integer*2 dummy,height,width,yc,xc,side RECORD /videoconfig/ vc IF( setvideomode( $MAXRESMODE ).EQ. 0 ) CALL getvideoconfig( vc ) poly(side).xcoord = xc+INT2( COS( side*rad ) *r ) poly(side).ycoord = yc+INT2( SIN( side*rad ) *r ) status = polygon( $GFILLINTERIOR, poly, 5 ) dummy=setvideomode($DEFAULTMODE) Dummy=pie(control, x1, y1, x2, y2, x3, y3, x4, y4) Процедура pie выполняет рисование выреза фигуры эллипса.

Центр эллиптической дуги есть центр ограничивающего прямоугольника, определяемого точками (x1,y1) для левого верхнего угла и (x2,y2) для правого нижнего. Дуга начинается в точке ее пересечения с вектором, определяемым точкой (x3,y3), и заканчивается в точке пересечения с вектором, определяемым точкой (x4,y4).

Вырез рисуется с использованием текущего цвета.

Параметр control может быть одной из символьных констант:

$GFILLINTERIOR - заполнение выреза текущим цветом с использованием текущей маски заполнения.

$GBORDER - рисование только контура выреза.

Пример: Рисуется контур выреза.

status = setvideomode( $MAXRESMODE ) status = pie( $gborder,80, 50, 240, 150, 80, 50, 240, 150 ) status = setvideomode( $DEFAULTMODE ) 7.2.9. Закрашивание замкнутой области. FLOODFILL Dummy= floodfill(x,y,boundary) Функции заполняют цветом область, используя текущий цвет и маску заполнения. Функция floodfill начинает заполнение цветом в точке с координатами (x,y).

Если эта точка лежит внутри фигуры (круга эллипса, квадрата, многоугольника, замкнутой ломанной и т.д.), то внутренняя область заполняется цветом, иначе заданным цветом окрашивается фон. В случае применения процедуры floodfill для заполнения цветом замкнутой фигуры, нарисованной при помощи функции lineto, фигура должна быть нарисована с использованием шаблона «сплошной линии».

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

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

7.3.1. Установка цвета фона: SETBKCOLOR Dummy=setbkcolor(color) Функция setbkcolor возвращает текущий индекс цвета фона. По умолчанию принимается значение 0.

Функция setbkcolor устанавливает текущий цвет фона в соответствии со значением параметра цвета color.

Значение цвета фона задается символическими константами, определяемыми во включаемом файле fgraph.fd.

Например, setbkcolor($green) устанавливает цвет фона в графическом режиме в значение «зеленый». Указанные символьные константы реализованы для обеспечения удобства при определении и обработке наиболее часто используемых цветов.

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

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

INCLUDE 'FGRAPH.FI' INCLUDE 'FGRAPH.FD' RECORD /videoconfig/ vc IF( setvideomode( $MAXRESMODE ).EQ. 0 ) + STOP 'Error: не могу определить графическую моду монитора' CALL getvideoconfig( vc ) dummy = setbkcolor($blue) dummy = rectangle( $GFILLINTERIOR, 10, 10, 200, 100) call clearscreen($GCEARSCREEN) dummy = setbkcolor($red) dummy = ellipse( $GFILLINTERIOR,10,10, 200,100) call clearscreen($GCEARSCREEN) Вообще названия цветов во многом совпадают с их английскими названиями.

Вот список цветов:

Темные цвета:

$BLACK -черный $BLUE - голубой $GREEN - зеленый $CYAN - циановый $RED - красный $MAGENTA - фиолетовый $BROWN- коричневый $WHITE - белый $GRAY - серый Соответствующие светлые цвета:

$LIGHTBLUE $LIGHTGREEN $LIGHTCYAN $LIGHTRED

$LIGHTMAGENTA

$YELLOW - желтый

$BRIGHTWHITE

7.3.2. Установка шаблона для рисования линии. SETLINESTYLE Call setlinestyle(mask) Тип или способ изображения линии (сплошная, пунктир и т.д.).

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

Маска представляет собой 16-разрядное число, в котором каждый бит представляет элемент изображения в рисуемой линии. Если разряд установлен в значение 1, то соответствующий элемент изображения устанавливается в цвет линии (текущий цвет). Если бит равен 0, элемент изображения остается без изменений. Маска действительна по всей длине линии. По умолчанию принимается маска #FFFF - сплошная линия.

Примеры шаблонов рисования линий:

#FFFF — сплошная линия (двоичный вид этого числа 1111 1111 #FFOO — длинные штрихи (1111 1111 0000 0000) #FOFO — короткие штрихи (1111 0000 1111 0000 ) Вообще возможен выбор любой комбинации 1 и 0. Шестнадцатиразрядное двоичное число также может быть представлено как 16-разрядное или десятичное число.

Пример: шестнадцатеричная константа #AA3C эквивалентна двоичному представлению 1010 1010 0011 1100. Однако возможно использовать десятичное значение 48580. Т.к. #AA3C=10 163 + 10 162 + 3 161 + 12 160 = 48580.

Пример: Изображение прямоугольника пунктирными линиями.

+ STOP 'Error: не могу определить графическую моду монитора' dummy = rectangle( $Gborder, 10, 10, 200, 100) 7.3.3. Установка маски заполнения. SETFILLMASK Call setfillmask(mask) Процесс раскрашивания графических фигур контролируется при помощи текущей маски заполнения цветом.

Процедура setfillmask устанавливает текущую маску заполнения цветом.

Маска представляет собой массив размером 8х8, где каждый разряд (бит) представляет элемент изображения (пиксель).

Установка бита в значение 1 окрашивает пиксель в текущий цвет, а значение 0 оставляет пиксель без изменения. Маска повторяется для всей закрашиваемой области. Если маска заполнения не установлена или параметр mask в качестве всех значений имеет нули, то при операциях заполнения используется только текущий цвет.

Если маска не установлена, то используется только текущий цвет.

Пример: 4 раза перерисовывается прямоугольник с использованием различных масок заполнения.

IF( setvideomode( $MAXRESMODE ).EQ. 0 ) + STOP 'Error: не могу определить графическую моду монитора' dummy = rectangle( $Gfillinterior, 10, 10, 200, 100) call clearscreen($GCEARSCREEN) Следующие процедуры обеспечивают вывод на экран текста как в графическом, так и в текстовом режимах.

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

Call outtext(text) Процедура outtext отображает строку текста text на экран. Эта процедура работает в любом экранном режиме.

Текст выводится начиная с текущей позиции курсора. Возвращаемое значение отсутствует.

Пример. Рисуется и подписывается прямоугольник, затем экран очищается и рисуется и подписывается эллипс.

IF( setvideomode( $MAXRESMODE ).EQ. 0 ) + STOP 'Error: не могу определить графическую моду монитора' dummy = rectangle( $GFILLINTERIOR, 50, 50, 300, 200) c Вывод текста в текущей позиции CALL outtext( 'Прямоугольник' ) call clearscreen($GCEARSCREEN) dummy = ellipse( $GFILLINTERIOR,10,10, 200,100) call clearscreen($GCEARSCREEN) dummy=setvideomode($DEFAULTMODE) ! убрать графический режим 7.4.2. Получение текущей позиции вывода текста. GETTEXTPOSITION.

Установка текущей позиции вывода текста. SETTEXTPOSITION Oldposition=gettextposition() Call settextposition(row,column,rccoord) Функция gettextposition возвращает текущую позицию вывода текста в виде структуры rccoord, определенной в файле fgraph.fd.

Текстовая позиция с координатами (1,1) определяется как верхний левый угол текстового окна.

Функция settextposition выполняет переразмещение текущей позиции текста, выводимого при помощи outtext, для отображения символа в точке с координатами (row,column).

Предыдущая текстовая позиция возвращается в виде структуры rccoord, определенной в файле fgraph.fd.

При использовании write одновременно с графическими процедурами settextposition и outtext возможны конфликты.

Пример: Аналогичен примеру 1, но подпись «прямоугольник» пишется на первой строке, со второй позиции, а подпись «эллипс» пишется на 20-й строке с 5-й позиции.

INCLUDE 'FGRAPH.FI' INCLUDE 'FGRAPH.FD' RECORD /videoconfig/ vc IF( setvideomode( $MAXRESMODE ).EQ. 0 ) + STOP 'Error: не могу определить графическую моду монитора' CALL getvideoconfig( vc ) dummy = rectangle( $GFILLINTERIOR, 50, 50, 300, 200) CALL settextposition( 1,2, curpos ) CALL outtext( 'Прямоугольник' ) call clearscreen($GCEARSCREEN) dummy = ellipse( $GFILLINTERIOR,10,10, 200,100) CALL settextposition( 20,5, curpos ) CALL outtext( 'Эллипс' ) call clearscreen($GCEARSCREEN) dummy=setvideomode($DEFAULTMODE) ! убрать графический режим 7.4.3. Получение индекса текущего цвета текста. GETTEXTCOLOR. Установка цвета вывода текста. SETTEXTCOLOR Oldfgr=gettextcolor() Функция gettextcolor возвращает индекс текущего цвета.

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

Функция settextcolor устанавливает текущий цвет текста.

Dummy=settextcolor(index) где index - новый индекс текста (по умолчанию он соответствует максимальному индексу цвета).В цветном режиме index[0:31], где цвета со значениями от 0 до 15 интерпретируются как нормальные, а от16 до 31 - как мерцающие цвета (с номерами от 0 до 15).

Функция settextcolor устанавливает текущий цвет текста, выводимого при помощи outtext. Она не оказывает воздействие на цвет текста, выводимого оператором write или процедурой outgtext.

Пример: Аналогичен предыдущему примеру, но подпись «прямоугольник» и подпись «эллипс» пишутся разными цветами.

RECORD /videoconfig/ vc IF( setvideomode( $MAXRESMODE ).EQ. 0 ) + STOP 'Error: не могу определить графическую моду монитора' dummy = rectangle( $GFILLINTERIOR, 50, 50, 300, 200) CALL settextposition( 1,2, curpos ) dummy=settextcolor(10) CALL outtext( 'Прямоугольник' ) call clearscreen($GCEARSCREEN) dummy = ellipse( $GFILLINTERIOR,10,10, 200,100) CALL settextposition( 20,5, curpos ) dummy=settextcolor(12) call clearscreen($GCEARSCREEN) dummy=setvideomode($DEFAULTMODE) ! убрать графический режим Перечисленные процедуры не обеспечивают возможностей форматирования текста. Если пользователю необходимо распечатать целые значения или значения с плавающей точкой, он должен выполнить преобразование значений в строку (используя внутренний оператор write) перед тем, как будет вызвана одна из указанных процедур. Текстовые процедуры специфицируют все позиции на экране в символьных координатах строк и столбцов.

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

Символы могут быть нарисованы одним из двух способов: как «битовые»

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

Битовые шрифты не могут быть масштабированы, (т.е. уменьшены или увеличены с произвольным коэффициентом масштаба). Векторные шрифты могут быть масштабированы.

В графической библиотеке компилятора языка Фортран реализовано основных шрифтов.

шрифта жение Замечание: Размер битовых шрифтов задается в размерах элементов изображения. Точный размер любого символа шрифта зависит от разрешения экрана и типа дисплея.

Данные для шрифтов содержатся в файлах с расширениями.fon, Имя файла указывает на его содержание. Файлы.fon тождественны файлам.fnt, используемым в операционной среде Microsoft Windows. Если пользователь работает в указанной среде, то он может использовать любой из файлов с расширением.fnt для работы с функциями шрифтов компилятора Фортран.

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

Выбрать шрифт (см. registerfonts) Установить текущий шрифт из регистра (см. setfont) Отобразить текст, используя текущий установленный шрифт (см.

outgtext).

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

7.5.1. Регистрация доступных шрифтов. REGISTERFONTS Dummy=registerfonts(filename) Шрифты, которые будут использоваться в программе, должны быть размещены в памяти. Этот процесс называется регистрацией шрифтов. Регистрационный список предоставляет информацию о доступных.fon - файлах.

Операция реализуется процедурой registerfonts.

Функция registerfonts выполняет инициализацию шрифтов графической библиотеки.

Параметр filename - это спецификация пути и имя файла с расширением.fon.

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

В случае успеха возвращается положительное значение, в противном случае возвращается отрицательное значение.

7.5.2. Установка текущего шрифта. SETFONT Dummy=setfont(options) Функция setfont выполняет поиск единственного шрифта из набора зарегистрированных, имеющего характеристики, заданные строкой options.

Параметр Имя шрифта (Одно из следующих: courier, helv, tms, rmn, Hy Высота символа. При этом y есть число, определяющее значение высоты в элементах изображения (пикселях).

Wx Ширина символа. Где x - число пикселей.

F Выбор шрифта с Шрифт с фиксированной разрядкой.

P Выбор шрифта с пропорциональной разрядкой.

V Выбор только векторного шрифта.

R Выбор только битового шрифта.

B Выбор наиболее подходящего шрифта, который в большей мере соответствует заданным пользователем характеристикам, при этом используется следующая последовательность критериев (в порядке приоритета): 1) высота символов шрифта; 2) начертание шрифта; 3)ширина символов шрифта;4) разрядка шрифта.

Nx Выбор шрифта с номером x, где x номер зарегистрированного процедурой registerfonts шрифта.

Если шрифт найден, он устанавливается как текущий шрифт.

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

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

Пользователь может задать любое количество параметров, исключая параметр nx, который следует использовать как единственный параметр.

При задании взаимно исключающих параметров (например f/p или r/v) функция setfont игнорирует их.

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

Функции работы со шрифтами оказывают воздействие только на вывод с использованием процедуры outgtext.

При успешном завершении возвращается значение 0, иначе 1.

7.5.3. Вывод текста с использованием шрифта. OUTGTEXT Call outgtext(text) Процедура outgtext отображает строку текста text на экран с использованием текущего шрифта в текущей графической позиции и текущим цветом.

Форматирование текста не выполняется. После вывода текста процедура outgtext изменяет текущую графическую позицию.

Данная процедура выполняется только в графическом режиме. Цвет текста устанавливается функцией setcolor.

7.5.4. Отключение шрифтов. UNREGISTERFONTS Call unregisterfonts() Процедура unregisterfonts освобождает память, ранее выделенную с использованием процедуры registerfonts.

Любая попытка использовать функции setfont или outgtext после вызова функции unregisterfonts вызывает ошибку.

Приведем теперь пример использования этих функций.

Пример: Вывести слова Text на экране 6-ю разными шрифтами.

DATA options / "t'courier'", "t'helv'", "t'tms rmn'", c Выполняется регистрация шрифтов (при этом файл со шрифтом c должен находится в одной директории с программой) if( registerfonts( '*.FON' ). lt. 0 ) IF( setvideomode( $MAXRESMODE ).EQ. 0 ) + STOP 'Error: Не могу установить графический режим' c Вывод слова Text на экране 6-ю разными шрифтами call clearscreen( $GCLEARSCREEN ) list = options(ifont) // 'h30w24b' c Устанавливается один из 6-ти стандартных шрифтов, c заданных в массиве options с высотой символа - 30 пикселей (h30) шириной - 24 (w24), с выбором наиболее подходящего шрифта (параc IF( setfont( list ).GE. 0 ) THEN CALL moveto(10, ifont*35, xy ) CALL outgtext("Text") c Отключение шрифтов и освобождение отведенной под них памяти CALL unregisterfonts() dummy = setvideomode( $DEFAULTMODE ) В цикле устанавливается один из 6-ти стандартных шрифтов, заданных в массиве options, с его использованием пишется слово Text, затем выбирается другой шрифт и т.п.

Замечание: Обратите внимание, что текущая позиция изменяется с помощью функции moveto.

Приведем еще несколько функций для работы со шрифтами:

7.5.5. Получение информации о шрифте. GETFONTINFO Dummy=getfontinfo(fi) Функция getfontinfo устанавливает характеристики текущего шрифта в структуре fontinfo, определенной в файле fgraph.fd.

Структура fontinfo имеет вид:

STRUCTURE/ fontinfo/ INTEGER*2 type !Векторный (1) или битовый (0) INTEGER*2 ascent !Расстояние от верха до базы INTEGER*2 pixwidth !Ширина символа в пикселях INTEGER*2 pixheight !Высота символа в пикселях INTEGER*2 avgwidth !Средняя ширина символа CHARACTER*81 filename !Имя файла шрифта CHARACTER*32 facename !Имя шрифта

END STRUCTURE

Во многом эта функция похожа на функцию getvideoconfig.

7.5.6. Получение ширины заданного текста. GETGTEXTEXTENT Dummy=getgtextextent(text) Функция getgtextextent возвращает значение ширины поля в пикселях, требуемое для вывода строки text текущим шрифтом с использованием процедуры outgtext.

Использование этой функции целесообразно при использовании шрифтов с пропорциональной разрядкой.

Возвращается значение ширины строки текста в пикселях.

Пример: Различными шрифтами печатаются их названия.

Функции getfontinfo и getgtextextent используются для размещения надписи в центре экрана.

program ffonts include 'fgraph.fd' character*11 face(nfonts) character*10 options(nfonts) RECORD /videoconfig/ vc RECORD /xycoord/ xy RECORD /fontinfo/ fi DATA face / "Courier", "Helvetica", "Times Roman", DATA options / "t'courier'", "t'helv'", "t'tms rmn'", + "t'modern'", "t'script'", "t'roman'" / call clearscreen( $GCLEARSCREEN ) if( registerfonts( '*.FON' ). lt. 0 ) stop 'Error: cannot find font files' IF( setvideomode( $MAXRESMODE ).EQ. 0 ) STOP 'Error: Не могу установить графическую моду' CALL getvideoconfig( vc ) DO ifont = 1, NFONTS list = options(ifont) // 'h30w24b' CALL clearscreen( $GCLEARSCREEN ) IF( setfont( list ).GE. 0 ) THEN x = (vc.numxpixels-getgtextextent(face( ifont))) / IF( getfontinfo( fi ).NE. 0 ) THEN CALL outtext( 'Error: cannot get font info' ) y = (vc.numypixels - fi.ascent) / IF( vc.numcolors.GT. 2 ) dummy = setcolor( ifont ) CALL outgtext( face(ifont)) CALL outtext( 'Error: cannot set font' ) READ (*,*) END DO CALL unregisterfonts() dummy = setvideomode( $DEFAULTMODE ) Замечание: Все функции работы со шрифтами оказывают воздействие только на вывод с помощью функции outgtext.

Dummy=settextcursor(attr) Функция settextcursor устанавливает форму курсора в текстовом режиме в зависимости от значения параметра attr.

Пример. Написать программу, которая в текстовом режиме очищает экран, выводит по главной диагонали букву L и номер строки, затем поменять направление и продолжить вывод на побочной диагонали, а затем поменять вид курсора.

DATA face / "Courier", "Helvetica", "Times Roman", DATA options / "t'courier'", "t'helv'", "t'tms rmn'", call clearscreen( $GCLEARSCREEN ) if( registerfonts( '*.FON' ). lt. 0 ) IF( setvideomode( $MAXRESMODE ).EQ. 0 ) + STOP 'Error: cannot set graphics mode' list = options(ifont) // 'h30w24b' CALL clearscreen( $GCLEARSCREEN ) x = (vc.numxpixels-getgtextextent(face( ifont))) / y = (vc.numypixels - fi.ascent) / IF( vc.numcolors.GT. 2 ) dummy = setcolor( ifont ) CALL outtext( 'Error: Не могу найти шрифт' ) CALL unregisterfonts() dummy = setvideomode( $DEFAULTMODE ) Для выполнения простых, учебных программ можно воспользоваться командой FL name.for name1.for … namen.for где name.for, name1.for, …, namen.for имя файлов, в которых находится основная программа (name.for) и все подпрограммы пользователя (namei.for i=1, 2, …, n), необходимые для работы данной основной программы. Такая команда производит компиляцию основной программы и подпрограмм, при этом получаются одноименные файлы с расширением obj и один файл name.exe. Это объектные файлы, т.е. программы и подпрограммы, написанные на машинном языке, и выполняемый файл. Для больших программ требуется большое количество файлов, что требует существенного времени для компиляции программ. В этом случае все файлы, необходимые для программы, компилируют отдельно с параметром –c, записывая их объектные модули в библиотеку, или просто в какую либо директорию, а затем при помощи специальной программы LINK создают выполняемую программу с расширением exe. Для включения многих подпрограмм в один файл библиотечного типа используется программа обслуживания библиотек LIB.

В данном разделе рассматриваются опции команды компилятора FL, линковщика LINK и библиотекаря LIB.

Опции команды fl дают пользователю следующие возможности:

— установка модели памяти;

— выбор способа выполнения операций над числами с плавающей точкой;

— управление допустимыми свойствами языка Фортран;

— создание программ, исполняемых в среде операционной среды OS/2;

— оптимизация программ для минимизации размера занимаемой области памяти или максимизации скорости исполнения программ;

— автоматическое ассемблирование и компоновка процедур, написанных на машинном языке;

— создание путей поиска для файлов;

— переключение предупреждающих сообщений об ошибках компилятора;

— выбор формата страниц и заголовков для выходных листингов.

На самом деле для запуска процесса компиляции программы, написанной на Фортране, со стандартным расширением (.for) достаточно в командной строке написать следующее:

Fl name.for Где name.for — тот файл, который вы хотите откомпилировать.

В итоге вы, если в программе были ошибки или помарки, получите сообщения об ошибках, их характере, номере строки, где они встретились, и т.д.

Если же ошибок не найдено это не значит, что их нет. Логические ошибки, ошибки типа бесконечного цикла и т.п. вполне могут быть. В связи с этим, обращайте внимание на замечания (warning). После компиляции вы получаете выполняемый файл с расширением.exe и объектный файл с расширением.obj.

Если вы компилируете программу, где используются графические функции, то надо в командной строке написать следующее:

Fl name.for graphics.lib Замечание: Если вы имеете дело с более поздней версией Фортрана, например компилятора Microsoft Workstation, то в командной строке пишется:

Fl32 name.for Если вы компилируете программу, где используются нестандартные функции, объектные коды которых находятся в какой-то библиотеке (или библиотеках), то надо в командной строке написать следующее:

Fl name.for list_of_librares Где list_of_librares —список используемых программой библиотек, разделенных пробелами или запятыми.

В ряде случаев все же требуется нечто более сложное. Ниже приведены наиболее важные возможности компиляции.

Команда fl имеет следующий обобщенный формат:

FL[..][..>[.. ] [ /link[][linkoptions] ][ /MA ] Замечание: В квадратных скобках [ ] здесь и далее находятся необязательные аргументы, которые можно опустить.

Замечание: Если некоторое синтаксическое предложение не умещается на одной строке, оно продолжается на 2-й, 3-ей и т.д. строках.

Каждый параметр является одним из описываемых ниже параметров; каждое «описание файла» именует обрабатываемый файл.

В командной строке можно указать сколько угодно параметров и имен файлов; но при этом длина строки не должна превышать 128 литер.

Можно обрабатывать сразу группу файлов, имеющих требуемое расширение имени, используя для этого символы универсального сопоставления DOS.

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

Каждому параметру предшествует символ слэш(/) за которым следует одна или несколько букв. Вместо символа /, можно использовать дефис (-). Например, /I и –I являются допустимыми формами представления параметра I.

В тексте данного руководства при описании параметров используется /, хотя в сообщениях об ошибках применяется дефис.

Замечание: Несмотря на то что имена файлов могут задаваться и строчными и прописными буквами, параметры следует задавать, учитывая регистр букв. Например: запись параметра в виде /Zd является правильной, а запись в виде /ZD или /zd неверна.

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

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

Рассмотрим один наиболее важный параметр.

8.1.1. Получение справочной информации (параметр /help или /HELP) При указании параметра /HELP возможно получение списка наиболее часто используемых параметров языка Фортран.

Для функционирования данного параметра, файл fl.hlp, содержащий описание всех параметров языка Фортран, должен находиться в текущем каталоге или присутствовать в описании пути в переменной PATH.

Спецификация данного параметра не зависит от регистра букв. При его записи допустима любая комбинация прописных и строчных букв.

При указании параметра /HELP в командной строке fl будет выдан список всех параметров. Никаких других действий выполняться не будет (даже если командная строка содержит какую-либо информацию).

8.1.2. Выполнение операций с плавающей точкой (/FP) Следующие параметры предназначены для описания того, как программа пользователя осуществляет управление и обработку операций над числами с плавающей точкой.

/FPi— генерация встроенных инструкций и выбор математического пакета эмуляции.

8.1.3. Специфические параметры управления синтаксисом файлов исходных программ (/4Y, /4N) При использовании этого параметра можно запрещать или разрешать использовать расширения стандарта Фортран 77. Буква Y указывает на разрешение параметра, а буква N на его запрещение. Параметры /4 могут быть составными. Например, параметр /4Ysfb запрещает все расширения языка Фортран фирмы Microsoft, разрешает ввод в свободном формате и разрешает режим расширенного управления ошибками. Следует отметить, что группы параметров Y и N должны указываться как отдельные параметры командной строки; они не могут «смешиваться» в один параметр.

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

Параметр /4[Y,N]f — разрешает (/4Yf) или запрещает (/4Nf) использование свободного формата.

В программах, написанных в свободном формате можно не использовать оператор $freeform. При этом в команде для компиляции необходимо указать параметр /4Yf.

8.1.4. Именование объектного файла (параметр /Fo) По умолчанию в команде fl каждому объектному файлу назначается то же «базовое» имя, что и имя соответствующего исходного файла, плюс расширение.obj. Параметр /Fo позволяет задавать объектному файлу некоторое другое имя или создавать его в другом каталоге.

Аргумент должен следовать сразу за параметром, без пробелов.

Этот файл может быть спецификацией файла, именем устройства или спецификацией пути. Если аргумент является спецификацией файла, то параметр \Fo относится только к исходному файлу, следующему в командной строке сразу за параметрами. Объектный файл, создаваемый при компиляции данного исходного файла, имеет имя, задаваемое аргументом.

Если аргумент является именем устройства или спецификацией пути, то команда fl создает объектные файлы в заданном каталоге или устройстве. Для объектных файлов используются имена, принимаемые по умолчанию. Т.е. каждый объектный файл имеет «базовое» имя, соответствующее «базовому» имени исходного файла.

Замечание: Когда пользователь задает только спецификацию пути, тогда аргумент должен оканчиваться символом обратного слэша (\).

8.1.5. Компиляция без компоновки (параметр /c) Параметр /c (иногда он называется “только компиляция”) запрещает выполнение процедуры компоновки, т.е. получения готовой к выполнению программы. Параметр /c относится ко всей командной строке FL, независимо от того, в каком ее месте он указывается.

8.1.6. Создание файла листинга (параметр /Fs) В команде fl допустимы ряд параметров, используемых для получения файла листинга.

Параметр /Fs[] используется для получения листинга исходной программы.

Имя расширения файла, принимаемое по умолчанию, будет.lst.

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

8.2. Создание и модификация библиотек объектных модулей Пользователь может создавать свои собственные библиотеки объектных модулей и в дальнейшем использовать функции из них, аналогично использованию библиотеки graphics.lib.

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

Команда lib имеет следующий синтаксис:

Lib oldlib[/PAGESIZE:number][commands][,[listfile][,newlib]]][;] Где параметры имеют следующий смысл:

Oldlib — имя библиотеки (существующей или создающейся). Если такой библиотеки нет, то на экране появится надпись:

Library file does not exist. Create?

И необходимо нажать клавишу “У”, если вы хотите создать новую библиотеку, или “n”, чтобы прекратить работу команды lib.

По умолчанию библиотечные файлы имеют расширение.lib.

/P[AGESIZE]:number— опция, задающая размер страниц для размещения модулей в библиотеке. Number—целое число, представляющее степень 2 в пределах от 2 до 32768. При меньшем размере страницы библиотека получается более компактной, но при этом размер библиотеки не должен превышать number*65536 байт. По умолчанию number=16. При этом размер библиотеки не должен превышать 1Мб.

Commands—командные символы для манипуляции объектными модулями. Возможны следующие командные символы:

+ — добавление модуля в библиотеку. Также может использоваться для слияния библиотек. В этом случае за командой “+” должно следовать имя библиотеки.

- — удаление указанного модуля из библиотеки. Имя модуля не должно содержать расширений и имени директории.

-+ — замена указанного модуля. Модуль должен находиться в рабочей директории. Расширение модуля указывается (должно быть.obj).

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

-* — перемещение модуля из библиотеки в объектный файл. Дает тот же эффект, что и последовательное выполнение команды lib с командными символами «*» и «-».

Замечание: Все эти команды вы сможете увидеть, если в командной строке напишете: lib – без всяких аргументов или lib /h.

Listfile — создает файл, содержащий информацию о библиотеке.

Команда lib не предполагает какого-либо расширения для данного файла, и, если не указано расширение, будет создан файл без расширения.

Newlib — задает имя библиотеки, создаваемой при модификации существующей библиотеки. Если имя не задано, то по умолчанию принимается имя существующей библиотеки. При этом фактически создается новая библиотека, а старая переименовывается, получая расширение.bak.

Приведем простейшие примеры работы с библиотекой.

Пример 1. Необходимо создать новую библиотеку из 4 подпрограмм или подпрограмм-функций пользователя.

Пусть три подпрограммы и одна подпрограмма-функция имеют следующие имена: Sub1, Sub2, Sub3, Fun и находятся в файлах с соответствующими именами с расширением for.

Тогда необходимо подать команды Fl –c Sub1.for Sub2.for Sub3.for Fun.for Lib Mylib.lib + Sub1 Sub2 Sub3 Fun;

Первая команда компилирует три исходных файла (файла на алгоритмическом языке) и получает три объектных файла (файла на машинном языке).

Вторая команда создает (если не было) личную библиотеку пользователя с именем Mylib.lib и записывает в нее четыре объектных модуля Sub1.obj Sub2.obj Sub3.obj Fun.obj.

Если какой то модуль необходимо доработать и перезаписать в библиотеке, то подается команда Lib с параметром -+.

Пример 2. Допустим, подпрограмму Sub2 надо перезаписать. Тогда подается команда:

Lib Mylib.lib -+ Sub2;

Пример 3. Программа Progr1 использует программные модули Sub1 Sub Sub3 Fun3 и находится в файле Progr1.for. Необходимо подать команды для создания выполняемого модуля Progr1.exe.

Fl Progr1.for Mylib.lib Команда компилирует основную программу Progr1.for и компонует ее в выполняемую программу. При компоновке программы, редактор автоматически выбирает требуемые функции и подпрограммы из библиотеки встроенных функций, а если какие-то модули там не находит, то ищет их в библиотеке Mylib.lib.

Для решения данной учебной задачи можно обойтись без создания библиотеки. Для этого подать команду:

Fl Progr1.for Sub1.for Sub2.for Sub3.for Fun.for Однако если в программе > 10 модулей, то лучше использовать библиотеки.

Для сборки всей объектных модулей и создания выполняемого файла наряду с командой fl можно применять редактор связей link.

Команда link имеет следующий формат:

Link objfiles,[,[exefile][,[mapfile][,[libfiles]]]][options][;] Objfiles—список объектных файлов, разделенных пробелами или знаком ”+”, Exefile — имя создаваемого выполняемого файла. Если это имя не указано, то по умолчанию имя файла будет совпадать с именем первого объектного файла и иметь расширение “.exe”.

Mapfile —имя файла для вывода карты памяти, т.е. размещения данных в памяти машины. По умолчанию предполагается пустой файл.

Libfiles— имена библиотек объектных файлов, в который будет производится поиск требуемых модулей. Имена библиотек также разделяются пробелом или знаком “+”. По умолчанию предполагается, что стандартные библиотеки Фортрана всегда добавляются в этот список.

Options— список опций команды link. Мы не будем их перечислять, а ограничимся только несколькими простыми примерами.

Пример 1. Пусть три подпрограммы и одна подпрограмма-функция имеют следующие имена: Sub1, Sub2, Sub3, Fun и находятся в файлах с соответствующими именами с расширением for. И в файле Progr1.for находится основная программа. Тогда можно откомпилировать все модули без компоновки командой Fl –c Progr1.for Sub1.for Sub2.for Sub3.for Fun.for Затем для компоновки всей программы подать команду Link Progr1+Sub1+Sub2+Sub3+Fun;

которая получит выполняемый модуль в файле Progr1.exe.

Если необходимо изменить только один программный модуль, допустим Sub2, то надо его изменить и заново подать команды:

Fl –c Sub2.for Link Progr1+Sub1+Sub2+Sub3+Fun;

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

Пример 2. Пример 1 оформить с использованием файла для списка объектных модулей.

Link @Progr1.lnk При этом в файле и именем Progr1.lnk поместить Progr1+Sub1+Sub2+Sub3+Fun;

1. Соловьев П.В. Fortran для персонального компьютера. – М.:

Арист, 1991 – 233с.

2. Брич З. С., Гулецкая О. Н., Капелевич Д.В. и др. Фортран 77 ЕС ЭВМ. – М.: Финансы и статистика, 1989.- 351с.

3. Самохин А.Б., Самохина А.С. Фортран и вычислительные методы. – М.: Русина, 1994. - 120с.

ОГЛАВЛЕНИЕ

ВВЕДЕНИЕ

1. ОБЩИЕ СВЕДЕНИЯ

1.1. Алфавит

1.2. Синтаксические единицы

1.3. Запись программы

1.3.1. Фиксированная форма записи программы

1.3.2. Свободная форма записи программы

1.4. Структура программы

1.5. Операторы и их классификация

2. ОСНОВНЫЕ ЭЛЕМЕНТЫ ЯЗЫКА

2.1. Типы данных

2.2. Константы

2.2.1. Арифметические константы

2.2.2. Логические константы

2.2.3. Текстовые константы

2.3. Переменные

2.3.1. Соглашение по умолчанию для описания типов переменных

2.3.2. Операторы описания типов переменных

2.4. Операции и выражения

2.4.1. Операции

2.4.1.1. Арифметические операции и выражения

2.4.1.2. Логические операции выражения

2.4.1.3. Текстовые выражения

2.5. Встроенные функции

2.5.1. Функции преобразования типов данных

2.5.2. Функции округления данных

2.5.3. Математические функции

2.5.4. Символьные функции

2.5.5. Битовые функции

2.5.6. Встроенные подпрограммы

3. ОСНОВНЫЕ ВЫПОЛНЯЕМЫЕ ОПЕРАТОРЫ

3.1. Операторы присваивания

3.2. Операторы управления

3.2.1. Оператор безусловного перехода

3.2.2. Логические операторы if

3.2.2.1. Простой if

3.2.2.2. Блочные операторы if

3.2.2.3. Укороченный блочный if

3.2.2.4. Блочный if

3.2.2.5. Составной блочный if

3.2.3. Оператор выбора

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

3.3.1. Перечисляемый цикл

3.3.2. Цикл с предусловием

3.3.3. Операторы CYCLE и EXIT

4. МАССИВЫ И СТРУКТУРЫ

4.1. Массивы переменных

4.1.1. Описание массива

4.2. Подстроки

4.3. Структуры

4.3.1. Оператор STRUCTURE

4.3.2. Оператор RECORD

4.4. Динамические массивы

4.4.1. Оператор ALLOCATE

4.4.2. Освобождение использованной памяти. Оператор DEALLOCATE

5. ОПЕРАТОРЫ ОРГАНИЗАЦИИ ФУНКЦИЙ И ПОДПРОГРАММ

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

5.2. Подпрограммы-функции

5.2.1. Оператор FUNCTION

5.2.2. Оператор RETURN

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

5.3. Подпрограммы

5.3.1. Оператор описания подпрограммы. SUBROUTINE

5.3.2. Оператор вызова подпрограммы. CALL

5.3.3. Примеры подпрограмм

5.3.4. Использование имен подпрограмм и подпрограмм-функций в качестве формальных операторов

5.3.5. Способы передачи формальных параметров

5.4. Общие области памяти

5.4.1. Оператор COMMON

5.4.2. Оператор эквивалентности. EQUIVALENCE

5.4.3. IEEE стандарт хранения чисел в ЭВМ

5.4.3.1. Целые переменные

5.4.3.2. Вещественные переменные

5.4.4. Оператор INCLUDE

6. ОПЕРАТОРЫ ВВОДА-ВЫВОДА

6.1. Оператор FORMAT

6.1.1. Спецификация I

6.1.2. Спецификация F

6.1.3. Спецификация E

6.1.4. Спецификация D

6.1.5. Спецификация L

6.1.6. Спецификация G

6.1.7. Спецификация A

6.1.8. Текстовые константы и управляющие символы

6.1.9. Группы спецификаций

6.1.10. Ввод-вывод массивов

6.1.11. Ввод-вывод, управляемый именованным списком. Оператор NAMELIST

6.2. Ввод-вывод с использованием файлов

6.2.1. Открытие и закрытие файлов. Операторы OPEN, CLOSE

6.2.2. Внутренние файлы

7. ГРАФИЧЕСКОЕ ПРОГРАММИРОВАНИЕ

7.1. Основные функции графического режима

7.1.1. Функции установки графического режима SETVIDEOMODE

7.1.2. Изображение точки на экране setpixel

7.1.3. Установка цвета пикселя

7.1.4. Получение конфигурации графической среды

GETVIDEOCONFIG

7.2. Изображение графических элементов

7.2.1. Рисование эллиптических дуг. ARC

7.2.2. Рисование линии. LINETO

7.2.3. Изменение текущей позиции. MOVETO

7.2.4. Рисование эллипса. ELLIPSE

7.2.5. Рисование прямоугольника. RECTANGLE

7.2.6. Очистка экрана. CLEARSCREEN

7.2.7. Рисование многоугольника. POLYGON

7.2.8. Рисование сектора эллипса. PIE

7.2.9. Закрашивание замкнутой области. FLOODFILL

7.3. Установка атрибутов фигур

7.3.1. Установка цвета фона: SETBKCOLOR

7.3.2. Установка шаблона для рисования линии. SETLINESTYLE

7.3.3. Установка маски заполнения. SETFILLMASK

7.4. Функции отображения текста

7.4.1. Вывод текста на экран. OUTTEXT

7.4.2. Получение текущей позиции вывода текста. GETTEXTPOSITION. Установка текущей позиции вывода текста. SETTEXTPOSITION

7.4.3. Получение индекса текущего цвета текста. GETTEXTCOLOR. Установка цвета вывода текста. SETTEXTCOLOR

7.5. Шрифты и текст

7.5.1. Регистрация доступных шрифтов. REGISTERFONTS

7.5.2. Установка текущего шрифта. SETFONT

7.5.3. Вывод текста с использованием шрифта. OUTGTEXT

7.5.4. Отключение шрифтов. UNREGISTERFONTS

7.5.5. Получение информации о шрифте. GETFONTINFO

7.5.6. Получение ширины заданного текста. GETGTEXTEXTENT

7.5.7. Установка формы текстового курсора

8. ВЫПОЛНЕНИЕ ПРОГРАММ

8.1. Опции команды FL

8.1.1. Получение справочной информации (параметр /help или /HELP)

8.1.2. Выполнение операций с плавающей точкой (/FP)

8.1.3. Специфические параметры управления синтаксисом файлов исходных программ (/4Y, /4N) 8.1.4. Именование объектного файла (параметр /Fo)

8.1.5. Компиляция без компоновки (параметр /c)

8.1.6. Создание файла листинга (параметр /Fs)

8.2. Создание и модификация библиотек объектных модулей

8.3. Редактор связей link

СПИСОК ЛИТЕРАТУРЫ

ОГЛАВЛЕНИЕ





Похожие работы:

«Год Тип Издательс Цена Цена Отрасль Шифр Автор(ы) Наименование издани Издания тао (руб.) (руб.) НАЧАЛЬНОЕ ПРОФЕССИОНАЛЬНОЕ ОБРАЗОВАНИЕ Автоматика и Автоматизация производства (металлообработка): Учебное ИЦ 560А Павлючков С.А. 2009 197,00 246,00 управление Рабочая тетрадь (2-е изд., стер.) пособие Академия Автоматика и Основы автоматизации производства (4-е изд., Учебное ИЦ 957A Пантелеев В.Н. 2012 302,00 377, управление стер.) учеб. пособие пособие Академия Автоматика и Основы автоматизации...»

«Допущено Cоветом Учебно методического объединения вузов России по образованию в области менеджмента в качестве учебного пособия по специальности Государственное и муниципальное управление Третье издание, переработанное МОСКВА 2010 УДК 351/354(075.8) ББК 60.561.32я73 П18 Рецензенты: Т.Т. Авдеева, заведующая кафедрой Организация и планирование местного развития Кубанского государственного университета, д р экон. наук, проф., В.Н. Попов, заведующий кафедрой Экономика и менеджмент Ставрополь ского...»

«Приложение 5Б: Рабочая программа специальной дисциплины Зарубежная методика обучения ИЯ ФЕДЕРАЛЬНОЕ ГОСУДАРСТВЕННОЕ БЮДЖЕТНОЕ ОБРАЗОВАТЕЛЬНОЕ УЧРЕЖДЕНИЕ ВЫСШЕГО ПРОФЕССИОНАЛЬНОГО ОБРАЗОВАНИЯ ПЯТИГОРСКИЙ ГОСУДАРСТВЕННЫЙ ЛИНГВИСТИЧЕСКИЙ УНИВЕРСИТЕТ Утверждаю Проректор по научной работе и развитию интеллектуального потенциала университета профессор З.А. Заврумов _2012 г. Аспирантура по специальности по специальности 13.00.02 Теория и методика обучения и воспитания (иностранные языки) отрасль...»

«Министерство образования омской области Казенное образовательное учреждение начального профессионального образования профессиональное училище №21 МЕТОДИЧЕСКИЕ РЕКОМЕНДАЦИИ ПО РАЗРАБОТКЕ И ОБОСНОВАНИЮ ПЛАНА-КОНСПЕКТА УРОКА ПРОИЗВОДСТВЕННОГО ОБУЧЕНИЯ ПО КОМПЛЕКСНОЙ ТЕМЕ Г.Омск 2011г 1 Содержание Введение..4 1.Проведение занятий по выполнению комплексных работ.5 2.План занятия производственного обучения.8 3.Алгоритм занятия..9 Заключение.. Список использованных источников. Приложения.. Печатается...»

«Справка о материально-техническом, учебно-методическом, информационно-техническом обеспечении образовательного процесса кабинетов начальных классов МБОУ СОШ № 48 г. Белгорода № Предмет Реализуе- Необходимое обеспе- Фактическая % п/п мая чение в соответствии оснащенность оснапрограмма с нареализуемой про- щенграммой ности Система Русский 1. 95% учебников язык 1.1. Библиотечный фонд (книгопечатная Начальная продукция) школа XXI века Учебно-методические 100% комплекты по русскому языку для 1-...»

«А.Л. ЧЕКИН МАТЕМАТИКА 2 КЛАСС Методическое пособие Под редакцией Р.Г. Чураковой МосКвА АКАдЕМКНИГА/УЧЕбНИК 2012 УДК 51(072.2) ББК 74.262.21 Ч-37 Чекин, А.Л. Ч-37 Математика [Текст] : 2 кл. : Методическое пособие / А.Л. Чекин; под. ред. Р.Г. Чураковой. – М. : Академкнига/Учебник, 2012. – 224 с. ISBN 978-5-49400-074-3 Методическое пособие разработано в соответствии с требованиями федерального государственного образовательного стандарта начального общего образования второго поколения и концепцией...»

«Министерство образования и науки Российской Федерации Государственное образовательное учреждение высшего профессионального образования Тамбовский государственный технический университет ГРАЖДАНСКАЯ ОБОРОНА И ЗАЩИТА ОТ ЧРЕЗВЫЧАЙНЫХ СИТУАЦИЙ Методические указания Тамбов Издательство ТГТУ 2005 ББК Ц69я73-5 Е302 Утверждено Редакционно-издательским советом университета. Рецензент Доктор технических наук, профессор Н. С. Попов Е302 Гражданская оборона и защита от чрезвычайных ситуаций: Метод. указ. /...»

«ИВАНОВСКИЙ ФАРМАЦЕВТИЧЕСКИЙ КОЛЛЕДЖ ИССЛЕДОВАТЕЛЬСКИЕ РАБОТЫ СТУДЕНТОВ Методические рекомендации по подготовке и написанию Иваново 2012 ИВАНОВСКИЙ ФАРМАЦЕВТИЧЕСКИЙ КОЛЛЕДЖ Ж. В. Брусочкина, И. Б. Горелова, Г. Л. Ершова ИССЛЕДОВАТЕЛЬСКИЕ РАБОТЫ СТУДЕНТОВ Методические рекомендации по подготовке и написанию Иваново 2012 Методические рекомендации предназначены для студентов и преподавателей Ивановского фармацевтического колледжа. Одобрены Цикловой методической комиссией гуманитарных,...»

«Научно-производственное предприятие Исток-Система А.Г. Михеев, Б.В. Ракитин, М.М. Трифонов Функциональная диагностика в гастроэнтерологии МЕДПРАКТИКА-М Москва, 2014 УДК 616.3-072.7 ББК 54.13 Ф 942 Михеев А.Г., Ракитин Б.В., Трифонов М.М. Функциональная диагностика в гастроэнтерологии. – М.: ИД МЕДПРАКТИКА-М, 2014. с. 28 Издание адресовано практическим врачам, терапевтам, гастроэнтерологам, хирургам-гастроэнтерологам, руководителям медицинских организаций, курсантам квалификационных и...»

«МОСКОВСКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ имени М.В. Ломоносова ФАКУЛЬТЕТ ВЫЧИСЛИТЕЛЬНОЙ МАТЕМАТИКИ И КИБЕРНЕТИКИ VII Международная научно-практическая конференция Современные информационные технологии и ИТ-образование СБОРНИК НАУЧНЫХ ТРУДОВ ТОМ 1 Под редакцией проф. В.А. Сухомлина Москва 2012 УДК [004:377/378](063) ББК 74.5(0)я431+74.6(0)я431+32.81(0)я431 С 56 Издание осуществлено при финансовой поддержке Российского фонда фундаментальных исследований (проект № 12-07-06081_г) Печатается по...»

«УДК 81'477 ЯЗЫКОВОЙ ОБРАЗОВАТЕЛЬНЫЙ ФАКТОР ОПРЕДЕЛЕНИЯ КОНСТРУКТИВНОЙ И ДЕСТРУКТИВНОЙ ПОЛИТИКИ В СОВРЕМЕННОЙ УКРАИНЕ С.В. Савойская, доктор наук в отрасли политологии, кандидат исторических наук, доцент кафедры политических наук Киевский национальный университет строительства и архитектуры, Украина Аннотация. В статье анализируется конструктивная и деструктивная языковая политика, которая проводится в отрасли образования в независимой Украине. Автор отмечает, что одно из главных мест в языковой...»

«Министерство транспорта и связи Украины _ Государственная администрация связи Одесская национальная академия связи им. А. С. Попова Кафедра коммутационных систем ПРОЕКТИРОВАНИЕ ТЕЛЕКОММУНИКАЦИОННЫХ СЕТЕЙ Учебное пособие Часть 1 Модуль 4.1 Проектирование телекоммуникационных сетей Одесса 2009 План УМИ 2009 г. Барабаш Т.Н., Соловская И.Н. Проектирование телекоммуникационных сетей: Учебное пособие. – Одесса: ОНАС, 2009. – 64 с. Учебное пособие предназначено для студентов дневной, заочной и...»

«В.Н. ВОЛЫНСКИЙ ТЕХНОЛОГИЯ КЛЕЕНЫХ УЧЕБНОЕ ПОСОБИЕ ДЛЯ ВУЗОВ МАТЕРИАЛОВ 2003 В.Н. Волынский ТЕХНОЛОГИЯ КЛЕЕНЫХ МАТЕРИАЛОВ (Учебное пособие) Рекомендовано Министерством образования Российской Федерации в качестве учебного пособия для студентов высших учебных заведений, обучающихся по специальности Технология деревообработки Архангельск ББК 37.130 + 37. В УДК (674.213:624.011.14) Волынский В.Н. Технология клееных материалов: Учебное пособие для вузов. (2-е изд., исправленное и дополненное)....»

«ПОЯСНИТЕЛЬНАЯ ЗАПИСКА Рабочая программа учебного курса Математика для 2 класса составлена на основе Примерной программы начального общего образования по математике образовательной области Математика и информатика (Стандарты второго поколения. – М.: Просвещение, 2011) и авторской программы курса Математикадля учащихся 1-4 классов общеобразовательных учреждений Истоминой Н.Б. (Истомина Н.Б. – Смоленск: Ассоциация 21 век, 2011 г.). Программа соответствует учебникам, рекомендованным Министерством...»

«МИНИСТЕРСТВО ОБРАЗОВАНИЯ И НАУКИ РОССИЙСКОЙ ФЕДЕРАЦИИ ВОПРОСЫ ОБРАЗОВАНИЯ И НАУКИ: ТЕОРЕТИЧЕСКИЙ И МЕТОДИЧЕСКИЙ АСПЕКТЫ Сборник научных трудов по материалам Международной научно-практической конференции 31 мая 2014 г. Часть 6 Тамбов 2014 УДК 001.1 ББК 60 В74 В74 Вопросы образования и наук и: теоретический и методический аспекты: сборник научных трудов по материалам Международной научно-практической конференции 31 мая 2014 г.: в 11 частях. Часть 6. Тамбов: ООО Консалтинговая компания Юком, 2014....»

«Рабочая программа по математике 3 класс Пояснительная записка Исходными документами для составления рабочей программы являлись: - Федеральный компонент государственного стандарта общего образования, утверждённый приказом Минобразования РФ № 1089 от 09.03.2004; - Федеральный базисный учебный план для среднего (полного) общего образования, утверждённый приказом Минобразования РФ №1312 от 05.03.2004; - Федеральный перечень учебников, рекомендованных (допущенных) Министерством образования к...»

«Государственное образовательное учреждение высшего профессионального образования Иркутский государственный медицинский университет Федерального агентства по здравоохранению и социальному развитию Кафедра фармакогнозии и ботаники Г. М. Федосеев, Е. Г. Горячкина КУРСОВЫЕ РАБОТЫ ПО ФАРМАКОГНОЗИИ Методические рекомендации для студентов Специальность Фармация, 3 курс По изучению дисциплины Фармакогнозия Иркутск ИГМУ 2010 УДК 615.322(075.8) ББК 52.821я73 Ф 32 Рекомендовано Факультетской методической...»

«В.И.ОВЧАРЕНКО КЛАССИЧЕСКИЙ И СОВРЕМЕННЫЙ ПСИХОАНАЛИЗ Программы курсов и спецкурсов (Электронная версия) А АНТОЛОГИЯ МИРОВОГО ПСИХОАНАЛИЗА УДК 159.9 ББК 88.8 О 35 Овчаренко Виктор Иванович О 35 Классический и современный психоанализ. Программы курсов и спецкурсов. М.: Академический проект, 2000. – 622 с. (Электронная версия с изменениями и дополнениями – 550 с.) ISBN 5-8291-0033-9 Первая в России представительная публикация программ различных учебных курсов и спецкурсов по классическому и...»

«Государственное образовательное учреждение высшего профессионального образования НИЖЕГОРОДСКАЯ ГОСУДАРСТВЕННАЯ МЕДИЦИНСКАЯ АКАДЕМИЯ Федерального агентства по здравоохранению и социальному развитию Фармацевтический факультет Кафедра фармацевтической химии и фармакогнозии ФАРМАКОГНОЗИЯ Рабочая программа и методические указания для студентов заочного отделения фармацевтического факультета Нижний Новгород 2007 УДК 615.1 Фармакогнозия: Рабочая программа и методические указания для студентов заочного...»

«Автономное учреждение среднего профессионального образования Ханты-Мансийского автономного округа-Югры Сургутский профессиональный колледж Выполнение расчетных работ по статистике Учебное пособие Сургут, 2012 1 Выполнение расчетных работ по статистике. Учебное пособие. - Сургутский профессиональный колледж. - 2012. Составитель: Т.Н. Масанина, преподаватель математики Учебное пособие предназначено для студентов, обучающихся по специальности 230115 Программирование в компьютерных системах. В...»






 
2014 www.av.disus.ru - «Бесплатная электронная библиотека - Авторефераты, Диссертации, Монографии, Программы»

Материалы этого сайта размещены для ознакомления, все права принадлежат их авторам.
Если Вы не согласны с тем, что Ваш материал размещён на этом сайте, пожалуйста, напишите нам, мы в течении 1-2 рабочих дней удалим его.