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

Предоплата всего

Подписываем
Если у вас возникли сложности с курсовой, контрольной, дипломной, рефератом, отчетом по практике, научно-исследовательской и любой другой работой - мы готовы помочь.
Предоплата всего
Подписываем
8. Все разновидности чисел INTEGER и REAL, представление чисел в Фортране, операции над числами
Тип |
Примеры явных констант |
Разновидности и |
Пояснения |
integer |
2147 |
integer*1 *2 *4 ±1010 |
Точное значение |
Real |
-1.76 1e7 1.2e7 |
real* 4 10±38 7 цифр |
Неточное представление, неточное вычисление |
Complex |
(-1.76 , 1) |
Пара вещественных чисел |
неточно |
Logical |
.true. .false. |
Logical*1 *2 *4 |
1 бит |
character |
х= “OK” |
character*1 *32767 |
Кодировка ANSI |
В Фортране 6 общепринятых операций над числами
3.5**3 = 3.5*3.5*3.5 3-целое
3.5**6.5 = exp( 6.5*log(3.5) ) 6.5-вещественное
9. Основные принципы записи формул в виде выражений, арифметические выражения и порядок действий при их вычислении
Числовые формулы - арифметические выражения
Осмысленная математическая формула, записанная по правилам Фортрана, называется арифметическим выражением. Правила записи выражений - это компромисс между способом, привычным для математика и способом, возможным для компьютера.
Основная идея записи формул в языках программирования - превратить любую витиеватую многоэтажную математическую формулу в строку символов, пусть даже длинную. По известным правилам переноса ее можно записать в нескольких последовательных строках бланка. Необходимость записывать формулы в строку обусловлена тем, что компиляторы вводят формулы последовательно символ за символом, как с клавиатуры. Основные принципы записи формулы в виде арифметического выражения развивают указанную идею и состоят в следующем:
• оформить формулу как длинную строку символов
• именовать все величины по смыслу, а не обозначать
• единообразно именовать, а не обозначать функции
• единообразно писать операции, скобки ( в Фортране - только круглые скобки)
• иметь в виду тот же тип результата операции, что и тип операндов - это соответствует тому, что в системе команд компьютера есть два разных комплекта команд - для целых чисел и для вещественных чисел, но нет команд со смешанными операндами
• иметь в виду, что результат вычисления выражения или его части с однотипными операндами лежит том же классе чисел
• иметь в виду, что результат вычисления любого смешанного выражения или его части всегда в самом широком классе чисел по отношению к операндам (самый узкий - целые, шире - вещественные, еще шире - комплексные числа)
Операнды арифметического (числового) выражения могут быть целого, вещественного или комплексного типа. В числовом выражении допускаются операции:
Операция |
Порядок |
Пример |
Примечания |
Вычисление функции |
1 |
sin(X) |
одноместная (унарная) операция |
Возведение в степень |
2 |
X**2 |
несколько подряд справа налево |
Смена знака |
3 |
X |
одноместная (унарная) операция |
Деление, умножение |
4 |
X/Y, X*Y |
несколько подряд слева направо |
Сложение, вычитание |
5 |
X+Y, X-Y |
несколько подряд слева направо |
Знаки двуместных операций - возведение в степень, умножение, деление, сложение и вычитание записываются между операндами. В отличие от математики, знак операции умножения опускать нельзя. Численное значение результата зависит от порядка выполнения операций. Если надо, порядок действий изменяют скобки; разрешаются только круглые. В выражении без скобок операции выполняются в порядке старшинства.
Строковое выражение
Операнды строкового выражения должны быть строкового типа. В строковом выражении допускается только одна операция сцепление строк или конкатенация. Сцепление обозначается «//», например s=s1//s2, символы в строке s нумеруются слева направо как 1,2,…len(s), len(s1//s2)=len(s1)+len(s2). Подстрока - несколько символов строки подряд.
Пример: результат вычисления ba =ab(14:26)//ab(1:13) строка, в которой меняются местами первая и вторая половины алфавита:
Character*26 :: ba, ab=abcdefghijklmnopqrstuvwxyz
Обратите внимание на то, что оператор s1=s1//s2 с повторением s1 слева и справа от “=” не имеет смысла. В Фортране строки постоянной длины, а именно той, что заявлена в описании строки. В то же время оператор s1=trim(s1)//s2 вполне осмыслен, если в s1 хвостовых пробелов, не менее чем символов в s2. Функция trim(s1) обрезает хвостовые пробелы.
Логическое выражение
Логическое выражение имеет значение «истина» или «ложь», состоя из:
Результат вычисления отношения это либо .true. «истина» либо .false. «ложь». В Фортране шесть операций отношения
Отношения |
Фортран 90 |
В стиле Фортран 77, |
меньше чем A<b |
a<b |
a .lt. b |
меньше или равно A≤b |
a<=b |
a .le. b |
равно A=b |
k==m |
a .eq. b |
не равно A≠b |
k/=m |
a .ne. b |
больше или равно A≥b |
a>=b |
a .ge. b |
больше чем a>b |
a>b |
a .gt. b |
Отношения вычисляются после вычисления их операндов. Например, при A=2, B=0 для отношения A+3 >B порядок действий такой: сначала вычисляется А+3 и получается 5; затем 5 сравнивается с В, которое равно 0; результат вычисления выражения 5>0 «истина».
Логические операции выполняются после вычисления отношений. В Фортране пять логических операций
Операция |
Обозначение |
Старшинство |
Пример |
Отрицание НЕ |
.not. |
1 |
.not.a |
Конъюнкция И |
.and. |
2 |
a.and.b |
Дизъюнкция ИЛИ |
.or. |
3 |
a.or.b |
Эквивалентность |
.eqv. |
4 |
a.eqv.b |
Неэквивалентность |
.neqv. |
4 |
a.neqv.b |
Операция .not.a является, как и (x), одноместной (унарной) и пишется перед операндом, остальные знаки логических операций записываются между операндами. Две логические операции могут следовать в выражении непосредственно друг за другом, только если второй операцией является операция отрицания. Например, допустимо a.and. .not.b.
Введем обозначения: T «истина» и F «ложь». Строки и столбцы таблиц истинности помечены значениям операндов, а на пересечении строки и столбца записан результат двухместной операции
.AND. |
F |
T |
.OR. |
F |
T |
|
F |
F |
F |
F |
F |
T |
|
T |
F |
T |
T |
T |
T |
.EQV. |
F |
T |
.NEQV. |
F |
T |
|
F |
T |
F |
F |
F |
T |
|
T |
F |
T |
T |
T |
F |
Операция .not. одноместная и дает результат «истина», если значение операнда «ложь», и результат «ложь», если значение операнда «истина»
.NOT. |
F |
T |
T |
F |
Пример логического выражения: a>3 .and. a<5. Выражение истинно, когда оба отношения истинны, то есть а(3,5).
Сложные выражения вычисляются в следующем порядке:
10. Логические выражения и порядок действий при их вычислении. Интерпретация отношений, логических значений, операций, выражений. Булева алгебра и ее законы
Осмысленная логическая формула, изучаемая в математической логике и записанная по правилам Фортрана, называется логическим выражением. Принципы написания логических выражений те же, что и для числовых формул
В математической логике имеют дело с истинностью высказываний, число “1” интерпретируют как TRUE - истину, а число “0” как FALSE- ложь. Именно эти слова, окруженные точками, выбраны в качестве логических констант в ФОРТРАНе. Операндами в логической формуле являются логические переменные, отношения и подвыражения, каждое из которых принимает одно из двух указанных значений. Значение кодируется в компьютере одним битом из 4, 2 или 1 байтов. Логические переменные и логические именованные константы надо описывать в операторе описания типа, например
Logical L2, h4; Logical, Parameter ::On=.TRUE.
Логические выражения используются
Логическое выражение имеет значение «истина» или «ложь», состоя из:
Результат вычисления отношения это либо .true. «истина» либо .false. «ложь». В Фортране шесть операций отношения
Отношения |
Фортран 90 |
В стиле Фортран 77, |
меньше чем A<b |
a<b |
a .lt. b |
меньше или равно A≤b |
a<=b |
a .le. b |
равно A=b |
k==m |
a .eq. b |
не равно A≠b |
k/=m |
a .ne. b |
больше или равно A≥b |
a>=b |
a .ge. b |
больше чем a>b |
a>b |
a .gt. b |
Отношения вычисляются после вычисления их операндов. Например, при A=2, B=0 для отношения A+3 >B порядок действий такой: сначала вычисляется А+3 и получается 5; затем 5 сравнивается с В, которое равно 0; результат вычисления выражения 5>0 «истина».
Логические операции выполняются после вычисления отношений. В Фортране пять логических операций(Булева алгебра)
Операция |
Обозначение |
Старшинство |
Пример |
Отрицание НЕ |
.not. |
1 |
.not.a |
Конъюнкция И |
.and. |
2 |
a.and.b |
Дизъюнкция ИЛИ |
.or. |
3 |
a.or.b |
Эквивалентность |
.eqv. |
4 |
a.eqv.b |
Неэквивалентность |
.neqv. |
4 |
a.neqv.b |
Операция .not.a является, как и (x), одноместной (унарной) и пишется перед операндом, остальные знаки логических операций записываются между операндами. Две логические операции могут следовать в выражении непосредственно друг за другом, только если второй операцией является операция отрицания. Например, допустимо a.and. .not.b.
11. Оператор присваивания, арифметический, логический, строковый. Смешанные числовые выражения и порядок их вычислений
Оператор присваивания переменная = выражение
позволяет сохранить в переменной значение, вычисленное по формуле, в данном случае знак "=" используется не как знак тождества, а как знак присваивания.
Имеется три разновидности оператора присваивания
· арифметический оператор присваивания
Числовая_переменная = арифметическое_выражение
· логический оператор присваивания
логическая_переменная = логическое_выражение
· строковый оператор присваивания
строковая_переменная = строковое_выражение
Относительно выражения справа от "=" и переменной слева от "=" в логическом операторе присваивания действуют следующие правила
· оба должны быть одного и того же логического типа logical, но могут иметь не одинаковые разновидности logical*4 logical*2 logical*1
· сначала вычисляется логическое выражение
· в случае одинаковых разновидностей результат вычисления выражения будет сразу присвоен переменной слева от "="
· в случае не одинаковых разновидностей (разнятся по числу байтов) до присваивания изменяется форма представления результата по числу байтов в ПК
· потом результат присваивается переменной
Относительно строкового выражения справа от "=" и переменной слева от "=" в строковом операторе присваивания действуют следующие правила
· оба должны быть одного и того же строкового типа character, но могут иметь не одинаковую длину строки, указанную в character * длина , заметим, что просто character подразумевает длину строки равную 1
· сначала вычисляется строковое выражение
· в случае одинаковых длин строк результат вычисления выражения будет сразу присвоен переменной слева от "="
· в случае не одинаковых длин строк (разнятся по числу символов-байтов) до присваивания изменяется длина строки результата по числу байтов на длину строки переменной
· результат справа усекается, если результат длиннее переменной
· результат справа дополняется пробелами, если результат короче переменной
· потом результат присваивается переменной
Относительно выражения справа от "=" и переменной слева от "=" в наиболее сложном арифметическом операторе присваивания действуют следующие правила
· обязательно оба они должны быть числового типа из integer, real, complex
· не обязательно оба они должны быть одного и того же типа и одной и той же разновидности
· сначала вычисляется арифметическое выражение справа от "=" с автоматическим определением типа выражения и всех его подвыражений
· в случае одинаковых типов и одинаковых разновидностей у обоих результат вычисления выражения будет сразу присвоен переменной слева от знака "="
· в случае разных типов до присваивания тип результата вычисления арифметического выражения будет преобразован к типу числовой переменной
· в случае одинаковых типов, но не одинаковых разновидностей (разнятся по числу байтов) до присваивания изменяется форма представления числа в компьютере по числу байтов
12. Структурный IF, одноблочный IF, логический IF, многоблочный IF
Ветвления конструкция If
Под блоком в Фортране понимают один или несколько выполняемых операторов внутри составного оператора. Передача управления извне внутрь блока запрещена. Конструкции if различаются по числу блоков 0, 1, 2, 3, …. Для реализации многоблочного разветвления имеется расширение elseif (условие) then , а также конструкция, называемая переключателем Select case по целочисленной или символьной переменной.
Двухблочный (структурный) условный оператор |
|
Блок-схема |
Конструкция If |
If (логическое_выражение) then блок_then между then и else else блок_else между else и endif endif |
|
Одноблочный условный оператор (нет блока_else) |
|
Блок-схема |
Конструкция If |
If (логическое_выражение) then блок_then между then и endif endif |
|
Безблочный, по-другому логический, условный оператор |
|
Блок-схема |
Конструкция If |
If (логическое_выражение) оператор Пример If (x<0) y=abs(x) По виду блок-схема та же, но в прямоугольнике единственный простой оператор |
13. Сравнение трех видов циклов, вспомогательные операторы
Циклы конструкции DO
Циклом в программе называют группу (блок) многократно выполняемых операторов. Конструкция do обрамляет цикл
do …
…блок_do…
enddo
Имеется три разновидности циклов в Фортране:
Бесконечный цикл
Блок-схема |
Конструкция Do |
do блок_do, в том числе if (на_выход) exit enddo ! только повтор do |
Чтобы выполнение цикла когда-либо закончилось, среди операторов блока_DO должен быть хотя бы один exit с условием выхода из цикла.
Цикл по условию (итеративный цикл)
Блок-схема |
Конструкция Do |
Пока условие выполняется, цикл продолжается Do while(условие) блок_do enddo ! только повтор do |
Цикл по переменной
Переменная в операторе DO предпочтительнее целая, но также допускается вещественная или вещественная двойной точности. Формула расчета числа повторений цикла .
Начало xn, конец xk и шаг step константы, переменные или выражения одного из перечисленных типов. Функция int() вычисляет целую часть указанного частного, отбрасывая дробную, без округления. Результат max :
max (0, +) => + max (0, ) => 0 max (0, 0) => 0 .
Опуская подробности, цикл рисуют так:
Блок-схема |
Конструкция Do |
do переменная = xn, xk, step блок_do enddo |
Цикл не выполнится ни разу, то есть kp=0, если
или
Шаг цикла step регламентируется следующим образом:
Переменная цикла x изменяется по закону арифметической прогрессии. Для понимания того, как это происходит, покажем подробную блок-схему, в которой проясняются все детали и правила для цикла по переменной.
14. Цикл с заранее известным числом повторений, его подробная блок-схема
Подробная блок-схема цикла по переменной |
|
Блок-схема |
Пояснения |
Здесь х переменная цикла; xn, xk, step константы, переменные или выражения. 1) do x=xn,xk,step 2) блок_do 3) enddo 4) продолжение enddo это пункт (3), включающий в себя 3 действия:
|
В соответствии с подробной блок-схемой цикла по переменной выполнение цикла регламентируется следующими правилами:
Цикл по вещественной переменной x имеет неустойчивый характер:
Причина: ошибка в вычислении kp и накопление погрешности округления в x=x+step, особенно при сравнительно малом step по отношению к x.
Такой цикл можно скорректировать, возможны два варианта:
integer int, kp; real x
kp = . . . ! количество повторений цикла
do int = 0, kp-1 ! kp число повторений цикла
x = xn + int * step
! содержимое прежнего блока_do
enddo
Среди операторов блока_do может встретиться конструкция Do. В этом случае говорят о вложенном цикле. Оценивая количество повторений оператора WRITE внутри вложенного цикла в примере, показанном ниже, необходимо помнить, что при каждом повторении внешнего цикла, внутренний цикл повторяется заново:
Пример вложенных конструкций Do
DO y = -1.0, 1.1, 0.2 ! 11 раз
do x = -1.0, 1.1, 0.2 ! 11 раз
WRITE(1,*) x,y ! 121=11*11 раз
enddo
ENDDO
В файл будет выведена 121 пара значений х и y.