Автор: Пользователь скрыл имя, 23 Марта 2012 в 21:24, курс лекций
Этапы решения задач на ЭВМ. Алгоритм и его свойства. Способы записи алгоритма: словесный способ; структурно-стилизованный способ; блочно-схематический способ; структурограммы Насси-Шнейдермана; программный способ.
S=S+A(I, J)
NEXT I
B(J)=S : PRINT B(J);
NEXT J
END
Тема 17. Модульное программирование
Подпрограммы. Процедуры и функции
При создании программы для решения сложной задачи программисты выполняют разделение этой задачи на подзадачи, подзадачи – на еще меньшие подзадачи и так далее, до легко программируемых элементарных задач. QB позволяет разделять программу на отдельные части, которые называются подпрограммами. Сам термин подпрограмма говорит о том, что она подобна и подчинена основной программе. Подпрограммы решают три важные задачи, значительно облегчающие программирование:
избавляют от необходимости многократно повторять в тексте программы аналогичные фрагменты, т.е. сократить объем программы;
улучшают структуру программы, облегчая понимание при разборе;
уменьшают вероятность появления ошибок, повышают устойчивость к ошибкам программирования и непредвиденным последствиям при модификации.
Подпрограмма – это повторяющаяся группа операторов, оформленная в виде самостоятельной программной единицы. Она записывается однократно, а в соответствующих местах программы обеспечивается лишь обращение к ней по имени.
Принципы выделения подпрограмм:
если в программе необходимо переписывать одни и те же последовательности команд, то стоит эту последовательность команд оформить в виде подпрограммы;
иногда слишком много мелочей закрывают главное. Стоит перенести в подпрограмму подробности, заслоняющие основной смысл программы;
слишком длинную программу полезно разбить на составные части;
при решении задачи могут возникать слишком сложные подзадачи. Целесообразней отладить их отдельно в небольших программах. Добавление этих программ в основную задачу будет легким, если они оформлены как подпрограммы;
все, что сделано хорошо в одной программе, можно переносить в новые программы. Для повторного использования частей кода лучше сразу выделять в программе полезные подзадачи в виде отдельных подпрограмм.
Механизм подпрограмм реализуется в виде процедур и функций, которые вводятся в программу с помощью своего описания, но их структура такая же, как и структура программы. Они различаются назначением и способом их использования.
Процедуры
Процедуры предназначены для выполнения некоторой последовательности действий. Любая процедура начинается с заголовка. Он состоит из служебного слова SUB, за которым следует имя процедуры, а в круглых скобках – список формальных параметров.
Общий вид процедуры:
SUB имя [(формальные параметры)]
[операторы]
[EXIT SUB]
[операторы]
END SUB
Результат выполнения процедуры – это одно или несколько значений. Результат передается в основную программу как значение ее параметра. При вызове процедуры ее формальные параметры заменяются фактическими в порядке их следования.
Фактические параметры – это параметры, которые передаются процедуре при обращении к ней.
Формальные параметры – это переменные, фиктивно присутствующие в процедуре и определяющие тип и место подстановки фактических параметров, над которыми производятся действия.
Число и тип формальных и фактических параметров должны совпадать с точностью до их следования. Все формальные параметры делятся на два вида: параметры-переменные и параметры-значения.
В QB для передачи по значению переменные берутся в круглые скобки. То есть передается только копия значения этих параметров, внутри процедуры можно производить любые действия с данными формальными параметрами (допустимые для его типа), но их любые изменения никак не отражаются на значениях соответствующих фактических параметров, т.е. какими они были до вызова процедуры, то такими же и останутся после завершения ее работы.
Без круглых скобок переменные передаются по ссылке. Это делается для того, чтобы изменения в теле процедуры значений формальных параметров приводило к изменению соответствующих фактических параметров, таким образом они и получают новое значение.
Областью действия переменной (идентификатора) называется часть программы, где она может быть использована. Область действия переменных определяется местом их объявления. В программе все переменные делятся на глобальные и локальные. Глобальные переменные – это те переменные, которые объявлены в описании основной части, и их могут использовать любые процедуры и функции данной программы. Переменные, описанные внутри подпрограммы, называются локальными и могут быть использованы только внутри данной подпрограммы. Локальные переменные могут быть описаны как в заголовке программы, так и в разделе описания переменных. При совпадении имен глобальных и локальных переменных, локальные определения в пределах своего действия отменяют действия локальных, и эти переменные никак не связаны между собой.
Подпрограмма должна быть, по возможности, независима от основной программы, поэтому все переменные, нужные только в пределах подпрограммы, должны описываться как локальные. Общение основной программы с подпрограммой должно, как правило, идти через список параметров подпрограммы, что придает ей необходимую гибкость.
Локальность или глобальность – понятия относительные. Программа с вложенными в нее подпрограммами представляет собой иерархическое дерево. Объект, локальный по отношению к более высокому уровню иерархии, ведет себя как глобальный по отношению к объектам более низкого уровня.
Задача 17.1. Вычислить площади двух прямоугольников.
INPUT A1, B1
C=A1 : D=B1 : CALL AREA
S1=S
INPUT A2, B2
C=A2 : D=B2 : CALL AREA
S2=S
PRINT ″S1=″;S1
PRINT ″S2=″;S2
END
SUB AREA
S=C*D
END SUB
Функции
Функции предназначены для того, чтобы вычислять только одно значение, поэтому ее первое отличие состоит в том, что процедура может иметь новые значения у нескольких параметров, а функция только одно (оно и будет ее результатом).
Второе отличие заключается в заголовке функции. Оно состоит из слова FUNCTION, за которым идет имя функции, затем в круглых скобках идет список формальных параметров.
FUNCTION имя [(формальные параметры)]
[]
имя=выражение
[EXIT FUNCTION]
[операторы]
END FUNCTION
Например:
DECLARE FUNCTION TEST.RESULT$(ANSWER%)
? ″ Первый компьютер появился в″
? ″1) 1945 году ″
? ″2) 1955 году ″
? ″3) 1965 году ″
? ″Введите номер правильного ответа″
INPUT NUMBER%
TXT$=TEST.RESULT$(NUMBER%)
? TXT$
END
FUNCTION TEST.RESULT$(ANSWER%)
IF ANSWER%=1 THEN
TEST.RESULT$= ″Верно″
ELSE
TEST.RESULT$= ″Неверно″
END IF
END FUNCTION