Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
лекции ИВАНОВ Книга Паскаль.doc
Скачиваний:
5
Добавлен:
18.11.2019
Размер:
1.93 Mб
Скачать

Операции div и mod

Две операции над целыми числами div и mod имеют по два целых операнда (аргумента): если значения а и b неотрицательны и b  0, то а div b и a mod b — это частное и остаток, возникающие при делении а на b.

Целочисленное деление div возвращает целую часть частного, дробная часть отбрасывается. Если делимое меньше делителя, результат целочисленного деления равен нулю.

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

Примеры:

выражение

результат

выражение

результат

11 div 5

2

11 mod 5

1

10 div 3

3

14 mod 5

4

2 div 3

0

2 mod 3

2

10 mod 5

0

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

first:=591 div 100 {выделение первой цифры числа - 5}

second:=591 div 10 mod 10 {выделение второй цифры числа - 9}

third:=591 mod 10 {выделение третьей цифры числа - 1}

Операцию mod можно использовать, чтобы определить кратно ли целое число Х целому Y, а именно: X кратно Y тогда и только тогда, когда X mod Y = 0. Например, выражение Х mod 2 = 0 позволит определить является ли число Х четным.

Стандартные функции

Таблица 2.5

Название функции

Выполняемое действие

abs(x)

возвращает модуль х

exp(x)

возвращает e в степени х (экспоненту), результат вещественного типа

cos(x)

возвращает косинус х, результат вещественного типа

sin(x)

возвращает синус х, результат вещественного типа

arctan(x)

возвращает арктангенс х, результат вещественного типа

ln(x)

возвращает натуральный логарифм х, результат вещественного типа

sqr(x)

возвращает квадрат числа х

sqrt(x)

возвращает значение корня квадратного из х

pred(x)

возвращает предыдущее целое число (х-1)

sucс(x)

возвращает следующее целое число (х+1)

odd(x)

возвращает результат логического типа

(для четного аргумента – false, для нечетного - true)

ord(x)

возвращает аргумент х (код символа х в ASCII)

chr(x)

возвращает символ, ASCII–код которого равен х

random(x)

генерирует случайное целое число в диапазоне от 0 до х

dec(x, n)

уменьшает значение целочисленной переменной х на n

inc(x, n)

увеличивает значение целочисленной переменной х на n

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

Аргумент функций sin и cos задается в радианах. Для преобразования значения угла из радианной меры в градусную необходимо умножить величину угла на число 180/pi. Для перевода значения угла из градусной меры в радианную необходимо умножить величину угла на число pi/180.

Функция random(диапазон) возвращает случайное число, удовлетворяющее условию 0<=x<=диапазон. Тип аргумента и результата – word. Если необходимы случайные числа из диапазона a<=x<b - используется выражение random(b-a)+a.

Если параметр диапазон не указан, то random возвращает число в диапазоне 0<=x<1. Тип результата – real (см. п.3.2). Если нам необходимы вещественные числа из диапазона a<=x<b, мы можем задать его при помощи random*b+a.

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

Параметр n в процедуре dec(x,n) может отсутствовать, т.е. она примет вид dec(x), тогда значение х уменьшится на единицу. Аналогично, при отсутствии необязательного параметра n, процедура inc(x, n) примет вид inc(x), тогда значение х увеличится на единицу.

Примеры:

Пример функции

Действие

Результат

x:=random;

выдает случайное вещественное число в диапазоне [0;1)

может быть число 0.5413

x:=random(50);

выдает случайное целое число в диапазоне [0;49]

может быть число 26

x:=random(51)-25;

выдает случайное целое число в диапазоне [-25;25]

может быть число

-18

х:=10;

dec (х, 2);

уменьшает значение переменной х на 2

будет число 8

х:=10;

dec (х);

уменьшает значение переменной х на 1

будет число 9

х:=10;

inc(x,3);

увеличивает значение переменной х на 3

будет число 13

х:=10;

inc(x);

увеличивает значение переменной х на 1

будет число 11

2.3.2 Вещественные типы данных

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

Таблица 2.6

Название типа

Диапазон

десятичного порядка

Мантисса, значащие цифры

Требуемая память (байт)

single (с одинарной точностью)

1.5*10-45…3.4*1038

7..8

4

real

2.9*10-39…1.7*1038

11..12

6

double (с двойной точностью)

5.0*10-324…1.7*10308

15..16

8

extended (с повышенной точностью)

3.4*10-4951…1.1*104932

19..20

10

comp (сложный)

-2*1063+1…2*1063-1

19..20

8

Наиболее часто в простейших программах используется тип real. При разработке программ, критичных ко времени счета, следует заменять тип real на single, double или extended. Скорость вычислений при этом увеличивается не менее чем в 2 - 3 раза. Но пользоваться этими типами несколько сложнее, т. к. необходимо изменить способ компиляции, используемый по умолчанию. Сделать это можно двумя методами: при включенной директиве компилятора {$N+} или установив переключатель [*] для соответствующего пункта меню интегрированной среды языка Паскаль.

Над данными этого типа определены операции:

  • арифметические (стандартные): сложение (+), вычитание (-), умножение (*) и деление нацело (/);

  • операции отношения (=, <>, <, >, <=, >=), вырабатывающие результат логического типа.

Для вещественных чисел определены следующие стандартные функции:

  • abs(x), chr(x), exp(x), sqr(x), sqrt(x), cos(x), sin(x), ln(x), arctan(x) (см. таблицу 2.5);

  • trunc(x), round(x) (см. таблицу 2.7).

Таблица 2.7

Название функции

Выполняемое действие

trunc(x)

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

round(x)

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

frac(x)

вычисляет дробную часть х (аргумент и результат – real)

int(x)

вычисляет целую часть х (аргумент и результат – real)

random

генерирует случайное число типа real из диапазона 0...<1

Примеры:

frac(2.75)=0.75

int(2.75)=2.00

х=int(x)+frac(x) {результат: 2.75}

trunc(6.7)=6

trunc (-1.6)=-1

round(6.7)=7

round(-1.2)=-2

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

Запись вещественного числа в экспоненциальной форме (в форме с мантиссой и порядком) использует степень десяти (например: 25* 103) и удобна для записи очень больших и очень маленьких чисел. При этом число изображается так: пишется мантисса, знак умножения опускается, вместо основания 10 пишется буква Е, а следом указывается порядок (показатель степени). Буква е, предшествующая порядку, читается как "умножить на 10 в степени".

Примеры записи вещественных чисел:

в общепринятой форме — 123.456 или 11.9

в экспоненциальной форме — 5.18Е+02 (518) или 10Е-03 (0,01)

Примеры неправильной записи вещественных чисел:

123 — отсутствует десятичная точка;

1,23 — запятая вместо точки;

0.123-03 — отсутствует обозначение порядка Е;

12.34Е+1.2 — порядок числа должен быть целым.

2.3.3 Логический тип

Логический тип (булевский) может принимать только одно из двух значений, определяемых стандартными константами True (да - истина, 1) и False (нет – ложь, 0), причем данные значения упорядочены, т. е. в операциях сравнения true > false.

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

К типу boolean применимы операции отношения, а также логические операции, приведенные в таблице 2.8:

Таблица 2.8

Название операции

Выполняемое действие

not

логическое отрицание – получение обратного значения

and

логическое и (умножение) – принимает истинное значение, только если оба операнда истины

or

логическое или (сложение) – принимает истинное значение, если хотя бы одно из операндов истинно

xor

исключающее или:

  • истина, только если из операндов истинно

  • ложь, если оба операнда истинны

Примеры:

(2>0) or true {результат: true }

(2>0) or true and odd(4) {результат: true }

((2>0) or true) and odd(4) {результат: false }

(2>0) or true and odd(4) or (5*44) {результат: true }

2.3.4 Символьный тип

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

В памяти компьютера символы хранятся в виде их числовых кодов. Числовые коды преобразуются в буквы и другие символы лишь в момент их вывода на экран или принтер. Соответствие между символом и его кодом задается при помощи кодовой таблицы, которая находится в памяти компьютера и используется при выводе символов. В переменную этого типа на компьютере может быть помещен любой из 256 символов расширенного кода ASCII: это буквы, цифры, знаки препинания и специальные символы.

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

Например, 'А' обозначает букву А, ';' — точку с запятой, ' ' — пробел, #32 или #$20 являются также символом пробела (32 — это код, соответствующий пробелу, а шестнадцатеричное число 20 равно десятичному 32).

Примеры:

M:=’текст’;

СН := #65; — присвоение переменной СН символа ‘A’ (с ASCII-кодом 65)

Переменная литерного типа занимает в памяти 1 байт и описывается служебным словом char.

К типу char применимы:

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

  • встроенные функции, приведенные в таблице 2.9.

Таблица 2.9

Название функции

Выполняемое действие

ord(x)

преобразует символ ch в его код типа byte и возвращает значение кода

chr(ch)

преобразует выражение х типа byte в символ и возвращает значение символа

pred(ch)

возвращает предыдущий символ

sucс(ch)

возвращает следующий символ

Использование данных типа char в арифметических операциях запрещено.

Примеры:

ord(‘ : ‘)=58

chr(128)=Б

pred(‘ Б ‘)=А

succ(‘ Г ‘)=Д

2.4 ОПЕРАЦИИ И ВЫРАЖЕНИЯ

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

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

Пример выражения:

(Х+У-10)

Х, У, 10 – операнды

“ + “ и “ – “ - знаки операций сложения и вычитания.

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

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

2.4.1 Арифметические выражения и операции

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

Арифметические операции выполняют арифметические действия в выражениях над значениями операндов целочисленных и вещественных типов (см. таблицу 2.10).

Таблица 2.10

Операция

Действие

бинарные

операции

+

сложение

-

вычитание

*

умножение

/

деление

DIV

целочисленное деление

MOD

остаток от деления

AND

арифметическое И

SHL

сдвиг влево

SHR

сдвиг вправо

OR

арифметическое ИЛИ

XOR

исключающее ИЛИ

+

сохранение знака

-

отрицание знака

унарные

операции

NOT

арифметическое отрицание

Унарные операции относятся к одному операнду, бинарные - связывают два. Например, -а – унарная, а+b – бинарная.

  • Арифметическое И (AND) производит логическое умножение операндов в соответствии с таблицей истинности:

1 and 1 = 1

0 and 1 = 0

1 and 0 = 0

0 and 0 = 0

Операнды записываются в десятичной форме, но во время выполнения переводятся в двоичную форму. Результат представлен в десятичной форме.

Пример: Вычислить результат выражения А and В, если А=13 и В=21.

Ответ: 13 and 21 = 5

Т.к. числа 13 и 21 занимают в памяти по 2 байта и в двоичной форме имеют вид: 000000000001101 и 000000000010101. Запишем их друг под другом:

000000000001101

000000000010101

000000000000101

Умножая цифры в соответствии с таблицей истинности, получим результат 0000000000000101 или 5 в десятичной форме.

  • Сдвиг влево (K SHL N) восстанавливает в качестве результата значение, полученное путем сдвига на N позиций влево представленного в двоичной форме числа К.

Пример: Вычислить результат выражения 2 SHL 7.

Ответ: 2 SHL 7 =256

Т.к. число 2 в двоичной форме имеет вид 0000000000000010. Каждый бит сдвигается на 7 позиций влево, в результате получится 0000000100000000, что соответствует 256 в десятичной форме.

  • Сдвиг вправо (SHR) выполняется аналогично с той лишь разницей, что сдвиг производится вправо.

Примеры: 160 SHR 2=40

90 SHR 2=22

256 SHR 7=2

  • Логическое ИЛИ (OR) выполняет сложение операндов в двоичной форме в соответствии с таблицей истинности:

1 or 1 = 1

0 or 1 = 1

1 or 0 = 1

0 or 0 = 0

Результат представлен в десятичной форме счисления.

Пример: Вычислить результат выражения А or В, если А=13 и В=21.

Ответ: 13 or 21 = 29

  • Исключающее ИЛИ (XOR) производит сложение операндов в соответствии с таблицей истинности:

1 xor 1 = 0

1 xor 0 = 1

0 xor 1 = 1

0 xor 0 = 0

Результат преобразовывается в десятичную форму счисления.

Пример: Вычислить результат выражения А хor В, если А=13 и В=21.

Ответ: 13 or 21 = 24

  • Унарная операция сохранения знака (+) оставляет текущий знак числа без изменения.

выражение

результат

+(-77)

-77

+(42)

42

  • Унарная операция отрицания знака (-) восстанавливает значение операнда с противоположным знаком

выражение

результат

-(-77)

77

-(+42)

-42

  • Унарная операция отрицания (NOT) вызывает побитную инверсию, т.е. получение обратного значения, соответствующего данному числу двоичного кода.

выражение

результат

NOT 0

-1

NOT 78

-79