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

Paskal_ucheb_posob_ch1_21_11_2011

.pdf
Скачиваний:
47
Добавлен:
09.04.2015
Размер:
943 Кб
Скачать

21

ЛЕКЦИЯ 4. Часть 1. ОПЕРАТОРЫ

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

Существует восемь типов операторов:

1.присваивания,

2.арифметические,

3.логические,

4.побитовые,

5.отношений,

6.над множествами,

7.адресные

8.над строками.

Большинство операторов в Паскале бинарные, имеют два операнда; унарные операторы имеют один операнд. Бинарные операторы имеют обычно алгебраическую форму, например, а+b. Унарный оператор предшествует своему операнду, например, -b.

В сложных выражениях порядок выполнения операций определяется правилами приоритета (таблица 4).

Операторы

Приоритет

Категория

@, not

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

Унарные

*, /, div, mod, and, shl,

Второй

Мультипликативные

shr

 

 

+, -, or, xor

Третий

Аддитивные

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

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

Отношения

Таблица 4. Правила приоритета операций.

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

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

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

Основной операцией является операция присваивания:

Ratio:= A/B.

22

В Паскале операция присваивания - это комбинация двоеточия и знака равенства: ":=". В примере значение выражения А /В, стоящее справа от ":=", присваивается переменной Ratio, стоящей слева.

Арифметические операторы.

Паскаль поддерживает обычный стандартный набор бинарных арифметических операторов, которые выполняются над целыми и вещественными числами:

1.умножение (*);

2.деление целых (div);

3.деление вещественных с остатком (/);

4.остаток от деления (mod);

5.сложение (+);

6.вычитание (-).

7.Кроме того, поддерживаются унарные операторы:

a.унарный минус (а+(-b)) - дополнение до двух;

b.унарный плюс (а+(+b)) - ничего не выполняет, введен для полноты.

23

ЛЕКЦИЯ 4. Часть 2.

Побитовые операторы.

Для операций над битами в Паскале имеются следующие операторы: shl (shift left) - сдвигает биты влево на указанное число бит, заполняя

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

shr (shift right) - сдвигает биты вправо на указанное число бит, заполняя оставшиеся слева разряды нулями;

and - выполняет логическое and (и) над парой битов, возвращает 1, если оба бита 1 и 0 в противном случае;

or - выполняет логическое or (или) над парой битов, возвращает 0 , если оба бита равны 0 и 1 в противном случае;

xor - выполняет логическое исключающее или над парой битов, возвращает 1, если биты имеют разное значение и 0 в противном случае;

not - операция логического дополнения бита заменяет 0 на 1 и обратно.

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

Приведем примеры.

A:=5; B:=3;

Надо выполнить следующие действия:

A and B

A or B

A xor B

A shl B

A shr B

Сначала целые числа переводятся автоматически в двоичную систему счисления. Следовательно, 5- это 101, а 3 – 011. Теперь выполним соответствующие действия над уже двоичными числами.

101011and 001, т.е.1

101011or 111, т.е.7

101011 xor 110, т.е.6

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

Операция shl соответствует умножению числа 5 на 23 . Данная операция просто смещает у двоичной пятерки первые три байта влево, замещая из 0. Результат будет 5*8=40 или101000 в двоичной системе счисления.

24

Операция shr соответствует делению числа 5 на 23 . Результатом будет только целая часть от деления А на В., т.е. 0. (0,101 в двоичной системе счисления).

Логические операторы.

В Паскале есть четыре логических оператора - and, xor, or, not. Они аналогичны побитовым операторам, но имеют свои отличия.

Эти логические операторы работают с логическими значениями (True и False), позволяя комбинировать выражения отношений, булевские переменные и булевские выражения.

Различия между этими операторами и побитовыми операторами следующие:

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

Эти операторы не позволяют комбинировать булевские и целые выражения; другими словами, выражение Flag and Indx недопустимо, если Flag - булевский тип, а Indx - целый тип (или наоборот).

Логические операторы and и or имеют короткую форму вычисления по умолчанию, а xor и not - нет. Допустим, имеется выражение exp1 and exp2. Если exp1 - False, то все выражение имеет значение False и выражение exp2 не вычисляется. Аналогично, в выражении exp1 or exp2, exp2 не будет вычисляться, если exp1 - True. Можно установить полную схему вычисления булевских выражений, используя директиву компилятора {$В+} или опции Complete Boolean Eval (Options/Compiler).

A

B

A and B

A or B

A xor B

Not (A)

0

0

0

0

0

1

0

1

0

1

1

1

1

0

0

1

1

0

1

1

1

1

0

0

Операторы отношений.

Операторы отношений сравнивают два значения, возвращая в результате булевское значение True или False. В Паскале реализуются операторы:

> - больше, чем; >= - больше, чем или равно; < - меньше, чем;

25

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

in - является элементом.

Для примера рассмотрим следующую программу:

program TestGreater; var

A, B: Integer;

Test: Boolean;

begin

Write('Введите два числа: '); Readln(A, B);

Test := A > B;

Writeln('А больше чем В', Test);

end.

Результат программы : True, если А больше В , и False , если А меньше или равно В.

Сравнение простых типов.

Когда операнды =, < >, <, >, <=, >= простых типов, то они должны быть совместимых типов. Однако, если один операнд имеет действительный тип, то другой может быть целого типа.

26

ЛЕКЦИЯ 5.

Сравнение строк

Операторы отношения =, <>, <, >, <=, или >= могут применяться для сравнения строк согласно порядку расширенного набора символов кода ASCII. Любые два значения строковых данных можно сравнить, поскольку все значения строковых данных совместимы.

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

Например, нужно отсортировать список из нескольких фамилий: Петровский Петров Петровичев Петрова Петрованский.

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

Петров

Петрова

Петрованский

Петровичев Петровский.

Строковые операторы.

 

Существует единственный

оператор "+", который выполняет

конкатенацию двух строк, т.е их сложение. Например:

Var

s:string;

s1:string[200];

s2:string[150];

Begin

Readln (s1,s2);{ввод с клавиатуры двух строк} s:=s1+s2;

writeln(s);

end.

В строкe s будет сначала записано 200 символов из строки s1, а из s2 столько первых символов, чтобы в s стало 255 символов. Следовательно, из s2 будет добавлено только первые 55символов.

27

Вывод простых типов данных.

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

28

ЛЕКЦИЯ 6.

Процедуры Writeln и Write.

Вы уже использовали наиболее распространенную функцию Паскаля - подпрограмму Writeln. Назначение ее - запись (вывод) информации на экран. Ее формат прост и гибок при использовании:

Writeln (элемент, ‘Комментарий1’,элемент,....);

Каждый элемент - это то, что Вы хотите вывести на экран и может быть: значением, таким как целое или вещественное число (3, 42, - 1732.3), символом ('a','Z'), строкой ('Здравствуй, мир'), булевским значением (True). Кроме того, может быть именованная константа (имя константы), переменная, указатель, вызов функции, если она возвращает значение целого типа, вещественное число, символ, строку или булевский тип. Все элементы печатаются в строку в заданном порядке. После вывода курсор устанавливается на начало следующей строки. Если есть необходимость оставить курсор в этой же строке после последнего элемента, то используйте

Write (элемент, элемент,...);

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

Writeln (элемент,' ',элемент,' ',....);

Следующими операторами описывается вывод :

A:=1; B:=2; C:=3; Name := 'Frank';

Оператор

Результат работы с начала

 

строки

Writeln(A, B, C);

123

Writeln(A, ' ', B, ' ', C);

1 2 3

Writeln('Hi', Name);

HiFrank

Writeln('Hi, ', Name, '.');

Hi, Frank.

 

 

Таблица 5. Работа оператора Writeln со строковыми типами данных

Так же можно использовать параметры определения ширины поля для данного элемента. В этом случае оператор имеет формат:

Writeln (элемент: длина,....);

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

Рассмотрим следующую программу и полученный в результате вы-

вод:

A:=10; B:=2; C:=100;

29

Оператор

Результат работы с начала строки

Writeln(A, B, C);

102100

 

 

Writeln(A:2, B:2, C:2);

10 2100

Writeln(A:3, B:3, C:3);

10 2100

Writeln(A, B:2, C:4);

10 2 100

Таблица 6. Работа оператора Writeln с целочисленными типами данных

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

Что, если размер поля меньше, чем необходимо? Во втором операторе Writeln вышеприведенного примера для С=100, длина поля меньше, чем нужно, т.е. задано две позиции, а нужно три. При выводе Паскаль увеличивает размер до минимально необходимого.

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

х:=421.53;

Оператор

Результат работы с начала строки

Writeln(x);

4.2153000000E+02

Writeln(x:8);

_4.2E+02 4.22E+02

 

 

Таблица 7. Работа оператора Writeln с вещественными числами с выделением общего количества позиций под число

Поэтому, Паскаль позволяет добавить второй операнд длины:

элемент : длина : количество цифр.

Вторая цифра указывает, сколько цифр выводить для числа с фиксированной точкой после точки:

х:=3.14159;

Оператор

Результат работы с

 

 

 

 

Пояснения

 

 

 

начала строки

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Writeln(x:6:2);

__3.14

 

_

 

_

 

3

.

 

 

1

 

 

4

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Writeln(x:8:4);

__3.1416

 

 

 

 

3

.

 

 

1

4

1

 

6

 

 

 

В

последнем

разряде

идет

 

 

округление в сторону ближай-

 

 

шего значения

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Writeln(x:0:4);

3.1416

 

3

.

 

1

 

 

4

 

1

 

 

6

 

 

 

Паскаль автоматически добавит

30

нужное количество позиций для записи целой части вещественного числа

Таблица 8. Работа оператора Writeln с вещественными числами с выделением общего количества позиций под число и/или под вещественную часть

var a:real; begin a:=3.14159; writeln (a); writeln (a:8); writeln (a:6:2); writeln (a:0:6); writeln (a:9:1); readln

end.

На экран напрямую можно вывести данные только следующих типов:

REAL

INTEGER

CHAR

STRING

BOOLEAN (TRUE , FALSE)

Ввод простых типов данных.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]