Программа на Языке Программирования

высокого уровня (на примере FORTRAN)

 

Язык программирования – это набор правил, согласно которым можно записать алгоритм для дальнейшей обработки его компилятором (compiler) и редактором связей (linker). Программа, с точки зрения компьютера, это последовательность действий. Программа состоит из операторов (statements). Операторы делятся на исполняемые и неисполняемые. Исполняемые операторы как раз и определяют действия, в то время как неисполняемые определяют разные программные атрибуты, такие как размещение (arrangement) и характеристики данных, а также информацию для преобразования данных (data-conversion) и другие свойства и особенности.

Формат записи исходного текста
Несколько слов о правилах записи программы. Представьте тетрадку в клетку. Каждая клетка – позиция для одного символа. Существует два формата записи программ на Фортране. В старом формате – FIXED (фиксированный) – позиции (клетки) с 1 по 5 служат для записи метки – номера оператора, по которому вы сможете вернуться к нему в программе или сослаться на него. С 7 по 73 – поле операторов, после – комментарии. В 6-ой позиции ставится любой символ для обозначения продолжения предыдущей строки, если оператор не уместился на ней. Для записи комментариев ставится символ «С» в первой позиции строки, далее до конца строки любой текст считается комментарием и игнорируется компилятором.

Новый формат – FREE (свободный). Нет ограничений на расположение оператора на строке. Метка ставится перед оператором через пробел. Допускается запись нескольких операторов на одной строке – разделителем является символ ”;”. Для продолжения оператора на следующей строке необходимо в конце поставить символ ”&”. В свободном формате пробелы (в ключевых словах) являются значимыми. Комментарий – символ ”!” в любой позиции, далее до конца строки любой текст считается комментарием и игнорируется компилятором.

Меткалф рекомендует следующие правила для совместимости программы в свободном и фиксированном формате:

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

  do i=1,5
  		print '(i5,\)',i
  end do
  print *
  
Порядок следования операторов в ПБ.
На схеме показан требуемый порядок операторов в Программном Блоке (ПБ) Fortran. Вертикальные линии отделяют типы операторов, которые могут чередоваться. Горизонтальные линии отделяют типы операторов, которые не могут чередоваться.
Комментарии, операторы Include и  директивы
Options
Program, FUNCTION, SUBROUTINE,
MODULE, BLOCK DATA
USE
NAMELIST,
FORMAT,
ENTRY
IMPLICIT NONE
PARAMETER
IMPLICIT
PARAMETER and DATA
Derived-Type Definitions, Interface Blocks, Type Declaration, Function statements, Specification statements
Data
Executable statements
Contains statement
Internal subprograms or Module Subprograms
END

Например, комментарии могут находиться в любом месте программного блока до оператора END.

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


 Элементы языка:

Как в обычном разговорном языке фразы записываются с помощью алфавита, так и в языке программирования с помощью знаков из его алфавита записываются элементы языка, складывающиеся в определенные конструкции. В Fortran-е алфавит - буквы английского алфавита, 10 арабских чисел и ряд спец. символов - в том числе символ подчеркивания "_". Используя это алфавит записываются простейшие элементы, соответствующие словам в обычном языке. Они называются лексемами. Разделяются пробелом или символом конца строки. Из этих лексем составляются операторы. Операторы соответствуют законченным фразам в обычном языке. Операторы могут складываться в программные блоки. Из них и составляется программа. Лексемы - ключевые слова, имена, константы, знаки операций, разделители.

Алфавит Фортрана состоит из букв, цифр и спец. символов (пробел, ',*,/…).
Отношение следования – означает, что символ A предшествует символу W, цифра 0 предшествует 9.
Пробелы – незначащая величина, за исключением символьных констант (но только для фиксированного формата!)

Имена – это последовательность литер, предназначенная для обозначения любых объектов программы, таких как переменная , массив, программа и т.д. Имя начинается с буквы и может содержать буквы, цифры и знак подчеркивания. Длина имени – до 31 символа, в новом стандарте – до 63 символов.

Неверно: 5q, B.4, _wrong

"Имена нужны для идентификации объекта и должны содержать хоть какую-то информацию о содержимом объекта. Для глобальных переменных - более полная информация, для локальных - более короткая. Это объясняется тем, что локальные объекты должны использоваться в небольшом тексте программы. Если при его просмотре легко понять смысл назначения переменной, достаточно использовать сокращенное имя. Также можно применять имена согласно устоявшимся правилам, например, для обозначения переменных - счетчиков цикла общепринято использовать имена i,j,k и тд. В этом случае длинные имена доже вредны, так как "загромождают" текст программы и отвлекают от смысла. Очень полезно в имя включять информацию о типе переменной. Одним из самых известных примеров может быть "Венгерская нотация".

из:"Учебник по технологии программирования" mini-soft....html

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

Примеры ключевых слов: integer, real, if, else, end, endif

 

О переменных
Для решения любой задачи исполнитель должен оперировать данными – числами, текстом, образами и т.д. Мы храним это все в памяти. Так - же и ЭВМ должна хранить все – где? – в оперативной памяти. Программист должен позаботиться о месте хранения – выделить определенное количество ячеек памяти. Для этого в языках программирования введено понятие переменная. ПЕРЕМЕННЫЕ – НЕ ДАННЫЕ, А ТОЛЬКО МЕСТО ДЛЯ ИХ ХРАНЕНИЯ. Для возможности обращения к переменным им даются (приписываются) имена. Это позволяет обращаться к содержимому переменной не по адресу в памяти, которого программист не знает! То есть имя переменной - это имя области памяти, где хранится какая-то информация. Можно рассматривать переменные как ящички или плошки с котлетами.

Когда мы работаем с информацией, она имеет какой-то тип. От него зависит набор действий над этой информацией. Следовательно, и переменные должны иметь какой-то тип. Какие типы чаще всего используются – зависит от области работы программиста. Для расчетных задач - целые и вещественные. Их смысл понятен и так. Также бывают комплексные, символьные и логические. Поскольку данные любого типа в памяти записываются в двоичном коде, но принцип кодирования разный, программист должен указать компьютеру тип данных, запоминаемых в пременной. Следовательно, должны существовать некоторые правила, соглашения о способах хранения разных типов. Компьютер должен знать, что хранится в том или ином месте, как с этим работать.Для этого необходимо использовать оператор описания типа.

 

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

 

Для определения типа служат НЕИСПОЛНЯЕМЫЕ операторы описания – т.е. операторы, которые не участвуют в решении задачи, а только подготавливают его – настраивают программу, информируют компилятор и т.д.
Вернемся к переменным. У каждой переменной есть имя. По этому имени мы обращаемся к содержимому переменной. Как нам положить в переменную значение? С помощью оператора присваивания. Берем в Правую руку значение, в левую переменную и кладем:
«имя = значение».

Резюме:

переменная место хранения данных (или объект, который может содержать некоторое значение). Ее свойствами являются: имя переменной; адрес в памяти; размер занимаемой памяти; тип хранимых данных; количество (для массивов);…..

Выражение – состоит из операндов и знаков операций. В результате вычисления выражения получается одно значение – скаляр. Это значение характеризуется типом. Например, выражение (5-7) в результате вычислений получит числовое (арифметическое) значение (-2) целого типа. Оно состоит из целых констант 5 и 7 и арифметической операции вычитания (-).
Выражение (5-7.) в результате вычислений получит значение (-2.) вещественного типа. Оно состоит из целой константы 5 и вещественной константы 7. и арифметической операции вычитания (-). 
Выражение (5>9) состоит из целых констант 5 и 9 и логической операции (>). Результатом вычисления выражения будет логическое значение (.FALSE.)
 
Операции, порядок выполнения, примеры
Операции бывают бинарными и унарными.
Унарная операция имеет вид:
 ОП операнд,
где ОПзнак операции
Например:
+5
Просто 5
-i         
Отрицательное значение того, что было в переменной i
.NOT..TRUE.
== .FALSE.
 
                       
Бинарная операция имеет вид:
операнд ОП операнд
Например:
5*3
равно произведению обоих операндов, т.е. ==15
i**2
Квадрат значения переменной i
.TRUE..AND..TRUE
==.TRUE.
 
 
Precedence of Expression Operators (приоритеты операций)
Category 
Operator 
Precedence 
 
Defined Unary Operators 
Highest 
Numeric 
** 
   
Numeric 
* or / 
   . 
Numeric 
Unary + or - 
   . 
Numeric 
Binary + or - 
   . 
Character 
// 
   . 
Relational  
.EQ., .NE., .LT., .LE., .GT., .GE.
= =, /=, <, <=, >, >= 
   
Logical 
.NOT. 
   . 
Logical 
.AND. 
   . 
Logical 
.OR. 
   . 
Logical 
.EQV., .NEQV. 
   . 
 
Defined Binary Operators 
Lowest 

Операция может быть:

Numeric - числовая; Сharacter - символьная; Relational - отношения; Logical - логическая.

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

 
В случае операций одного приоритета они выполняются слева направо, за исключением ** {X**Y**Z==(X**(Y**Z))}!
Отрицательное число может возводиться только в целую степень!
Выражения бывают однородные – когда все операнды одного типа, и смешанные - когда операнды разного типа.
Например:
2+5 – однородное выражение;
5.6*2 – смешанное выражение.
Перед вычислением смешанной операции все операнды преобразуются к более «сложному» типу (за исключением операции **) , т.е.
5.6*2 => 5.6*2.0 => 11.2
 
Другой пример преобразования типов: 17/3*3==>15 !
 
Порядок выполнения операций задается скобками и приоритетом операций.
 
 
Логические операции

Логический тип описывается ключевым словом LOGICAL. Логические константы записываются как .TRUE. и .FALSE. Логическое выражение может иметь только два значения: ИСТИНА или ЛОЖЬ. Логическое выражение может состоять из комбинаций (1 или более) логических констант, логических переменных, логических функций и выражений, имеющих логический тип, соединенных логическими операциями (negation (.NOT.), conjunction 14 (.AND.), inclusive disjunction (.OR.), logical equivalence (.EQV.), logical nonequivalence (.NEQV.)), а также констант и переменных других типов, соединенных операциями отношений <, <=, ==, /=, >, >=. Порядок выполнения операций при вычислении выражения определяется приоритетом операций и скобками.

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

Все логические операции, кроме .NOT., являются бинарными, т.е. требуют 2 операнда логического типа.

Операция .AND. дает результат .TRUE. только в том случае, если оба выражения истинны, в противном случае дает значение .FALSE.

Пример:
1) проверка на попадание точки на отрезок ]0…6]
   LOGICAL :: test    ! описание логической переменной с именем test
   Integer :: i=5     ! описание и инициализация целой переменной с именем i
   test = (i>0) .AND. (i<=6)   ! присваивание переменной test значения логического выражения (.true.)
 
2) LOGICAL :: test, employed=.true.
   INTEGER :: age=50
   test = employed .AND. (age<45)   ! test=.false.
 
Операция .OR. дает результат .TRUE. в том случае, если хотя бы одно из выражений истинно, в противном случае дает значение .FALSE.
Пример:
проверка на не попадание точки на отрезок ]0…6]
   LOGICAL :: test
   Integer :: i=5
   test = (i<=0) .OR. (i>6)   ! test=.false.
Операция .NOT. используется для отрицания (инверсии) логического значения выражения, то есть .NOT..TRUE. дает .FALSE. и наоборот.
Пример:
проверка на не попадание точки на отрезок ]0…6]
1) LOGICAL :: test
   Integer :: i=5
   test =.NOT. (i>0 .AND.i<=6)   ! test=.false.
 
2) INTEGER :: big=100, small=2
   LOGICAL :: test
   test = .NOT. (big>small)   ! test=.false.
   test = .NOT. test   ! test=.true.
 
Операция логического тождества .EQV. применяется, чтобы проверить совпадение значений операндов (переменных или выражений). Если значения совпадают, результат .TRUE., в противном случае .FALSE.
Пример:
1) проверка на попадание точки на отрезок ]0…6]
   LOGICAL :: test,test1
   Integer :: i=5
   test = (i>0) .AND. (i<=6)   ! test=.true.
   test1=test .EQV. .TRUE.    ! test1=.true.
 
2) LOGICAL :: test
    test = (5*3>12) .EQV. (6*2>8)   ! test=.true.
   test = (5*3<12) .EQV. (6*2<8)   ! test=.true.
 
Операция отрицания логического тождества .NEQV. используется для получения значения .TRUE. только если операнды имеют различные логические значения, в противном случае значением станет .FALSE.
Пример:
   LOGICAL :: test,test1
   Integer :: i=5
   test = (i>0) .AND. (i<=6)   ! test=.true.
   test1=test .NEQV. .TRUE.                ! test1=.false.
 

Приоритет логических операций ниже арифметических операций.

НА ГЛАВНУЮ ДАЛЕЕ
Яндекс.Метрика
Hosted by uCoz