Информатика_Гуда
.pdfГлава 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