Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Програмирование. Структурное програмирование, подпрограммы, строки. Учебное пособие

.pdf
Скачиваний:
0
Добавлен:
07.09.2026
Размер:
1 Мб
Скачать
☆
Министерство образования и науки Российской Федерации
НОВОСИБИРСКИЙ ГОСУДАРСТВЕННЫЙ ТЕХНИЧЕСКИЙ УНИВЕРСИТЕТ
М.Г. ЗАЙЦЕВ
ПРОГРАММИРОВАНИЕ
СТРУКТУРНОЕ ПРОГРАММИРОВАНИЕ,
Утверждено Редакционно-издательским советом университета
в качестве учебного пособия
НОВОСИБИРСК
2016
1
УДК 004.4(075.8) З-177
Рецензенты:
канд. техн. наук, доц. В.Г. Кобылянский,
ст. преподаватель кафедры ТС и ВС СибГУТИ Л.Ф. Лебеденко
Зайцев М.Г.
З-177 Програмирование. Структурное програмирование, подпрограм-
мы, строки : учеб. пособие / М.Г. Зайцев. – Новосибирск : Изд-во НГТУ, 2016. – 103 с.
ISBN 978-5-7782-2938-9
Учебное пособие предназначено для студентов, обучающихся по направлениям «Бизнес-информатика», «Прикладная информатика» дневной заочной и дистанционной форм обучения дисциплинам «Программирование», «Информатика и программирование» соответ­ственно. Материал пособия охватывает часть первом из двух семестров обучения. Излагаются вопросы проектиро­вания, анализа, тестирования и реализации процессов обработки дан­ных с использованием подпрограмм переменных строкового типа и массивов в технологии структурного программирования. Примеры упражнений выполнены на языке Object Pascal.
материала, изучаемого в
Работа подготовлена кафедрой теоретической
и прикладной информатики
УДК 004.4(075.8)
ISBN 978-5-7782-2938-2 Зайцев М.Г., 2016
Новосибирский государственный
технический университет, 2016
2
ПОДПРОГРАММЫ
В настоящем разделе изучаются следующие вопросы: подпрограм­мы, процедуры, функции, описание подпрограмм, вызов подпрограмм, обмен данными между подпрограммой и вызывающей ее программой, формальные и фактические параметры подпрограмм, локальные и гло­бальные переменные.
Часто при разработке программ требуется выполнять одни и те же вычисления несколько раз, с различными исходными данными. В этом случае нам приходится каждый раз вставлять в текст программы одну и ту же последовательность операторов, что приводит к росту размера программы. Решением проблемы является создание подпрограммы (поименованной последовательности действий), выполняющей ука­занные выше вычисления. Это позволяет вместо многократного повто­рения одной и той же последовательности операторов помещать каж­дый раз
мы, содержащая описание определенного набора действий. Подпро­грамму можно многократно вызывать из разных мест программы.
стемы программирования);
своей программе).
в программе, подпрограмме, модуле:
следующем за предложением uses или заголовком, но до раздела опе­раторов программы или подпрограммы;
инициализации, если он есть в модуле.
из двух
вызов подпрограммы по ее имени.
Подпрограмма (англ. subprogram) – поименованная часть програм-
Подпрограммы Object Pascal разделяют:
на стандартные подпрограммы (помещенные в библиотеку си-
подпрограммы пользователя (описываемые пользователем в
Описывать подпрограммы, требуемые для решения
в программе и подпрограмме в разделе описания подпрограмм,
в разделе реализации модуля (implementation), но до раздела
Подпрограмма на Object Pascal может быть представлена в одной
форм процедуры или функции.
задачи, можно
3
Процедуры и функции описыаются в соответствии с принятыми в Object Pascal синтаксическими правилами.
Вызов подпрограммы осуществляется в зависимости от формы ее представления.
Так, процедура вызывается с помощью оператора процедуры и только в разделе операторов, а вызов функции выполняется только в составе выражения с помощью конструкции, называемой «вызов функции», которая сама является выражением
. Возвращаемое функци­ей значение вычисляется и подставляется в это выражение в месте вы­зова функции.
Передача исходных данных в подпрограмму и возвращение резуль­татов работы подпрограммы в вызвавшую ее программу или подпро­грамму осуществляются через механизм параметров или через глобаль­ные переменные. Технология программирования ограничивает передачу данных через глобальные переменные
исключительными случаями.
Объекты (константа, переменная, процедура, функция или тип), описанные в подпрограмме, включая формальные параметры, называ­ются локальными по отношению к подпрограмме. Они видимы внутри подпрограммы, т. е. вы можете ссылаться на их имена внутри подпро­граммы. Но программа, в которой описана подпрограмма, их не видит. Она не может ссылаться на
их имена.
Пример 1. Подпрограммы
Давайте разработаем программу для вычисления площади прямо­угольника. Проанализировав действия, выполняемые нашей програм­мой, можно выделить в ней три логически связанные части (логиче­ских модуля), которые представлены ниже.
Модульная структура программы для вычисления площади тре­угольника имеет вид, показанный на схеме иерархии логических моду­лей:
Ввод длин
сторон
Вычисление
площади
прямоугольника
Вычисление
площади
Вывод
результата
4
Если мы развернем выполняемую последовательность действий во времени, то получим блок-схему следующего вида:
Начало
Ввод длин
сторон
Вычислить
площади
Вывод
результата
Конец
Символ для изображения подпрограммы –
«предопределенный
процесс»
Текст программы, реализующей блок-схему, приведен ниже:
program PSubroutine; // Программа для вычисления площади прямоугольника {$APPTYPE CONSOLE}
uses SysUtils, Windows; //----------------------------------------------------­Procedure Input(var a,b: real);{Описание процедуры Ввод длин сторон прямоугольника} const
s1 = 'Высота прямоугольника: '; s2 = 'Ширина прямоугольника: '; //локальные именованные константы
begin
write(s1);readln(a); // Вызов стандартной процедуры
write(s2);readln(b); // Вызов стандартной процедуры end; //-----------------------------------------------------
5
function SqR(a, b: real): real; {Описание функции. Функ­ция возвращает площадь прямоугольника с длинами сторон а и b}
begin
result:= a * b// результат возвращаемый функцией end; //----------------------------------------------------­Procedure Output(a,b,s: real);{Описание процедуры. Выво- дится длина сторон прямоугольника и его площадь} const
line ='============================================';
//локальная именованная константа
l ='Длины сторон прямоугольника:';
//локальная именованная константа
m = 'Площадь прямоугольника: '; //локальная именованная константа begin
writeln(line);// Вызов стандартной процедуры
writeln(l,a:6:2,',',b:6:2);{Вызов стандартной дуры}
writeln(m,s:6:2);// Вызов стандартной процедуры
writeln(line); // Вызов стандартной процедуры end;
var a,b:real;//глобальные переменные
begin
SetConsoleCP(1251);
SetConsoleOutputCP(1251);
Input(a,b);{Запрашивает и вводит длины сторон прямо­угольника}
Output(a,b,SqR(a,b));{Output(a) - вызов процедуры вы-
вода результата, SqR(a) - вызов функции вычисления пло­щади}
readln; end.
проце-
Результат работы программы представлен ниже:
6
Стандартные подпрограммы (write, read, trunc и т. д.) описаны раз­работчиками и помещены в библиотеку времени выполнения (модуль System), которая подключается автоматически. Поэтому они уже гото­вы для использования.
Подпрограммы пользователя – это подпрограммы, которые пользо­ватель может описать в своей программе, после чего они станут до­ступны для использования.
ФУНКЦИЯ
Если подпрограмма в результате
своей работы возвращает резуль-
тирующее значение и, следовательно, может использоваться в выра­жениях, то такая подпрограмма называется функцией.
Функция может принимать параметры и должна возвращать неко­торое значение.
Прежде чем можно будет воспользоваться функцией, необходимо описать выполняемые ею действия.
Описание функции осуществляется в разделе описания процедур и функций программы, подпрограммы
или в разделе реализации (implementation) модуля. Описать функцию – это значит указать требу­емые для ее работы исходные данные, выполняемые ею действия и их порядок и возвращаемый результат.
Функция вызывается (активизируется) с помощью конструкции,
которая носит название «вызов функции».
Если внутри раздела операторов функции используется «вызов
функции» с идентификатором объявляемой функции, то
функция бу­дет выполняться рекурсивно (будет при выполнении обращаться сама к себе).
Обмен данными между функцией и вызвавшей ее программой или подпрограммой осуществляется через механизм фактических парамет­ров либо через глобальные переменные.
Функция всегда возвращает в программу одно значение в месте своего вызова. Это значение имеет тип, указанный в заголовке описа ния функции.
Для каждой функции определена локальная переменная по умол­чанию с идентификатором result, тип которой совпадает с типом ре­зультата, возвращаемого функцией.
В разделе операторов описания функции должен содержаться, по крайней мере, один оператор присваивания, в котором идентификатору
7
-
функции или переменной result присваивается значение. Результатом выполнения функции будет последнее присвоенное идентификатору функции или переменной result значение. Если такого оператора при­сваивания нет или он не выполняется, то значение, возвращаемое функцией, будет неопределенным.
Пример 2. Функция
program PExmpl2;
{$APPTYPE CONSOLE}
uses
SysUtils, Windows;
function E: real;{Заголовок функции} {Функция без параметров. Возвращаемое функцией значение
- основание натурального логарифма е.} begin{Раздел операторов функции.}
result:= 2.71828;
end;
function Log2(x: real): real;{ Заголовок функции.} {Функция возвращает двоичный логарифм x. x - формальный параметр-значение.} begin{Раздел операторов функции.}
result:= ln(x)/ln(2);
end;
var a: real; begin
SetConsoleCP(1251); SetConsoleOutputCP(1251); write(' Ведите чило а > 0: '); readln(a); writeln('log2(a) = ', Log2(a):6:2); { Log2(a) - вызов
функции Log2}
a:= Log2(a); { Log2(a) - вызов функции Log2} writeln('log2(a) = ', a:6:2); writeln('e = ',E:6:2);// E - вызов функции E readln;
end.
8
Пример 3. Функция
program PExmpl3;
{$APPTYPE CONSOLE}
uses
SysUtils;
//----------------------------------------------------­Var
x,y,c: integer;//глобальные переменные //----------------------------------------------------­function max(a,b: integer):integer;{Заголовок описания функции.} {a,b - формальные параметры-значения, локальные перемен- ные} begin if a > b then result:= a{result - предопределенная переменная}
else result:= b end; //----------------------------------------------------­begin{Раздел операторов функции.}
x:= 15; y:= 6;
c:= max(x,y);{max (x,y) - вызов функции.x,y - факти- ческие параметры, содержат исходные данные}
writeln(c);// c = 15
readln; end.
ФОРМАТ ОПИСАНИЯ ФУНКЦИИ
<Заголовок функции>
<Раздел описания меток> <Раздел описания констант> <Раздел описания типов> <Раздел описания подпрограмм> <Раздел описания переменных>
<Раздел операторов>
; <Точка с запятой>
Блок
Раздел описаний
Операторы
9
Описание функции определяет часть программы, в которой вычис-
ляется и возвращается значение.
Описание функции позволяет связать идентификатор с блоком
функции.
Каждое описание функции содержит заголовок, за которым следует
блок.
Внутри блока функции могут быть описаны: свои метки, констан­ты, типы данных, переменные и свои процедуры и функции. Но все эти элементы могут быть использованы только в той функции, где они объявлены. Они невидимы в головной программе, т. е. являются ло­кальными по отношению к функции.
Имеются только три основных различия в описании программ и функций:
заголовок описания функции начинается со слова function, а за- головок описания программы – со слова program;
в
подпрограмме недопустимо предложение uses;
описание функции заканчивается точкой с запятой (;), а про- граммы – точкой (.).
Функции позволяют включать в основной программный блок до­полнительные блоки.
Заголовок функции
Заголовок функции – обязательный раздел описания функции. Он может быть представлен в одной из следующих форм:
function <имя> (<формальные параметры>):<тип результата>; или
function <имя>:<тип результата>;
В заголовке описания функции указывается имя функции, описы­вается список формальных параметров (если он присутствует) и тип результата, возвращаемого функцией.
Функция может возвращать результат любого типа. Заголовок – обязательный раздел в описании функции.
Примеры заголовков функций:
function Test: Real;
function Test(var a: integer;
b: real): Boolean;
10
Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]