Организация и функционирование компьютеров
bf1271d8

Оператор присваивания и выражения


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

<выражение - мишень присваивания> := <выражение>

Мишень присваивания - это либо имя переменной, либо индексированный элемент массива (вида a[n]), либо поле записи, либо ссылка на значение (вида p^, см. раздел 6.Указатели). Две литеры “:=“ называются знаком присваивания. Выражением в правой части присваивания является либо запись константы, либо имя другой переменной  или константы, либо формула, служащая для вычисления присваиваемого значения. Типы выражений в правой и левой части присваивания должны быть согласованы. В большинстве случаев они должны быть равны. Допускается два различных целых типа или два различных вещественных типа в обеих частях присваивания, а также присваивание целого типа вещественной переменной.

Формальное определение выражения основывается на принципе индукции (по-другому, рекурсии). Выражения строятся от простого к сложному. Элементарное выражение - это запись числовой или строковой константы, значение логического типа true  или  false, разрешенное значение перечислимого типа, имя переменной или константы. конструктор множества. Простое выражение - это либо элементарное выражение, либо любое выражение, заключенное в круглые скобки, либо вызов функции, имеющий синтаксис

<имя функции>  ( <список параметров через запятую> ).

Составное выражение представляет собой последовательность простых выражений, разделенных символами операций.

Числовые константы делятся на десятичные и шестнадцатиричные целые, вещественные в формате с фиксиро­ванной точкой и вещественные в экспоненциальном формате. Чтобы отличить запись целого шестнадцати­ричного числа от десятичного, перед числом ставится знак доллара “$”, например: $12, $ABCDEF.
Вещественное число в формате с фиксированной точкой записывается в виде: целая часть, точка, дробная часть (без пробелов). В экспоненциальном формате число предварительно представляется в виде m*10n, где m  называется мантиссой, а n

- порядком числа (n - целое). Сначала записывается мантисса в формате с фиксированной точкой, затем символ “E” и затем порядок в формате целого числа. Примеры числовых констант: 1, 55, 999999, 3.1415926, 2.71828, 0.5E-3.

Строковая константа - это произвольная последовательность символов, заключенная в кавычки: ‘Текст’. Если сама константа содержит кавычки, то для правильного ее задания кавычки внутри константы должны быть удвоены: запись ’Переведите слово ’’function’’ на русский язык’ означает текст: Переведите слово ’function’ на русский язык. Вместо записи символа внутри текстовой константы можно употреблять комбинацию символа # (решетки) и кода символа. Например, вместо ‘c’ можно написать #99, а вместо ‘S’ можно написать #83. В итоге может получиться запись типа ‘код_символа’#101’or’#80.

Конструктор множества - это список элементов множества, заключенный в квадратные скобки. Элементы множества отделяются друг от друга запятыми. Допускается запись диапазона вместо элемента: [1,3..7,7,13..21,90], [white..black, red], [ ].

Составное выражение - это несколько простых выражений , между которыми располагаются знаки операций. Знак операции может стоять и перед всем выражением. Операции бывают унарные и бинарные. Унарные опрации имеют один операнд, который располагается после знака операции. Бинарные операции  имеют два операнда, и символ операции располагаются между операндами. Если в составном выражении более двух компонентов, то возникает проблема, какие операции выполнять вначале. Для того, чтобы разрешить возникающие при этом противоречия, вводится понятие старшинства или приоритета операций. Операции с большим приоритетом выполняются раньше, операции с одинаковым приоритетом выполняются слева направо.



Все операции согласно их старшинству разбиты на четыре группы:



1. @         - переход от значения к указателю на значение;

not       - логическое отрицание;

2.     *          - умножение целых и вещественных чисел, пересечение множеств;

/           - деление чисел;

div       - деление целых чисел с остатком;

mod     - остаток от деления целых чисел;

and      - конъюнкция логических значений (и);

shl       - сдвиг двоичного представления целого числа влево;

shr       - сдвиг двоичного представления целого числа вправо;

3.     +          - сложение целых и вещественных чисел, объединение множеств,                      конкатенация строк;

-           - вычитание целых и вещественных чисел, дополнение множеств:

or         - дизъюнкция логических значений (или);

xor      - эксклюзивная дизъюнкция логических значений (исключающее или);

4.     =          - проверка равенства;

<>        - проверка неравенства;

<          - меньше;

>          - больше;

<=        - меньше или равно;

>=        - больше или равно;

in         - элемент содержится в множестве.

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

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

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

type

    color = (white, black, red, blue, green, yellow, brown);

    array1 = array  [0..10]  of  integer;

    record1 = record xx,yy: real;

                                     nn: color



                        end;

    set1 = set of color;

const

    ca: array1 = (2,4,56,-2,45,-34,678,4,-3,0,3);

    cr: record1 = (1.0, 1.456, green);

var

    x: real;

    b1: boolean;

    c1: string;

    a1: array1;

    s1:set1;

    r1: record1;

begin

x             := 3.1415926;                                 {Присваивание вещественного значения}

a1          := ca;                                                 { Копирование массива целиком из ca в a1}

b1          := ( (x>3) and  (a1[9]=0) );          {В данном случае b1 станет равным true}

c1           := ‘Пример строки’                      {Присваивание строки символов}

a1[9]    := 7;                                                   {Присваивание 9-му элементу массива a1}

s1           := [red, blue, green];                     {Присваивание множества}

r1           := cr;                                                 {Копирование записи целиком из cr в r1}

r1.yy      := 2.719281928;                             {Присваивание значения полю yy

записи r1}

r1.nn     := white;                                           {Присваивание значения полю nn записи r1}

end;


Содержание раздела