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

Информатика_Гуда

.pdf
Скачиваний:
76
Добавлен:
02.06.2015
Размер:
26.2 Mб
Скачать

Глава 6. Алгоритмизация и программирование

Var M1, M2: METALL;

OP1, OP2, OP3: OPERATORS;

В рассмотренном примере переменные с именами M1, M2 могут принимать только значения Fe, Na, Cu или Co, переменные OP1, OP2, OP3 — только значения PLUS, MINUS, DIVIDE и т. д. Других значе- ний этим переменным присваивать нельзя. Указываемые в круглых скобках имена являются константами, порядковый номер первой из них равен нулю, следующей – единице и т. д. В перечисляемом типе частные значения упорядочены, что означает, к примеру, что для рассмотренных выше значений Fe<Na, MINUS<DIVIDE, A<E и т. д. При этом старшинство связано с местом слова при перечислении. Не допускается применять операцию сравнения к операндам разного типа, например, сравнивать MINUS и Fe и т.п.

К перечисляемым типам можно применять операции отношения (оба операнда должны иметь один тип), а также использовать их в качестве аргументов стандартных функций succ(x), pred(x), ord(x).

Рассмотренный ранее тип boolean может быть определен как пере- числяемый следующим образом:

Type Boolean=(FALSE, TRUE);

Определение предполагает, что для имен констант FALSE и TRUE выполняется отношение: FALSE<TRUE.

Ограниченный (диапазонный) тип данных

Ограниченный(диапазонный,интервальный)типопределяетсянабазе уже заданного типа (например, INTEGER, CHAR, перечисляемого). Для описания ограниченного типа нужно задать нижнюю и верхнюю границу значений:

TYPE <имя типа>=<нижняя граница>..<верхняя граница>;

Первая константа определяет нижнюю границу, затем идет знак «две точки»(..), после которого указывается вторая константа. При этом нижняя граница не должна превышать верхнюю, а их тип должен быть один и тот же.

Примеры:

Type MONTH = (JAN, FEB, MAR, APR, MAY, JUN, JUL, AUG,

SEP, OCT, NOV, DEC);

{перечисляемый тип}

LETO = JUN..AUG;

{диапазон месяцев}

INDEX = (0..90);

{диапазон для INTEGER}

SIMVOL = ’A’.. ’G’;

{диапазон для CHAR}

231

Информатика

К значениям ограниченного типа применимы те же операции, что и к значениям базового типа, используемым при задании в разделе определения типов. Если, к примеру, задано определение:

Type BUKVA = ’A’.. ’Z’;

Var Y: BUKVA;

то можно выполнить присваивание:

Y:= ’D’;

6.4. Операции и выражения

Выражения

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

Примеры.

1.À+Ñ-10/12 – выражение, в котором А, С, 10, 12 – операнды; +, -, / — знаки операций сложения и деления.

2.В*10.12*sin(x) – выражение, в котором в качестве операндов выступают переменная, константа, обращение к функции.

3.18 – выражение, состоящие из одной целочисленной константы.

4.STEM – выражение, представляющее собой имя переменной или константы.

Арифметические выражения и операции

В результате выполнения арифметического выражения получится целое или вещественное значение. В таблице 6.3 сведены арифметические операции языка Паскаль.

Операции возведения в степень в Паскале нет. Для выполнения этой операции можно использовать стандартные функции Exp(x) и Ln(a), воспользовавшись соотношением

y = an = eln an , тогда a = Exp(n*Ln(a)).

232

 

Глава 6. Алгоритмизация и программирование

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Таблица 6.3

 

Арифметические операции

 

 

 

 

 

 

 

Знак операции

 

Операция

 

 

 

 

 

 

 

*

 

Умножение

 

 

 

 

/

 

Деление

 

 

 

 

Div

 

Целочисленное деление

 

 

 

 

Mod

 

Остаток от деления

 

Минус

 

 

 

 

+

 

Сложение

 

 

 

 

 

Вычитание

 

 

 

 

При написании арифметических выражений необходимо помнить следующее:

наивысшийприоритетимеютоперацииумноженияиделения,соответственноонивыполняютсяраньше,чемоперациисболеенизким приоритетом(сложениеивычитание);есливсеоперацииимеютодинаковый приоритет, то они выполняются последовательно слева направо, выражения в скобках выполняются в первую очередь;

нельзя записывать подряд знаки двух операций;

не допускается запись выражений, не имеющих смысла.

Примеры.

1.Ñ+–D — неверная запись.

2.Ñ+(–D) — верная запись.

3.Р*2/С. Здесь Р умножается на 2, результат делится на С.

4.(А*С)*(2+М) — вначале выполняются действия в скобках, и только потом умножение.

5.D/(À–À) — неверная запись, ноль в знаменателе.

Логические операции и выражения Логические (булевские) выражения строятся из логических констант

и переменных, логических функций, выражений отношения путем применения круглых скобок и логических операций. В результате выполнения логического выражения получается логическое значение – одно из двух True или False.

В Паскале определены следующие логические операции (приведены впорядке убывания приоритета):

NOT — логическое отрицание. AND — логическое «и»;

OR — логическое «или»;

233

Информатика

Результаты применения данных операций определяются таблицами истинности ( см. табл. 6.4).

 

 

Таблица 6.4

 

 

 

Значение А

Значение В

Результат

 

A and B

 

False

False

False

True

False

False

False

True

False

True

True

True

 

A or B

 

False

False

False

True

False

True

False

True

True

True

True

True

 

Not A

 

False

 

True

True

 

False

Операции отношения

Операции отношения выполняют сравнение двух операндов. В результате выполнения операции отношения получают значение булевского типа — True или False. Операции отношения можно применять к данным типа Real, Integer, Boolean, Char. При этом в одном выражении можно одновременно использовать типы Real и Integer. Если в одном выражении имеются арифметические, логические операции и операции отношения, то вначале выполняются арифметические и логические, а затем операции отношения.

Стандартные функции

Стандартные встроенные функции необходимы для выполнения часто встречающихся действий, к примеру, вычисления значений элементарных функций (sin x, tg x и т.д.). Для обращения к стандартным функциям в выражениях используется идентификатор функции, после которого в круглых скобках указывается фактический параметр. Фактический параметр может быть константой, переменной или представлять сложное выражение. В табл. 6.5 и 6.6 приведены стандартные функции Паскаля.

234

Глава 6. Алгоритмизация и программирование

 

 

 

Таблица 6.5

 

Математические функции в Паскале

 

 

 

 

Функция

 

Запись в

Смысл. Тип результата

 

Паскале

 

 

 

x2

 

Sqr(x)

Квадрат числа. Целый или

 

 

 

вещественный, в зависимости от

 

 

 

типа аргумента

x

 

Sqrt(x)

Квадратный корень из x.

 

 

Вещественный

 

 

 

Sin x

 

Sin(x)

Синус x. Вещественный

Cos x

 

Cos(x)

Косинус x. Вещественный

Arctg x

 

Arctan(x)

Арктангенс x. Вещественный

Ln x

 

Ln(x)

Натуральный логарифм от x.

 

 

 

Вещественный.

ex

 

Exp(x)

Экспонента от х. Вещественный

Приоритеты операций

Операции в выражениях выполняются в следующем порядке:

вызовы функций;

операция NOT;

операции типа умножения *, /, div, mod, and;

операции типа сложения +, -, or;

операции отношения =, < >, <, >, <=, >=.

Операции с одинаковым приоритетом выполняются слева направо. Порядок выполнения операций можно изменить с помощью скобок.

 

 

 

Таблица 6.6

 

Стандартные функции Паскаля

 

 

 

 

 

Функция

Òèï

Смысл, результат

Пример

 

Результата

выполнения (его тип)

 

1

2

3

4

Ord(x)

Целые

Порядковый номер

Ord(50)=20

 

Char

аргумента x.

Ord(‘ ‘)=32

 

Boolean

Целочисленный

Ord(False)=0

 

(дискретные)

 

Ord(true)=1

Pred(x)

(дискретные)

Предыдущее значение

Pred(-6)=-7

 

 

 

Pred(‘z’)=’y’

 

 

 

Pred(True)=

Succ(x)

(дискретные)

Следующее значение.

=False

 

 

Возвращаемое значение

Succ(100)=101

 

 

совпадает с аргументом

Succ(‘f’)=’g’

 

 

 

Succ(False)=

 

 

 

=True

235

Информатика

Окончанеи табл. 6.6

1

2

3

4

Chr(x)

Byte

Символ, код которого

Chr(32)=’ ‘

 

 

x. Литерный

 

Dec(x,[i])

Целые

Увеличивает x на i.

Dec(100,10)=90

Inc(x,[i])

 

Уменьшает x на i.

Inc(50)=51

 

 

Совпадает

Inc(50,-5)=45

y Div x

Целые

Целая часть от деления.

13 Div 5=2

y Mod x

Целые

Остаток от деления.

13 Mod 5=3

 

 

Целочисленный

 

Odd(x)

Целые

True при х нечетном,

Odd(25)=True

 

 

False при х четном

Odd(100)=False

Trunc(x)

Вещественный

Отбрасывает дробную

Trunc(5.7)=5

 

 

часть, целое.

Trunc(-4.6)=-4

Round(x)

Вещественный

Округляет по правилам,

Round(5.7)=6

 

 

целое.

Round(-4.6)=-5

Int(x)

Вещественный

Целая часть от х,

Int(-4.6)=-4.0

 

 

вещественное.

 

Frac(x)

Вещественный

Дробная часть от х,

Frac(-4.6)=-0.6

 

 

вещественное

Frañ(8.91)=0.91

Radom[(i)]

Real, Word

Генерирует случайные

Random –

 

 

целые числа из

случайное

 

 

диапазона (от 0 до i-1)

вещественное

 

---

или (если без параметра)

число от 0 до 1.

 

 

вещественное число от 0

(0.583)

Randomize

 

äî 1.

Random(100) –

 

 

Инициализирует

случайное

 

 

случайным значением

целое число от

 

 

(текущим системным

0 äî 99

 

 

временем), генератор

 

 

 

случайных чисел

 

6.5. Структура программы

Программа, составленная на языке Паскаль, состоит из заголовка и «тела» программы, называемого блоком. Оканчивается программа точ- кой. Заголовок программы начинается с зарезервированного слова PROGRAM, после которого следует имя программы, за именем программы указывается список параметров (обычно это файлы INPUT и OUTPUT). Список параметров может отсутствовать. Имя программы представляет собой идентификатор.

236

Глава 6. Алгоритмизация и программирование

Примеры:

Program STUD(INPUT, OUTPUT);

Program LAB1(INPUT, OUTPUT);

Program RASCHET;

Блок состоит из двух частей (разделов): раздела описания и раздела операторов. Описания определяют объекты (данные) программы, а операторы предписывают действия, которые необходимо совершить над введенными объектами. Всего в блоке может быть шесть разделов. Любой из них (кроме последнего — раздела операторов) может отсутствовать.

В общем виде структуру программы на Паскале можно представить следующим образом:

1)раздел определения меток;

2)раздел определения констант;

3)раздел определения типов;

4)раздел описания переменных;

5)раздел описания процедур и функций;

6)раздел операторов.

Посколькусовременныеконцепциипрограммированиясчитают«плохим стилем» использование операторов безусловного перехода, а следовательно, отпадает необходимость в метках, в данном учебнике раздел определения меток и оператор GOTO не рассматриваются. Читатель может найти описание этих разделов Паскаля, например, в [15, 17].

Раздел определения констант

Как уже отмечалось, можно обозначить константы именами и в дальнейшем в программе использовать только имена констант. Раздел начи- нается с зарезервированного слова CONST, после которого следует список определений констант. В конце списка ставится символ «точка с запятой». Каждое определение константы представляет собой идентификатор, за ним следует знак равенства (=) и само значение константы. Определения констант отделяются друг от друга символом «точка с запятой».

Примеры:

CONST maxsn=1000;

CONST maxn=100; s=’a’; d=4.2;

237

Информатика

Раздел определения типов

В этом разделе пользователь может по своему усмотрению определять собственные типы и давать им любые имена. Раздел начинается со слова TYPE, за которым следует одно или несколько определений типов, отделяемых друг от друга символом «точка с запятой». Каждое определение состоит из идентификатора, за которым следует знак равенства (=), и задания типа или его имени. В конце раздела ставится символ «точка с запятой».

Пример:

Type

NN=integer;

Vector=array[1..10] of real;

Color=(RED, YELLOW, GREEN, BLUE);

Раздел описания переменных

Всеиспользуемыевпрограммепеременныедолжныбытьописанывэтом разделе,начинающемсясключевогословаVAR,закоторымидетпоследовательностьобъявленийпеременных.Объявленияпеременныхотделяются друготдругаточкойсзапятой.Вобъявлениичереззапятыеперечисляются имена переменных, затем следует символ «двоеточие» и их тип.

Пример:

Var

A,B,C: integer;

D: real;

V: boolean;

F: vector;

Раздел описания процедур и функций

В нем размещаются процедуры и функции пользователя (см. п. 6.10).

Раздел операторов

Он начинается с зарезервированного слова BEGIN и оканчивается словом END, после которого должна стоять точка:

BEGIN <оператор;>

...

<оператор>

END.

238

Глава 6. Алгоритмизация и программирование

В разделе операторов выполняются действия над предварительно описанными переменными, константами, значениями функций. Операторы отделяются друг от друга символом «точка с запятой». Допускается не ставить «;» перед END.

Ниже приводится п р и м е р простой программы на языке Паскаль, предназначенной для вычисления факториала числа N (N!).

Program prim1 (INPUT, OUTPUT); {заголовок программы} Var Fact, X, N: integer; {раздел описаний и

определений}

 

Begin

{начало раздела операторов}

Read(N);

 

Fact:=1; X:=0;

While X<>N DO

Begin

X:=X+1; Fact:=Fact*X;

End;

Writeln(‘ N=’, N, ‘ N!=’, Fact)

End.

{конец программы}

Директивы компилятора и управляющие символы

Директивы компилятора используются программистом для управления режимами компиляции.

Директива — сообщение в повелительной форме, вводимое оператором и содержащая указания о том, какие необходимо выполнить действия.

Директива компилятора — компонент программы, управляющий последующей компиляцией программы. Директива компилятора имеет следующий формат записи: заключается в фигурные скобки «{}», символ $ <латинская буква> { ± }.

Пример: {$R-}, {$V+, K-}.

По умолчанию директивы гарантируют минимальный объем объектного модуля и минимальное время компиляции.

Управляющие символы — знак «#» или «^».

«#» — и следующее за ним целочисленное значение обозначают символ кодовой таблицы ПК, имеющий соответствующее десятичное зна- чение.

Например: #10#13 — конец строки, переход на новую. «^» — указывает, что за ним следует управляющий символ.

239

Информатика

Например: ^Y#10#13.

Библиотечные модули — это библиотеки подпрограмм (процедур и функций).

Библиотечные модули — результат компиляции в режиме compile с директивой destination = disk одной или нескольких процедур и функций. Имя модуля может указываться в разделе USES для возможности использования каждой из находящихся в н¸м процедур или функций.

Создание библиотечного модуля требует определ¸нной организации

ñприменением специальных зарезервированных слов.

6.6.Операторы языка Паскаль

Операторы служат для задания действий над данными. Для однозначной интерпретации программы набор допустимых операторов зафиксирован, и четко определены правила их записи, которые нельзя нарушать.

6.6.1. Оператор присваивания

Общий вид оператора: <идентификатор> := <выражение>;

Оператор присваивания выполняется следующим образом: выполняется выражение, стоящее в правой части, и результат присваивается переменной, имя которой расположено в левой части. При этом переменная и выражение должны иметь один и тот же тип. Исключение составляет слу- чай, когда переменной типа real присваивается переменная типа integer. Допускается присваивание всех типов данных, кроме типа файла.

Пример:

KOR := 2;

RESULT := SIN(A)+2;

6.6.2. Операторы вывода и вывода информации

Вывод данных

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

240