Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
GRIGOREV.DOC
Скачиваний:
4
Добавлен:
01.07.2025
Размер:
608.26 Кб
Скачать

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

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

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

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

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

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

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

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

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

2.9. Функции loc, locfar, locnear

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

2.10. Массивы

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

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

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

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

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

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

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

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

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

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

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

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

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]