Реферат: Шпаргалки по Fortran

1.информация. Количество информации. Представление информации вЭВМ.<span Times New Roman"">

2.Решение задач с использованием ЭВМ. Понятие об устройстве ЭВМ.Организация вычислительного процесса б ЭВМ.<span Times New Roman"">

3.Алгоритм. Свойства алгоритма. Способы представления алгорит­ма.Типы алгоритмов.<span Times New Roman"">

4.Порядок подготовки программы, исходный текст, трансляция иинтерпретация, редактирование связей. Язык программирования Фортран<span Times New Roman"">

5.Фортран.Злементы языка. Алфавит, лексемы, имена, выражения иоперации, операторы.<span Times New Roman"">

8.Фортран.Встроенные типы данных. Объявление данных. Правилоумолчания о типах данных.<span Times New Roman"">

7.Фортран. Встроенные операции. Оператор присваивания.<span Times New Roman"">

8.Конструкция DO. Разновидности конструкции DO. Операторы<span Times New Roman"">

CYCLE, EXIT.<span Times New Roman"">

9.ОператорIF, конструкцияIF THEN ENDIF.<span Times New Roman"; mso-ansi-language:EN-US">

10.КонструкцияIF THEN ELSE ENDIF,<span Times New Roman"; mso-ansi-language:EN-US">

11.ИнструкцияIF THEN ELSE IF.<span Times New Roman"; mso-ansi-language:EN-US">

12.КонструкцияSELECT CASE.<span Times New Roman"; mso-ansi-language:EN-US">

13.Программные компоненты и процедуры. Главная программа.<span Times New Roman"">

14.Программные компоненты и процедуры. Подпрограммы.<span Times New Roman"">

15.Программные компоненты и процедуры. Функции.<span Times New Roman"">

16.Программные компоненты и процедуры. Модули.<span Times New Roman"">

17.Обращение к сопрограммам. Параметры процедур. Виды связи<span Times New Roman"">

<span Times New Roman";color:black">параметра. Атрибут

<span Times New Roman"; color:black;mso-ansi-language:EN-US">INTENT<span Times New Roman";color:black">.<span Times New Roman"">

13.Явный и неявный интерфейс. Оператор INTERFACE.<span Times New Roman"">

19.Области видимости имен и меток.<span Times New Roman"">

20.Производные типы данных. Оператор TYPE.<span Times New Roman"">

21.Массивы фиксированного размера. Описание, присвоение значений.Выражения с массивами. Сечения массивов, массивов.<span Times New Roman"">

22.Символьные данные, символьные вырашия.Текстовые подстро­ки. 23.Оператор и конструкция WHERE.<span Times New Roman"">

24.Динамические массивы. Размещаемые массивы.<span Times New Roman"">

25.Динамические массивы. Автоматические массивы.<span Times New Roman"">

26.Массивы — формальные параметры процедур. Массивы заданнойформы.<span Times New Roman"">

27.Массивы — формальные параметры процедур. Массивы, перенимаю-дше форму.<span Times New Roman"">

28.Массивы — формальные параметры процедур. Массивы, перенимаю­щиеразмер.<span Times New Roman"">

29.Ассоциирование памяти. Оператор COuuO".<span Times New Roman"">

30.Ассоциирование памяти. Оператор EQUIVALENCE.<span Times New Roman"">

31.Рекурсия. Рекурсивные алгоритмы и определения.<span Times New Roman"">

32.Рекурсивные субпрограмны. ПредложениеRESULT. Рекурсия «изнутри»<span Times New Roman"">

З9.Сортировка. Постановка задачи. Сортировка выбором.

40. Пузырьковая сортировка.

41. Пирамидальная сортировка.<span Times New Roman"">

42. Быстрая сортировка.<span Times New Roman"">

43. Поиск. Постановка задачи. Дихотомический поиск.

<span Courier New";mso-fareast-font-family: «Times New Roman»;color:black;mso-ansi-language:RU;mso-fareast-language:RU; mso-bidi-language:AR-SA">

DO-Циклы.Операторы EXITи CYCLE

Простейшая конструкция DO

[имя:] DO

БОК

ENDDO(имя]

задает бесконечный цикл. Поэтому такой цикл должен содержать по край­неймере

один оператор, например EXIT[имя], обеспечивающий выход из этого цикла.

Имя  конструкции, если оноприсутствует, должно появляться в операторах DOи ENDDO.

Рекомендуемая форма DO-цикла с параметром:

[имя:]  DO dovar = start, stop [, inc]

БОК ENDDO[имя]

dovar — целаяпеременная, называемая переменной цикла или параметром цикла;

start, stop — целые скалярные выражения, задающие диапазонизменения dovar;

inc — целое скалярное выражение, задающее лагизменения dovar. Значение incне может

 быть равным нулю. Если параметр incотсутствует, то он принимается равным единице.

Рекомендуемая форма DOWHILE-цикла:

[имя] DO WHILE(ЛB)?

        БОК

           END DO [имя]

Если DOWHILE-цикл не содержитоператоров прерывания цикла,

 БОК выполняется до тех пор, пока истинно скалярное ЛВ.

DO-цикл, DO-цикл с параметром и DOWHILE-цикл могут быть

 рваны операторами GOTO, EXITи CYCLE, а также в результате

выполнения оператора RETURN, обеспечивающеговозврат из подпрограммы.

<span Arial",«sans-serif»; mso-bidi-font-family:«Courier New»;color:black;letter-spacing:-.05pt; mso-font-width:97%">Оператор

EXIT[имя}

передает управление из DO-конструкции напервый следующий за kohiрукцией

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

 в противномслучае EXITобеспечивает выход цикла, имя которогоприсутствует в операторе EXIT.

<span Arial",«sans-serif»; mso-bidi-font-family:«Courier New»;color:black;mso-font-width:96%">Оператор

<span Arial",«sans-serif»; mso-bidi-font-family:«Courier New»;color:black;mso-font-width:92%;mso-ansi-language: EN-US">CYCLE<span Arial",«sans-serif»;mso-bidi-font-family:«Courier New»; color:black;mso-font-width:92%"> <span Arial",«sans-serif»;mso-bidi-font-family: «Courier New»;color:black;mso-font-width:92%">[имя]

передает управление на начало DO-конструкции. Приэтом оператор расположенные

 между CYCLEи оператором ENDDOконца цикла, невыполняются. Если имя опущено, то CYCLE

обеспечивает переход на начало текущего цикла, в противном случае CYCLEобеспечивает

 переход на начало цикла, имя которого присутствует в операторе CYCLE.

Условныйлогический оператор IF

IF(ЛВ) оператор

Если истинно ЛВ, то выполняется оператор,в противном случае управ­ление передается на

последующий оператор программы.

Конструкция IFTHENENDIF

[имя-.]IF(ЛВ) THEN

БОК

END IF [имя]

БОК выполняется, если истинно ЛВ. Еслиприсутствует имя конструк­ции, то оно должно

 быть ив первом и в последнем операторе конструкции, например:

swap: if(x < у) then

hold = х;   х= у;   у= hold

end if swap

Замечание.Если БОКсодержит один оператор, то лучше использовать

оператор

IF(ЛВ) оператор

Конструкция IFTHENELSEENDIF

[имя:] IF(ЛВ) THEN

БОК1

ELSE [имя]

БОК1

ENDIF[имя]

В случае истинности ЛВ выполняется БОК1 ивыполняется БОК2, если ЛВ ложно.

Имя конструкции, если оно задано, должнообязательно присут­ствовать и перед IF,

ипослеEND IF.

<span Arial",«sans-serif»; color:black;mso-font-width:103%">Конструкция

<span Arial",«sans-serif»; color:black;mso-font-width:103%;mso-ansi-language:EN-US"> IF THEN ELSE IF

<span Arial",«sans-serif»; color:black;mso-font-width:90%;mso-ansi-language:EN-US">[

<span Arial",«sans-serif»; color:black;mso-font-width:90%">имя<span Arial",«sans-serif»; color:black;mso-font-width:90%;mso-ansi-language:EN-US">:] <span Arial",«sans-serif»; color:black;mso-font-width:90%;mso-ansi-language:EN-US">IF(<span Arial",«sans-serif»; color:black;mso-font-width:90%">ЛВ<span Arial",«sans-serif»;color:black; mso-font-width:90%;mso-ansi-language:EN-US">) THEN

БОК1

<span Arial",«sans-serif»;color:black;mso-font-width:89%;mso-ansi-language: EN-US">ELSE IF(

<span Arial",«sans-serif»;color:black;mso-font-width:89%">ЛВ<span Arial",«sans-serif»; color:black;mso-font-width:89%;mso-ansi-language:EN-US">2) THEN [<span Arial",«sans-serif»; color:black;mso-font-width:89%">имя<span Arial",«sans-serif»; color:black;mso-font-width:89%;mso-ansi-language:EN-US">]

<span Arial",«sans-serif»;color:black;mso-font-width:89%;mso-ansi-language: EN-US"> 

<span Arial",«sans-serif»; color:black;mso-font-width:92%">БОК<span Arial",«sans-serif»;color:black; mso-font-width:92%;mso-ansi-language:EN-US">2

<span Arial",«sans-serif»;color:black;mso-font-width:92%;mso-ansi-language: EN-US">…

<span Arial",«sans-serif»;color:black;mso-font-width:93%;mso-ansi-language: EN-US">[ELSE [

<span Arial",«sans-serif»;color:black;mso-font-width:93%">имя<span Arial",«sans-serif»; color:black;mso-font-width:93%;mso-ansi-language:EN-US">]

<span Arial",«sans-serif»; mso-bidi-font-family:«Courier New»;color:black;letter-spacing:-.05pt; mso-font-width:91%">БОК

<span Arial",«sans-serif»;mso-bidi-font-family: «Courier New»;color:black;letter-spacing:-.05pt;mso-font-width:91%;mso-ansi-language: EN-US">n

<span Arial",«sans-serif»; mso-bidi-font-family:«Courier New»;color:black;mso-font-width:90%;mso-ansi-language: EN-US">END IF [

<span Arial",«sans-serif»;mso-bidi-font-family:«Courier New»; color:black;mso-font-width:90%">имя<span Arial",«sans-serif»; mso-bidi-font-family:«Courier New»;color:black;mso-font-width:90%;mso-ansi-language: EN-US">]

В случае истинности ЛВ1 выполняется БОК1 иуправление передается на

 следующий за ENDIFоператор.Если ЛВ1 ложно, то управление

 пере­дается на следующий ELSEIF, то естьвычисляется значение

ЛВ2 и, если оно истинно,то выполняется БОК2. Если оно ложно, то

 управление пере­дается наследующий ELSEIF, и так далее. Если ложны все

 ЛВ, товыпол­няется следующий за завершающим ELSEБОКп.

Если завершающий ELSEотсутствует, тоуправление передается на расположенный

 за ENDIFопера­тор. Число операторов ELSEIFв конструкции может быть

произвольным. Имя в ELSEи в ELSEIFможно задавать, если это имя имеют

 операторы IFи ENDIF. Имя, если оно задано, во всех частях

 конструкции должно быть одинаковым.

<span Arial",«sans-serif»; color:black;mso-font-width:96%">Конструкция

<span Arial",«sans-serif»; color:black;mso-font-width:96%;mso-ansi-language:EN-US">SELECT<span Arial",«sans-serif»; color:black;mso-font-width:96%"> <span Arial",«sans-serif»;color:black; mso-font-width:96%;mso-ansi-language:EN-US">CASE

<span Arial",«sans-serif»; color:black;mso-font-width:91%">[имя:] 

<span Arial",«sans-serif»; color:black;mso-font-width:91%;mso-ansi-language:EN-US">SELECT<span Arial",«sans-serif»; color:black;mso-font-width:91%"> <span Arial",«sans-serif»;color:black; mso-font-width:91%;mso-ansi-language:EN-US">CASE<span Arial",«sans-serif»;color:black; mso-font-width:91%"> (тест-выражение)

<span Arial",«sans-serif»;color:black;mso-font-width:97%;mso-ansi-language: EN-US">CASE(C

<span Arial",«sans-serif»;color:black;mso-font-width:97%">П<span Arial",«sans-serif»; color:black;mso-font-width:97%;mso-ansi-language:EN-US">1) [<span Arial",«sans-serif»; color:black;mso-font-width:97%">имя<span Arial",«sans-serif»;color:black; mso-font-width:97%;mso-ansi-language:EN-US">]

<span Arial",«sans-serif»; color:black;mso-font-width:95%;mso-ansi-language:EN-US">[

<span Arial",«sans-serif»; color:black;mso-font-width:95%">БОК<span Arial",«sans-serif»;color:black; mso-font-width:95%;mso-ansi-language:EN-US">1]

<span Arial",«sans-serif»; color:black;mso-font-width:95%;mso-ansi-language:EN-US"> 

<span Arial",«sans-serif»;color:black; mso-font-width:90%;mso-ansi-language:EN-US">[CASE(C<span Arial",«sans-serif»; color:black;mso-font-width:90%">П<span Arial",«sans-serif»;color:black; mso-font-width:90%;mso-ansi-language:EN-US">2) [<span Arial",«sans-serif»;color:black; mso-font-width:90%">имя<span Arial",«sans-serif»;color:black; mso-font-width:90%;mso-ansi-language:EN-US">]

<span Arial",«sans-serif»; color:black;mso-font-width:99%;mso-ansi-language:EN-US">[

<span Arial",«sans-serif»; color:black;mso-font-width:99%">БОК<span Arial",«sans-serif»;color:black; mso-font-width:99%;mso-ansi-language:EN-US">2]]

<span Arial",«sans-serif»; color:black;mso-font-width:99%;mso-ansi-language:EN-US">…

<span Arial",«sans-serif»; color:black;mso-font-width:92%;mso-ansi-language:EN-US">[CASE DEFAULT [

<span Arial",«sans-serif»; color:black;mso-font-width:92%">имя<span Arial",«sans-serif»;color:black; mso-font-width:92%;mso-ansi-language:EN-US">]

<span Arial",«sans-serif»; color:black;mso-font-width:97%;mso-ansi-language:EN-US">[

<span Arial",«sans-serif»;color:black;mso-font-width:97%">БОКп<span Arial",«sans-serif»; color:black;mso-font-width:97%;mso-ansi-language:EN-US">]]

ENDSELECT[имя]

Тест-выражение — целочисленное,символьное типа CHARACTER(l)

 Или логическоескалярное выражение.

СП — список констант, тип которых должен соответствоватьтипу тест-выражения.

Конструкция SELECTCASE-работает так: вычисляется значение тест-выражения. Если

полученное значение находится в списке СП1, то выпол­няется БОК1; далееуправление

 передается на следующий за ENDSELECTоператор. Если значение в СП1 не находится,

то проверяется, есть ли оно в СП2, и так далее.Если значение тест-выражения не найдено

 ни в одном списке и присутствует оператор CASEDEFAULT, то выполняется БОКп, а далее

выполняется расположенный за ENDSELECTоператор. Если же значение тест-выражения

 не найдено ни в одном списке и CASEDEFAULTотсутствует, то ни один из БОКл   не выполняется

и управление передается на следующий за ENDSELECTоператор.

Список констант СП может содержать одно значение, илисостоять из разделенных

 запятымиконстант, или быть задан как диапазон разделенных двоеточием значений,

например 5:10 или T:'N'. Левая граница должна был меньше правой. Если задается

диапазон символов, то код первого символе должен бытьменьше кода второго. Если

 опущена леваяграница, например :10, то в СП содержатся все значения, меньшие

 или равные правойграни­це. И наоборот, если опущена верхняя граница, например5:,

 то в СП по­падают все значения, большие или равные нижней границе. СП можеч

 включать также и смесь отдельных значений и диапазонов. Разделителям! между отдельны

ми элементами СП являются запятые, например:

case(1, 5, 10:15, 33)

Нельзя задать в СП диапазон значений, когда тест-выражение имееглогическийтип.

 Каждое значение, даже если онозадано в диапазоне зна чений, может появляться только в одном СП.

<span Times New Roman";mso-ansi-language:EN-US">

<span Times New Roman";mso-ansi-language:EN-US">

<span Times New Roman",«serif»;letter-spacing: 0pt;font-weight:normal">Массив — это объект данных, который содержит конечноечисло скаляр­ных <span Times New Roman",«serif»;letter-spacing: 0pt;font-weight:normal">данных одного типа. В отличие от простой переменноймассив облада­ет атрибутом <span Times New Roman",«serif»;letter-spacing: 0pt;mso-ansi-language:EN-US;font-weight:normal">DIMENSION<span Times New Roman",«serif»; letter-spacing:0pt;font-weight:normal">.<span Times New Roman",«serif»;letter-spacing:0pt;font-weight:normal"><span Times New Roman",«serif»;letter-spacing:0pt;font-weight:normal">Массивызаданной формы

Границыразмерностей массивов — формальных параметров могут определяться передаваемымив процедуру

 значениями других параметров. Так, врассмотренной в разд. 6.3.1 задаче пользовательская функция md

имеетсинтаксис

result= md(d,n)

где  d — массив — формальный параметрзаданной формы; an — целочисленный скаляр, используемый

для задания размера массива d.

функциявызывается 3 раза:

а= md(a, na); mb= md(b, nb); me= md(c, nc)

При каждом вызове фактическим параметром является массивтой же формы, что

 и массив — формальный параметр. Передаваемые размерности пассивов имеют разные значения.

Однако формаассоциируемых при вызове процедуры массивов факти­ческих и формальных

 параметров может различаться, что позволяет вряде случаев упростить написание программы.

Так этопроисходит при создании подпрограммы обмена содержимого двух многомерныхмассивов:

 integer,parameter :: n = <st1:metricconverter ProductID=«5, m» w:st=«on»>5, m</st1:metricconverter>= 10, k = m*n

real a(m, n) /k*1.0/, b(m, n) /k*2.0/

call swap(a, b, m, n)

write(*, *) b

end

 subroutine swap(a, b, m, n)

integerm, n

reala(m*n), b(m*n)            ! а и b– массивы заданной формы)

realc(size(a))                        ! с — автоматический массив

с= а

a= b

end subroutine swap

В общем случаедля формального параметра — массива могут вычислять­ся как нижняя,

 так и верхняя границы размерности. Общий видразмерно­сти таких массивов:

[нижняяграница]: [верхняя граница]

Нижняя и верхняя границы — целочисленныеописательные выражения. Вычисленные

 границы массивафиксируются на время выполнения проце­дуры и не меняются при

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

При работе с такими массивами необходимо следить, чтобыразмер мас­сива — формального

параметра не превосходил размера ассоциированного сним массива — фактического параметра.

Если фактическим параметром является многомерный массив исоот­ветствующим ему формальным

 параметром являетсямассив заданной формы с тем же числом измерений, то для правильного

 ассоциирования необ­ходимоуказать размерности массива — формального параметра такими же,

 Как и у массива — фактического параметра.Исключение может составлять верхняя  граница  последней

размерности массива, котораяможет меньше соответствующей границы массива — фактического параметра.

Если  в качестве фактического параметра задан  элемент массива, т формальныйпараметр

 ассоциируется с элементами массива-родителяначиная с данного элемента и далее по порядку.

Массивы, перенимающие форму

Такие массивы- формальные параметры перенимают форму у соответ­ствующего фактического

 параметра. В результате ранг и формафактического и формального параметров совпадают. При описании

 формы фор­мального параметра каждаяразмерность имеет вид: [нижняя граница] :

гденижняя граница — это целое описательное выражение, которое може!зависеть от данных в процедуре

 или других параметров. Если нижняя гра­ницаопущена, то ее значение по умолчанию равно единице.

 Например» ПРИ вызове

realх(0:3, 0:6, 0:8)

interface

  subroutine asub(a)

real a(:, :, :)

end

end interface

call asub(x)

Соответствующийперенимающий форму массив объявляется так:

subroutine asub(a)

real a(:, :, :)

prnt*, lbound(a, 3), ubound(a,3)       !        1       9

Так как нижняя граница в описаниимассива а отсутствует, то после вызова подпрограммы в ней будет

определен массив а(4, 7, 9).  Если нужно сохранить соответствие границ, томассив а следует объявить так:

reala(0:, 0:, 0:)

В интерфейсном блоке по-прежнему массив а можнообъявить:

realа(:, :, :)

Процедуры, содержащие в качестве формальных параметровперенимающие форму массивы,

 должны обладать явнозаданным интерфейсом.

Сортировка

Основноеназначение сортировки — обеспечить быстрый поиск данных. Помимо этого, вотсортированном

файлеили массиве гораздо быстрее вы­полнять многие вычисления.

Сортировка методом пузырька

Сортировка методом пузырька наиболее проста для реализации,но име­ет по сравнению

 с другими методаминаименьшую вычислительную эффек­тивность.

Не теряя общности, будем для простоты изложения вдальнейшем рас­сматривать задачу

 сортировки массива х целых чисел, в котором первые я чиселдолжны быть

 отсортированы так,чтобы хi <= Xjдля 1 <=i<= j<= п.

Идея сортировки методом пузырька состоит в том, чтобыпросмотреть мас­сив последовательно

 несколько раз. Одинпросмотр состоит из сравнения каж­дого элемента массива со следующим

 за ним элементом (xi сравнивается с xj+1) и обмена этих двух элементов,

 если онирасполагаются не в нужном порядке (если Xi>xi+1)

<span Times New Roman",«serif»; font-weight:normal">Быстрая сортировка<span Times New Roman",«serif»;font-weight:normal">

Рассмотрим массив х

25            37               12               33               48               57               92               86

В нем число 48 характеризуется тем, что, во-первых, всерасположенные левее него числа меньше 48

и, во-вторых, числа, расположенные правее него больше 48.Назовем такое число разделителем массива

. Нетрудно понять, что теперь мы можем отдельно решать задачу сортировки длячисел до разделителя

 и для чисел посленего. Кроме того, сам разделитель нахо­дится в нужной позиции, то есть в

 дальнейшейсортировке он уже не рас­сматривается.

Размещаемые массивы

рассмотренный массив marksявляется статическим — его размерне может быть изменен в процессе вычислений,

поэтому мы вынуждены задать 6горазмер с некоторым запасом (чтобы иметь возможность использовать массив

для любой студенческой группы).Это приводит к тому, что про­грамма, как правило, занимает больше памяти,

чем это требуется на самом деле.Подобного перерасхода памяти можно избежать, если применить ди­намический

 массив и каждый раз выделять под него столькопамяти, Сколько нужно. Работа с динамическим массивом происходит так:

выполняется объявление размещаемого массива. В отличие отстатиче­ских размещаемые массивы объявляются с атрибутом ALLOCATABLE.

Кроме того, каждое измерение размещаемого массива задаетсяв виде

двоеточия,например:
integer, allocatable,dimension(:) :: marks

определяется размер массива;

·<span Times New Roman"">                    

оператором ALLOCATEвыделяется память под массив;

·<span Times New Roman"">                    

после выполнения вычислений выделенная память освобождается. Это

·<span Times New Roman"">                    

выполняется оператором DEALLOCATE;

·<span Times New Roman"">                    

после этого массиву вновь может быть выделена свежая областьпамяти.

При размещении массива параметр STAT= позволяет узнать, удалось лиразместить массив.

 Этот параметр можетбыть опущен, но тогда любая не­удача при выделении памяти приведет к ошибкеэтапа исполнения и остановке

 программы. Параметруказывается в операторе ALLOCATEпоследним. При удачном выделении памяти целочисленнаястатусная переменная

 ierrвозвращает нуль, в противномслучае возвращается код ошибки размещения. Причиной ошибки может быть,например,

недостаток памяти или «попытка разместить ранееразмещенный и не освобожденный оператором DEALLOCATEобъект.

Аналогичную роль играет необязательный параметр STAT= и в операторе DEALLOCATE.

Сечение массива

ВФортране можно получить доступ не только к отдельному элементу массива, но и кнекоторому подмножеству его элементов.

Такоеподмноже­ство элементов массива называется сечением массива. Сечениемассива мо­жет быть получено в результате применения

индексноготриплета или век­торногоиндекса, которые при задании сечения подставляются вместо од­ного изиндексов массива.

Индексный триплетимеет вид: [нижняя граница]: [верхняя граница] [.шаг]

Каждый изпараметров триплета является целочисленным выражением. Шаг измененияиндексов может быть и положительным и

отрицательным,но не может равняться нулю. Все параметры триплета являются необяза­тельными.

Индексныйтриплет задает последовательность индексов, в которой пер­вый элемент равен егонижней границе,

а каждыйпоследующий больше (меньше) предыдущего на величину шага. В последовательностинаходятся все

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

верхней ишаг положите­лен или нижняя граница меньше верхней и шаг отрицателен, топоследова­тельность является пустой.

Пример.
reala(1:10);,

а(3:7:2) = 3.0      ! Триплет задает сечение массива с элементами
                                   ! а(3), а(5),а(7), которые получат значение 3.0
а(7:3:-2)= 3.0           ! Элементы а(7), а(5),а(3) получат значение 3.0

<span Times New Roman»;mso-ansi-language:EN-US">

<span Times New Roman";mso-ansi-language:EN-US">

<span Times New Roman";mso-ansi-language:EN-US">

<span Times New Roman";mso-ansi-language:EN-US">

Автоматические массивы

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

Такие массивы, так же как и локальные строки переменной длины (разд.10.4), относятся к автомати­ческим объектам.

Рекурсивные процедуры

Фортранподдерживает рекурсивные вызовы внешних, модульных и внутренних процедур.

Процедураназывается рекурсивной, если она обраща­ется сама к себе или вызываетдругую процедуру, которая, в свою очередь,

вызывает первуюпроцедуру. В первом случае рекурсия называется прямой, во втором — косвенной.

Оператор объявления рекурсивной процедуры должен предваряться префиксом RECURSIVE. Внутри рекурсивной

 процедуры интерфейс к этойпроцедуре является явным (см. разд. 16.4.3).

Пример. Разработать подпрограмму subst, которая в данной строке заме­няет все вхожденияподстроки sub1

 на подстроку sub2. Так, если дана стро­ка 'abc1abc2abc3' и sub1 = 'abc', asub2 = ' d', то результатом должна быть строка ' dld2 d3'.

program stgo

 character(len = 20) :: st = 'abc1abc2abc3'

call subst(st, 'abc', d')                                                     ! subst содержитпрямую

write(*, *)  st                                                                    ! рекурсиюd1 d2 d3

end

recursive subroutine subst(st, subl, sub2)

character(len= *) st, sub1, sub2                                                           ! Длина каждой строки определяется
integerip                  ! длиной соответствующего
ip= index(st, sub1)                                                                                    ! фактическогопараметра
if(ip> 0) then

st= st(:ip — 1) // sub2 // st(ip + len(subl):)

call subst(st, subl, sub2)      ! Рекурсивный вызовподпрограммы
endif                                                                                                                        !выполняется до тех пор, пока

end                           ! не выполнены всезамены sublна sub2

Если функция содержит прямую рекурсии, то есть непосредственно вы­зываетсама себя, результату необходимо дать имя,

отличное от имени Функции. Это выполняется путем добавления взаголовок функции пред­ложения RESULT.

В случае косвенной рекурсии имя результирующей пе-Ременнрди имя функции могут совпадать.

Символьные типыданных

Символьный тип данных позволяет задатьобъект, состоящий из последовательности символов.

 Такую последовательность мы будем строкой. Символьный тип данных могутиметь объекты: переменные,

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

 встроенная операция — операция конкатенации(обозначается двумя слешами //), позволяющая выполнять

 объединение отдельных строк или подстроксимволов. Объявление символьных.данных выполняется

 оператором CHARACTER, например:

character:: ch= 'а'          ! Символьнаяпеременная длиной в 1 символ

character(len= 20) st         ! Символьная переменная из20 символов

st= 'Example'                ! Присвоим значениесимвольной переменной

st== st //'_' // ch          !Возвращает:Example_a

Оператор CHARACTERсодержит в скобках данные о длинесимволь­ного объекта. Если длина не задана,

 то по умолчанию она принимается равнойединице.

<span Times New Roman"">