русс | укр

Языки программирования

ПаскальСиАссемблерJavaMatlabPhpHtmlJavaScriptCSSC#DelphiТурбо Пролог

Компьютерные сетиСистемное программное обеспечениеИнформационные технологииПрограммирование

Все о программировании


Linux Unix Алгоритмические языки Аналоговые и гибридные вычислительные устройства Архитектура микроконтроллеров Введение в разработку распределенных информационных систем Введение в численные методы Дискретная математика Информационное обслуживание пользователей Информация и моделирование в управлении производством Компьютерная графика Математическое и компьютерное моделирование Моделирование Нейрокомпьютеры Проектирование программ диагностики компьютерных систем и сетей Проектирование системных программ Системы счисления Теория статистики Теория оптимизации Уроки AutoCAD 3D Уроки базы данных Access Уроки Orcad Цифровые автоматы Шпаргалки по компьютеру Шпаргалки по программированию Экспертные системы Элементы теории информации

Операции


Дата добавления: 2015-06-12; просмотров: 424; Нарушение авторских прав


В Турбо Паскале определены следующие операции:

унарные not, @;

мультипликативные *, /, div, mod, and, shl, shr;

аддитивные +, -, or, xor;

отношения =, <>, <, >, <=, >=,in.

Приоритет операций убывает в указанном порядке, т.е. наивысшим приоритетом обладают унарные операции, низшим - операции отношения. Порядок выполнения нескольких операций равного приоритета устанавливается компилятором из условия оптимизации кода программы и не обязательно слева направо. При исчислении логических выражений операции равного приоритета всегда вычисляются слева направо, причем будут вычисляться все или только достаточные операции в зависимости от установленной в среде Турбо Паскаля опции OPTIONS/COMPILER/ COMPLETE BOOLEAN EVAL: при установленном значении этой опции вычисляются все операции отношения, при не установленном - только те, которые достаточны для получения результата.

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

Function AddI(var x: Integer): Integer;

begin {AddI}

inc(x);

AddI := x end {AddI} ;

var

a,b : Integer;

begin {main}

if (a > b) or (Addl (a) > 100) then b := a;

.......

При выполнении этого фрагмента значение переменной А будет зависеть от настройки опции: если опция активизирована, значение А всегда наращивается на 1, если не активизирована - только в случае А <= В .

Правила использования операций с операндами различного типа приводятся в табл. 3.1.

Таблица 3.1

Операция Действие Тип операндов Тип результата
not Отрицание Логический Логический
not То же Любой целый Тип операнда
@ Адрес Любой Указатель
* Умножение Любой целый Наименьший целый
* То же Любой вещественный Exended
* Пересечение множеств Множественный Множественный
/ Деление Любой вещественный Extended
div Целочисленное деление Любой целый Наименьший целый
mod Остаток от деления То же То же
and Логическое И Логический Логический
and То же Любой целый Наименьший целый
shl Левый сдвиг То же То же
shr Правый сдвиг То же То же
+ Сложение То же То же
+ То же Любой вещественный Extended
+ Объединение множеств Множественный Множественный
+ Сцепление строк Строковый Строковый
- Вычитание Любой целый Наименьший целый
- То же Любой вещественный Extenden
or Логическое ИЛИ Логический Логический
or Тоже Любой целый Наименьший целый
= Равно Любой простой или строковый Логический
<> Не равно То же То же
< Меньше Логический Логический
<= Меньше или равно То же То же
> Больше То же То же
>= Больше или равно То же То же

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



Унарная операция @ применяется к операнду любого типа и возвращает результат типа POINTER (см. гл.6), в котором содержится адрес операнда. Пусть, например, задано описание

type

TwoChar = array [1..2] of char; var

Int : integer; TwoCharPtr : ATwoChar;

Тогда оператор

TwoCharPtr := @Int;

приведет к тому, что в TwoCharPtr будет храниться адрес целочисленной переменной INT, которая может теперь интерпретироваться как совокупность двух символов. Поэтому возможен, например, такой оператор:

if TwoCharPtr^[1] = 'С' then...

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

В Турбо Паскале определены следующие логические операции:

not - логическое НЕ;

and - логическое И;

or - логическое ИЛИ;

хоr - исключительное ИЛИ.

Логические операции применимы к операндам целого и логического типов. Если операнды - целые числа, то результат логической операции есть тоже целое число, биты которого (двоичные разряды) формируются из битов операндов по правилам, указанным в табл. 3.2.

Таблица 3.2

Логические операции над данными типа INTEGER (поразрядно)
Операнд 1 Операнд 2 not and or xor
- - - -
- - - -
-
-
-
-

К логическим же в Турбо Паскале обычно относятся и две сдвиговые операции над целыми числами:

i shl j - сдвиг содержимого i на j разрядов влево; освободившиеся младшие

разряды заполняются нулями;

i shr j - сдвиг содержимого i на j разрядов вправо; освободившиеся старшие

разряды заполняются нулями.

В этих операциях i и j - выражения любого целого типа.

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

Пример 3.1

{Программа вводит два целых числа и печатает результат применения к ним логических операций. Для выхода из программы ввести Ctrl-z и нажать Enter}

var

n,m : integer; begin

while not EOF do begin

Write('n,m='); ReadLn(n,m);

WriteLn( ' not= 1 , not n, 'not m);
WriteLnC and= ' , n and m)
WriteLnC or = 1 , n or m) ;
WriteLnC xor= 1 , n xor m)
WriteLn( ' shl= 1 ,n shl m)
WriteLn( ' shr= 1 , n shr m)
end    

end.

В программе организуется ввод двух произвольных целых чисел и печать результата применения к ним всех логических операций. Для выхода из программы следует нажать Ctrl-z, и Enter.

Логические операции над логическими данными дают результат логического типа по правилам, указанным в табл. 3.3.

Таблица 3.3

Логические операции над данными типа Boolean
Операнд 1 Операнд 2 not and or xor
True - False - - -
False - True - - -
False False - False False False
False True - False True True
True False - False True True
True True - True True False

Операция отношения IN применяется к двум операндам. Первым (левым) операндом должно быть выражение любого порядкового типа, вторым - множество, состоящее из элементов того же типа, или идентификатор множественного типа. Операция дает TRUE, если левый операнд принадлежит множеству, например:

var

с: char; type

digit = set of ' 0 '..' 9 ' ; begin

if с in digit then .......



<== предыдущая лекция | следующая лекция ==>
Константы | Структура программы


Карта сайта Карта сайта укр


Уроки php mysql Программирование

Онлайн система счисления Калькулятор онлайн обычный Инженерный калькулятор онлайн Замена русских букв на английские для вебмастеров Замена русских букв на английские

Аппаратное и программное обеспечение Графика и компьютерная сфера Интегрированная геоинформационная система Интернет Компьютер Комплектующие компьютера Лекции Методы и средства измерений неэлектрических величин Обслуживание компьютерных и периферийных устройств Операционные системы Параллельное программирование Проектирование электронных средств Периферийные устройства Полезные ресурсы для программистов Программы для программистов Статьи для программистов Cтруктура и организация данных


 


Не нашли то, что искали? Google вам в помощь!

 
 

© life-prog.ru При использовании материалов прямая ссылка на сайт обязательна.

Генерация страницы за: 3.083 сек.