Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
63
Добавлен:
02.05.2014
Размер:
553.98 Кб
Скачать

51. Способы передачи форматных записей

Передача форматных записей осуществляется следующими способами:

WRITE (*, FMT=метка) список

FMT – ключевое слово, которое назначает метку оператора FORMAT, описывающего порядок вывода информация из списка.

* – вывод на системное устройство (дисплей).

WRITE (*,*)

Ключевое слово FMT может быть опущено.

WRITE (*, FMT=9) A, B или, что аналогично: WRITE (6, 9) A, B

  1. FORMAT (1X,’A=’, F8.3,’ B=’, F11.4)

Вместо метки оператора FORMATв операторе вывода может быть указана текстовая константа, которая содержит текст оператораFORMAT:

WRITE (6,’(1X,’A=’,F8.3,’ B=’,E11.4)’) A, B

содержимое оператора FORMAT список

52. Модификации оператора цикла do

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

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

DO 6 X=A,B,DX

область цикла

6 Continue

В цикле идёт изменение переменной Х от начального значения А до конечного значения В с шагом DX. В области цикла выполняются любые операции (можно организовать ещё циклыDO). При достижении метки 6 выполняется переход на начало цикла, последнему значению Х присваивается шагDXи если полученное значение меньше либо равно В (конечному значению), то выполняется область цикла и процесс повторяется. Если приращённое значение больше величины В, то происходит передача управления операторам, которые следуют за меткой 6.

Вторая модификация цикла DOпохожа на предыдущую, только отсутствует метка, и оператор окончания циклаCONTINUEзаменяется на операторENDDO:

DO X=A,B,DX

область цикла

END DO

Принцип работы аналогичен предыдущей модификации: происходит выполнение области цикла с постепенным приращением Х от А до В с шагом DX. Циклический процесс осуществляется междуDOиENDDO. При достижении значения Х большего значения В происходит передача управления первому оператору, следующему заENDDO.

Третья модификация использует совершенно иной способ организации цикла:

DO m, WHILE (логическое выражение)

область цикла

m CONTINUE

Здесь происходит выполнение цикла в области до метки mдо тех пор, пока выполняется (TRUE) логическое выражение в скобках. Если логическое выражение стало ложным (FALSE), то управление передаётся оператору, следующему после области цикла.

Пример:

X=XN

DO 5, WHILE (X.LT.XK)

Z=…

WRITE (…

  1. X=X+DX

Следующая модификация цикла DO:

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

область цикла

END DO

Цикл выполняется, пока логическое выражение не примет значение FALSE.

Кроме того, внутри цикла DOWHILEили оператораDO(в котором цикл заканчивается операторомENDDO) используются операторыCYCLE(цикл) иEXIT(выход). ОператорCYCLEпередаёт управление на конец цикла, а операторEXITосуществляет выход из области цикла и передаёт управление оператору, следующему послеENDDO.

Пример:

X=XN

DO WHILE (X.LT.XK)

Y=…

Z=…

If (y.Lt.0.05) cycle

IF (Z.GT.10.5) EXIT

WRITE (…

X=X+DX

END DO

Строки IF(Y.LT.0.05)CYCLEиIF(Z.GT.10.5)EXITсоответствует следующим операциям:

DO 8 I=1,10

X=…

IF(Y.LT.0.05) GO TO 8

IF (Z.GT.10.5) GO TO 10

WRITE …

8 CONTINUE

10 Y=…

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

53. Модификация оператора GO TO

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

Существует вторая модификация оператора

GOTO: вычисляемый.

GO TO(m1, m2, m3, …, mn) арифметическое выражение

Пример:

GO TO(5, 4, 1, 5) A*SIN(X)

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

ОператорGOTOпо предписанию

GOTO целая переменная(метки)

Где: целая переменная определяется в специальном операторе ASSIGN. Оператор назначает номер метки переменной целого типа. А операторGOTOпо предписанию может осуществить переход на одну из перечисленных меток в зависимости от значения целой переменной.

IF (A .GT. B) THEN

ASSIGN 10 TO MET

ELSE IF (A .EQ. B) THEN

ASSIGN 20 TO MET

ELSE

ASSIGN 25 TO MET

END IF

Затем осуществим переход на одну из меток:

GOTO MET (10,20,25)

.

.

.

10 WRITE …

20 IF …

25 WRITE …

Если значение METсовпадает с любой из меток списка, то осуществляется переход на эту метку. ЕслиMETне совпадает ни с одной из меток списка, то операторGOTOне выполняется.

54. Теория ошибок

Рассмотрим из-за чего в “правильно работающей” программе могут получаться не точные или совсем не правильные данные.

х – число;

– его ошибка;

– относительная ошибка.

В операциях сложения: , то есть при сложении чисел происходит сложение их ошибок.

В операциях умножения: .

При делении:

При возведении вещественного числа в целую и вещественную степень, мы получим разный результат, но в простом случае это расхождение будет в 9–10 знаке после запятой. B=5.7

A=5.7

B1=B**2=…

A1=A**2.=…

IF(A1.EQ.B1) THEN …

При сравнении переменных оператором IF, получим значениеTRUE.

Однако если А1 и В1 являются результатом длительных вычислений (вычисление суммы, например) с использованием библиотечных программ ЭВМ для вычисления функций типа log, eхp, tg, sin, th,которые вычисляются с помощью разложения в бесконечный ряд, то окончательная ошибка будет возрастать. На некотором этапе может возникнуть ситуация, когда различие между переменными А1 и В1 обнаружится в 7 знаке после запятой. При этом оператор сравнения этих переменных не выполнится (результат сравнения будет равенFALSE). Если в алгоритме работы программы должна предусматриваться ситуация, когда А1 должна быть равна В1, то вместоIF(A1.EQ.B1) с ранее заданной точностью можно записать:IF(ABS(A1-B1).LT.1.E–6)THEN…

Соседние файлы в папке Программирование на Фортране