книги / Практикум по основам программирования. Язык Паскаль
.pdfН.Д. ВАСЮКОВА
В. В. ТЮЛЯЕВА
ПРАКТИКУМ
по
ОСНОВАМ
ПРОГРАММИ
РОВАНИЯ
язык
ПАСКАЛЬ
Допущено Министерством приборостроения, средств автоматиз; и систем управления в качестве учебного пособия для учащ средних специальных учебных заведений
Москва „Высшая школа" 1991
ББК 32.973 - 01
В20
УДК._68J*3r0tf
Р е ц е н з е н т ы :
преп. В.В. Нестерова (Московский приборостроительный техни кум Минприбора); канд. физ.-мат. наук П.В. Уманец (кафедра прикладной математики Московского .инженерно-строительного института им. В.В. Куйбышева)
Васюкова Н.Д., Тюляева В.В.
В20 Практикум по основам программирования. Язык ПАСКАЛЬ: Учеб, пособие для учащихся сред. спец. учеб, заведений. - М.: Высш. шк., 1991. -160 с.: ил.
ISBN 5-06-000750-2
Пособие предназначается для обучения основным конст рукциям языка ПАСКАЛЬ. Оно построено в виде заданий, каж дое из которых посвящено конкретной теме. По усмотрению преподавателя задание может выполняться за одно или несколь ко занятий. Каждому заданию предшествует теоретическая часть, по каждому заданию дается методическая разработка, включающая различные подходы к решению поставленной зада чи.
2404010000 |
(4308000000) - 170 |
ББК 32.973 - 01 |
В ------------------------------------------ |
202 - 90 |
6Ф7. 3 |
0 0 1 (0 0 - |
91 |
|
ISBN 5-06-000750-2 © Н.Д. Васюкова, В.В. Тюляева, 1991
Настоящее издание существенно отличается от имеющихся пуб ликации по языку ПАСКАЛЬ методикой изложения. По своей струк туре все главы, кроме последней, одинаковы и отражают процесс обу чения программированию. Они содержат теоретическую часть, в кото рой кратко изложены основные аспекты языка по рассматриваемой теме, вопросы и упражнения* предназначенные не только для повторе ния теории, но и для того, чтобы обратить внимание читателя на раз личные подходы к практическому решению предлагаемых задач, и за дания для выполнения на ЭВМ. Для вопросов и упражнений, помечен ных звездочкой, в конце книга приведены ответы.
В каждой главе наряду с фрагментами программ, иллюстрирую щими особенности выполнения какого-либо оператора, приводятся пол ные тексты программ с подробными разъяснениями. Последователь ность рассмотрения материала позволяет начиная с первой же темы приступить к практическому программированию с использованием ЭВМ.
В книге рассматривается стандартный язык ПАСКАЛЬ без ис пользования дополнительных возможностей, присущих отдельным реа лизациям языка на той или иной ЭВМ. Это позволяет использовать данную книгу для обучения программированию на любой версии язы ка. Особое место отводится организации работы с большими объемами информации, что существенно при разработке АСУ.
При описании реальных программ в местах, связанных с вводом/выводом информации и особенностями файловой системы* прихо дится ссылаться на средства ОС РАФОС для ЭВМ типа СМ. Это ес тественная вынужденная мера, не препятствующая использованию кни га для других трансляторов, операционных систем и ЭВМ.
Книга предназначена для учащихся техникумов. Однако простота и последовательность изложения материала, наличие большого количе ства примеров, особенно программ с протоколами их исполнения на ЭВМ, делают эту книгу общедоступной. Она с успехом может быть использована для самостоятельного изучения языка ПАСКАЛЬ.
Авторы считают своим приятным долгом выразить благодарность рецензентам книга -преп. В.В. Н е с т е р о в о й (Московский приборостроительный техникум Министерства приборостроения СССР),
канд. физ.-мат. наук П.В. У м а н ц у (кафедра прикладной матема тики Московского инженерно-строительного института им. В.В. Куй бышева)-за сделанные при просмотре рукописи замечания и советы.
Все пожелания и замечания по книге авторы просят направлять по адресу: 101430, Москва, ГСП- 4 , Неглинная ул., 29/14, издательство "Высшая школа".
Авторы
Алгоритмический язык высокого уровня ПАС
КАЛЬ был |
разработан в конце 60-х годов |
проф. Н. Виртом |
(Цюрихская высшая техническая |
школа). Язык получил свое название в честь француз ского математика и философа Блеза Паскаля. Создан ный специально для обучения программированию язык оказался чрезвычайно удачным и сразу же при влек внимание специалистов. В короткое время язык ПАСКАЛЬ приобрел широкую популярность во всем мире, и в настоящее время он реализован практически на всех вычислительных машинах от микроЭВМ до суперЭВМ. Разработчики компиляторов и систем программирования на базе языка ПАСКАЛЬ используют международный стандарт ISO 7185, принятый в 1982 г. Это приводит к разработке в максимальной степени переносимого программного обеспечения.
К о с н о в н ы м д о с т о и н с т в а м я з ы к а ПАС КАЛЬ следует отнести: гибкость и надежность; просто ту и ясность конструкций; легкость реализации на большинстве современных ЭВМ; возможность достаточ но полного контроля правильности программы как на этапе компиляции, так и во время выполнения; воз можность удовлетворения требованиям структурного программирования; возможность использования для программирования задач различных профилей и записи алгоритмов в современной литературе; наличие набора структурных типов данных: массивов, записей, записей с вариантами, множеств, файлов; возможность построения новых типов данных.
Некоторые н е д о с т а т к и я з ы к а ПАСКАЛЬ-от- сутствие динамических массивов, раздельной компиля ции модулей, операции возведения в степень, средств работы с файлами прямого доступа - сделаны автором сознательно с целью достижения компромисса в язы ковых средствах и конструкциях, что позволило языку остаться достаточно простым в обучении и эффектив ным в реализации.
Язык ПАСКАЛЬ сыграл большую роль в разви тии методов аналитического доказательства правильно сти программ, имеющих фундаментальное значение в современном программировании. Идеи и принципы, заложенные в языке, были заимствованы при создании новых языков программирования, таких, как АДА и МОДУЛА-2.
ГЛАВА 1 СТАНДАРТНЫЕ ТИПЫ ДАННЫХ
В главе рассматриваются стандартные типы данных: це лый, вещественный, символьный и булевский. Приводят ся операции и стандартные функции, определенные для переменных этих типов. Даются правила вычисления вы ражений и записи операторов присваивания, а также рассматриваются вопросы, связанные с организацией ввода/вывода в программах.
1.1 СТРУКТУРА ПРОГРАММЫ
Программа на языке ПАСКАЛЬ состоит из заго ловка и собственно программы, называемой блоком.
Блок состоит из разделов. Максимальное количество разделов - шесть. Разделы обязательно располагаются в следующем порядке:
раздел меток; (раздел констант; раздел типов;
раздел переменных; раздел процедур и функций; раздел операторов.
Раздел операторов заключается в операторные скобки, т. е. BEGIN... END. В нем указывается после довательность действий, которые должны выполняться ЭВМ. Все остальные разделы носят описательный ха рактер.
Любой раздел, кроме последнего, может от сутствовать. Разделителем между разделами и операторами служит точка с запятой. В конце программы должна стоять точка.
В любое место программы могут быть включены ком ментарии, при этом смысл программы не меняется. Комментарии заключаются в фигурные скобки. Если в системе нет фигурных скобок, то вместо них использу ются пары символов (* и *).
В приложении П.1 приведены синтаксические ди аграммы, строго определяющие синтаксис языка.
ООПИСАНИЕ СТАНДАРТНЫХ ТИПОВ ДАННЫХ
Программа, написанная на языке ПАСКАЛЬ, опе рирует некоторыми объектами, называемыми данны ми. Каждый элемент данных в программе является либо константой, либо переменной. Для каждой пере менной задается некоторый тип, определяющий как возможные значения переменной, так и операции, ко торые могут над ней выполняться. Тип переменной задается в разделе переменных. Именованная констан та отличается от переменной тем, что -ее значение не может изменяться во время выполнения программы и она описывается в разделе констант. Тип константы однозначно определяется ее значением и в явном виде не указывается.
Язык ПАСКАЛЬ предоставляет богатые возможно сти для построения сложных типов данных, которые задаются в разделе типов. Однако все они строятся на основе элементарных типов:
- четырех стандартных - целый (INTEGER), веще ственный (REAL), символьный (CHAR) и булевский
(BOOLEAN);
- перечислимых.
Целый тип. В языке ПАСКАЛЬ целый тип обес печивает задание целых чисел. В любой конкретной вычислительной машине существуют ограничения на диапазон целых чисел. Определено некоторое целое число MAXINT такое, что значение любой целой пере менной или константы должно находиться в диапазоне от -MAXINT до +MAXINT. В противном случае будет зафиксирована ошибка. Примеры целых чисел: 173; —3; 0; +64.
Над переменными целого типа определены сле дующие арифметические операции: +(сложение), — (вычитание), «(умножение), /(деление), ОГУ(деление нацело), МСЮ(вычисление остатка от целочисленного деления). Все эти операции вырабатывают результат целого типа, кроме операции деления, результат кото-
б
рой всеща |
будет вещественного |
типа. |
Определены |
|||||
также |
операции |
отношения =(равно), < > ( н е |
равно), |
|||||
< (меньше), |
> (больше), |
< = (меньше |
или |
равно), |
||||
> =(больше |
или |
равно), |
вырабатывающие |
результат |
||||
булевского типа. |
|
|
|
|
|
|
||
С аргументами целого типа могут использоваться |
||||||||
следующие стандартные функции: |
|
|
|
|
||||
Имя |
МатемаТип |
Имя |
Матема |
Тип |
||||
функции |
тическое результата |
функции |
тическое |
результата |
||||
|
значение |
|
|
значение |
|
|
||
SIN(X) |
sin х |
REAL |
ARCTAN(X) arctg x |
REAL |
||||
COS(X) |
cos х |
REAL |
EXP(X) |
e* |
|
REAL |
||
LN(X) |
In JC |
REAL |
SQR(X) |
*2 |
|
INTEGER |
||
SQRT(X) |
V x |
REAL |
ABS(X) |
Ix l |
|
INTEGER |
Определены также функции:
ODD(X) - вырабатывает результат булевского типа: для четного аргумента - FALSE, для нечетного - TRUE.
SUCC(X) - вырабатывает следующее целое число (т. е. число, на единицу большее X).
PRED(X) - вырабатывает предыдущее целое число (т. е. число, на единицу меньшее X).
Вещественный тип. Переменные и константы ве щественного типа в ПАСКАЛЬ-программе употребля ются в том же смысле, что и в математике веществен ные числа. Запись вещественного числа в языке ПАС КАЛЬ возможна в виде числа с фиксированной точ кой, например: 1513487; 0.01; 21.3. Очень большие или очень маленькие числа удобнее представлять в экспо ненциальной форме: 2.108Е -10; 1.1Е7; 3.4Е+5, вде на пример, 2.108Е-Ю=2.108*10'10.
Записи б.; 364; ЕЗ; б.Е -3; 5.0Е не являются чис лами, так как не удовлетворяют синтаксической диаг рамме вещественного числа (см. приложение П.1).
Вещественные переменные обладают двумя важ ными характеристиками - диапазоном значений и точ ностью, которые определяются структурными особенно стями конкретной ЭВМ.
Над переменными вещественного типа определе ны следующие арифметические операции: +(сложе
ние), - (вычитание), «(умножение), /(деление), а также операции отношения.
С аргументами вещественного типа могут использо ваться следующие стандартные -функции: SIN(X), COS(X), LN(X), SQRT(X), ARCTAN(X), EXP(X), SQR(X), ABS(X); все они вырабатывают результат вещественно
го типа.
Определены также стандартные функции преобразо вания значения вещественного типа в значение целого
типа:
TRUNC(X) - вырабатывает целый результат путем отбрасывания дробной части аргумента;
ROUND(X) - вырабатывает целый результат путем округления до ближайшего целого.
Например, если Х =21.53, то TRUNC(X)=21, ROUND(X)=22;
если Х= -2.7, то TRUNC(X)= - 2 , ROUND(X)= -3 .
Символьный тип. Значениями символьного типа являются элементы конечного и упорядоченного набо ра знаков. Этот набор может быть различным в каж дой конкретной вычислительной системе. Например, для машин серии СМ ЭВМ часть набора знаков кода КОИ- 7 выглядит следующим образом:
О 1 2 3 4 5 6 7 8 9 : ; < = > ? @ А В С
ще |
48 49 ... |
57 58 ... |
66 67 |
-соответствующие порядковые номера символов. Пол ностью набор знаков кода КОИ - 7 приведен в П.2.
Символ, заключенный в апострофы, обозначает константу символьного типа, например: ’X’, ’5’ ’ =’.
Существуют две стандартные, обратные по отно шению друг к другу функции, называемые функциями преобразования:
ORD(S) - дает порядковый номер символа S в упо рядоченном множестве символов. Например: ORD£:’)=58, ORD(’5’)=53.
CHR(I) - дает символ, стоящий под номером I в упорядоченном множестве символов. Например: CHR(66)=’В’, CHR(57)=’9\
Очевидно, что CHR(ORD(S))=S и ORD(CHR(I))=I. Над переменными символьного типа определены операции отношения. Пусть С1 и С2 - переменные символьного типа. Отношение С1<С2 истинно тоща и
только тоща, коща ORD(Cl)<ORD(C2).
К аргументам символьного типа применимы так же стандартные функции: PRED(S) и SUCC(S). Функция PRED(S) дает предыдущий символ, а функ
ция SUCC(S) - следующий. Например: PRED(’B’)= ’A’, а SUCC(’9’)= ’:\
Справедливы также равенства:
PRED(S) = CHR(ORD(S) - 1) и SUCC(S) = CHR(0RD(S) + 1)
Булевский тип. Переменные булевского типа могут принимать одно из двух значений: Т1ШЕ(истина) или
FALSE(noxb). Над ними определены три логические операции: АЬГО(конъюнкция), СЖ(дизъюнкция) и ЫОТ(отрицание). Булевский тип определен так, что FALSE< TRUE. Это означает, что операции отношения могут быть применены не только к данным целого, вещественного и символьного типов, но и к данным булевского типа.
Значения FALSE и TRUE можно рассматривать как упорядоченное множество, состоящее из двух эле ментов. При этом определены следующие значения стандартных функций:
ОRD(FALSE)=0 ; |
ORD(TRUE)=l ; |
SUCC(FALSE)=TRUE |
; PRED(TRUE)=FALSE |
1.3 ВЫРАЖЕНИЯ И ОПЕРАТОР ПРИСВАИВАНИЯ
Здесь будут рассмотрены выражения и операторы присваивания, включающие в себя переменные и кон станты только стандартных типов.
Выражения. Значение выражения вычисляется с учетом расставленных скобок и старшинства операций.
Ниже приведены операции в порядке убывания их приоритета, причем операции в одной строке име ют одинаковый приоритет:
NOT
•, /, MOD, DIV, AND
+, OR
<, <=, >, >=, <>,=
Операции одного и того же старшинства выполня ются слева направо в порядке их появления в выраже нии. Выражения в круглых скобках вычисляются в первую очередь.
При выполнении арифметических операций над величинами только вещественного, а также веществен ного и целого типов вырабатывается результат вещест
венного типа. Тип выражения определяется последова тельным вычислением типов результатов всех опера ций, выполненных при вычислении значения выраже
ния.
Например: (TER - LN(X) > 2.5<KL) AND (ORD(S) < N1).
Значение и тип выражения вычисляются в следу
ющем |
порядке |
(переменные |
NI.KLINTEGER; |
TER.X - REAL; S - CHAR): |
|
||
|
1A1=LN(X) |
результат типа |
REAL; |
|
2A2=2.5*KL |
|
REAL; |
|
3A 3=T E R -A 1 |
-*- |
REAL; |
|
4A4=A3>A2 |
-’- |
BOOLEAN; |
|
5-A5=ORD(S) |
-’- |
INTEGER; |
|
6A6=A5<NI |
|
BOOLEAN; |
|
7A4 AND A6 |
-"- |
BOOLEAN. |
Оператор присваивания. Этот оператор обозначает ся знаком :=. При выполнении оператора присваива ния вычисляется выражение, стоящее в правой части, и его значение присваивается переменной в левой час ти. При этом тип выражения должен соответствовать типу переменной. Для стандартных типов это означает, что типы должны совпадать. Кроме того, допускается присваивание переменной вещественного типа значе ния выражения целого типа.
Присваивание же переменной целого типа вы ражения вещественного типа запрещено!
Для преобразования значения вещественного типа в значение целого типа предназначены функции TRUNC(X) и ROUND(X).
Примеры операторов присваивания (переменные X, Y - вещественного типа; А,К,М - целого типа):
X:=Y*A -2/K; М: = К*К»К; Y:=A*K+M -7*K; К:= ROUND(EXP(16*LN(X)));