Книжная полка Сохранить
Размер шрифта:
А
А
А
|  Шрифт:
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 (дата обращения: 21.11.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 ₽
В корзину