Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Тurbo Pascal 7+.doc
Скачиваний:
12
Добавлен:
24.12.2018
Размер:
10.09 Mб
Скачать

14.3. Выражения

Выражение - это то, что мы привыкли видеть в правой части оператора присваивания и в других местах. Например:

a:= b+1 - здесь выражение b+1;

if c-6>f then ... - здесь выражение c-6>f;

WriteLn(a+5) - здесь выражение а+5.

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

Арифметические выражения (то есть имеющие значением число):

  • 0

  • 2+5

  • Sqrt(b+l) - Sqr(a[4,i]+r)+1

  • а[4.i] + vovka.ves

  • ((w+b)/19)*(2/(w+l)+5)

Строковые выражения (то есть имеющие значением строку символов):

  • 'Весна'

  • Copy(s,a,b)

  • Copy(s,a,b) + 'Весна'

Логические выражения (то есть имеющие значением true или false):

  • a>0

  • (a+c)/(d+8)<=b+1

  • c>'Ю'

  • stroka='Весна'

  • Copy(s,a,b) + 'Весна'<>s1

  • а in b

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

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

Kaждое выражение тоже обязано иметь конкретное значение одного из типов. Тип выражения определяется типами входящих в него операндов и операциями над этими операндами.

14.4. Совместимость типов

Часто при запуске программы Паскаль выдает сообщение Туре mismatch (несовместимость типов) и на этом основании отказывается выполнять программу. Так произойдет, например, при выполнении ошибочного фрагмента VAR у Integer; BEGIN у =3/8 ., так как результат деления получается вещественный, а переменная у описана как Integer.Для составления программ нужно знать, какие типы совместимы, а какие нет.

Тип выражения с операндами разных типов. Что будет, если в одном выражении участвуют величины разных типов? Какого типа будет результат выражения? Например, какого типа будет сумма a+b в следующем фрагменте:

VAR a :Byte; b :Word;

BEGIN a+b... ?

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

Если диапазон одного из типов входит в диапазон другого, то общим типом становится тип с большим диапазоном. В приведенном выше примере значение переменной а будет преобразовано в тип Word и полученная сумма также будет иметь этот тип.

Если диапазоны типов пересекаются, то общим типом становится ближайший тип, "охватывающий" оба типа.

В примере

VAR a Integer, b Word BEGIN a+b

значения а и b перед суммированием преобразовываются в тип LongInt.

Если один из типов вещественный, а другой целочисленный, то общий тип всегда вещественный.

Когда в выражение входит несколько операндов (например, а+b*с), то указанные правила применяются последовательно, пока не будет вычислено все выражение (сначала определяется тип произведения b*c и произведение вычисляется, затем исходя из получившегося типа определяется тип суммы и сумма вычисляется).

Требования к типам в операторе присваивания. Чтобы Паскаль мог выполнить оператор присваивания, тип переменной в левой части (тип 1) и тип выражения в правой части (тип 2) должны друг другу соответствовать по определенным правилам:

эти типы должны быть одинаковы,

или если эти типы неодинаковы, то диапазон типа 1 должен включать в себя диапазон типа 2, например.

Тип 1 Тип 2

(sun, mon, tue, wen) (sun, mon, tue)

String Char

или тип 1 - вещественный, тип 2 - целочисленный

Требования к совместимости типов формальных и фактических параметров процедур и функций. Эти требования зависят от того, о каких параметрах идет речь - о параметрах-переманных или о, параметрах-значениях, В первом случае требование простое: типы должны быть эквивалентны Во втором случае действуют требования к типам в операторе присваивания, где тип1 - формальный параметр, тип 2 - фактический.