TW-CAD
    Что такое TestWard
    Технология
    Заказать тест
    Регистрация
    FAQ
    Статьи
  Проектирование
    Информация
    Вирт. лаборатория
  Учебный процесс
    1-й курс
      Лекции
      Ликбез
      Сессия
    5-й курс
      Литература
      Практикум
      Сессия
    Консультации
  Информация
    Как с нами связатся
    О нас

 

 

 

Классификация операторов управления ходом вычислений

Классификация и правописание операторов

Формат исходного текста программы на Фортране

Для текста программы на Фортране характерно следующее

  • текст состоит из операторов или предложений, как сказали бы в английском, где принят термин "statement"
  • традиционно построчное оформление операторов перенесли и на конструкции, что отличает Фортран от С либо Паскаля
    - где языковые конструкции не привязаны к строкам, а разделены при помощи  "{ }"  ";"   либо begin  end ;
    -
    где комментарии пишут по-другому
  • текст в в стиле Ф-90 получил раширение *.f90
  • в стиле Ф-90 в одной строке разрешили писать несколько простых операторов, разделенных ";"
  • преемственность допускает оформление текста в одном из двух стилей
    - с первой позиции по 132 позицию в свободном формате - для всех текстов *.f90 и текстов *.for после метакоманды $freeform
      оператор пишут свободно в следующем порядке [метка] оператор [перенос] [ ! комментарий]
    - с седьмой позиции по 72 позицию в фиксированном формате -  для текстов *.for
       оператор пишут строго по позициям  [метка(1:5)] перенос(6:6) оператор(7:72) ] [ ! комментарий(1:72)] [номерПК(73:80)]
  • при описании языков в  квадратные скобки принято заключать необязательные конструкции [ ]
  • формат $freeform, предложенный фирмой MS в Ф-77 v5.1, опередил свободный формат стандарта Ф-90, поэтому имеются различия 
  • фиксированный формат использовался еще при вводе с перфокарт в Ф-66

Текст программы на Фортране

  • содержит в начале строку-заголовок, а в конце - строку  end
    например    PROGRAM Primer  .. .. END , где .. ..- наличие каких-то строк текста
  • между заголовком и end пишут операторы, сначала неисполняемые, затем исполняемые
  • текст легче воспринимается, если его разбавлять пустыми строками, пробелами (пробелы не внутри слов) и строками-комментарияи (оформление последних зависит от формата исходного текста)
  • в конце строки с оператором после "!" допустимы построчные комментарии
  • неисполняемые операторы отвечают на вопрос "какой или как?" и влияют на перевод исполняемых операторов в команды компьютера
  • исполняемые операторы отвечают на вопрос "что делать?" - это команды или действия
  • знак переноса строки и его место зависят от формата исходного текста
  • метакоманды  - это команды компилятору в тексте программы
  • метакоманда $freeform инициирует свободный формат (с оговорками о переносе и строчных комментариях)

Знак переноса оператора зависит от формата исходного текста и пишется

  • как знак "&" в конце переносимой строки текста *.f90

  • как знак "-" в конце переносимой строки текста в формате $freeform

  • как знак "*"  в шестой позиции строки-продолжения для программы в фиксированном формате

Комментарии способствуют пониманию программы, пишутся понятным языком, лучше на русском. Строка-комментарий в зависимости от формата исходного текста начинается

  • с восклицательного знака (пробелы не в счет) - в свободном формате *.f90 и в фиксированном формате

  • с двойной кавычки " в первой позиции строки - в формате $freeform

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

Пример текста программы primer.f90   в свободном формате

Текст  primer.f90

Обсуждение

Program primer

заголовок программы

! неисполняемые операторы
implicit none
integer
:: i=3, j=2,   k
real ::  a,b,    rez  
namelist /out/ i,j, k, &
                      a,b, rez

строка-комментарий
заставляет объявлять все переменные
-  описание целых
- описание вещественных
- список вывода out с переносом
строка-продолжение

пустая строка: описания / действия

! исполняемые операторы
k = i/j  !  1-целая часть частного  3/2
a=i ;  b=j  ! те же числа 3 и 2
Rez = a/b ! вещественное 1.5
write( *, out )
ответ зависит от типа операндов
- деление целых чисел
- два присваивания, изменяющие тип
-  деление вещественных чисел
- вывод переменных по списку out

end

конец программы

 

Классификация операторов

В обсуждении используем три независимых подхода к классификации операторов:

  • исполняемые и неисполняемые - по месту в программе
  • простые и составные (конструкции) - по сложностип и по оформлению
  • по назначению

Составные исполняемые операторы подразделяются в свою очередь на

  • программные единицы (ПЕ) - с заголовками program   subroutine    function   module
  • конструкции или блочные операторы - с заголовками do  DoWhile   if   SelectCase    where

Правила записи составных операторов (СО) действуют, в частности, и для блочных операторов, однако помимо этого  для блочных операторов допускается вложение. В составных неисполняемых операторах не допускаются вложения, но допускаются ссылки на ранее сделанные определения

С развитием идей структурного программирования преобладающим стал стиль "неотрывного восприятия программы". Для его воплощения в Ф-77 включен блочный If .. else ..endIf. В опережение стандарта  Ф-90  фирма MS предложила свою реализацию Ф-77, в которой появились блочные Do .. ..endDo   Dowhile .. ..endDo и SelectCase .. ..endSelect и составные операторы среди неисполнямых операторов: Structure .. .. endStructure (соответствует Type .. .. endType Ф-90),  Map .. .. endMap   Union.. ..endUnion. Накопленный опыт программирования показал, что структурированные программы не только легче читать, но и легче отлаживать, легче писать, конструируя программы из готовых блоков средствами текстовых редакторов, таких как ME или редактор, встроенный в FPS40. Именно благодаря этому в MS-F-77 как и в Ф-90 удобно  писать структурированные программы без меток и операторов go to

По количественному составу в языке FORTRAN представлены:

Классификация

по месту в программе

По   написанию

31- неисполняемые

29-исполняемые

45 - простые

27 - описания базовых типов и определения

18-присваивание, пустышка, обмен данными, управление ходом вычислений

15 - составные

4- описания производных типов и определения

4-программные единицы
7 - блоки

Как видно из приведенной таблицы словарный запас языка Фортран (около сотни слов) несравненно беднее естественных языков (сотни тысяч слов). Отметим, что в языке "С" словарный запас соизмерим с Фортраном, но гораздо большее разнообразие допустимых простых конструкций, например одних операторов присваивания в  "С" 10 штук вместо 1. В Pascal ключевых слов несколько больше, чем в Фортране, особенно в его диалекте Delphi. Оба языка и Фортран и Pascal в отличие от "С" придерживаются строгой концепции типов и являются высокоуровневыми яэыками программирования. Яэык программирования  Фортран считается более приспособленным к реализации методов вычислений из математики, физики и статистики. Яэык программирования  "С" считается более приспособленным к системному программированию, к обслуживаню баз данных и интерфейсов. Яэык программирования  Pascal считался хорошо приспособленным для обучения. С переходом к Windows остался лишь один компилятор Delphi для Pascal, прием он не яляется преемником  Pascal для DOS даже для той же фирмы Borland.

Языки Фортран и "С" в отличие от Pascal развиваются через стандартизацию. Фортран развивается по принципу эволюции таким образом, что когда-либо объявленные конструкции считаются допустимыми и в последующих версиях; однако некоторые конструкции выходят из моды, заменяясь более емкими.  Концепция структурного программирования впервые была опробована в Pascal и, хорошо зарекомендовав себя, нашла себе место и в новых стандартах Фортрана. Языки Фортран и "С", имея компиляторы одной фирмы MS, легче компонуются в единый исполняемый модуль. При смешанном программировани с использованием компиляторов разных фирм (например MS Фортран и Borland Delphi) приходится использовать стандартизованные динамически связываемые библиотеки DLL.

Простые и составные операторы

В первоначальной версии языка подавляющее большинство составляли простые операторы, но действующая тенденция - к обогащению составными операторами (конструкциями). Каждый оператор в Фортране традиционно начинается с новой строки, но в Ф-90 допускается в одной строке писать несколько простых операторов, разделяя их ";". Простой оператор можно записать в строку, пусть даже длинную, пусть с переносом. Составной оператор или конструкция занимает как минимум 3 строки и не требует никаких знаков препинания в конце
Заголовок
  группа операторов или один оператор
EndЗаголовок
Начальная и конечная строки Заголовок .. .. EndЗаголовок как бы образуют скобки составного оператора.

Традиции написания СО в разных языках таковы

  • в Фортране - обрамление начальной и конечной строчкой;  нет знаков препинания в конце оператора и программы; пробелы используются свободно (не внутри имен для Ф-90); ключевых слов в Фортране нет

  • в языке "С" конструкция выделяется фигурными скобками {}, а оператор заканчивается знаком ";"  пробелы, знаки табуляции и конец строки используются свободно, но не внутри имен; ключевые слова зарезервированы в языке

  • в языке Pascal - блок выделяется ключевыми словами begin и end , оператор заканчивается знаком ";" , а программа заканчивается точкой; пробелы и конец строки используются свободно, но не внутри имен; ключевые слова зарезервированы в языке

  • то, что в прежнем Фортране разделялось концом строки, в Ф-90 может быть разделено и знаком ";"
    поэтому строка программы
    program pr;implicit none;real x,y;integer::k,p;p=10;do k=1,10 ; p=p-1;x=p*0.1;y=sin(x);write(*,*)p,x,y;enddo;end

    не вызовет ошибок, однако она написана согласно букве закона, но в нарушение духа Фортрана

  • традиционная построчная запись той же программы восприниматся легче
    program pr
    implicit none
    real
    x,y;    integer:: k,p   !  простые операторы в строке разделены ";"
    p=10
    do k=1,10
       p=p-1;  x=p*0.1; y=sin(x);  write(*,*) p,x,y
    enddo
    end program pr

Следует иметь в виду отличие в написании конструкций и операторов в программах на Фортране и в таких языках как Паскаль и С

  • в Паскале и С конструкции и операторы размещают по строкам, чтобы их было удобно читать человеку
  • в Фортране - не только для удобства чтения, но и для понимания компилятором текста без ";"
  • в Фортране "новый оператор - новая строка" и нет необходимости в знаках препинания в конце  
  • при построчном оформлении в Фортране ";"   - это лишь разделитель простых операторов, записанных в одну строку, а в Паскаль и С каждый оператор должен завершаться знаком ";"

Правила написания составных операторов

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

  • для описаний - это Type  Map  Union   Interface
  • для программных единиц (ПЕ) - это Program Subroutine Function Module
  • для блоков (исполняемых СО) - это Do   If   SelectCase    DoWhile   Where

Конец СО - слово end, за которым пишется то же самое ключевое слово, что и в начале, например, Do .. endDo  причем EndDo  можно писать с пробелом end do или без него enddo , маленькими или большими буквами. В конце ПЕ в Ф-77 писали просто end , а теперь повторяют заголовок  program progy .. .. end program progy . СО группирует следующие подряд операторы, простые или составные, образуя из них так называемый "черный ящик". Термин "черный ящик" означает возможность до поры до времени не заглядывать внутрь него, концентрируя внимание на размещении ящичков, а не на их содержимом. Конструируя программу по определенным правилам из черных ящичков, мы повышаем предсказуемость поведения программы, облегчаем ее чтение, облегчаем диагностику ошибок, облегчаем и ускоряем отладку программы. Это подтверждено как теорией, так и практикой программирования.

Представим в наглядной графической форме основные правила.

  • Единственность входа повышает предсказуемость поведения "черного ящичка"

  • Нельзя перекрывать СО

  • Помимо нормального выхода из СО для исполняемых СО  допустим и досрочный выход

  • Досрочный выход из исполняемых СО реализуется:
    - в ту же точку, что и нормальный выход
    - из программных единиц операторами return и stop
    - из блока do оператором exit - на оператор следующий за enddo
    -можно, но опасно оператором перехода за область действия блока (только не вовнутрь другого блока)
  • Ящички допустимо складывать тремя способами:
    1) для любых составных операторов - возможно следование друг за другом
    2) кроме следования для блоков (исполняемых СО) допустимо вложение
    3) Внутри одного текста ПЕ пишут последовательно, либо ПЕ помещают в разные тексты. В ПЕ вкладывают прочие СО и простые операторы в определенном порядке

Классификация операторов ФОРТРАН по назначению

Не претендуя на исчерпывающий список операторов и конструкций FORTRAN, показанные ниже таблицы группируют операторы по назначению и дают представление об основных возможностях. Принятые ниже обозначения:

  • v-переменная, c-константа, e-выражение,   f-функция,  a-атрибут, s-дескриптор

  • ..v-список переменных через запятую

  • .. ..- это один или много операторов, идущих подряд в одной или нескольких строках, которые объединяют в блок

  • { } многократное повторение конструкции

  • ..{ } -повторение конструкции через запятую

Поясним приведенные обозначения на примере    real ..v
здесь имеется в виду ключевое слово real , следом за которым идет список переменных ..v , включающий любые имена переменных, разделенных запятыми. В конкретном операторе это, к примеру, может выглядеть как     real alfa, mu2,six

НЕИСПОЛНЯЕМЫЕ ОПЕРАТОРЫ ( описания и определения )

Описание типов Пояснения
implicit NONE    все объекты описывать явно

integer ..v  real ..v   complex ..v
logical ..v   character ..v
 
объявление объектов базовых типов
числа
не числа
Type ИМЯ_Т .. .. endType
Type (
ИМЯ_Т ) ..v  
объявление производного типа ИМЯ_Т
отнесение к нему переменных из списка ..v  
..a   ::   ..v    например
real,parameter :: pi=3.14, e=2.71
в Ф-90 слева от  "::" пишут список атрибутов, а справа - список атрибутов

Другие определения

WB01371_.gif (289 bytes) dimension ..{ v(..c) } описание размерности массива
WB01371_.gif (289 bytes) allocatable ..v динамический объект
WB01371_.gif (289 bytes) save ..v объект, не сохраняемый  в стеке
  parameter( ..{v= c} ) задание констант
  data ..{ ..v/ ..c / }  инициализация переменных
  equivalence ..{( ..v )} список эквивлентных имен
  Map . . . . endMap
Union . . . . endUnion
список эквивлентных полей
  m format (..s)  формат ввода-вывода
WB01371_.gif (289 bytes) external .. f Функции внешние
WB01371_.gif (289 bytes) intrinsic ..f Функции внутренние
  ИМЯ( ..v)= e Функции операторные

Большинство определений могут быть и самостоятельными операторами и WB01371_.gif (289 bytes) -атрибутами в Ф-90.

ИСПОЛНЯЕМЫЕ ОПЕРАТОРЫ (действия)

Простые исполняемые операторы    Оператор чаще всего пишется с новой строки, возможно с переносом

Оператор присваивания        v = e
пустышка                                  m continue

Обмен данными с файлами:   u-устройство, (u ..) - после u ряд необязательных параметров

К началу файла
rewind (u)
в конец файла
endfile(u)
назад на запись
backspace(u)
Открыть
open(u,file='ИМЯ' ..)
закрыть
close(u)
опросить
inquire (u ..)
Разновидности Ввода   вывода           
под управлением списка read(u,*..) ..v write(u,*) ..e
поименный Ввод/вывод по объявленному списку переменных namelist /ИМЯ/..v после namelist read(u,ИМЯ..) после namelist
  write(u,
ИМЯ)
форматный ввод/вывод
(..s)  - форматная строка
read(u, '(..s)' ....v write(u,'(..s)' ..) ..e
форматный ввод/вывод со ссылкой на формат
m format (..s)
read(u,m ..) ..v write(u,m ..)..e
Ввод/вывод,
отображающий память
read(u) ..v  write(u) ..e

Управление ходом вычислений

Простые операторы - пишутся в одну строку

if( условие e ) простой выполнить простой_оператор
при условии e
if( условие e ) exit выйти из цикла при условии e
if( условие e ) cycle  к следующему проходу цикла при условии e
call ИМЯ(..e вызов подпрограммы

Нерекомендуемые возможности  -  с   метками m:
if( арифм.выражение e) m< , m= , m>   условный переход по знаку e    - 0 + 
go to m    Безусловный переход
if(условие e ) go to m    условный переход
go to( ..m ),v     Переключатель по меткам в зависимости от целой v

CОСТАВНЫЕ ОПЕРАТОРЫ   по схеме начало .. .. конец

ПE пишут друг за другом, вкладывая в них прочие операторы

Вид ПЕ Примечания
program ИМЯ
.. ..
end
досрочное окончание stop
пауза pause c
subroutine ИМЯ(..v)
.. ..
end
вызов - call
досрочный возврат
return  
function ИМЯ(..v)
.. ..
end
вызов - упомянуть в выражении
досрочный возврат
return  
module ИМЯ
.. ..
end module ИМЯ
использовать - use
без действий, но с модульными
процедурами и функциями

Блоки

Условные блочные операторы

if( e ) then
 
.. ..
end if
"если-то" - выполнить блок
при условии e
if(e) then  !  если-то
.. ..
else         !  
иначе
.. ..
end if
в зависимости от условия e  
выполнить один из 2 блоков
select case(v)
..{case(c)
       .. ..}
case default
.. ..
endselect
по параметру v
выбрать один из
многих блоков  "в случае c "

case default - блок в остальных случаях

Циклы

Разновидности циклов: Выход
имя
-имя цикла
следующий  проход
do i = iн,iк, is
.. ..
end do
! цикл по параметру
Exit
или
Exit имя
Cycle
или
Cycle имя
do while( условие e)
.. ..
end do
! итеративный цикл
do
.. ..
end do
! бесконечный цикл

Варианты написания и ряд деталей проясняется по мере обсуждении конкретных операторов.
Фортран уникален среди языков тем, что в нем нет зарезервированых ключевых слов, например, write=2.5 воспринимается без ошибок как оператор присваивания для переменной write .

Hosted by uCoz
.

 

 Web-design Звягин В.Ф. со товарищи: Аминев Р.Ш..
197101, Россия, Санкт-Петербург, ул.Саблинская, 14
ИТМО
Hosted by uCoz