ПОДПРОГРАММЫ
В программировании часто возникают ситуации, при которых один и тот же фрагмент программы, реализующий определенную цель, требуется повторить в нескольких местах программы без изменений. Если подойти к этому вопросу с точки зрения многократного копирования данного фрагмента, то это лишь увеличит объем программы и затруднит понимание ее логики. Для избавления от этих недостатков предложена концепция подпрограмм.
Процедуры
Подпрограмма — независимая, именованная, логически законченная часть программы, которая после однократного описания может быть многократно вызвана для выполнения из различных мест программы. Подпрограммы являются средством структурирования программ, при котором основная программа разбивается на ряд самостоятельных частей (подпрограмм), каждая из которых предназначена для выполнения отдельной, сравнительно узкой задачи. Применение подпрограмм позволяет: сделать текст программы более понятным и выразительным; сократить объем программы; упростить процесс отладки и внесения изменений в повторяющиеся фрагменты, так как исправления в этом случае следует производить только один раз в подпрограмме, а не несколько раз по всему тексту программы 13.
В языке Pascal определены два вида подпрограмм: процедуры и функции, которые подразделяются на две группы: стандартные или встроенные (входят в стандартные библиотеки языка Pascal) и определенные пользователем (пишутся самим программистом).
Каждая процедура или функция должна быть описана в разделе объявления процедур и функций. Описание процедуры состоит из заголовка процедуры и тела процедуры. Заголовок включает служебное слово procedure (англ, процедура), имя процедуры и список формальных параметров с указанием их типов. Структура процедуры: procedure ( ;
В конце тела процедуры ставится не точка, а точкой с запятой. Формальные параметры отделяются друг от друга точкой с запятой, при этом однотипные параметры могут быть перечислены через запятую. Формальные параметры нельзя описывать в разделе объявлений процедуры.
Для обращения к процедуре в основной программе или другой подпрограмме используется оператор вызова процедуры, который имеет следующую структуру
A:array[1..100] of matrix; nn,mm,aa,bb:array[1..100] of integer; maxx,imaxx,jmaxx:array[1..100] of integer; i,k:integer;
write(‘Введите число матриц к: к=’);readln(к);
writein(‘Для матрицы ‘,i,’ введите:’);
Результат работы программы (для наглядности результат приве
ден в три колонки, программа выводит результат в одну колонку):
Введите число матриц к: к=3
Для матрицы 1 введите: Для матрицы 2 введите: Для матрицы 3 введите:
- 58 20 64 58 85 51
- 62 70 69 88 39 24
- 31 28 83 29 43 55
- 68 58 81 72 65 13
- 62 68 84 52 17 70 max 1: [2,4]=88
- 52 67 69 40
- 47 43 68 35
- 66 58 49 45 max 3: [1,3]=69
- б) (input(n,m,a,b,Dj) в) (output(n,m,D^
Рис. 17.1. Блок-схема программы с использованием процедур (начало)
Рис. 17.1. Окончание
Структура программы в Pascal
Любая программа, написанная на языке Pascal состоит из заголовка программы и некоторого блока. Блок содержит раздел описаний, в котором определяются все локальные по отношению к данной программе объекты, и раздел операторов. Он задает действия, которые необходимо выполнять, над этими объектами.
program имя программы; uses Label . . . ; Const . ; . ; Type = ; Var :; Function . ; Procedure . ; begin . ; . ; end.
Заголовок программы
В заголовке программе дается некоторое имя. Обычно стараются выбирать имя, отражающее основную функцию, выполняемую программой. Заголовок всегда начинается со служебного слова program , после которого через пробел пишется имя программы. Оно может состоять из символов английского алфавита, цифр и знака подчеркивания. Имя программы всегда должно начинаться с буквы.
В имени программы нельзя использовать какие-либо предописанные имена (зарезервированные слова). Они используются в программе только в том значении, которое зафиксировано для них разработчиками языка Pascal. Ниже приведен список таких слов.
and | end | nil | set |
array | file | not | then |
begin | for | of | to |
case | function | or | type |
const | goto | packed | until |
div | if | procedure | var |
do | in | program | while |
downto | label | record | with |
else | mod | repeat |
Заголовок носит чисто информативный характер и никак не влияет на программу. Программу можно написать и не используя его. После имени программы в ранних редакциях языка указывались круглые скобки и в них давались имена входных и выходных файлов задачи. В последних версиях языка Pascal имена входных и выходных файлов в заголовке программы отсутствуют.
Пример правильного написания заголовка:
program Perimetr; program Phone37; program one_two_3;
Пример неправильного написания заголовка:
program 9zet; program Samara-63; program repeat;
Label — раздел описания меток
Любой оператор программы можно маркировать, поставив перед ним через двоеточие метку, тем самым появляется возможность ссылаться на эту метку при помощи оператора перехода goto . Однако такая метка, прежде чем она будет использована, должна быть описана в разделе описания меток. Этот раздел начинается со слова Label .
Имя метки может включать в себя буквы английского алфавита, цифры и знак подчеркивания. При этом, в отличии от имени программы метка может начинаться с цифры, да и вообще состоять только из цифр, но это число должно представлять собой целое число без знака, лежащее в диапазоне от 0 до 9999.
Пример правильного написания меток:
label 13, 00100, 99, qwerty, x_y;
Раз уж разговор зашел про метки, то нужно сказать, что использование меток и оператора перехода goto не желательно при написании программы на Pascal. Применять его стоит только в необычных, исключительных ситуациях, когда приходится нарушать естественную структуру алгоритма. Частое появление в программе на Pascal оператора перехода свидетельствует о том, что программист еще не научился думать на Pascal.
Этот раздел необязателен, если у вас в программе не используются метки.
Const — раздел определения констант
Константы — это величины, которые не меняют своих значений в процессе выполнения программы. Допустим, в вашей программе часто приходится оперировать с числом 3,14 (число Пи). Чтобы каждый раз не вводить это число, мы определяем константу с именем Pi и в вычисления уже подставляем ее.
Использование имен констант делает программу более «читаемой» и способствует улучшению ее документируемости. Кроме того, это позволяет программисту сгруппировать в начале программы величины, зависящие от машины или характерные для данного примера: здесь они более заметны и их легче изменить. Тем самым улучшается переносимость программ и их модульность.
Начинается данный раздел со служебного слова Const . Далее идут описания констант, каждое из которых начинается с имени константы, затем идет символ = (равенство), после чего пишется константа или выражение, составленное из констант. Завершается каждое описание точкой с запятой.
Константа может иметь только предопределенный (стандартный) тип данных. Тип присваивается константе по внешнему виду значения и в соответствии с этим типом отводится память для хранения значения константы.
В качестве расширения стандартного Паскаля разрешено использовать выражения, составленные из ранее определенных констант и некоторых стандартных функций: Abs, Chr, Hi, Length, Lo, Odd, Ord, Pred, Prt, Round, SizeOf, Succ, Swap, Trunc . Константные выражения вычисляются компилятором без выполнения программы на этапе ее создания. Пример:
const Avogadro = 6.023Е23; PageLength = 60; MyMove = True; stroka = 'abcdefg'; Min = 0; Max = 250; Centr = (Max-Min) div 2; Beta = Chr(225); NumChars = Ord('2') - Ord('A')+l;
Type — раздел описания типов
Помимо стандартных типов данных в Pascal (Real, Integer, Boolean, Char) пользователь может задать новые типы. Структура раздела описания типов имеет вид:
Имя типа представляет собой идентификатор, который может употребляться в других типах, описанных вслед за данным типом. Вообще, новые типы можно определять и в разделе переменных Var, поэтому можно обойтись без этого раздела. Приведу несколько примеров описания типов:
Type Year = 1800.. 2015; Alfavit = (‘А’, ‘B, ‘C’, ‘T, ‘L’); Matrica = array[1..12, ‘А’.. ‘Z’] of real;
Var — раздел описания переменных
Этот раздел является обязательным. Переменные отличаются от констант тем, что им можно присваивать новые значения при исполнении программы. Любая переменная, которая будет использована в программе должна быть описана. Что включает в себя описание переменной? Это значит, что переменной должен быть присвоен какой-либо тип данных, который характеризует множество значений, которые может принимать объект; множество операций, которые могут применяться к объекту; размер памяти, занимаемый объектом.
Начинается этот раздел с предописанного слова var . Следом идут описания переменных, каждое из которых начинается со списка имен переменных, разделяемых запятыми, затем идет символ : (двоеточие), затем указывается тип этих переменных. Завершается каждое описание точкой с запятой.
Структура раздела имеет вид:
Тип переменных представляет собой имя (идентификатор), описанный в разделе TYPE при явном описании типа, или собственно описание типа в случае его неявного задания. Примеры описания переменных:
Var Year: 1800.. 2000; А, В, C: Real; Istina: Boolean; Stroka: Char; I, J, К: Integer;
Function, Procedure — раздел описаний процедур и функций
В разделе Function и Procedure описываются пользовательские процедуры и функции, если таковые имеются. Если их нет, то этот раздел не обязателен в программе.
Процедура представляет собою подпрограмму и активируется (начинает выполняться) через оператор процедуры. Функция — это тоже подпрограмма, но она выдает некоторое значение — результат и поэтому используется, как компонента выражения.
Структура раздела имеет вид:
Procedure (); Begin End; Function (): ; < заголовок > Begin End;
Структура процедур и функций та же самая, что и у основной программы. Отличие описаний состоит в том, что идентификаторы констант, переменных, процедур и функций, описанных в соответствующих разделах описаний пользовательских процедур и функций, распространяются только на блоки, где они описаны и на блоки внутренние по отношению к ним. На внешние блоки, в том числе на тело основной программы, они не распространяются.
© program4you.ru 2015 — 2022
Копирование материалов сайта разрешено только при наличии активной ссылки на данный сайт
Блок-схема алгоритма
Задание алгоритмов с помощью блок-схем оказалось очень удобным средством изображения алгоритмов и получило широкое распространение.
алгоритма — графическое изображение алгоритма в виде связанных между собой с помощью стрелок (линий перехода) и блоков — графических символов, каждый из которых соответствует одному шагу алгоритма. Внутри блока дается описание соответствующего действия.
В таблице приведены наиболее часто употребляемые символы.
Название символа | Обозначение и пример заполнения | Пояснение |
---|---|---|
Процесс | Вычислительное действие или последовательность действий | |
Решение | Проверка условий | |
Модификация | Начало цикла | |
Предопределенный процесс | Вычисления по подпрограмме, стандартной подпрограмме | |
Ввод-вывод | Ввод-вывод в общем виде | |
Пуск-остановка | Начало, конец алгоритма, вход и выход в подпрограмму | |
Документ | Вывод результатов |
Блок «процесс» применяется для обозначения действия или последовательности действий, изменяющих значение, форму представления или размещения данных. Для улучшения наглядности схемы несколько отдельных блоков обработки можно объединять в один блок. Представление отдельных операций достаточно свободно.
Блок «решение» используется для обозначения переходов управления по условию. В каждом блоке «решение» должны быть указаны вопрос, условие или сравнение, которые он определяет.
Блок «модификация» используется для организации циклических конструкций. (Слово «модификация» означает «видоизменение, преобразование»). Внутри блока записывается параметр цикла, для которого указываются его начальное значение, граничное условие и шаг изменения значения параметра для каждого повторения.
Блок «предопределенный процесс» используется для указания обращений к вспомогательным алгоритмам, существующим автономно в виде некоторых самостоятельных модулей, и для обращений к библиотечным подпрограммам.
Для примера приведем блок-схемы алгоритма нахождения максимального из двух значений: