Практикум по программированию на языке Паскаль. Часть 2
Покупка
Тематика:
Программирование на Pascal
Издательство:
Директ-Медиа
Автор:
Комарова Елена Сергеевна
Год издания: 2019
Кол-во страниц: 123
Дополнительно
Вид издания:
Учебное пособие
Уровень образования:
ВО - Специалитет
ISBN: 978-5-4499-0164-4
Артикул: 801758.01.99
Доступ онлайн
В корзину
В пособии (часть 2) рассматриваются основные понятия языков структурного программирования на примере языка Паскаль, описывается создание процедур и функций, работа с массивами, множествами и строками. Приведены примеры программ и представлен большой выбор заданий для самостоятельной работы.
Тематика:
ББК:
УДК:
ОКСО:
- ВО - Бакалавриат
- 01.03.02: Прикладная математика и информатика
- 02.03.02: Фундаментальная информатика и информационные технологии
- 09.03.03: Прикладная информатика
ГРНТИ:
Скопировать запись
Фрагмент текстового слоя документа размещен для индексирующих роботов.
Для полноценной работы с документом, пожалуйста, перейдите в
ридер.
Е. С. Комарова ПРАКТИКУМ ПО ПРОГРАММИРОВАНИЮ НА ЯЗЫКЕ ПАСКАЛЬ Учебное пособие Часть 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
Доступ онлайн
В корзину