Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Конструирование программ.doc
Скачиваний:
12
Добавлен:
05.05.2019
Размер:
12.37 Mб
Скачать

1.2.4. Выражения

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

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

Арифметическое выражение включает операции, допустимые для числовых типов данных (integer, byte, real и других). Приоритет операций в порядке убывания следующий: /, , div (частное от деления целых чисел), mod (остаток от деления целых чисел), and (поразрядное «и»), or (поразрядное «или»), shl (сдвиг влево), shr(сдвиг вправо), , .

Пример:

45.2 / 4 { результат 11.3 }

r mod 10 {если r = 25, результат 5 }

r div 10 {если r = 25, результат 2 }

d1 shl 2 {если d1 = 2, результат 8 }

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

Пример:

W <= R {если W = 25, R = 34, результат true }

f1 <> 5 {если f1 = 5 , результат false }

ch in ['a'..'z'] {если chлатинская буква , результат true }

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

Пример:

(W and R) or (not f1 and f2) {если W, f2=true; R, f1=false, результат true}

Символьное выражение включает такие операнды, как символьная константа, символьная переменная, элемент массива символьного типа, функция, возвращающая значение символьного типа. Над операндами может выполняться операция конкатенации (объединения) – +.

Пример:

'Pas'+'cal' {результат – символьная константа 'Pascal' }

Относительные приоритеты операций языка Object Pascal приведены в таблице 1.2.

Таблица 1.2 Приоритет операций в языке Object Pascal

Операция

Приоритет

@, not

Первый (высший)

, /, div, mod, and, shl, shr

Второй

+, -, or, xor

Третий

=, <>, >,<, <=,>=, in

Четвертый (низший)

1.2.5. Операторы

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

Различают операторы следующих видов:

  • Операторы собственно обработки информации. К ним будем относить оператор присваивания, операторы чтения (ввода) и операторы записи (вывода)

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

Оператор присваивания (:=) предписывает вычислить выражение, заданное в его правой части, и присвоить полученное значение переменной, идентификатор которой расположен в его левой части. Переменная и результат вычисления выражения должны иметь один и тот же тип (или типы, подчиняющиеся правилам согласования типов языка Object Pascal).

Синтаксис:

<имя переменной> := <выражение>;

Пример:

var

result, firstValue, secondValue : integer;

begin

firstValue := 12;

secondValue := 5;

result := firstValue div secondValue; {результат = 2}

end.

Все переменные должны быть предварительно описаны, а переменные, входящие в выражение, должны быть обязательно инициализированы (им должно быть присвоено некоторое значение).

В режиме консольного приложения (в этом режиме отсутствует графический интерфейс Delphi) для ввода и вывода данных можно использовать операторы чтения и записи языка Object Pascal.

Операторы чтения (ввода) данных: read и readln.

Оператор read

Синтаксис:

read(X1, X2, ..., Xn); { X1, X2, ..., Xn – переменные допустимых типов данных}

{ тип Boolean не допустим! }

Значения для переменных X1, X2, ..., Xn набираются пользователем на клавиатуре минимум через один пробел (в тексте пробел будем обозначать символом ). После набора данных нажимается клавиша «Ввод» (Enter).

Оператор readln

Аналогичен оператору read. Единственное отличие заключается в том, что после считывания последнего в списке значения будет очищен буфер клавиатуры.

Пример:

Ввод значений двух целых чисел x и y

readln(x,y); { если Пользователь набрал на клавиатуре: 25 }

{ и нажал клавишу Enter, то значением x будет 2, y 5 }

Операторы записи (вывода) данных: write и writeln.

Оператор write

Синтаксис:

write (Y1, Y2, ..., Yn);

где Y1, Y2, ..., Yn – выражения.

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

Пример:

write (a:8:3); { если значение переменной a (a: real) равно 38.52, }

{ результат вывода будет таким: 38.52}

Если формат не указан, то значение будет размещено при выводе в поле, ширина которого установлена вычислительной системой. Например, значение переменной a(a: real), равное 38.52, будет выведено как 3.85200000000000Е+0001 (3.852×101).

Оператор writeln

Аналогичен оператору write, но после вывода последнего в списке значения происходит перевод курсора в начало следующей строки. Оператор writeln, записанный без параметров, вызывает перевод курсора на новую строку.

Пример:

writeln ('ПриXравном', x:2); {если x=5, y=12 (x, y: integer), то }

writeln ('Yравен', y:4); {результат вывода будет таким: }

{ПриXравном5}

{Yравен12}

Операторы управления. Управляющие структуры

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

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

  • Последовательность;

  • Ветвление (порядок выполнения определяется значением условия);

  • Цикл (повторение).

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

Все управляющие структуры имеют один вход и один выход.

Базовыми структурами являются структуры Последовательность, Если_То_Иначе и Цикл_Пока.

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

Рассмотрим управляющие структуры и операторы языка Object Pascal, которые их реализуют (таблица 1.3). Для графического представления управляющих структур будем использовать следующие узлы:

Таблица 1.3 Управляющие структуры

Управляющая структура

Оператор языка Object Pascal

Пример

Последовательность

A; B;

Сначала выполняется A, затем B.

A, B – операторы обработки информации

readln(x);

y:= x;

Если_То_Иначе

if P then

A

else

B;

Если значение логического выражения P истинно, то выполняется A, иначе – B.

if x>0 then

y:= 1

else

y:=0;

Если_То

if P then

A;

if x>0 then

y:= 1;

Выбор

case K of

1: A;

2: B;

3: C

else

D;

end;

K – переменная («переключатель»), значение которой определяет выполнение операторов:

если K = 1, то A;

если K = 2, то B;

если K = 3, то C

иначе – D;

var

ch: char;

begin

. . .

case ch of

'0'..'9': writeln('Это цифра');

'a'..'z': writeln('Это буква')

else

writeln('Это другой символ');

end;

. . .

end.

Цикл_Пока

(цикл с предусловием)

while P do

A;

Оператор A выполняется, пока значение логического выражения P истинно.

while N>0 do

N:=N-1;

Цикл_со_счетчиком

(цикл с предусловием)

for i:= <начальное значение> to

<конечное значение> do

A;

Переменная i – это показатель цикла, значение которого на каждом шаге цикла автоматически увеличивается (или уменьшается) на 1.

for i:= 1 to N do

writeln(i);

for i:= N downto 1 do

writeln(i);

Цикл_До

(цикл с постусловием)

repeat

A;

until P;

Оператор A выполняется до тех пор, пока логическое выражение P не станет истинным.

repeat

N:=N-1;

until N <= 0;

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

Управляющие структуры ветвления и цикла в каждой своей «ветви» содержат не более одного оператора обработки информации (в таблице 1.3 A, B). Во многих программах этого недостаточно даже для реализации простого алгоритма. Для того чтобы распространить область действия значения условия или цикла на несколько операторов, необходимо объединить их в составной оператор.

Составной оператор – это последовательность операторов, заключенная в операторные скобки beginend.

Пример:

if x>0 then

begin

y:= 1; { здесь составной оператор – это операторы y:=1 и k:=k+1,}

k:= k+1; { которые выполняются только при условии x > 0 }

end;

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

В приведенном примере на рисунке 1.2 функциональный узел в структуре Если_То был заменен структурой Последовательность.

Рисунок 1.2 – Составной оператор

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

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

Реализация циклических алгоритмов требует в некоторых случаях прекращения «шага» цикла или всего цикла до выполнения условия его завершения. Для этих целей в языках программирования предусмотрены специальные операторы (НЕ управляющие структуры!).

В языке Object Pascal это такие операторы:

  • continue – оператор завершения шага цикла. По этому оператору прекращается выполнение текущего шага цикла, и управление передается на следующий шаг

  • break – оператор «выхода» из цикла. Прекращается выполнение цикла и управление передается оператору, следующему за последним оператором цикла.

  • exit – оператор «выхода» из программы. По этому оператору выполнение программы завершается. Рекомендуется использовать для выхода из подпрограмм.