Реферат по предмету "Программное обеспечение"


Шпаргалки по Fortran

1.информация. Количество информации. Представление информации вЭВМ.
2.Решение задач с использованием ЭВМ. Понятие об устройстве ЭВМ.Организация вычислительного процесса б ЭВМ.
3.Алгоритм. Свойства алгоритма. Способы представления алгорит­ма.Типы алгоритмов.
4.Порядок подготовки программы, исходный текст, трансляция иинтерпретация, редактирование связей. Язык программирования Фортран
5.Фортран.Злементы языка. Алфавит, лексемы, имена, выражения иоперации, операторы.
8.Фортран.Встроенные типы данных. Объявление данных. Правилоумолчания о типах данных.
7.Фортран. Встроенные операции. Оператор присваивания.
8.Конструкция DO. Разновидности конструкции DO. Операторы
CYCLE, EXIT.
9.ОператорIF, конструкцияIF THEN ENDIF.
10.КонструкцияIF THEN ELSE ENDIF,
11.ИнструкцияIF THEN ELSE IF.
12.КонструкцияSELECT CASE.
13.Программные компоненты и процедуры. Главная программа.
14.Программные компоненты и процедуры. Подпрограммы.
15.Программные компоненты и процедуры. Функции.
16.Программные компоненты и процедуры. Модули.
17.Обращение к сопрограммам. Параметры процедур. Виды связи
параметра. Атрибут INTENT.
13.Явный и неявный интерфейс. Оператор INTERFACE.
19.Области видимости имен и меток.
20.Производные типы данных. Оператор TYPE.
21.Массивы фиксированного размера. Описание, присвоение значений.Выражения с массивами. Сечения массивов, массивов.
22.Символьные данные, символьные вырашия.Текстовые подстро­ки. 23.Оператор и конструкция WHERE.
24.Динамические массивы. Размещаемые массивы.
25.Динамические массивы. Автоматические массивы.
26.Массивы — формальные параметры процедур. Массивы заданнойформы.
27.Массивы — формальные параметры процедур. Массивы, перенимаю-дше форму.
28.Массивы — формальные параметры процедур. Массивы, перенимаю­щиеразмер.
29.Ассоциирование памяти. Оператор COuuO".
30.Ассоциирование памяти. Оператор EQUIVALENCE.
31.Рекурсия. Рекурсивные алгоритмы и определения.
32.Рекурсивные субпрограмны. ПредложениеRESULT. Рекурсия «изнутри»
З9.Сортировка. Постановка задачи. Сортировка выбором.
40. Пузырьковая сортировка.
41. Пирамидальная сортировка.
42. Быстрая сортировка.
43. Поиск. Постановка задачи. Дихотомический поиск.

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, обеспечивающеговозврат из подпрограммы.
Оператор EXIT[имя}
передает управление из DO-конструкции напервый следующий за kohiрукцией
 выполняемыйоператор. Если имя опущено, то EXITобеспечив; выход из текущего цикла,
 в противномслучае EXITобеспечивает выход цикла, имя которогоприсутствует в операторе EXIT.
Оператор CYCLE [имя]
передает управление на начало DO-конструкции. Приэтом оператор расположенные
 между CYCLEи оператором ENDDOконца цикла, невыполняются. Если имя опущено, то CYCLE
обеспечивает переход на начало текущего цикла, в противном случае CYCLEобеспечивает
 переход на начало цикла, имя которого присутствует в операторе CYCLE.
Условныйлогический оператор IF
IF(ЛВ) оператор
Если истинно ЛВ, то выполняется оператор,в противном случае управ­ление передается на
последующий оператор программы.
Конструкция IFTHENENDIF
[имя-.]IF(ЛВ) THEN
БОК
END IF [имя]
БОК выполняется, если истинно ЛВ. Еслиприсутствует имя конструк­ции, то оно должно
 быть ив первом и в последнем операторе конструкции, например:
swap: if(x
hold = х;   х= у;   у= hold
end if swap
Замечание.Если БОКсодержит один оператор, то лучше использовать
оператор
IF(ЛВ) оператор
Конструкция IFTHENELSEENDIF
[имя:] IF(ЛВ) THEN
БОК1
ELSE [имя]
БОК1
ENDIF[имя]
В случае истинности ЛВ выполняется БОК1 ивыполняется БОК2, если ЛВ ложно.
Имя конструкции, если оно задано, должнообязательно присут­ствовать и перед IF,
ипослеEND IF.
Конструкция IF THEN ELSE IF
[имя:] IF(ЛВ) THEN
БОК1
ELSE IF(ЛВ2) THEN [имя]
 БОК2

[ELSE [имя]
БОКn
END IF [имя]
В случае истинности ЛВ1 выполняется БОК1 иуправление передается на
 следующий за ENDIFоператор.Если ЛВ1 ложно, то управление
 пере­дается на следующий ELSEIF, то естьвычисляется значение
ЛВ2 и, если оно истинно,то выполняется БОК2. Если оно ложно, то
 управление пере­дается наследующий ELSEIF, и так далее. Если ложны все
 ЛВ, товыпол­няется следующий за завершающим ELSEБОКп.
Если завершающий ELSEотсутствует, тоуправление передается на расположенный
 за ENDIFопера­тор. Число операторов ELSEIFв конструкции может быть
произвольным. Имя в ELSEи в ELSEIFможно задавать, если это имя имеют
 операторы IFи ENDIF. Имя, если оно задано, во всех частях
 конструкции должно быть одинаковым.
Конструкция SELECT CASE
[имя:]  SELECT CASE (тест-выражение)
CASE(CП1) [имя]
[БОК1]
 [CASE(CП2) [имя]
[БОК2]]

[CASE DEFAULT [имя]
[БОКп]]
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)
Нельзя задать в СП диапазон значений, когда тест-выражение имееглогическийтип.
 Каждое значение, даже если онозадано в диапазоне зна чений, может появляться только в одном СП.

Массив — это объект данных, который содержит конечноечисло скаляр­ных данных одного типа. В отличие от простой переменноймассив облада­ет атрибутом DIMENSION.Массивызаданной формы
Границыразмерностей массивов — формальных параметров могут определяться передаваемымив процедуру
 значениями других параметров. Так, врассмотренной в разд. 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 = 5, m= 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
Идея сортировки методом пузырька состоит в том, чтобыпросмотреть мас­сив последовательно
 несколько раз. Одинпросмотр состоит из сравнения каж­дого элемента массива со следующим
 за ним элементом (xi сравнивается с xj+1) и обмена этих двух элементов,
 если онирасполагаются не в нужном порядке (если Xi>xi+1)Быстрая сортировка
Рассмотрим массив х
25            37               12               33               48               57               92               86
В нем число 48 характеризуется тем, что, во-первых, всерасположенные левее него числа меньше 48
и, во-вторых, числа, расположенные правее него больше 48.Назовем такое число разделителем массива
. Нетрудно понять, что теперь мы можем отдельно решать задачу сортировки длячисел до разделителя
 и для чисел посленего. Кроме того, сам разделитель нахо­дится в нужной позиции, то есть в
 дальнейшейсортировке он уже не рас­сматривается.
Размещаемые массивы
рассмотренный массив marksявляется статическим — его размерне может быть изменен в процессе вычислений,
поэтому мы вынуждены задать 6горазмер с некоторым запасом (чтобы иметь возможность использовать массив
для любой студенческой группы).Это приводит к тому, что про­грамма, как правило, занимает больше памяти,
чем это требуется на самом деле.Подобного перерасхода памяти можно избежать, если применить ди­намический
 массив и каждый раз выделять под него столькопамяти, Сколько нужно. Работа с динамическим массивом происходит так:
выполняется объявление размещаемого массива. В отличие отстатиче­ских размещаемые массивы объявляются с атрибутом ALLOCATABLE.
Кроме того, каждое измерение размещаемого массива задаетсяв виде
двоеточия,например:
integer, allocatable,dimension(:) :: marks
определяется размер массива;
·                    оператором ALLOCATEвыделяется память под массив;
·                    после выполнения вычислений выделенная память освобождается. Это
·                    выполняется оператором DEALLOCATE;
·                    после этого массиву вновь может быть выделена свежая областьпамяти.
При размещении массива параметр 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




Автоматические массивы
В процедуре может быть задан локальный массив, размеры которого могутменяться при разных вызовах процедуры.
Такие массивы, так же как и локальные строки переменной длины (разд.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содержит в скобках данные о длинесимволь­ного объекта. Если длина не задана,
 то по умолчанию она принимается равнойединице.


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

Поделись с друзьями, за репост + 100 мильонов к студенческой карме :

Пишем реферат самостоятельно:
! Как писать рефераты
Практические рекомендации по написанию студенческих рефератов.
! План реферата Краткий список разделов, отражающий структура и порядок работы над будующим рефератом.
! Введение реферата Вводная часть работы, в которой отражается цель и обозначается список задач.
! Заключение реферата В заключении подводятся итоги, описывается была ли достигнута поставленная цель, каковы результаты.
! Оформление рефератов Методические рекомендации по грамотному оформлению работы по ГОСТ.

Читайте также:
Виды рефератов Какими бывают рефераты по своему назначению и структуре.