Добавил:
ivanov666
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз:
Предмет:
Файл:Програмирование. Структурное програмирование, подпрограммы, строки. Учебное пособие
.pdf
Министерство образования и науки Российской Федерации
НОВОСИБИРСКИЙ ГОСУДАРСТВЕННЫЙ ТЕХНИЧЕСКИЙ УНИВЕРСИТЕТ
М.Г. ЗАЙЦЕВ
ПРОГРАММИРОВАНИЕ
СТРУКТУРНОЕ ПРОГРАММИРОВАНИЕ,
ПОДПРОГРАММЫ, СТРОКИ
Утверждено Редакционно-издательским советом университета
в качестве учебного пособия
НОВОСИБИРСК
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
Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]
