- •Содержание
- •Глава 1. Описание языка c ......................................................................... 5
- •Глава 2. Описание языка fortran ....................................................... 38
- •Глава 3. Решение задач на языках c и fortran ................................ 70
- •Глава 1. Описание языка c
- •1.1. Структура c-программы
- •1.2. Скалярные типы данных и константы, строковые константы
- •1.3. Описание скалярных переменных. Директива #define
- •1.4. Операции. Выражения
- •1.5. Стандартные математические функции
- •1.6. Ввод-вывод
- •Int printf ( строка формата [ , список вывода ] )
- •Int scanf ( строка формата , список ввода )
- •1.7. Метки, оператор goto, условные конструкции, оператор break, функция exit
- •If ( логическое выражение ) оператор/блок [ else оператор/блок ]
- •1.8. Циклические конструкции
- •1.9. Указатели, адресная арифметика
- •1.10. Массивы
- •1.11. Функции
- •1.12. Классы памяти. Общие правила описания. Оператор typedef
- •1.13. Строковые переменные, ввод-вывод строк, стандартные функции обработки строк. Функции проверки символов
- •Int sprintf(char* s,char* формат [ , список вывода ] )
- •1.14. Макроопределения
- •1.15. Внешние файлы
- •Int fclose(file* указатель на файл )
- •Int feof(file* файл )
- •1.16. Структуры, объединения, битовые поля
- •1.17. Динамическое распределение памяти
- •1.18. Графика
- •Глава 2. Описание языка fortran
- •2.1. Структура fortran-программы
- •2.2. Типы данных. Константы
- •2.3. Описание переменных, правила умолчания, операторы
- •Implicit тип ( буквы ) , ...
- •2.4. Оператор присваивания. Операции
- •2.5. Стандартные математические функции
- •2.6. Ввод-вывод
- •2.7. Оператор соntinue. Операторы перехода. Условные операторы
- •If (логическое выражение)оператор
- •If (арифметическое выражение)метка1,метка2,метка3
- •2.8. Операторы цикла
- •2.9. Функции loc, locfar, locnear
- •2.10. Массивы
- •2.11. Подпрограммы subroutine, function и interface
- •Intrinsic список имен
- •2.12. Общие области, подпрограмма block data. Оператор equivalence
- •2.13. Символьные переменные
- •2.14. Операторные функции
- •2.15. Внешние файлы
- •2.16. Структуры
- •2.17. Динамические массивы
- •2.18. Графика
- •Глава 3. Решение задач на языках c и fortran
- •Задача 1. Вывод натурального числа
- •Задача 2. Сумма ряда
- •Задача 3. Медленная сортировка
- •Задача 4. Быстрая сортировка
- •Задача 5. Слова
- •Задача 6. График
- •Задача 7. Кубическое уравнение
- •Задача 8. Собственное число
- •Комментарии к задачам
2.14. Операторные функции
Операторная функция записывается в виде:
имя(список параметров)=выражение
Она аналогична по своему назначению макроопределению в языке C. Операторную функцию можно рассматривать как подпрограмму-функцию, состоящую из одного оператора. Тип значения, вычисляемого операторной функцией, можно определить в операторе описания, сама операторная функция должна размещаться после операторов описания и перед выполняемыми операторами. Типы параметров операторной функции никак не определяются, что придает этому средству дополнительную гибкость.
2.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=формат)список ввода/вывода
Внутренние устройства используются для преобразования числа в строку и наоборот. Если в качестве устройства используется символьный массив, то каждый элемент массива считается записью. Можно использовать подстроку в качестве внутреннего устройства.
