- •Содержание
- •Глава 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.11. Подпрограммы subroutine, function и interface
В языке FORTRAN так же, как в языке PASCAL, есть подпрограммы-процедуры (SUBROUTINE) и подпрограммы-функции (FUNCTION). Оператор заголовка процедуры имеет вид:
SUBROUTINE имя процедуры(параметр[[атрибуты]][,...])
параметр - это или имя параметра (допускаются параметры - переменные, массивы и подпрограммы), или символ *. Тип параметра в операторе SUBROUTINE не указывается; если это необходимо, параметры описываются внутри процедуры. Процедура заканчивается оператором END и располагается вне любой другой подпрограммы и главной программы так же, как в языке C. Подпрограммы могут находиться в том же файле, что и главная программа, или в других файлах. Процедура вызывается в главной программе или в другой подпрограмме специальным оператором вызова CALL:
CALL имя(список аргументов)
Рекурсия в языке FORTRAN запрещена. Количество и типы аргументов в операторе CALL должны точно соответствовать количеству и типам параметров в операторе SUBROUTINE. Все параметры по умолчанию передаются в процедуры по адресу, это означает, что все действия над параметрами в процедуре фактически осуществляются над аргументами. Чтобы передать аргумент по значению, необходимо в операторе SUBROUTINE для соответствующего параметра задать атрибут VALUE. Атрибуты задаются в квадратных скобках после имени параметра. Параметр процедуры может быть массивом любой размерности. Такой параметр должен быть обязательно описан внутри процедуры. В описании измерений массива-параметра можно использовать не только константы, но и параметры-переменные данной процедуры, что позволяет записывать процедуры, которые могут обрабатывать массивы переменного размера. Кроме того, разрешается верхнюю границу последнего измерения параметра-массива задавать символом *. Если предполагается, что нижняя граница индекса всегда равна 1, то одномерный массив-параметр описывается в виде имя(*). Параметры-массивы также можно объявлять с атрибутом VALUE, но в этом случае они не могут иметь переменный размер.
Параметрами процедур могут быть подпрограммы (процедуры и функции). Внутри процедуры такой параметр не нужно как-либо описывать, но в вызывающей программной единице соответствующий аргумент должен быть описан специальным образом. Если аргумент является именем стандартной функции, то он описывается в операторе
Intrinsic список имен
если это любая другая функция или процедура, то следует использовать оператор
EXTERNAL список имен
Некоторые стандартные функции запрещено использовать в качестве аргументов.
Формальным параметром процедуры может быть *. Аргументом, соответствующим такому параметру, должна быть конструкция *метка. Параметры такого типа используются следующим образом : внутри процедуры можно записывать любое количество операторов
RETURN
или
RETURN целое выражение
Первый оператор приводит к завершению процедуры и передаче управления оператору, следующему за оператором CALL в вызывающей программной единице. Второй оператор также завершает выполнение процедуры, но управление передается оператору с меткой, равной значению одного из аргументов. Значение целочисленного выражения после RETURN определяет порядковый номер метки среди аргументов-меток. Например, программа
SUBROUTINE A ( *,*,x,*,* )
INTEGER x
IF(x.LT.0) RETURN 1
IF(x.EQ.0) RETURN 2
IF(x.LE.10) RETURN 3
RETURN 4
END
CALL A( *100,*200,5,*300,*400)
STOP '0'
100 STOP '1'
200 STOP '2'
300 STOP '3'
400 STOP '4'
END
выведет на экран символ 3.
Оператор заголовка подпрограммы-функции записывается в виде:
[тип] FUNCTION имя(список параметров)
Если тип функции явно не указан, он определяется правилами умолчания. Список параметров функции аналогичен списку параметров процедуры, но не допускаются параметры - метки. Тип функции может быть целым, вещественным, комплексным, логическим и символьным. Если тип функции отличается от предполагаемого по умолчанию, то его нужно описать в вызывающей программной единице. Список параметров функции может быть пустым, в этом случае в заголовке функции можно не записывать и ( ), но при вызове функции даже с пустым списком параметров список аргументов задается обязательно в виде ( ). Внутри функции необходимо присвоить имени функции возвращаемое значение, точно так же, как в языке PASCAL. Можно использовать оператор RETURN, но без параметра (так как запрещены параметры-метки).
Подпрограммы SUBROUTINE и FUNCTION, находящиеся в других файлах или в библиотеках, можно описать в специальных подпрограммах INTERFACE. Такое описание дает возможность компилятору проверить соответствие типов аргументов и параметров при вызове подпрограмм. Подпрограмма INTERFACE имеет следующую структуру :
INTERFACE TO заголовок процедуры или функции
описания параметров
END
Подпрограмма INTERFACE должна находиться в том же файле, что и вызывающая программная единица.
