Вспомогательные операторы управления

Оператор продолжения имеет вид:

N CONTINUE

где n- метка оператора, которая может отсутствовать.

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

 

A (L) = B (L) + C ** 2.5

25 CONTINUE

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

 

A (L) = B (L) + C ** 2.5

D = SIN (X) + 2.7 * C

A (L) = A (L) + D

25 CONTINUE

 

 

Оператор паузы

Оператор паузы имеет вид:

N PAUSE m

где n – метка оператора, которая может отсутствовать;

m – целое восьмиричное число без знака, состоящее не более чем из четырех цифр, либо текстовая константа в апострофах.

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

 

 

Массивы. Общие сведения о массивах

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

Например, нужно хранить 100 экзаменационных оценок. Всю последовательность предназначенных для этого ячеек памяти можно обозначить именем MASOC. Тогда к первой ячейке этой совокупности величин можно было бы обращаться по имени MASOC(1), ко второй – по имени MASOC(2) и т.д., а к последней MASOC(100). Такая конструкция согласуется с математическим обозначением последовательности, использующим индексы m1, m2….mn.

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

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

Отдельные элементы массива обозначаются именами с соответствующими индексами, которые указываются после имени массива в круглых скобках и разделяются запятыми, если их более одного, например: M(1), M(3), R(1,5), R(7,1). Фортран допускает массивы любых типов, т.е. INTEGER, REAL, COMPLEX и LOGICAL. Размерность массивов не должна превосходить семи индексов. В качестве индексов могут использоваться не только целые числа, но и переменные целого типа, а также арифметические выражения, принимающие целые положительные значения. Эти арифметические выражения называются индексными выражениями, например, R (К + 2, 2*М-5). Если в некоторый момент выполнения программы К = 2, а М = 4, то машина должна обратиться к элементу R (4, 3).



 

Оператор DIMENSION

Для записи массива должно быть выделено место в памяти ЭВМ. Выделение памяти для хранения массива осуществляется с помощью неисполняемого оператора DIMENSION. Этот оператор должен быть расположен в программе перед исполняемыми операторами. Общая форма оператора DIMENSION имеет вид: DIMENSION « список ». Список содержит имена массивов с границами индексных выражений, заключенными в скобки. Например:

DIMENSION A(20), R(5), M(3, 3)

Этот оператор резервирует в памяти 20 ячеек для хранения вещественных чисел А(1), А(2) …А(20). Выделяет также пять ячеек для хранения вещественных чисел, составляющих массив R, и девять ячеек для хранения целых чисел, составляющих массив М. Если указывается только одна граница индексного выражения, то она определяет его наибольшее значение. Одним оператором можно определить несколько массивов. Другой пример: DIMENSION M(-1:1)

Данный оператор выделяет в памяти ЭВМ три ячейки М(-1), М(0) и М(1) для хранения целых чисел. Следующий пример:

 

DIMENSION A(3)

DIMENSION M(-1: 1)

 

Эти операторы выделяют память для трех вещественных элементов массива А и трех целых элементов массива М. Если требуется дать массиву имя, не соответствующее соглашению о типах, то следует воспользоваться оператором описания типа. В этом операторе можно указывать границы индексных выражений. В таком случае массив не нужно определять с помощью оператора DIMENSION. Например, INTEGER GRM (0: 2) выделяет память для трех элементов целого массива GRM.

 

Индексные выражения

Индексные выражения могут принимать любое целое значение – положительное, отрицательное или ноль – в пределах, определенных оператором DIMENSION или его эквивалентами. Индексные выражения могут быть целыми константами, целыми переменными и целыми выражениями. Значение индексного выражения вычисляется во время выполнения оператора, содержащего обращения к элементу массива. Это значение определяет расположение элемента в массиве Если і представляет собой текущее значение целой переменной І, то А (І)– і-тый элемент массива А, например при І=3, А(3)– третий элемент массива. Выражение А(І * (М – 1)) может указывать на различные элементы массива А в зависимости от значений Іи М. Если І = 2, М = 4, то выражение указывает на элемент А(6). Если значения индексных выражений выходят за границы индексов, заданных в описании массивов, то значение данной переменной с индексами считается неопеределенным. Оно не может использоваться в вычислениях, и компьютер в таких случаях выдает сообщение об ошибке. Например,

А (І * (М – 1)) при І = 2, и М = 6 указывает на элемент А (10), но если оператором

DIMENSION описан массив А (8), то следует сообщение об ошибке.

 

3.7 Ввод – вывод одномерных массивов (в/в)

Значение отдельных элементов массива можно ввести в память, включив эти элементы в список оператора READ. Например: READ(5,*) N, X, A(2), A(3), I (1)

В этом случае оператор READ считывает пять чисел из записи исходных данных и присваивает их значения целой переменной N, вещественной переменной X, элементам вещественного массива А(2) и А(3) и элементу целого массива I (1) соответственно.

Оператор READ(5,*) А(1), A(2), A(3), А(4) считывает из записи данных четыре числа и заносит их в ячейки соответствующие элементам А(1), A(2), A(3), А(4) массива А. Такая конструкция оператора неудобна, когда требуется вводить большой набор данных. В этом случае лучше применить оператор, в конструкцию которого входит неявный цикл. Например: READ(5,*) (А(I), I = 1,4). Этот оператор также, как и в предыдущем примере, считывает из записи данных четыре числа и заносит их в ячейки памяти, соответствующие элементам массива А(1), A(2), A(3), А(4). Если количество вводимых чисел может меняться при каждом прогоне программы, то оператор ввода изменяется так, чтобы сначала вводилось целое число, обозначающее количество вводимых элементов массива. А за этим вводом должна следовать конструкция оператора с неявным циклом. Например:

DIMENSION A (50)

READ (5, *) N

READ (5, *) (А(I), I = 1, N)

 

В этом примере оператор DIMENSION размещает в памяти 50 ячеек для хранения массива А. Второй оператор считывает целое число из записи данных и присваивает его целой переменной N. Третий оператор последовательно считывает со следующей записи данных N вещественные числа, которые заносятся в N элементов массива А: А(1), А(2).. А(N). Если ввод завершен, а в записи данных остались неиспользованные числа, то последние теряются. Если же в текущей записи данных не хватает, то оператор READ продолжает ввод с начала следующей записи, размещенной на следующей строке.

Оператор DIMENSION отводит для хранения массива область памяти фиксированного размера. Если N превысит установленный размер массива (в нашем примере 50), то транслятор может выдать сообщение об ошибке. Если такого сообщения не последует, то последние числа из записи могут быть размещены в непредсказуемых областях памяти, что приводит к труднообнаруживаемым ошибкам исполнения. Если N < 50, то в массиве А останутся элементы с неопределенными значениями и их не следует использовать, пока они не получат конкретные значения программы. Оператор ввода с неявным циклом может вводить числа не во все элементы массива подряд, а с некоторым шагом. Например, оператор READ(5,*)(А(I),I=1,5, 2) первое число из записи данных вносит в элемент А(1), второе – в элемент А (3), третье в элемент (5). Оператор ввода может иметь и такую форму:

READ (5, *) (А(I), I = 4, 0, -2)

Этот оператор последовательно считывает три числа и заносит первое число в А (4), второе–в А(2) и третье – в А(0). Таким образом, можно сделать вывод, что общая форма неявного цикла для одномерного массива имеет вид: (А (І), І = К1, К2, К3),

где К1 – начальный номер элемента массива. Если массив имеет имя А, то эта конструкция неявного цикла обращается сначала к элементу А(К1), затем к А(К1+ К3), потом – А(К1 + 2 * К3) и т.д. до тех пор, пока значение индексного выражения не превысит К2. Если константа К3 в конструкции неявного цикла опущена, то ее значение по умолчанию полагается равным 1. В операторе READ можно записать лишь имя массива без индексов. Например:

DIMENSION А (50)

READ (5, *) А

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

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

 

PRINT *, N, X, A (2), A (3), I (1)

PRINT *, A (1), A (2), A (3), A (4)

PRINT *, (A (I), I = 1, 4)

PRINT *, (A (I), I = 1, N)

PRINT *, A

 

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

 

PRINT *, X, Y, (A(I), I =1, N), Z, (B(J), J =10, 1, -1)

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

 

Оператор цикла DO

В процессе работы программы часто требуется, чтобы некоторые ее участки (группы операторов, реализующие некоторую вычислительную процедуру) выполнялись многократно. Такие участки программы называются циклами. На ФОРТРАНе циклы могут быть описаны различными способами, например, с помощью операторов IF и GO ТО. Однако чаще всего для этого используется оператор DO. С его помощью можно несколько раз повторить выполнение группы операторов, следующих непосредственно за ним. Общий вид оператора DO:

DO n I=m1,m2,m3

где n-метка последнего оператора повторяемой группы (обычно СОNTINUE)

I— параметр цикла (простая целая переменная); m1, m2, m3—целые числа без знака (m1 ≤ m2) или целые переменные, которым к моменту выполнения оператора были присвоены целые положительны значения некоторых чисел.

Оператор с меткой n и все операторы между ними составляют цикл или область действия данного оператора DО. Операторы данного цикла выполняются сначала при I=m1, затем при I=m1+m3,I=m1+2m3и так далее до тех пор, пока I ≤ m2. Если m3 = 1, то оператор DO можно записать так:

DO n I=m1,m2

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

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

- конечный оператор не может быть оператором перехода GOTO, RETURN, STOP, PAUSE, DO, арифметическим и логическим оператором IF.

 

 

Пример (1): Пример (2):

 

PROGRAM VOD/VV PROGRAM AMAX

* Резервируем место под массив A(100) * Определение максим. элемента массива

DIMENSION A(100) DIMENSION A(100)

PRINT*, ‘ВВЕCТИ ТОЧНОЕ КОЛ-ВО ЕЛЕМ ’ PRINT*, ‘VVED. KOL. ELEM ’

READ(5,*) N READ(5,*) N

PRINT*, ’ ВВЕСТИ ЕЛЕМ. МАССИВА ’ PRINT*, ’ VVED. ELEM. MAS. ’

READ(5,*) (A(I), I=1,N) READ(5,*) (A(I),I=1,N)

PRINT 5, (A(I), I=1,N) AMAX=A(1)

5 FORMAT(5X, 3F8.2) DO 5 I=2,N

END IF(A(I).GT.AMAX)AMAX=A(I)

5 CONTINUE

PRINT*, ‘AMAX= ‘, AMAX

END

 

 

3.9 Задания к лабораторной работе № 3

Вариант № 1

Составить программу выборки минимального элемента из массива А ( N ), определить его номер. Использовать форматный вывод. (N ≤ 20.)

Вариант № 2

Составить программу выборки максимального элемента из массива А (N ), определить его номер. Использовать форматный вывод. (N ≤ 20.)

Вариант № 3

Составить программу вычисления суммы отрицательных элементов из массива А ( N ). Использовать форматный вывод. ( N ≤ 20.)

Вариант № 4

Составить программу вычисления суммы положительных элементов из массива А (N) . Использовать форматный вывод. (N ≤ 20.)

Вариант № 5

Составить програм. вычисления количества положительных элементов в массиве А(N). Использовать форматный вывод. ( N ≤ 20.)

Вариант № 6

Составить програм. вычисления количества отрицательных элементов в массиве А(N). Использовать форматный вывод. (N ≤ 20.)

3.10 Пример выполнения задания лабораторной работы № 3

Тема: Работа с одномерными массивами.

Цель работы: Составление программы для обработки одномерных массивов.

Теория: Краткие сведения из теории ………

 

Задание: Составить блок-схему (рис.7) и программу вычисления суммы положительных элементов из массива A (N), используя форматный вывод. (N ≤ 20)

 

PROGRAMM JKL

DIMENSION A (20)

*Irina 1418z

PRINT *, ' введите N '

* N- точное количество элементов ≤ 20

READ (5,*) N

S = 0 K = 0
PRINT *, ' введите элементы массива А'

READ(5,*) (A(I), I=1, N)

S = 0

K = 0

D0 2 I = 1,N

 
 


IF (A(I).LE.0) GOTO 2

да S = S+A(I)

K= K+1

нет 2 CONTINUE

S = S + A (I)
PRINT 3, K, S

3 FORMAT ( ' K=,I 2, /’S=',F7.2)

K = K + 1
END

-1 0 –5 3 4 К = 2 S = 7.00

Рис. 7

 

РАЗДЕЛ IV. Лабораторная работа № 4









Последнее изменение этой страницы: 2016-04-07; Нарушение авторского права страницы

infopedia.su не принадлежат авторские права, размещенных материалов. Все права принадлежать их авторам. Обратная связь