Главная страница
Библиотека (скачать книги)
Скачать софт
Введение в программирование
Стандарты для C++
Уроки по C#
Уроки по Python
HTML
Веб-дизайн
Ассемблер в среде Windows
ActiveX
Javascript
Общее о Линукс
Линукс - подробно
Линукс - новое
Delphi
Паскаль для начинающих
Турбопаскаль
Новости
Партнеры
Наши предложения
Архив новостей





Вычисление выражений со скалярными аргументами

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

Порядок вычисления выражения определяется так же, как в математике - в соответствии с приоритетом указанных в нем действий (указателей функций и операций) и расположением скобок "(" и ")". Указателям функций приписан самый высокий приоритет - нулевой. Такой же приоритет имеет подвыражение, заключенное в скобки. При наличии указателей функций и скобок подвыражения могут быть вложены друг в друга - в этом случае вычисления начинаются с самых внутренних подвыражений.

Приоритеты операций:

первый not
второй and, mod, div, *, /
третий or, xor, +, -
четвертый =, o, <, >, <=, >=

Примеры выражений:
x + f(2 * (x + у)) / f(l - sqrt(x)) * (y + x) - f(2 * (x + y)) / f(l - sqrt(x))

Константные подвыражения вычисляются компилятором и заменяются вычисленными значениями.

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

СЛЕДУЮЩИЕ ПРИМЕРЫ ИЛЛЮСТРИРУЮТ ОПИСАНИЕ И ВЫЧИСЛЕНИЕ КОНСТАНТ

Для с5 = Pi; вычисляются: с5 - 1 = 2.14159265358979Е+0000
Константам с целочисленным значением приписывается тип longint:
Для с1 = 32767; с2 = с1 +1; с2 = 32768 - вне диапазона integer, но в диапазоне longint
Константам с вещественным значением
а) приписывается тип real, а при выходе за его пределы выдается сообщение о переполнении.
б) при наличии сопроцессора и директивы {$N+} приписывается тип extended:
Для с9 = 1.7Е38; {maxreal} с10 = с9 +100.0; с11 = с9 +1.0Е+34;
сЮ = 1.70000000000000Е+0038 с11 = 1.70010000000000Е+0038

Для с9 = 1.7Е38; с12 = с9 + с9; - дает переполнение без директивы $N+
Для с9 = 1.7Е38; с12 = с9 +с9; с12 = 3.40000000000000Е+0038
- с сопроцессором и директивой $N+

Присваивание для скалярных типов

Присваивание переменным значений осуществляется оператором присваивания. Присваивание часто рассматривают как операцию с двумя операндами, а не как оператор.

Она имеет вид
<левая часть> := <правая часть>

Операция присваивания " := " определена для скалярных типов, если <левая часть> (первый операнд) является переменной скалярного типа, а <правая часть> (второй операнд) - выражение, определяющее значение скалярного типа.

Для правильного выполнения оператора присваивания необходимо выполнение условия совместимости типов его операндов. Эти условия таковы.

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

б) Оба операнда имеют символьный тип или тип его интервалов, а диапазон значений правой части не должен превосходить диапазон значений левой части.

в) Оба операнда имеют перечислимый тип или тип его интервалов, а диапазон значений правой части не должен превосходить диапазона значений левой части.

Для операции присваивания целочисленной переменной контроль выхода присваиваемого значения за границы диапазона, определяемого типом этой переменной, производится в следующих случаях:

- при компиляции, если присваиваемое значение является константой или результатом вычисления константного выражения.

- при исполнении программы, если задана директива {$R+}.

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

ПРИ ПРИСВАИВАНИИ ЗНАЧЕНИЙ ПЕРЕМЕННЫМ ЦЕЛОЧИСЛЕННОГО ТИПА ИЛИ ИНТЕРВАЛА

1. Компилятор контролирует присваивание константных выражений переменным в диапазоне их типа.

2. При исполнении программы выход за границы диапазона при присваивании переменной контролируется только при задании директивы {$R+}, иначе присваивается НЕВЕРНОЕ значение - "округленное по модулю" в границах диапазона соответствующего типа.
Следующие присваивания выполняются при отключенном контроле ({$R-})!!'
Для типа byte диапазон [minbyte, maxbyte] = [0, 255]
при bytevarl := -1 bytevarl = 255 при bytevarl := 256 bytevarl = 0
Для типа shortint диапазон [minshortint maxshortint] = [-128,127]
при shortintvarl .= -129 shortintvarl = 127 при shortintvarl = 128 shortintvarl = 128
Для типа word диапазон [minword, maxword] = [0, 65535]
при wordvarl := -1 wordvarl = 65535 при wordvarl := 65536 wordvarl = 0
Для типа integer диапазон [minint maxint] = [-32768, 32767]
при integervarl := -32769 integervarl = 32767
при integervarl := 32768 integervarl = -32768

3. При присваивании переменной интервального типа значения вне ее интервала она принимает НЕВЕРНОЕ значение - "округленное по модулю"
Например, для интервального типа intl, int2:1..255
при int2 := -1 int2 = 255 при int2 := 256 int2 = О




 

Комментарии:


Добавить свой комментарий:


Введите значение:
 









   
 

Библиотека программиста. 2009.
Администратор: admin@programmer-lib.ru