Предисловие дорогие друзья !

Вид материалаДокументы

Содержание


§7. Арифметические выражения.
Подобный материал:
1   2   3   4   5   6   7   8   9   ...   29

§7. Арифметические выражения.


В русском языке слово «выражение» имеет несколько значений. Например, внешний вид, оборот речи, формула, отражающая математические отношения. Именно последнее значение этого слова используется в языке Паскаль. Только вместо слова «формула» говорят «выражение».

В языке Паскаль по сравнению с математическим понятием выражение имеет свои особенности.

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

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

Рассмотрим построение арифметических выражений.

В языке Паскаль не для всех математических операций есть такие же обозначения. Например, х, х2, нельзя записать на языке Паскаль. Для реализации подобных операций необходим алгоритм решения и, соответственно, программа. Для облегчения работы программиста наиболее распространённые алгоритмы разработаны фирмой-производителем языка Паскаль и поставляются вместе с языком. Они хранятся в специальной библиотеке и называются стандартными или встроенными функциями, некоторые приведены ниже, а с остальными можно познакомиться в приложении 5.

Abs(x) Âû÷èñëåíèå модуля (àáñîëþòíîãî çíà÷åíèÿ) õ (х);

Sqr(x) Âû÷èñëåíèå êâàäðàòà õ (х2);

Sqrt(x) Âû÷èñëåíèå êâàäðàòíîãî êîðíÿ èç õ ().

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

SQRT(SQR(B)-4*A*C)+ABS(P+X).

 ìàòåìàòèêå ñóùåñòâóåò áîëüøîå êîëè÷åñòâî îïåðàöèé íàä чèñëàìè и другими объектами. Ïîñêîëüêó äëÿ áîëüøèíñòâà çíàêîâ òàêèõ îïåðàöèé не хватает символов в алфавите ÿçûêà Ïàñêàëь, то âûíóæäåíû îäèí è òîò æå çíàê îïåðàöèè, ñêàæåì «+» èëè «—», èñïîëüçîâàòü äîâîëüíî øèðîêî, óïîò­ðåáëÿÿ åãî â ðàçíûõ çíà÷åíèÿõ, èëè èñïîëüçîâàòü àíãëèéñêîå íàïèñà­íèå îïåðàöèè, íàïðèìåð, not, and, or. Поэтому рåçóëüòàò âûïîëíеíèÿ îïåðà­öèè à + b çàâèñèò îò òèïîâ à è b!

Операции, которые можно производить над числовыми данными, целыми и вещественными, следующие:

1) Умножение: А * В, А и В могут быть целыми и вещественными. В зависимости от типа сомножителей тип результата может быть следующим:

А и В — целые, результат тоже целого типа.

Если один из сомножителей, или оба сразу, вещественные числа, то и результат вещественное число.

2) Деление А/В. Какими бы ни были делимое и делитель, целыми или вещественными, результат всегда вещественное число.

3) Сложение: А + В. Зависимость типов, как и при умножении.

4) Вычитание: А - В. Зависимость типов, как и при умножении.

5) Целочисленное деление: A DIV B. Эта операция определяет неполное частное от деления А на В. Тип делимого, делителя и результата целочисленный.

6) Нахождение остатка при целочисленном делении: A МОD B. Эта операция определяет остаток от деления А на В. Тип делимого, делителя и результата целочисленный.

При определении типа результата необходимо быть очень внимательным. Например, если описаны переменные

var a :shortint; b:integer; c:longint; x:real;

то тип результата будет следующим

a + b Òèï: integer

a + b + c Òèï: longint

a + b + c + x Òèï: real

a * x Òèï: real

c mod b Òèï: longint

x/a Òèï: real

Заметим, что в Паскале нет операции возведения в степень. Возведение в целую степень рекомендуется производить путём многократного умножения основания степени и использования функции возведения в квадрат SQR(X).

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

 Òóðáî Ïàñêàëå самыми первыми выполняются âñòðîåííûå ôóíêöèè.

Следующим по приоритетности следует îïåðàтор ëîãè÷åñêîãî îòðèöàíèÿ not. Более подробно об этом операторе (как и о AND и OR) мы поговорим позднее.

На третьем месте стоят операции:

* — умножение,

/ — деление,

div — целочисленное деление (нахождение неполного частного),

mod — нахождение остатка при целочисленном деление;

and — операция логического умножения (логическое И).

На четвёртом месте стоят îïåðàöèè:

+ — сложение,

— — вычитание;

or — операция логического сложения (логическое ИЛИ).

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

1. Записывать всё выражение в строку. Двухэтажные выражения, а также верхние и нижние индексы не допускаются. Например, аðèôìåòè÷åñêîå âûðàæåíèå çàïèñûâàåòñÿ òàê:

(A*Sqrt(Sqr(B*C+A))+Sqr(D))/(2*B+D).

2. Использовать только круглые скобки. В правильно записанном выражении число открывающих скобок всегда равно числу закрывающих.

3. Нельзя записывать подряд два знака операций. Например, выражение А+В/-С следует записать в виде А+В/(-С).

4. Знаки операций указываются явно. В математике можно опускать знак умножения. На языке Паскаль этого делать нельзя. Выражение 2ab+(c+d)(c-d) следует записывать так: 2*a*b+(c+d)*(c-d).

5. При записи дробей, если числитель и знаменатель состоят из суммы или произведения нескольких величин или выражений, то числитель и знаменатель необходимо брать в скобки. Например:

нужно записывать так (a+b)/(c-d);

нужно записывать так (sqr(a-b)-2*a)/(a*b).

 ìàòåìàòèêå èìååòñÿ ìíîãî ïàð ïðîòèâîïîëîæíûõ ïî ñâîåìó äåéñ­òâèþ îïåðàöèé, òàêèõ êàê * и /, + и — è ò.ï., äëÿ êîòîðûõ ñïðàâåäëè­âû ñëåäóþùèå ðàâåíñòâà:

(õ/à)*à = õ

b+a—a = b

 ñèëó òîãî, ÷òî â ÝÂÌ ÷èñëà ïðåäñòàâëåíû â äâîè÷íîì âèäå, ñî­âåðøåííî íå î÷åâèäíî, ÷òî ïðèâåäåííûå âûøå òðèâèàëüíûå ðàâåíñòâà áóäóò âûïîëíÿòьñÿ è âíóòðè ÏÝÂÌ.

Вопросы и задания.
  1. Каковы правила формирования выражений в Паскале?
  2. Сколько операций выполняется при вычислении выражения

(х+1/2)*(у+7/10)-3/4?

Как сократить число операций?
  1. Почему в языке Паскаль аргумент стандартной функции всегда записывается в скобках?
  2. Почему знак умножения всегда выписывается явно?
  3. Запишите на языке Паскаль следующие формулы:

а) (1+х2); б) ; в) a+bx; г) х-1; д) х4;

е) х-2; ж) ; з) ; и) ;

к) ; л); м) ; н) .
  1. Можно ли утверждать, что в Паскале значение выражения (1 / 3) * 3 - 1 равно нулю?
  2. Привести примеры положительного и отрицательного целых чисел, не представимых в Паскале.
  3. Вычислить значения выражений и определить их тип:

а) Trunc(6.9); б) Round(6.9); в) Trunc(6.2);

г) Round(6.2); д) 20 Div 6; е) 20 Mod 6;

ж) 3*7 Div 2 Mod 7/3 - Trunc(10/3);

з)  Sqr(x)+Sqr(y), при x=0.3, y=-1.6;

и) k Mod 7 + k Div 5 - 1, при k=15;

л) Odd(Trunc(10*p)), при p=0.182.
  1. Объяснить ошибки в следующих записях:

а) (9.0-3) Div 4 + x Mod 3,    при x=7.0;

б) Odd(Sqr(Trunc(7/2)))-5.
  1. Вычислить значения выражений:

а) 20 div 6; б) 20 mod 6; в) 20 div 4; г) 20 mod 4;

д) 2 div 5; е) 2 mod 5; ж) 123 div 0; з) 3.0 mod 3;

и) -10 mod 3; к) 10 div (-3).
  1. Пусть x и y – имена целых переменных. Напишите арифметическок выражение, значением которого является:

а) большее из двух значений x и y;

б) меньшее из значений x и y;

в) сумма значений цифр трехзначного x, например, при x=153 это 9.