Файл: Операции, производимые с данными (Понятие и виды данных).pdf

ВУЗ: Не указан

Категория: Курсовая работа

Дисциплина: Не указана

Добавлен: 03.07.2023

Просмотров: 879

Скачиваний: 3

ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.

Таблица 1.2

Арифметические операции над целочисленными значениями[9]

Знак операции

Содержание операции

Примеры применения и результаты

+

Сложение

1 + 2 = 3; 1 + 32 767 = 32 768 (переполнения ячейки); -32 768 + (-32 768) = 0

-

Вычитание

1 - 2 = - 1; -32 768 -1 = 32 767; 32 768 - (-32 768) = 0

- (унарный)

Смена знака числа

-(1) = -1; -(-32 768) = -32 768 (переполнения ячейки)

*

Умножение

2 * 2 = 4; 256 * 128 = -32 768 (переполнения ячейки); 256 * 256 = 0; 32 767 * 32 767 = 1

div

Определение целой части от деления

7 div 3 = 2; -7 div 3 = -2; 7 div -3 = -2; -7 div -3 = 2

mod

Определение остатка от деления

7 mod 3 = 1; -7 mod 3 = -1; 7 mod -3 = 1; -7 mod -3 = -1

/

Деление

7/3 = 2.333 333 3 (действительное), 6/З = 2.0 (действительное)

Поясним содержание операций div и mod. Операция целочисленного деления div отвергает дробную часть доли. Итак, результатом операции a div b является число [а / b], то есть наибольшее целое число, не превышает, а / b. Операция mod (деление по модулю) определяет остаток от деления двух чисел. Таким образом, при любых значениях, а и b выполняется равенство a div b + a mod b = а.

Значение типов shortint, integer и longint являются знаковыми, а типов byte и word - беззнаковымы. При добавлении, вычитании и умножении знаковых целых чисел возможен перенос единицы из старшего цифрового разряда в знаковый разряд. Такая ситуация называется переполнением. Именно это происходит при добавлении, например, 1 и 32 767. Поскольку все значимые разряды числа 32767 равны 1, то число 32768 = 32767 + 1 имеет единицу в знаковом разряде, а в остальных разрядах - нуль. Это означает, что число становится отрицательным и интерпретируется как -32 768. При вычитании единицы от -32768 единица в знаковом разряде обращается в нуль, а, следовательно, результатом является положительное значение 32 767. Единица, которая переносится из знакового разряда влево за разрядную сетку ячейки, теряется. Поэтому, например, при удвоении значения -32768 получаем 0.

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


Заметим также, что во время выполнения операции деления делитель не может равняться нулю. В противном случае произойдет аварийное завершение программы с выводом сообщения: Error 200: Division by zero (Деление на ноль). Применение операции деления к целым числам даёт результат действительного типа.

Рассмотрим операции сравнения целых чисел (операции отношения). Эти операции отражаются лексемами =, <>>, <> =, <= («равно», «не равно», «больше», «меньше», «не менее», «не более»). Операции отношений определяют, является истинным значение выражения сравнения. Таким образом, результат операции сравнения будет носить логический тип. Например, сравнение 1 = 2 дает результат false, а сравнение 1 <> 2 и 1> = 1 - результат true и тому подобное.

2. Действительные типы.

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

В языке Pascal обозначено пять действительных типов (таблица 1.3): действительный (real), действительный с одинарной точностью (single), действительный с двойной точностью (double), действительный с повышенной точностью (extended), целый в формате вещественного типа ( соmр).

Таблица 1.3

Действительные типы данных[10]

Название

Количество байтов оперативной памяти

Меньшее по модулю число

Большее по модулю число

single

4

1,5 • 10-45

3,4• 1038

real

6

2,9• 10-39

1,7• 1038

double

8

5 • 10-324

1,7• 10308

extended

10

3,4• 10-4932

1,1• 104932

comp

8

-263 + 1 ≈ - 9,2• 1018

263 - 1 ≈ - 9,2• 1018

Действия над данными типов single, double, extended и comp выполняются только при наличии математического сопроцессора. Его применение значительно повышает точность расчетов и ускоряет их выполнение. Pascal позволяет эмулировать работу математического сопроцессора программным способом с помощью директив компилятора {$ N +, E-}.


Тип comp (от compound - составной) содержит 64-битные целые числа, но в настоящем формате. В выражениях этот тип совместим с действительными и целыми типами, но применять к данным типа comp можно только определенные для действительных типов данных операции.

Запись действительного числа содержит обязательную целую часть, по которой указываются дробная часть и порядок. Целая часть - это непустая последовательность цифр, дробная - непустая последовательность цифр с точкой в ​​начале, а порядок - это две или четыре цифры со знаком «+» или «-». Цифры в порядке записаны после буквы «Е» или «e». Перед значением отрицательного действительного числа записывается знак «-», например -1.2345678900Е-01. Действительное число, в котором перед десятичной точкой записано цифру от 1 до 9, называется нормализованным.

Для действительных типов обозначено четыре арифметические операции: сложение (+), вычитание (-), умножение (*), деления (/). Также над данными действительных типов можно выполнять те же операции сравнения, что и над данными целых типов. В общем случае действительные числа можно сравнивать лишь приближенно, а применение операции сравнения (=) в равных с математической точки зрения выражений может дать результат false.

3. Булев тип.

Множество допустимых значений булевого, или логического, типа содержит две константы: false (ложь) и true (истина). Название этого типа данных происходит от фамилии выдающегося английского математика Джорджа Буля, основателя математической логики. Идентификатором логического типа является слово boolean.

К булевым значениям применяются операции «и», «или», «не», называемые соответственно логическим умножением (конъюнкцией), логичным добавлением (дизъюнкцией) и отрицанием, обозначаются лексемами and, or и not. Еще одна операция называется «исключительное или» или «сложение по модулю 2» и обозначается лексемой xor. Результаты применения этих операций в булевых значений приведены в таблице 1.4.

Таблица 1.4

Булевы операции

A

B

A and B

A or B

A xor B

not A

false

false

false

false

false

true

false

true

false

true

true

true

true

false

false

true

true

false

true

true

true

true

false

false


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

1 and 1 = 1; 1 and 0 = 0 0 and 1 = 0 0 and 0 = 0

1 or 1 = 1; 1 or 0 = 1; 0 or 1 = 1; 0 or 0 = 0

1 xor 1 = 0 1 xor 0 = 1; 0 xor 1 = 1; 0 xor 0 = 0.

Для примера рассмотрим вычисление выражения 6 and 3. В двоичной системе числа 6 и С имеют вид 110 и 011 соответственно. К каждой паре разрядов этих операндов применяется операция and: 1102 and 0112 = 0102. двоичный результат 010 равна десятичному числу 2.

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

Множество допустимых значений символьного (буквенного) типа - это множество символов кодовой таблицы ASCII, а, следовательно, для данных этого типа есть отдельные символы. Каждому символу соответствует целое число (код) в диапазоне от 0 до 255. Хранение одного символа требует один байт оперативной памяти. Напомним, что символы с кодами от 0 до 127 соответствуют стандарту ASCII. Они идентичны на всех ИВМ-совместимых компьютерах. Символы с кодами от 128 до 255 могут варьироваться в зависимости от типа компьютера и установок системного программного обеспечения. Символьный тип сказывается идентификатором char.

Значение символьного типа данных записываются в одинарных кавычках. Например, "А", "Г, '+' и тому подобное. Любое символьное значение можно задать также с помощью стандартной функции chr (i), где i - выражение целого типа со значением от 0 до 255, то есть код символа. Функция возвращает значение символа по его коду. Например, chr (48) - это символ '0', код которого равен 48, chr (49) - это символ '1', chr (65) - это символ A, a chr (97) - символ 'а' . Также значение символа можно получить по его ASCII-кодом. Для этого перед значением ASCII-кода записывается префикс #, например: # 48, # 65, # 97. Символы с кодами от 0 до 31 принадлежат к управляющих символов. Если эти коды использовать в процедурах ввода-вывода, то можно управлять расположением данных на экране, сопровождать звуковыми сигналами определенные действия и т.д. Управляющие символы можно получить записью в программе комбинации символа «^» и латинской буквы (таблица 1.5).

Таблица 1.5

Некоторые управляющие символы таблицы ASCII кодов[11]

Код

Название символа

Способ ввода

Запись в программе 

7

Звуковой сигнал

Ctrl+G

^G

9

Горизонтальная табуляция

Ctrl+I

^I

10

Перевод строки

Ctrl+J

^J

11

Вертикальная табуляция

Ctrl+L

^L

13

Возврат каретки

Ctrl+M

^M


Для преобразования маленьких букв на большие используют функцию Upcase, синтаксис вызова которой таков:

Upcase (<символ>)

Здесь <символ> - маленькая латинская буква. Функция Upcase не разделывают кириллицу.

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

'0' < '1' <... < '9' < 'А' < 'В' <... < 'Z' < 'а' < 'b' <... < 'z'.

Кроме операций сравнения для данных символьного типа отмечено операцию конкатенации (объединения), в результате выполнения которой образуется строка. Эту операцию обозначают символом «+». Например: '1' + '2' = '12'.

5. Перечислительный тип

Перечислительный тип обозначается пользователем. Такой тип задается перечнем всех элементов множества допустимых значений. Каждое значение именуется определенным идентификатором и отмечается в списке, который берётся в круглые скобки. Идентификатор перечислений типа надо объявить в программе в разделе type. Синтаксис объявления перечислений типа такой:

type <идентификатор типа> = (<идентификатор_1>, <идентификатор_2>, ..., <идентификатор_n>)

Здесь <идентификатор типа> - это идентификатор перечислений типа; <Идентификатор_1> ..... <идентификатор_n> - допустимые значения перечислений типа. К примеру:

type WorkWeek = (Mon, Tue, Wed, Thu, Fri, Sat, Sun)

     Color = (red, green, blue)

     WinterMonth = (December, January, February)

Элементы перечислительного типа упорядочены по номеру элемента в объявлении типа. При этом первый идентификатор в списке получает порядковый номер 0, второй идентификатор - номер 1 и т.д. Максимальное количество идентификаторов в объявлении перечислений типа составляет 65 536. Поэтому перечисляемый тип можно рассматривать как подмножество целочисленного типа word. Для перечисляемых типов существуют операции сравнения =, <> <>, <=,> =, которые сравнивают порядковые номера своих операндов.

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

6. Интервальный тип

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

type <идентификатор типа> = <Минимальное значение> .. <Максимальное значение>;