True and True – результат True. False or True – результат True.
True xor True – результат False. not True – результат False.
Логические операции удобно использовать совместно операциями отношения, для конструирования сложных логических выражений.
Примеры:
Для проверки, что некоторая X больше 1, можно записать: X > 1.
Для проверки, что некоторая X меньше 10, можно записать: X < 10.
Для проверки же, что некоторая X попадает в отрезок (1, 10), потребуется использовать логическую операцию AND, т. е. X больше 1 и X меньше 10: (X>1) AND (X<10).
Для проверки, что X не попадает в указанный выше отрезок, потребуется логическая операция OR: X должен быть меньше либо равен 1 или больше либо равен 10: (X<=1) OR (X>=10).
Приоритет операций и отношений в выражениях
В математике, как всем известно еще со школы, всегда сначала выполняется умножение и деление, и лишь затем – сложение и вычитание.
Выражение в языке Паскаль состоит из констант, переменных, указателей функций, знаков операций и скобок. Выражение задает правило вычисления некоторого значения. Порядок вычисления определяется старшинством (приоритетом) содержащихся в нем операций. В языке Паскаль принят следующий приоритет операций.
Приоритет | Операции и отношения |
1 | @, - и +(унарные), NOT |
2 | *, /, DIV, MOD, AND, SHR, SHL |
3 | +, -, OR, XOR |
4 | IN, >, <, =, <>, >=, <= |
Порядок вычисления выражения определяется следующим образом:
· если в выражении расставлены скобки, то чем меньше глубина вложенности скобок, тем позже выполняются заключенные в них операции;
· если скобок нет, то в первую очередь выполняются операции с более высоким приоритетом;
· если в выражении несколько операций имеют одинаковый приоритет, то они выполняются по порядку слева направо.
Примеры:
2 + 3 * 4 – 6 / (2+1) сначала выполняется умножение, затем вычисляется скобка, затем выполняется деление, и, наконец, операции без скобок и с приоритетом 3: сначала сложение, затем вычитание. Результат равен 12.
(7+2)/(2+1)-6*9/(3*3) сначала выполняются операции в скобках, затем деление левое, умножение и деление правое. В последнюю очередь – вычитание. В результате получаем: 9/3-6*9/9 = 3-54/9 = 3-6 = -3
(x > 4) and (3 = y) сначала выполняется левая скобка, затем правая, и в завершение – логическая операция AND. При отсутствии скобок будет ошибка: т. к. AND имеет приоритет 2, а операции отношения – 3, то компилятор при отсутствии скобок попытается выполнить операцию 4 and 3, что является некорректным.
Стандартные (встроенные) функции
При построении выражений на языке Паскаль программист может воспользоваться одной из существующих стандартных функций. Ниже приводится список основных из таких функций.
Функция | Входные данные | Выходные данные | Описание |
Abs(X) | целое веществ | целое веществ | Возвращает модуль числа X |
Sqr(X) | целое веществ | целое веществ | Возвращает квадрат числа X |
Sqrt(X) | целое веществ | вешеств веществ | Возвращает корень числа X |
Succ(X) | целое символь | целое символь | Возвращает значение, следующее за X |
Pred(X) | целое символь | целое символь | Возвращает значение, предшествующее X |
Sin(X) | целое веществ | веществ веществ | Возвращает синус числа X, где X – угол в радианах |
Cos(X) | целое веществ | веществ веществ | Возвращает косинус числа X, где X – угол в радианах |
Arctan(X) | целое веществ | веществ веществ | Возвращает арктангенс числа X |
Pi | веществ | Возвращает число Пи | |
Ln(X) | целое веществ | веществ веществ | Возвращает натуральный логарифм числа X |
Exp(X) | целое веществ | веществ веществ | Возвращает число e в степени X |
Round(X) | веществ | целое | Возвращает число, равное целой части числа X – округление по правилам математики |
Trunc(X) | веществ | целое | Возвращает число, равное целой части числа X |
Int(X) | веществ | веществ | Возвращает число, равное целой части числа X |
Frac(X) | веществ | веществ | Возвращает число, равное дробной части числа X |
Odd(X) | целое | веществ | True, если число нечетное |
Ord(C) | символь | целое | Возвращает число, соответствующее символу C в ASCII-таблице |
Chr(K) | целое | символь | Возвращает символ, соответствующий ASCII-коду числа K |
UpCase(C) | символь | символь | Возвращает число, соответствующее символу C в ASCII-таблице |
Примеры:
sqrt (9) + sqr (2) * trunc (pi)
Сначала выполняется умножение. Для этого необходимо выполнить функции sqr(2) – возведение в квадрат (результат 4), и trunc(pi) – взятие целой части. При этом в качестве аргумента второй функции выступает другая функция – pi. В результате получаем 3 (целая часть от 3.14). Перемножая 4 и 3, получаем 12.
Следующая операция – сложение. Здесь сначала выполняется функция sqrt(9) – извлечение корня (результат 3). В итоге получаем, что представленное выше выражение возвращает результат 15.
Теперь посмотрим, какого типа будет полученный результат. Функция sqr возвращает целый результат, т. к. аргумент целого типа. Функция trunc всегда возвращает целое. Произведение двух целых дает целое. Функция sqrt всегда возвращает вещественное значение. Складывая целое и вещественное, получаем вещественное. Таким образом, результатом нашего выражения будет вещественное значение 15.0.
(-7+sqrt(sqr(7)-4*3*2))/(2*3)
Сначала выполняются операции в скобках, с учетом приоритета операций в каждой из них. В результате получим (-7+sqrt(sqr(7)-24))/(6). Затем вычитаем из квадрата 7 значение 24 и из результата вычисляем корень. Получим (-7+sqrt(49-24))/(6), далее (-7+5)/(6). Наконец, произведя последние вычисления, получим -2/6, или -1/3.
Результат выражения имеет вещественный тип, т. к. здесь присутствуют такие операции, как извлечение корня и деление, которые всегда возвращают результат вещественного типа независимо от операндов.
sqrt(5+sqr(2)) > 4 – sqr – квадрат, т. е. sqr(2)=4. 5+4=9. sqrt – корень, т. е. sqrt(9)=3. В итоге получаем 3>4, что не является истиной, следовательно, результатом данного выражения будет False.
odd(sqr(round(x/2))), при x=5
Подставляем в формулу вместо x число 5. Получаем 5 / 2 = 2.5. Функция round производит округление числа по законам математики, следовательно, round (2.5) = 3. Далее результат возводим в квадрат – sqr (3) = 9. Наконец, функция odd(x) возвращает True, если целое число x является нечетным, и False, если x – четное (т. е. проверка числа на нечетность). Следовательно, odd(9) = True. Результат выражения – True.
Указать порядок выполнения операций: true or false and true.
Согласно приоритетам, сначала выполнится операция AND и лишь затем – OR. Результатом выражения станет True.
Указать порядок выполнения операций: not b = a and c xor d.
Согласно приоритету, сначала выполнится операция NOT, затем AND, далее XOR и лишь затем «=». Обратите внимание, что все перечисленные операции имеют разный приоритет.
Вопросы для самопроверки
1. Что представляют собой операции «целочисленное деление» и «остаток от деления»?
2. Что определяет приоритет операций?
3. Какая операция выполнится раньше в выражении без скобок: AND или XOR?
4. Как записать на языке Паскаль выражение x2+|a-b|?
5. Какого типа возвращает результат функция sqrt?
§4. Структура программы
Программа на языке Паскаль состоит из заголовка, блока описаний и блока операторов.
Заголовок программы содержит имя программы. Он начинается с ключевого слова program, за которым и указывается само имя. При этом имя программы должно удовлетворять требованиям к именам (идентификаторам) в языке Паскаль, которые были приведены в §1.
Пример: Program PRIM;
Заголовок программы не является обязательным элементом. В случае если имеется файл *.pas, в котором записан исходный текст лишь одной программы, то она может быть безымянной. В этом случае ключевое слово program не указывается. Если же у программы есть заголовок, то слово program записывается в первую очередь.
За заголовком программы следует блок описаний. Все, что используется в программе на языке Паскаль (метки, константы, переменные и т. п.), должно быть предварительно описано в этом блоке. Другими словами, если мы используем в исходном тексте программы некоторое X, то компилятор к этому времени должен уже знать, что такое X, какого он типа, какой объем памяти необходимо для него выделить, какие в нем могут храниться значения и т. п.
Описания могут включать в себя раздел подключаемых библиотек (модулей), раздел описания меток, раздел описания констант, раздел описания типов, раздел описания переменных, раздел описания процедур и функций. Каждый раздел начинается со специального служебного слова, за которым и следуют собственно описания.
uses <описание подключаемых библиотек>;
label <описание меток>;
const <описание констант>;
type <описание типов>;
var <описание переменных>;
<описание процедур и функций>;
Рассмотрим вкратце назначение некоторых из перечисленных разделов.
Раздел описания модулей определяется служебным словом uses и содержит имена подключаемых модулей (библиотек), как входящих в состав системы Турбо Паскаль, так и написанных пользователем. Раздел описания модулей должен быть первым среди разделов описаний. Имена модулей отделяются друг от друга запятыми.
Пример: uses CRT, Graph;
После того, как в разделе uses указано имя библиотеки, в самой программе можно использовать дополнительные процедуры и функции, входящие в её состав.
Любой оператор в программе может быть помечен меткой. Благодаря этой метке, к такому оператору можно перейти из любого места программы с помощью специального оператора goto (получается команда типа «перейти к оператору, который помечен меткой METKA»). В качестве метки могут использоваться произвольные целые без знака, содержащие не более четырех цифр, а также любые имена. Метка ставится перед оператором и отделяется от него двоеточием. Все метки, используемые в программе, должны быть перечислены в разделе описания меток.
Пример: label 3, 471, 29, Quit;
Описание констант позволяет использовать имена как синонимы некоторых значений. Например, в математике известны такие константы, как π (3.14) или e (2.71). В программе на языке Паскаль все такие константы необходимо определить в разделе описаний констант.
Пример: const K= 1024; MAX= 16384;
В разделе описания переменных определяются все используемые в программе переменные и их типы. Более подробно с ними мы познакомимся в следующих параграфах.
Пример:
var
P, Q,R: Integer;
A, B: Char;
F1, F2: Boolean;
Отметим, что в программе необязательно должны присутствовать все указанные выше разделы: пользователь описывает только то, что он использует. Если в программе нет, например, констант или меток, то в блоке описаний соответствующие разделы не записываются. В случае очень простой программы может так получиться, что блок описания вовсе не потребуется.
Завершает программу на языке Паскаль основной блок. Основной блок, в отличие от заголовка и описаний, присутствует всегда во всех программах. Именно здесь записываются все команды, которые необходимо выполнить.
Основной блок представляет собой набор операторов, разделенных между собой символами «;». Он начинается зарезервированным словом begin и заканчивается словом end, после которого следует точка.
Пример:
begin
writeln (‘Hello world!’);
end.
Пример: программа для вычисления площади, периметра и длины диагонали прямоугольника, размеры которого задаются пользователем.
program test;
var
a, b: integer;
s, p: integer;
d: real;
begin
writeln(‘Введите длину и ширину прямоугольника’);
readln(a, b);
s := a*b;
p := 2*a+2*b;
d := sqrt(sqr(a)+sqr(b));
writeln(‘Площадь прямоугольника = ’, s);
writeln(‘Периметр прямоугольника = ’, p);
writeln(‘Диагональ прямоугольника = ’, d:5:2);
end.
Комментарии
Помимо описаний и операторов в программах на языке Паскаль могут использоваться комментарии.
Комментарии не выполняют никаких действий и используются только как некоторый поясняющий текст для программистов. Комментарии помещаются в фигурные скобки (« { » и « } ») и могут содержать произвольный набор символов (в т. ч. и буквы кириллицы). Компилятором комментарии игнорируются, поэтому они могут быть вставлены в любое место программы.
Пример:
var x: integer; {описали переменную}
begin
readln(x); {запрашиваем у пользователя значение x}
x:=2*x; {увеличиваем x в два раза}
writeln(x); {печатаем новое значение x на экране}
end.
Рекомендуется комментарии использовать для пояснения сложных блоков операторов, а также в тех случаях, когда исходный текст программы будет использоваться другими программистами.
Кроме того, комментарии могут оформляться с помощью скобок « (* » и « *) ».
Также стоит отметить, что компилятором игнорируется любой текст, записанный после точки (т. е. за программой).
Директивы компилятора
В текст программы могут быть вставлены специальные директивы для компилятора. Такие директивы задают тот или иной режим компиляции.
Директивы помещаются в скобки «{$ » и « } ». От комментариев они отличаются тем, что сразу же за открывающейся фигурной скобкой следует знак $. Внутри скобок указывается, какую опцию следует включить или отключить.
Подробнее с директивами компилятора знакомство будет осуществляться в процессе изложения материала. Здесь же приведем лишь несколько примеров.
Вспомним логические выражения. Не всегда такие выражения требуется вычислять полностью – в некоторых случаях результат может стать уже известным заранее. Например, рассмотрим следующее выражение:
(3=7) and ( sin(pi/7)*cos(5*pi/6)<4/7+0.03 )
Вычислив левую от ключевого слова and скобку, получим False. Далее, на первый взгляд, необходимо вычислить правую от and скобку. Но вспомним, что оператор and возвращает истину только в том случае, когда оба операнда истинны. Однако левый операнд ложен. Следовательно, получаем: результатом выражения будет False независимо от того, какой результат будет получен в правой от and скобки.
В Паскале вычисления логических выражений заканчиваются тогда, когда окончательное значение становится понятным. Т. е. для предыдущего выражения правая скобка вычисляться не будет. С одной стороны, это позволяет избежать ненужных вычислений, а следовательно, и ускоряет время выполнения программы. Но, с другой стороны, в практике можно столкнуться с ситуацией, когда логическое выражение необходимо вычислить полностью, независимо от того, известен ли уже конечный результат или нет (например, если в выражении осуществляется вызов какой-либо функции, которую обязательно необходимо выполнить).
Принудить компилятор выполнять логические выражения полностью может директива {$B+}. Вернуть затем компилятор к обычному режиму можно с помощью директивы {$B-}.
Пример:
var t: boolean;
begin
…
{$B+}
t := (3=7) and ( sin(pi/7)*cos(5*pi/6)<4/7+0.03 );
{$B-}
…
end.
В завершение пункта отметим, что в одних скобках можно перечислить через запятую сразу несколько директив компилятора:
{$I-, Q+}.
Оформление исходного текста
Наряду с требованиями синтаксического характера существуют так называемые правила «хорошего тона». Так называют правила оформления исходного текста программ, которые не обязательны к выполнению, но которые при этом позволяют значительно упростить понимание кода. Другими словами, это рекомендации по оформлению исходного текста программ. Так, например, к таким рекомендациям относятся следующие:
1) в каждой строке исходного текста программы следует записывать только один оператор. Каждый новый оператор должен записываться с новой строки;
2) между операторными скобками begin..end все операторы должны записываться с отступом. Если в программе встречается еще одна пара begin..end, то внутри нее операторы записываются с дополнительным отступом. Чем больше глубина вложенности, тем больше будет отступ.
Пример:
var x: integer;
begin
readln(x);
if x>0 then
begin
x:=2*x;
x:=sqr(x);
end;
writeln(x);
end.
Вопросы для самопроверки
1. Является ли обязательным элементом заголовок программы?
2. Что такое «комментарии»?
3. Какие директивы компилятора Вы знаете?
4. Запись {I+} – это комментарий или директива компилятора?
5. Какие рекомендации к оформлению исходного кода программы Вы знаете?
§5. Переменные и константы. Оператор присваивания
Ранее были рассмотрены основные понятия языка программирования Паскаль, типы данных, структура программы и др. Начиная с этого параграфа, перейдем уже непосредственно к написанию исходного текста программ на языке программирования Паскаль.
|
Из за большого объема этот материал размещен на нескольких страницах:
1 2 3 4 5 6 |


