Рассмотрим подробно арифметические выражения, т. к. именно с их помощью выполняются все вычисления в программе.
Результатом арифметического выражения является целое или вещественное значение. Выражение задает порядок действий над элементами данных и состоит из:
• операндов (констант, переменных, функций);
• круглых скобок;
• знаков операций.
 меню
Операции определяют действия, которые надо выполнить над операндами. В отличие от традиционной математической записи обязательно указывать все знаки операций.
Например, в выражении (х+у) *5-10 операндами являются переменные х и у, а также константы 5 и 10; а +, * — знаки арифметических операций сложения и умножения соответственно. Символ операции умножения — * (звездочка) должен присутствовать в явном виде. Если все объекты, входящие в выражение, определены в момент их использования (в нашем примере — это переменные х и у), то значение выражения считается определенным.
В простейшем случае выражение может состоять из одной переменной или константы. Круглые скобки ставятся так же, как и в обычных математических выражениях для управления порядком выполнения операций
При использовании двух знаков операций нежелательно, чтобы они стояли рядом: а*-b. Лучше заключить второй операнд в скобки: а*(-b).
 меню        вверх
Целочисленное деление div (от division, деление) отличается от обычной операции деления тем, что возвращает целую часть частного, а дробная часть отбрасывается — 13 div 3 = 4, а не 4,(3). Результат div всегда равен нулю, если делимое меньше делителя.
Например:
11 div 5 = 2
10 div 3 = 3
2 div 3 = 0
123 div 4 = 30
17 div -5 = -3
-17 div 5 = -3
-17 div -5 = 3
Взятие остатка от деления mod (от modulus, мера) вычисляет остаток, полученный при выполнении целочисленного деления.
Например:
10 mod 5 = 0
11 mod 5 = 1
10 mod 3 = 1
14 mod 5 = 4
17 mod - 5 = 2
-17 mod 5 = -2
-17 mod -5 = -2
Аргументы операций div и mod — целые числа. Взаимосвязь между операциями div и mod проста. Для а>0 и b>0 справедливо:
A mod b = a – (a div b)*b
(a div b)*b + (a mod b) = a
Обратите внимание — операцию mod можно использовать, чтобы узнать, кратно ли целое а целому b. А именно, а кратно b тогда и только тогда,когда а mod b = 0 (см. лиcтинг 3.6).
 меню        вверх
В арифметических выражениях часто используются следующие стандартные функции (табл. 3.1).
Таблица 3.1. Стандартные функции
Стандартная функция | Выполняемое действие | Тип | |
аргумента | результата | ||
abs (x) | |x| | real | real |
integer | integer | ||
sqr (x) | x2 | real | real |
integer | integer | ||
sqrt (x) | x1/2 | real | real |
integer | real | ||
exp (x) | ex | real | real |
integer | real | ||
ln (x) | ln (x) | real | real |
integer | real | ||
sin (x) | sin (x) | real | real |
integer | real | ||
cos (x) | cos (x) | real | real |
integer | real | ||
arctan (x) | arctg (x) | real | real |
integer | real | ||
pi | число Π | - | real |
Вызов стандартной функции осуществляется путем указания в нужном месте программы имени функции (аbs, ln, ехр и др.) и ее аргумента, заключенного в круглые скобки. После вычисления значения функции ее вызов заменяется результатом, и расчет содержащего ее выражения продолжается дальше (см. листинг 3.1).
Следует знать:
• аргумент прямых тригонометрических функций sin и соs задается в радианах. Для преобразования значения угла из радианной меры в градусную необходимо умножить величину угла на число 180/рi. Для перевода значения угла из градусной меры в радианную необходимо умножить величину угла на число pi/180(см. листинг 3.1);
• результат функции агсtаn получается в радианах.
Кроме приведенных в табл.3.1 также используются следующие стандартные процедуры и функции:
• функция random ( диапазон) возвращает случайное число х, удовлетворяющее условию 0<=х<диапазон. Тип аргумента и результата — word. В том случае, если нам необходимы целые случайные числа из диапазона b>x>=a,мы можем получить их, используя выражение random (b-a)+a. Если параметр диапазон не указан, то random возвращает число х в диапазоне 0<=х<1. Тип результата — rеа1. В том случае, если нам необходимы вещественные случайные числа из другого диапазона: b>x>=а, мы можем задать его при помощи random*b+a. Перед первым обращением к функции random необходимо с помощью вызова процедуры randomize инициализировать программный генератор случайных чисел. В противном случае при каждом запуске программы датчик будет выдавать одни и те же числа. Эту особенность можно использовать при отладке программы;
• процедура dec(х,n) уменьшает значение целочисленной переменной х на n . Например, х:=10; dec (х, 2); {результат: 8} . При отсутствии необязательного параметра n процедура принимает вид deс(х) , а значение х уменьшается на единицу;
• процедура inc(х,n) увеличивает значение целочисленной переменной х на n. Например, х:=10; inc(х,3);{(результат: 13}. При отсутствии необязательного параметра n процедура принимает вид inс (х), а значение х увеличивается на единицу;
• функция frас(х) вычисляет дробную часть х. Аргумент и результат — rеа1. Например write (frас(0.25*11) :4:2); {результат 0.75};
• функция int (х) вычисляет целую часть х. Аргумент и результат — rеа1. Например, write(int(422.117) :4:2) ; {результат 422.00}. Таким образом, х=int (х) +frас (х).
 меню        вверх
При работе с целочисленной арифметикой нельзя смешивать операнды целого и вещественного типов. Пусть i — переменная целого типа, а х — вещественного. Тогда для получения целочисленного результата их суммирования необходимо воспользоваться одной из функций trunc или round: trunc (х) ИЛИ round (х).
• Функция преобразования типа trunc(х) возвращает ближайшее целое число, меньше или равное вещественному х для х>=0 , и больше или равное х для х<=0 (от truncate, усекать). Таким образом, выполняется отбрасывание десятичных знаков после точки. Аргумент — rеа1 , результат — longint .
Например, trunc ( 6.7); {результат: 6}, trunc;(-1.6); {результат:-1}.
• Функция преобразования типа round(х) возвращает значение х, округленное до ближайшего целого числа (от round, круглый). Аргумент — rеа1, результат — longint.
Например, round (6.7); {результат:7}, round(-1.6); {результат:-2.
 меню        вверх
Вычисление степени числа выполняется в Тurbо Раsсаl с использованием свойств логарифмов:
Таким образом, нельзя возвести в степень отрицательное число. Для этого можно использовать операторы циклов.
 меню        вверх
Для вычисления логарифма с основанием а используем:
В Тurbо Раsсаl определены только три тригонометрические функции: sin, соs, аrсtg (табл. 3.1). Для вычисления остальных тригонометрических, функций необходимо использовать известные соотношения:
 меню        вверх
Последовательность выполнения операций в составе выражения происходит с учетом их приоритета (старшинства). В табл. 3.2 приведен порядок выполнения всех основных операций (арифметических и логических). Подробнее о логических операциях будет рассказано ниже (см. разд. 3.8.1).
Таблица 3.2. Порядок выполнения основных операций
Операция | Приоритет | Вид операции |
not, @ | Первый (высший) | Унарная операция |
*, /, div, mod, and, shl, shr | Второй | Операции типа умножения |
+, —, or, xor | Третий | Операции типа сложения |
=, < >, <, >,<=, >=, in | Четвертый | Операции отношения |
Обратите внимание — операции с равным приоритетом выполняются слева направо. Выражение, заключенное в скобки, перед выполнением вычисляется как отдельный операнд. При наличии вложенных скобок вычисления выполняются, начиная с самых внутренних. В тексте программы необходимо проверять парность расстановки скобок: число открывающих скобок должно быть равно числу закрывающих скобок.
Например:
• в выражении 3+4*5 умножение * выполняется перед сложением +, потому что его приоритет выше. Для изменения порядка используйте скобки: (3+4) *5;
• выражения а*b/с и (а*b) /с вычисляются одинаково, т. к. приоритеты умножения и деления равны, а знак операции умножения стоит левее знака деления. Для изменения порядка действий необходимы скобки: а*(Ь/с).
Листинг 3.1 содержит программу вычисления площади треугольника по двум сторонам и углу между ними. Угол вводится в градусах и переводится в радианы.
Листинг 3.1. Вычисление площади треугольника
uses crt;Комментарии
Процедура clrscr очищает экран и помещает курсор в его левый верхний угол. Для того чтобы процедура clrscr была доступна программе, в ее начало помещается строка uses crt;.
Листинг 3.2 содержит программу, которая вычисляет месячные выплаты m по займу в s рублей на n лет под процент р. Вычисления выполняются по формулам:
Листинг 3.2. Вычисление ежемесячных выплат по займу
varДля преобразования числа в денежный формат (выделения рублей и копеек) в программе используются операции div и mod. Обратите внимание, что в тексте программы трижды повторяется пара операторов для выделения значений рублей и копеек (rub и кор), при этом меняется только имя переменной: s, m, d (заем, выплата и прибыль). Возникает закономерный вопрос: можно ли записать эти операторы один раз, а затем трижды "вызвать" их для вычисления результата — переменных rub и кор, подставляя каждый раз имена различных исходных данных — переменных s, m и d.
Листинг 3.3 содержит программу, вычисляющую сумму цифр трехзначного числа.
Листинг 3.3. Вычисление суммы цифр трехзначного числа
var i,first,second,third,sum: integer; предыдущая         меню        вверх         следующая