2.3.2. Алгебраические выражения

 

Алгебраические (арифметические) выражения – это конструкции, содержащие данные, знаки математических операций, математические функции.

Имеющиеся в языке Паскаль математические операции представлены в таблице 2.1, там же показаны простейшие примеры их использования.

 

Таблица 2.1. Математические операции в Pascal

Название

Знак

Тип

операндов

Тип результата

Пример

Сложение

+

Целое, веществ.

Целое, веществ.

15 + 3    {=18} - целое

12.5 + 3 {=15.5} - вещ.

Вычитание

-

Целое, веществ.

Целое, веществ.

15.5 - 3 {=12.5} - вещ.

15 - 3    {=12} - целое

Умножение

*

Целое, веществ.

Целое, веществ.

3.5*2 {=7.0} - вещ.

3*2    {=6} - целое

Деление

/

Целое, веществ.

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

3/5      {=0.6} - вещ.

15.5/5 {=3.1}  -вещ.

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

div

Целое

Целое

3 div 5  {=0} - целое

Целый остаток от деления

mod

Целое

Целее

3 mod 5 {=3} - целое

 

Обратите внимание на тип операндов (т.е. тип данных, на которые действует операция) и тип результата, отмеченные в таблице. Если операция предназначена для работы только с целыми типами данных, то при попытке применения её к вещественным данным, компилятор сообщит об ошибке.

Тип результата выражения важен, при присваивании этого результата какой-либо переменной. Правила присваивания были описаны выше. Нужно помнить, что если результат алгебраической операции вещественный, то при попытке присвоить его целой переменной компилятор сообщит об ошибке.

Несколько примеров допустимых и недопустимых алгебраических выражений представлены в таблице 2.2.

 

Таблица 2.2. Примеры алгебраических выражений

В выражениях ниже переменные а – целого типа, х – вещественного.

Выражение

Комментарий

Правильная запись

(2*a+1) div 3

Целую переменную делить нацело (операция div) можно

x/a

Вещественную переменную можно делить всегда

Неправильная запись

x div 2

Вещественная переменная х не может быть использована с операцией div

(2+a)/3 mod 5

результат первого деления вещественный и не может быть использован с операцией mod (остаток от деления нацело)

 

В алгебраических выражениях часто используются математические функции, такие как sin, cos, ln и т.п. Необходимо помнить, что аргументы функции всегда заключаются в скобки, знаков умножить между функцией и аргументом ставить не надо. Список стандартных математических функций приведен в приложении В. Несколько примеров использования функций в алгебраических выражениях приведено ниже.

 

Таблица 2.3. Примеры использования функций в алгебраических выражениях

Алгебраическая запись

Запись на Паскале

2∙105 cos3x

2E5*cos(3*x)

sqrt(x*x+y*y)

sqrt(sqr(x)+sqr(y))

1E3*exp(sqr(x)+sqrt(5*sin(x)))

 

 

 

 

arctan((1-sqr(cos(x)))/cos(x))

 

 

 

Порядок выполнения операций внутри алгебраического выражения определяется приоритетом операций (таблица 2.4).Согласно принятым в языке Паскаль правилам, сначала будут выполнены операции в скобках, затем вычислены функции, унарные операции, операции умножения или деления и только затем – операции сложения и вычитания.

 

Таблица 2.4. Приоритет математических операций

Приоритет

Тип действия

1

Вычисления в скобках (…)

2

Вычисление функций

3

Унарные операции (например, not)

4

Операции типа умножения, деления (*, /, div, mod, and)

5

Операции типа сложения (+, -, or, xor)

6

Операции отношений (=, <>, <, >, <=, >=)

 

Операции отношения и логические операции: not,and,or,xor будут описаны ниже.

Давайте проясним действие приоритета операций на примерах.

Пример 1. В арифметическом выражении в примере 1, которое на языке Паскаль имеет вид 1E3*exp(sqr(x)+sqrt(5*sin(x))) сначала вычисляется аргумент экспоненты (exp), при этом в нем в первую очередь - функции и скобки. Весь порядок операций показа на рисунке ниже.

Пример 2. Необходимо вычислить сложную дробь . При этом необходимо писать: (1+sqr(a))/(3*a), либо (1+sqr(a))/3/a.

Неправильным будет вариант (1+sqr(a))/3*a, т.к. сначала компьютер разделит сумму на 3, а потом, что получилось, умножит на а.

Также неправильно писать 1+sqr(a)/(3*a), т.к. сначала значение квадрата sqr(a) будет поделено на 3а, затем к результату прибавится 1.