Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Глава 3_1.doc
Скачиваний:
60
Добавлен:
13.03.2016
Размер:
358.91 Кб
Скачать

Упражнения

  1. Определить значения, типы, разновидности констант:

12, -24_1, 10111, 2#10111, 374, 8#374, #2F4A,

57.12, .24, .24_2, .24_8,

1/56e-7, 1.56e-7_8, 1.56d-7, 74e10,

(35.1, 27.4), (0.63e-4_8, 3.52e5_8).

2. В чем различие между следующими объектами в программе:

.true. и ‘true’ .false. и ‘false’ ?

3. В программе имеются лишь следующие операторы описания переменных :

real x, m, y, n

integer(2) ab, r5

Какой тип в этой программе имеют переменные

z, y, r1, r5, ab, ac, j, n, k ?

4. В чем различие двух вариантов описания величин Number и delta:

integer Number=50 integer,parameter::Number=50

real::delta=2.0e-10 real(8)::delta ?

3.6. Арифметические выражения. Присваивание. Ввод-вывод

Выражениесостоит из операндов, знаков операций и круглых скобок. Операндами выражения являются переменные, константы или функции.

Выражение может присутствовать в правой части оператора присваивания, в операторах вывода, в вызовах процедур и других операторах языка. Назначение любого выражения – вычисление некоторого значения. В зависимости от типов вычисляемых значений определяются типы выражений. Тип выражения определяется типом операндов и операциями, а также правилами приведения типа.

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

Таблица приоритетов операций

Приоритет

Операции

Арифметические

1 (высший)

2

3

** (возведение в степень),

* (умножение), / (деление)

+ (сложение), - (вычитание)

Отношения

4

5

< или .LT. (меньше) <= или .LE. (меньше равно)

> или .GT. (больше) >= или .GE. (больше равно)

= = или .EQ. (равно) /= или .NE. (не равно)

Логические

6

7

8

9 (низший)

.NOT. (отрицание)

.AND. (логическое И)

.OR. (логическое ИЛИ)

.XOR. (исключающее или) .EQV. (эквивалентность) .NEQV. (неэквивалентность)

Если результатом вычисления выражения является число, то его называют арифметическим выражением.

Арифметические выражения

Приведем примеры записи арифметических выражений на Фортране:

Математическая формула

Арифметическое выражение на Фортране

(a+b)/(c*d)

p+q sin2a

p+q*sin(a)**2

e-f(i,k)**2*g(k,j)


Для того чтобы правильно записывать арифметические выражения, нужно соблюдать следующие правила:

1. Все символы пишутся в строчку на одном уровне. Проставляются все знаки операций (нельзя пропускать ).

2. Не допускаются два следующих подряд знака операций. (Нельзя A +  B; можно A + (–B).)

3. Операции с более высоким приоритетом (рангом) выполняются раньше операций с меньшим приоритетом.

4. Вычисление функции имеет более высокий ранг, чем арифметические операции. Аргумент функции – выражение, стоящее в круглых скобках после имени функции.

5. Операции одного ранга выполняются слева направо (возведение в степень – справа налево).

6. Часть выражения, заключенная в скобки, вычисляется в первую очередь. (Например, (A+B)*(CD) — умножение производится после сложения и вычитания.)

Не следует записывать выражений, не имеющих математического смысла :

  • деления на нуль;

  • возведения нулевого значения в отрицательную или нулевую степень;

  • возведения отрицательного операнда в нецелочисленную степень.

В таких ситуациях происходит прерывание работы процессора.

При переносе длинного выражения на следующую строку нельзя повторять знак операции.

Пример. Цифрами сверху указан порядок выполнения операций:

Данное арифметическое выражение соответствует следующей математической формуле:

Преобразование типов операндов при вычислении выражений. При выполнении двухместной операции

AзнакB:

– если типы А и В одинаковые, то и тип результата – тот же;

– если типы А и В разные, то сначала происходит преобразование операнда с младшим типом к старшему типу, затем выполняется операция. Результат получит старший тип.

Числовые типы в порядке возрастания старшинства расположены так:

целый (I) – вещественный (R) – комплексный (C).

Внутри каждого типа старшинство растет с ростом разновидности.

Особенности вычислений с целыми числами. Рассмотрим простую программу:

real(4) c1, c2

c1=3/2; c2= -3/2

print *,c1,c2 ! 1.0 -1.0

end

Операнды – целые числа, поэтому и результат должен быть целым числом - целой частью результата обычного деления. Затем, поскольку c1, c2 имеют тип real(4), целые числа 1 и –1 преобразуются в стандартный вещественный тип.

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

c1=3./2 ! 3. – вещественная тройка

с2=float(3)/2 ! float – функция преобразования

! к вещественному типу

print *, c1,c2 ! 1.5 -1.5

Таким образом, чтобы получить правильный результат арифметического деления, достаточно сделать один из операндов формально вещественным.

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

x5=x*x*x*x*x x 1,2 = e 1,2*ln(x)

Тип показателя степени определяется по формальным признакам. Поэтому возведение в степени 2 и2.0, также в целую степеньkи вещественную степеньy при одинаковом числовом значении названных переменных будет производиться разными способами.

Для вычисления значения квадратного корня рекомендуется использовать не операцию возведения в степень 0.5, а стандартную функцию sqrt.

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

real(4):: a=1.0e+32, b=-1.0e+32, c=7.0

print *,a+b+c ! 7.000000 (верный результат)

print *,a+c+b)! 0.000000E+00 (потеря значимости)

При сложении чисел с существенно различными порядками нужно учитывать возможную потерю значимости меньшего по модулю в процессе выравнивания порядков.

Сложение чисел одного знака во избежание потери точности следует начинать со слагаемых, меньших по модулю. В процессе накопления произведения при неудачном выборе пар сомножителей можно получить переполнение разрядной сетки, или "машинный нуль". Нужно стремиться к тому, чтобы каждое очередное произведение было по модулю возможно ближе к единице.

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

Каждая функция имеет родовое и специфическое имя. При использовании родового имени тип функции определяется типом аргумента. Специфическое имя ориентировано на строго определенный тип аргумента и результата. В таблице приведены основные математические функции с родовыми именами. Использованы обозначения типов: I– целый,R– вещественный,C– комплексный.