Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

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

.pdf
Скачиваний:
8
Добавлен:
15.11.2022
Размер:
6.27 Mб
Скачать

Н.Д. ВАСЮКОВА

В. В. ТЮЛЯЕВА

ПРАКТИКУМ

по

ОСНОВАМ

ПРОГРАММИ­

РОВАНИЯ

язык

ПАСКАЛЬ

Допущено Министерством приборостроения, средств автоматиз; и систем управления в качестве учебного пособия для учащ средних специальных учебных заведений

Москва „Высшая школа" 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)));