Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Операторы (теория)

.pdf
Скачиваний:
9
Добавлен:
13.03.2016
Размер:
690 Кб
Скачать

Операторы

3.1. Оператор присваивания

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

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

Примеры операторов присваивания:

X := Y + Z;

Done := (I >= 1) and (I < 100);

H := [blue, Succ(C)];

I := Sqr(J) – I * K;

Пример 3.1.1. Требуется вычислить значение некоторой функции в заданной точке.

Значение x вводится с клавиатуры. Вычисленное значение функции выводится на экран с тремя знаками после десятичной запятой. В разделе переменных описываем две переменных действительного типа.

Var x,y: real;

Begin

Write(‘Введите значение x’); {выводим на экран подсказку для ввода}

Readln(x);

{вводим значение x}

y:=abs(sqr(x)+5*x-10);

 

Writeln(‘x=’, x:8:3, ‘

y=‘, y:8:3);

Readln;

{ожидание нажатия Enter}

End.

 

 

~ 1 ~

Операторы

Значение x вводится с клавиатуры. Вычисленное значение функции выводится на экран с тремя знаками после десятичной запятой. В разделе переменных описываем две переменных действительного типа.

3.2. Операторы ввода и вывода

Рассмотрим организацию ввода и вывода данных с терминального устройства. Терминальное устройство – это устройство, с которым работает пользователь, обычно это экран (дисплей) и клавиатура.

Для ввода и вывода данных используются стандартные процедуры ввода и вывода Read и Write, оперирующие стандартными последовательными файлами Input и Output.

Эти файлы разбиваются на строки переменной длины, отделяемые друг от друга признаком конца строки. Конец строки задается нажатием клавиши Enter.

Для ввода исходных данных используются операторы процедур ввода. Например:

Read(A1,A2,...AK);

ReadLn(A1,A2,...AK);

ReadLn;

Первый из них считывает К значений исходных данных и присваивание этих значений переменным А1, А2, ..., АК. Второй оператор считывает К значений исходных данных, пропуская остальные значения до начала следующей строки. Считанные значения присваиваются переменным А1, А2, ..., АК. Третий оператор реализует пропуск строки исходных данных.

~ 2 ~

Операторы

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

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

var

rV, rS: real; iW, iJ: integer; chC, chD: char;

begin

Read(rV, rS, iW, iJ);

Read(chC, chD);

end.

Значения исходных данных могут отделяться друг от друга пробелами и нажатием клавиш табуляции и Enter.

Для вывода результатов работы программы на экран используются операторы:

Write(A1,A2,...AK);

WriteLn(A1,A2,...AK);

WriteLn;

Первый из них выводит значения переменных А1, А2, ..., АК в строку экрана. Второй оператор выводит значения переменных А1, А2,

~ 3 ~

Операторы

..., АК и переводит к началу следующей строки. Третий оператор

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

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

Вывод

каждого

значения в строку экрана происходит в

соответствии

с шириной поля вывода, определяемой конкретной

реализацией языка.

 

Форма представления значений в поле вывода соответствует типу переменных и выражений: величины целого типа выводятся как целые десятичные числа, действительного типа – как действительные десятичные числа с десятичным порядком, символьного типа и строки – в виде символов, логического типа – в виде логических констант True и False.

Оператор вывода позволяет задать ширину поля вывода для каждого элемента списка вывода. В этом случае элемент списка вывода имеет вид А:К, где А – выражение или строка, К – выражение либо константа целого типа. Если выводимое значение занимает в поле вывода меньше позиций, чем К, то перед этим значением располагаются пробелы. Если выводимое значение не помещается в ширину поля К, то для этого значения будет отведено необходимое количество позиций. Для величин действительного типа элемент списка вывода может иметь вид А:К:М, где А – переменная или выражение действительного типа, К – ширина поля вывода, М – число цифр дробной части выводимого значения. К и М – выражения или константы целого типа. В этом случае действительные значения выводятся в форме десятичного числа с фиксированной точкой.

Пример записи операторов вывода:

~ 4 ~

Операторы

var

rA, rB: real; iP,iQ:integer; bR, bS: boolean;

chT, chV, chU, chW: char;

begin

WriteLn(rA, rB:10:2);

WriteLn(iP, iQ:8);

WriteLn(bR, bS:8);

WriteLn(chT, chV, chU, chW);

end.

~ 5 ~

Операторы

3.3. Выражения

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

унарные операции:

унарная операция not, унарный минус –, взятие адреса @;

мультипликативные операции (операции типа умножения):

*/ div mod and shl shr;

аддитивные операции (операции типа сложения)

+– or xor;

операции отношения:

=<> < > <= >= in.

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

Перечисленные операции можно разделить на следующие группы:

1.Арифметические.

2.Логические.

Логические операции применимы к целым и логическим

операндам. Если операнды – целые числа, то результат

логической

операции

тоже

целое

число.

Битовая или поразрядная арифметика введена

для обеспечения

возможности работы с двоичными разрядами (битами). Первая группа операций – логические операции not, and, or и xor. Операция not является одноместной, она изменяет каждый бит целого числа на обратный. Операции and, or и xor – двуместные, операнды этих

операций – целые величины одинаковой длины.

Операции

выполняются попарно над всеми двоичными

разрядами

~ 6 ~

 

Операторы

операндов. Вторая группа операций – это операции сдвига влево shl и сдвига вправо shr: I shl N, I shr N. Эти операции сдвигают двоичную последовательность значения I влево или вправо на N

двоичных разрядов. При этом биты, уходящие за пределы разрядной сетки, теряются, а освободившиеся двоичные разряды заполняются нулями. При сдвиге вправо отрицательных значений освободившиеся разряды заполняются единицами. К булевским операндам применимы следующие логические операции: not, and, or, xor.

3.Операция получения адреса операнда @. Эта операция применяется к операнду любого типа и возвращает результат типа Pointer, в котором содержится адрес операнда. Если эта операция применяется к процедуре или функции, ее результатом будет адрес точки входа в эту подпрограмму. Этот адрес можно использовать в подпрограмме, написанной на ассемблере, или во встраиваемых фрагментах (inline-подпрограммах).

4.Операция in, используемая для работы с множествами. У этой операции два операнда. Первый (левый) операнд – выражение любого порядкового типа, второй – множество из элементов того же типа, или идентификатор множественного типа. Если элемент (первый операнд) входит в указанное множество (второй операнд), то результат операции равен true.

~ 7 ~

Операторы

3.4. Составной оператор

Это совокупность последовательно выполняемых операторов, заключенных в операторные скобки begin и end:

begin

<оператор 1>;

<оператор 2>;

<оператор N>;

end;

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

Отдельные операторы внутри составного оператора отделяются друг от друга точкой с запятой. Так как завершающее оператор слово end

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

Составные операторы задают порядок выполнения операторов, являющихся их элементами. Они должны выполняться в том порядке, в котором они записаны. Составные операторы обрабатываются, как один оператор. Операторы заключаются в ограничители begin и end и

отделяются друг от друга точкой с запятой. Пример составного оператора:

begin

Z := X;

X := Y;

Y := Z;

end;

~ 8 ~

Операторы

3.5. Условный оператор

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

if <условие > then <оператор>;

if <условие> then <оператор1> else <оператор2>;

Условный оператор в короткой форме работает по правилу: если булевское выражение, записанное в условии, истинно, то выполняется оператор 1, далее выполняется оператор, следующий за условным. Если булевское выражение ложно, то будет выполняться оператор, следующий за этим условным оператором.

Ввыражении должен получаться результат, имеющий стандартный булевский тип. Если результатом выражения является истинное значение (true), то выполняется оператор, следующий за ключевым словом then. Если результатом выражения является значение false и

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

Вобщем случае ключевое слово else связывается с ближайшим

ключевым словом if, которое еще не связано с ключевым словом else.

Примеры использования оператора if: if X < 1.5 then Z := X+Y else Z := 1.5;

if P1 <> nil then P1 := P1^.father;

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

Синтаксическая неоднозначность, возникающая в конструкции:

if e1 then if e2 else e3

~ 9 ~

Операторы

разрешается путем следующей интерпретации этой конструкции:

if e1 then begin

if e2 then s1 else s2

end

Пример 3.5.1. Требуется вычислить значение некоторой функции в заданной точке.

Значение x вводится с клавиатуры. Вычисленное значение функции выводится на экран с тремя знаками после десятичной запятой. В разделе переменных описываем две переменных действительного типа.

Var x,y: real;

Begin

Write(‘Введите значение x’); {выводим на экран подсказку для ввода}

Readln(x);

{вводим значение x}

If (x>=-1) and (x<=1) then y:=1-sqr(x) else y:=abs(x)-1;

Writeln(‘x=’, x:8:3, ‘

y=‘, y:8:3);

Readln;

{ожидание нажатия Enter}

End.

Пример 3.5.2. Вычислим в заданной точке значение следующей функции.

Значение x вводится с клавиатуры. Вычисленное значение

функции выводится на экран с тремя знаками после десятичной запятой.

~ 10 ~