Оператор присваивания. Запись арифметических выражений — КиберПедия 

Кормораздатчик мобильный электрифицированный: схема и процесс работы устройства...

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

Оператор присваивания. Запись арифметических выражений



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

В машинном представлении выполнение оператора сводится к следующему. В памяти ЭВМ отведены поля (ячейки) с именами a, x, b, y. Вначале читаются из памяти в процессор значения a, x, b (содержимое полей памяти с именами a, x, b), затем в процессоре выполняются арифметические действия a * x + b, после чего полученное значение выражения a*x+b записывается в ячейку y.

В обычной математической записи знак «=» имеет два смысла. Запись можно рассматривать как описанное выше присваивание переменной y нового значения, а можно рассматривать, как проверку на равенство значения переменной y результату вычисления выражения, стоящего в правой части.

Чтобы избежать двусмысленностей при компиляции программы, простой знак «=» в Паскале используется для проверки на равенство левой и правой частей (логический оператор отношения), а для присваивания используется символ, состоящий из двоеточия и знака равенства (без пробелов между ними!) «:=» (оператор присваивания).

Использование операции присваивания позволяет записывать такие конструкции, которые в обычной математической интерпретации бессмысленны. Например, i := i + 1. Это означает, что к текущему значению переменной i добавляется 1, после чего полученное значение присваивается той же переменной i. Следовательно, значение переменной i увеличивается на единицу.

Пример. Обменять значения переменных a и b .

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

 

R := a; a := b; b := R;

 

В Паскале оператор присваивания имеет такое же обозначение, как и на блок-схеме. Его синтаксическая диаграмма:

переменная := выражение;

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

Старшинство операций:

1) not;

2) *, /, div, mod, and;

3) +, -, or, xor;

4) =, <>, <, <=, >, >=;

5) in.

Выражения могут быть арифметические, логические и строковые.



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

если выражение целого типа, а переменная вещественного, они совместимы, потому что целое число может быть без потерь представлено в вещественном формате;

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

Пример.

Var

a, b : real;

m, n : integer;

Begin

a := 55.85; m := 15;

b := m;

n := a;

В операторе n := a не выполняется требование совместимости по типу. Если бы допустить выполнение такого оператора, то имела бы место потеря точности, так как переменной n можно присвоить только целую часть значения переменной a (при присваивании b := m потери точности не происходит). Если в программе действительно нужно присвоить переменной n значение переменной a, то это нужно сделать следующим образом:

n := Trunc(a) или n := Round(a) .

Другие варианты совместимости по типу будут рассмотрены позже.






Индивидуальные и групповые автопоилки: для животных. Схемы и конструкции...

Общие условия выбора системы дренажа: Система дренажа выбирается в зависимости от характера защищаемого...

Опора деревянной одностоечной и способы укрепление угловых опор: Опоры ВЛ - конструкции, предназначен­ные для поддерживания проводов на необходимой высоте над землей, водой...

Кормораздатчик мобильный электрифицированный: схема и процесс работы устройства...





© cyberpedia.su 2017 - Не является автором материалов. Исключительное право сохранено за автором текста.
Если вы не хотите, чтобы данный материал был у нас на сайте, перейдите по ссылке: Нарушение авторских прав

0.005 с.