Книжная полка Сохранить
Размер шрифта:
А
А
А
|  Шрифт:
Arial
Times
|  Интервал:
Стандартный
Средний
Большой
|  Цвет сайта:
Ц
Ц
Ц
Ц
Ц

Практикум по программированию на языке Паскаль. Часть 2

Покупка
Артикул: 801758.01.99
Доступ онлайн
174 ₽
В корзину
В пособии (часть 2) рассматриваются основные понятия языков структурного программирования на примере языка Паскаль, описывается создание процедур и функций, работа с массивами, множествами и строками. Приведены примеры программ и представлен большой выбор заданий для самостоятельной работы.
Комарова, Е. С. Практикум по программированию на языке Паскаль. Часть 2 / Е. С. Комарова. - 2-е изд., стереотипное - Москва : Директ-Медиа, 2019. - 123 с. - ISBN 978-5-4499-0164-4. - Текст : электронный. - URL: https://znanium.com/catalog/product/1985739 (дата обращения: 25.04.2024). – Режим доступа: по подписке.
Фрагмент текстового слоя документа размещен для индексирующих роботов. Для полноценной работы с документом, пожалуйста, перейдите в ридер.
Е. С. Комарова

ПРАКТИКУМ  
ПО ПРОГРАММИРОВАНИЮ 
НА ЯЗЫКЕ ПАСКАЛЬ 

Учебное пособие 

Часть 2 

Направления подготовки: 01.03.02 (010400.62)  
Прикладная математика и информатика,  
02.03.02(010300.62) Фундаментальная информатика 
и информационные технологии 

Москва
Берлин 

2019 

Второе издание, стереотипное

УДК 681.3(075) 
ББК 32.9я7 
        К63 

Рецензент: 
Н. Д. Зюляркина, канд. физ.-мат. наук, доц. кафедры  
безопасность информационных систем НИУ ГОУ ВПО «ЮУрГУ» 

Составитель: 
Е. С. Комарова, старший преподаватель кафедры математики, 
экономики и управления 

Комарова, Е. С.

К63     Практикум по программированию на языке Паскаль : 

учебно-методическое пособие. Часть 2 / Е. С. Комарова. – 
2-е изд., стер. – Москва ; Берлин : Директ-Медиа, 2019. – 123 с.  

ISBN 978-5-4499-0164-4 

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

УДК 681.3(075) 
ББК 32.9я7 

ISBN 978-5-4499-0164-4 
© Комарова Е. С., текст, 2019 
© Издательство «Директ-Медиа», оформление, 2019 

1. ОРГАНИЗАЦИЯ ПОДПРОГРАММ. ПРОЦЕДУРЫ
И ФУНКЦИИ 

Мы уже видели, что Паскаль-программа состоит из последователь-
ности операторов (простых и структурных). Есть в языке также понятие 
функции. Система TurboPascal и другие системы программирования на 
базе языка Паскаль имеют целый набор встроенных машинных функ-
ций. Однако Паскаль предоставляет возможность создавать новые 
операторы и функции на основе стандартных. Такие процедуры и 
функции принято называть п о л ь з о в а т е л ь с к и м и. 
В Паскале два типа подпрограмм – процедуры и функции. Созда-
ние процедур и функций является дальнейшим развитием идеи 
группирования, когда несколько операторов объединяются в про-
граммный блок, который имеет свое имя и к которому можно 
обратиться по этому имени с помощью соответствующих средств вы-
зова. Процедура вызывается с помощью оператора вызова процедуры с 
одноименным именем. Функция пользователя также имеет свое имя, и 
ее активизация происходит при вычислении выражения, содержащего 
имя функции. Возвращаемое функцией значение подставляется в это 
выражение. 

1.1. Процедуры и их типизация 

Итак, процедура – это часть программы (подпрограмма), имеющая 
имя и предназначенная для решения некоторой частной задачи (подза-
дачи). Процедуры делятся по способам описания и обращения к ним.  
Процедура встроенная (машинная) – это процедура, описание которой 
считается известной транслятору, в связи с чем ее можно использовать 
в программе, зная только ее имя. 
Процедура пользователя – процедура, которую создает (описывает) 
программист на основе имеющихся операторов и встроенных проце-
дур и функций данного языка по определенным правилам данного 
языка. 
Процедура без параметров – процедура, при обращении к которой не 
требуется задания начальных установок, значений и после выполнения 
которой в основную программу не передаются результаты работы дан-
ной процедуры. 
Процедура с параметрами-значениями – процедура, при обращении к 
которой требуются только начальные значения. На выходе данные не 
передаются в основную программу. 
Процедура с параметрами-переменными – процедура, не требующая 
начальных значений, однако передающая в основную программу ре-
зультаты своей работы (передает значения некоторых переменных). 

3 

Комбинированная 
процедура – 
процедура, 
имеющая 
параметры-
переменные и параметры-значения, т. е. входные и выходные данные. 

1.1.1. Встроенные процедуры 

Встроенные процедуры являются составной частью системы про-
граммирования. Среди них есть стандартные процедуры, которыми 
можно пользоваться в любом месте программы без какого-либо пред-
варительного объявления. Сюда относятся уже ранее упомянутые 
процедуры ввода/вывода, управления работой программы, динамиче-
ского распределения памяти, строковые процедуры и пр. Полный 
перечень встроенных процедур можно найти в справочнике для языка. 
Помимо стандартных процедур в Паскале есть также стандартные 
модули, представленные в виде TPU – файлов, каждый из которых со-
держит в себе целый набор процедур и функций. Для того чтобы 
использовать процедуры из модулей, необходимо вызвать нужный мо-
дуль в разделе USES. Система TurboPascal имеет модули PRINTER, 
DOS, CRT, GRAPH и др. 
CRT позволяет использовать все возможности дисплея и клавиату-
ры, вномерамая управление режимом работы экрана, расширенные 
коды клавиатуры, цвет, окна и звуковые сигналы. 
DOS поддерживает различные функции ДОС, вномерамая установку 
и получение текущего значения даты и времени, поиск по каталогам 
файлов и выполнение программ. 
PRINTER позволяет легко организовать доступ к устройству печати. 

GRAPH – мощный графический пакет с набором процедур и 
функций обработки графических объектов (точек, отрезков, прямоугольников, 
окружностей и пр.). 
Рассмотрим несколько примеров встроенных процедур: 
• 
 CLRSCR – процедура очистки экрана. Результатом работы является 
стирание всей информации с экрана. Данная процедура является 
примером процедур без параметров. 
• 
 GOTOXY (A, B) – процедура позиционирования курсора на 
экране дисплея в точку с координатами (A, B). A и B являются входными 
данными, следовательно, это пример процедуры с параметрами-
значениями. 

1.1.2. Процедуры пользователя 

При работе с процедурами пользователя необходимо уметь производить 
два вида деятельности: описание процедуры и обращение к ней 
в основной программе. Вызов процедуры пользователя осуществляется 
так же, как и вызов встроенной процедуры, – с помощью оператора 
вызова процедуры, имя которого совпадает с именем процедуры, с ука-

4 

занием списка параметров, если таковые имеются. Описание же процедуры 
включает в себя разработку подпрограммы и правильное 
оформление ее заголовка. Остановимся на нем более подробно. 
В основной программе все процедуры (а также и функции) пользователя 
должны быть объявлены. Объявление процедур и функций 
осуществляется после объявления переменных и перед первым словом 
BEGIN программы. 
Процедура, как видно из ее определения, оформляется так же, как и 
основная программа. Вообще процедуру нужно воспринимать как программу 
в миниатюре. В свою очередь, основная программа может быть 
легко переделана в процедуру с заменой слова PROGRAM на 
PROCEDURE. Если процедура объявлена, ее можно использовать в 
последующих частях программы, просто записывая ее имя, за которым, 
если необходимо, следует список параметров. Вызов процедуры для 
основной программы становится новым оператором. Обращение к 
процедуре активизирует эту процедуру, т. е. приводит к выполнению 
группу операторов, содержащихся в ее теле. После этого управление 
переходит к оператору, следующему за вызовом процедуры. 

1.1.3. Процедуры без параметров 

Заголовок процедуры без параметров выглядит как: 
PROCTDURE <Имя процедуры>; 
Вызываются такие процедуры путем написания в основной программе 
имени этой процедуры. В виде процедуры без параметров 
оформляются такие подзадачи, у которых нет входных и выходных 
данных, или же эти данные удобнее передавать с помощью операторов 
присваивания: READ и WRITE. 
Рассмотрим несколько примеров, в которых представлены эти варианты. 
 

П р и м е р 1. Нарисовать три вертикальных квадрата 3 × 3 с помощью 
символа «*». 
Очевидно, что в этой программе надо выделить рисование квадрата 
в виде процедуры без параметров, а затем трижды вызвать ее в основной 
программе. 
 
program RISUNOK; 
procedure KVADRAT; 
begin 
writeln ('***'); 
writeln ('* *'); 
writeln ('***'); 
end; 

5 

begin 
clrscr; KVADRAT; 
writeln; KVADRAT; 
writeln; KVADRAT; 
end. 
 
П р и м е р 2 . Вычислить площадь четырехугольника ABCD. 
Зная длины сторон четырехугольника и длину одной из его диагоналей, 
например BD, можно по формуле Герона найти площади двух 
вспомогательных треугольников и сложить их. Отсюда следует, что в 
программе надо выделить процедуру вычисления площади треугольника. 
 

program PLOCHAD_1; 
var AB, BC, CD, AD, BD, S1, S, a, b, c, p:real; 
procedure GERON_1; 
begin  
p := (a + b + c)/2; 
S := sqrt (p*(p – a)*(p – b)*(p – c)); 
end; 
begin {*ОСНОВНАЯ ПРОГРАММА*} 
read (AB, BC, CD, AD, AC); 
a := AB; b := AD; c := BD; GERON_1; S1:= S; 
a := BC; b := CD; c := BD; GERON_1; S1:= S1 + S; 
write (S1); 
end. 
 
Примечание. В данной программе все вычисления проходят с помощью 
переменных, объявленных в разделе VAR основной программы. 

1.1.4. Процедуры с параметрами-значениями 

Как было сказано ранее, процедуры с параметрами-значениями требуют 
входных данных. Где они записываются и как задаются? На этот 
вопрос может ответить общая форма заголовка процедуры этой процедуры: 

PROCEDURE <Имя процедуры> (<Параметры-аргументы>: 
тип); 
 Здесь под параметром понимают имя переменной, которая является «
входной» для процедуры (формальный параметр-аргумент). Этот 
параметр с синтаксической точки зрения является параметром-
значением, при его описании в заголовке процедуры не требуется писать 
слово VAR. Параметры-значения при вызове процедуры 
принимают из основной программы свои конкретные значения. Заме-

6 

тим также, что в самой процедуре значения параметров-значений не 
меняются в ходе работы процедуры. 
При обращении к процедуре с параметрами-значениями в основной 
программе фактическими параметрами могут служить как имена 
переменных (которые описаны и определены выше), так и конкретные 
значения (константы) и выражения. При обращении необходимо следить 
за соответствием списка параметров при обращении и описании. 
Кроме того, следует строго соблюдать соответствие типов параметров. 
Рассмотрим работу процедур такого типа на примерах. 
 
П р и м е р 1. Нарисовать квадрат с произвольной длиной стороны 
в левом верхнем углу (длина стороны задается с клавиатуры). 
В этой программе также надо оформить рисование квадрата в виде 
процедуры, но уже с входным параметром-значением – длиной стороны 
квадрата. 
 
program RISUNOK_2; 
var I: integer; 
procedure KVADRAT (N: integer); 
var J, K: integer; 
begin 
for J := 1 to N do write ('*'); writeln; 
for J := 1 to N – 2 do 
begin 
write ('*'); for K := 1 to N – 2 do write (' '); 
writeln ('*'); 
end; 
for J := 1 to N do write ('*'); 
end; 
begin { Основная программа } 
write ('Введите длину стороны – '); 
readln (I); clrscr; KVADRAT (I); 
end. 
 
П р и м е р 2. Вычислить площадь четырехугольника с применением 
процедуры с параметрами-значениями. 
 
program PLOCHAD_2; 
var AB, BC, CD, AD, AC, S1, S: real; 
procedure GERON_2 (a, b, c: real); 
var P: real; 
begin 
P := (a + b + c)/2; S := sqrt (P*(P – a)*(P – b)*(P – c)); 
end; 

7 

begin {*ОСНОВНАЯ ПРОГРАММА*} 
read (AB, BC, CD, AD, AC); GERON_2(AB, BC, AC); S1:= S; 
GERON_2 (AD, AC, CD); write ('S = ', S1 + S) 
end. 
 
В данной программе определена процедура GERON_2 с тремя па-
раметрами-значениями и локальной переменной P. Значение же 
площади треугольника помещается в глобальную переменную S. При 
вызове этой процедуры формальные параметры a, b, c замещаются на 
фактические параметры AB, BC, AC при первом обращении и на AD, 
AC, CD – при втором. 
Заметим также, что здесь фактические параметры представлены пе-
ременными, которые получают свое значение с помощью процедуры 
READ. Однако если известны длины сторон треугольника, например, 
6, 7, 4, то можно вычислить площадь этого треугольника, вызвав про-
цедуру GERON_2(6, 7, 4), и получить ответ в переменной S. 

1.1.5. Процедуры с параметрами-переменными 

В отличие от процедур с параметрами-значениями, процедуры с 
параметрами-переменными не имеют входных параметров, т. е. из ос-
новной программы не передаются значения переменных в процедуру, 
за исключением глобальных переменных. Отличие в описании и об-
ращении к процедурам с параметрами-переменными заключается в 
специфическом написании заголовка процедуры. В остальном все 
процедуры схожи. Общий вид заголовка процедуры с параметрами-
переменными выглядит так: 
PROCEDURE 
<Имя 
процедуры> 
(VAR<Параметры-
переменные>: тип); 
При детальном ознакомлении с синтаксической диаграммой видно, 
что параметрам-переменным должно предшествовать служебное слово 
VAR, причем оно пишется столько раз, сколько различных типов 
представлено в выходных данных, например: 
PROCEDURE PRIMER (VAR a, b, c : INTEGER; VAR m : CHAR; 
VAR i, j : REAL). 
При обращении к процедурам с параметрами-переменными факти-
ческими параметрами должны являться имена переменных, которые 
описаны в основной программе. 
 
П р и м е р . Вычисление площади четырехугольника. 
 
program PLOCHAD_3; 
var AB, BC, CD, AD, AC, S1, S2, a, b, c: real; 
procedure GERON_3 (var S: real); 

8 

var P: real; 
begin 
P := (a + b + c)/2; S := sqrt (P*(P – a)*(P – b)*(P – c)); 
end; 
begin { Основная программа } 
read (AB, BC, CD, AD, AC); 
a := AB; b := BC; c := AC; GERON_3 (S1); 
a := AD; b := AC; c := CD; GERON_3 (S2); 
write ('S = ', S1 + S2) 
end. 

1.1.6. Комбинированные процедуры 

Комбинированные процедуры включают в себя входные и выход-
ные данные. В заголовке этой процедуры, как и ранее, выходные 
параметры предваряются словом VAR, входные параметры – без него. 
Порядок следования параметров может быть произвольным, например: 
 
PROCEDURE PRIMER (VAR a, b, c: INTEGER;  
m: CHAR; VAR i, j: REAL); 
Здесь a, b, c, i, j – параметры-результаты (переменные); m – параметр-
аргумент (значение). 
В качестве иллюстрации комбинированных процедур рассмотрим 
последний вариант вычисления площади четырехугольника: 
 
program PLOCHAD_4; 
var AB, BC, CD, AD, AC, S1, S2: real; 
procedure GERON_4 (a, b, c : real; var S : real); 
var P : real; 
begin 
P := (a + b + c)/2; 
S := sqrt (P*(P – a)*(P – b)*(P – c)); 
end; 
begin {*ОСНОВНАЯ ПРОГРАММА*} 
read (AB, BC, CD, AD, AC); 
GERON_4 (AB, BC, AC, S1); 
GERON_4 (AD, AC, CD, S2); 
write ('S = ', S1 + S2) 
end. 
 
Примечание. Для более полного усвоения введенных ранее терминов 
перечислим на базе последнего примера все виды параметров и переменных: 


9 

1) глобальные переменные AB, BC, CD, AD, AC, S1, S2; 
2) локальные переменные a, b, c, S, P; 
3) формальные параметры a, b, c, S: 
– параметры-значения (аргументы) a, b, c; 
– параметр-переменная (результат) S; 
4) фактические параметры AB, BC, CD, AD, AC, S1, S2: 
– параметры-значения (аргументы) AB, BC, CD, AD, AC; 
– параметры-переменные (результаты) S1, S2. 
 
Заметим также, что термины «параметр-значение» и «аргумент», как 
и «параметр-переменная» и «результат», не всегда идентичны. Дело в 
том, что характеристика «значение (переменная)» отражает синтаксическую 
сущность параметра, а «аргумент (результат)» – его семантику 
(функциональную роль в процедуре). Иногда один и тот же параметр 
может быть аргументом и результатом одновременно, но описан в 
процедуре в виде параметра-переменной.  
Попытка же описать выходной параметр в виде параметра-значения 
(без слова VAR в заголовке процедуры) приведет к тому, что результат 
работы процедуры не будет возвращен в основную программу. Это 
происходит потому, что характер «поведения» параметров-значений и 
параметров-переменных в процессе работы процедуры различен. Разница 
эта состоит в том, что преобразования, которые претерпевают 
формальные параметры-значения в процедуре, не вызывают изменения 
соответствующих им фактических параметров, в то время как изменения 

параметров-переменных 
могут 
изменять 
значения 
соответствующих фактических параметров. 
Причиной этого феномена является неодинаковое распределение 
памяти под хранение параметров процедуры. Формальному параметру-
значению отводится некоторая область (ячейка) памяти, куда заносится 
значение соответствующего фактического параметра, вычисленного на 
момент обращения к процедуре. На этом связь между ними обрывается. 
Действительно, если фактическим параметром является константа или 
выражение, то как изменения в формальном параметре-значении (а это 
есть всегда переменная) могут повлиять, например, на выражение? 
Фактическим же параметром, соответствующим формальному параметру-
переменной, 
является 
всегда 
переменная. 
На 
время 
выполнения процедуры эти параметры отождествляются, им соответствует 
одна и та же область памяти. Вполне понятно, что в этой 
ситуации изменения формального параметра влекут адекватные изменения 
фактического параметра, и после завершения процедуры его 
значение может отличаться от его первоначального значения. 
Именно поэтому, объявив в процедуре параметр-результат как параметр-
значение, этот результат так и останется в формальном 
параметре-переменной без его передачи в соответствующий фактиче-

10 

Доступ онлайн
174 ₽
В корзину