Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Ответы информатика.doc
Скачиваний:
0
Добавлен:
01.05.2025
Размер:
1.14 Mб
Скачать
  1. Перечислите типы операторов, используемые императивными языками программирования, рассмотрите различные варианты реализации условных и операторов повторения (на примере Паскаля)

О ператоры в алгоритмических языках могут быть:

а) простыми (наиболее характерным оператором этого вида является оператор присваивания, он предписывает выполнить выражение, заданное в его правой части, и присвоить результат переменной, идентификатор которой расположен в левой части);

б) ввода-вывода, в качестве которых наиболее часто используются термины read, write, print;

в) структурными, или составными, которые представляют собой структуры, построенные из других операторов по строго определенным правилам (к таким операторам относятся условные операторы и операторы повтора).

На рисунке представлены разновидности структурных операторов (на примере Паскаля).

  1. Основные принципы процедурно-ориентированного (модульного) программирования, разновидности модулей (на примере Фортрана)

Основная причина, по которой разрабатываемое ПО разбивается на модули, это борьба со сложностью ПО. Модульный стиль программирования заключается в том, что алгоритм любой исходной задачи представляется как композиция алгоритмов простых подзадач, последовательно выделенных из исходной задачи. Каждая подзадача может быть реализована с помощью функций и процедур или с помощью модулей. Принципы модульного программирования позволяют получать программные комплексы минимальной сложности. Принципы: а) усиление внутренних связей в каждом модуле (иначе принцип называется повышением прочности модуля); б) ослабление взаимосвязи между модулями (иначе этот принцип называется ослаблением сцепления модулей). В модуле определяются типы, данные, процедуры (подпрограммы subroutine, function), интерфейсы.

Структура модуля и пример:

MODULE имя

[определения]

...

[CONTAINS

процедуры модуля]

END [MODULE [имя]]

MODULE global

REAL, DIMENSION(100) :: a, b, c

INTEGER :: list(100)

LOGICAL :: test

END MODULE global

Схема структуры модуля показывает, что все содержащиеся в модуле процедуры (подпрограммы и функции) размещаются между ключевыми операторами CONTAINS и END MODULE.

Пример модуля cartesian с процедурой swap:

MODULE cartesian

TYPE point

REAL :: x, y

END TYPE point

CONTAINS

SUBROUTINE swap( p1, p2 )

TYPE(point), INTENT(INOUT):: p1, p2

TYPE(point) :: tmp

tmp = p1

p1 = p2

p2 = tmp

END SUBROUTINE swap

END MODULE cartesian

В этом модуле дается описание типа point как структуры, содержащей два поля x, y типа REAL, а также процедура swap с двумя параметрами p1, p2, из которых каждый описан имеющим тип point и атрибут INTENT (вид параметра) со значением INOUT (входной IN и выходной OUT одновременно, или изменяемый). Тип point задан и для локальной переменной tmp. Символом :: отделяется перечисление свойств переменных от списка переменных.

Использование cartesian. Использование описаний и процедур модуля должно идти после объявления о намерении использовать модуль (оператор USE) в использующей процедуре.

PROGRAM graph

USE cartesian

TYPE(point) :: first, last

...

CALL swap( first, last)

...

END PROGRAM graph

Две разновидности модулей: первый модуль – подпрограмма функции, которая определяется следующим образом: t FUNCTION f(a1,a2…an), где t – тип функции: Integer, Real, Double Precision, Complex, Logical; по умолчанию Real или Integer, определяется первой буквой имени функции; FUNCTION – ключевое слово; f – имя функции; a1,a2, …, an – формальные параметры. Структура:

FUNCTION Name(a1, a2, …, an)

и сполнимая часть

Name=Result

Return

End

После выполнения основной (исполнимой) части имени функции присваивается значение полученного результата ее работы (Result). Оператор Return передает результат в вызывающую программу (End –завершение текста подпрограммы при трансляции).

Второй вид модулей универсального назначения, в Фортране называется SUBROUTINE, в Паскале – PROCEDURE (в отличие от SUBROUTINE подпрограмма PROCEDURE является внутренним программным модулем, доступ к которому возможен только из самой вызывающей программы, в состав которой он входит). В языке С, хотя все модули называются функциями, имеется два особых вида таких модулей, вызываемых из главной программы (main) с возможностями SUBROUTINE и PROCEDURE.

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

Программа SUBROUTINE оформляется следующим образом:

SUBROUTINE S(a1,a2, …, an)

Т ело подпрограммы

Исполнительная часть

RETURN

END

где SUBROUTINE – ключевое слово; S – имя подпрограммы (не имеет типа и никак не связано с входными и выходными параметрами); a1,a2, …, an – формальные параметры, используемые при работе подпрограммы, включая и выходные параметры (результаты вычислений). Формальные и фактические параметры должны быть согласованы между собой (так же, как и в подпрограмме функции) по типу, количеству и порядку следования. Естественно выходные (вычисляемые) параметры фигурируют в главной программе только в виде имен (не имеющих значений до начала работы модуля). RETURN и END – выполняют те же функции, что и в подпрограмме функции.