Типы данных. Ввод-вывод данных
- Типы данных
- Перечень типов данных в языке Pascal
- Тождественность и совместимость типов
- Выражения, операции и операнды
- Ввод-вывод данных
Общие сведения
При решении задач обрабатывается информация различного характера. Это могут быть целые и дробные величины, строки и др. Соответственно, константы и переменные должны быть описаны как целые, дробные, строковые и т. д.
Для описания множества допустимых значений величины и совокупности операций, в которых может участвовать данная величина, используется указание ее типа данных. Тип данных (data type) — это множество величин, объединенных определенной совокупностью допустимых операций.
Каждый тип данных имеет свой диапазон значений и специальное зарезервированное слово для его описания. Например, значения 1 и 2 относятся к целочисленному типу, их можно складывать, умножать и выполнять над ними другие арифметические операции.
В языке Pascal для описания типа в общем случае используется зарезервированное слово type.
Формат:
type
<Имя типа> = <значения типа>;
Синтаксическая диаграмма описания типов может быть представлена следующим образом.
Все типы данных можно разделить на две группы: скалярные и структурированные (составные). Скалярные типы, в свою очередь, делятся на стандартные и пользовательские.
Стандартные типы данных предлагаются пользователям разработчиками системы Turbo Pascal. К ним относятся целочисленные, вещественные, литерные, булевские типы данных и указатели.
Пользовательские типы данных разрабатываются пользователями системы программирования Turbo Pascal.
Перечень типов данных в Turbo Pascal
Перечень типов данных в языке Turbo Pascal можно представить в виде следующей схемы:
|
1. Простые типы (скалярные типы):
o порядковые;
o целые:
§ byte,
§ shortint,
§ integer,
§ word,
§ longint;
§ логический boolean;
§ символьный char;
§ перечисляемый;
§ интервальный (диапазон);
§ вещественные:
§ real,
§ single,
§ double,
§ extended,
§ comp;
§ ссылочный.
o Структурированные типы:
§ строковый string;
§ регулярный array;
§ комбинированный record;
§ множественный set;
§ файловый file.
o Процедурные типы.
В Delphi список типов данных отличается от приведенного, о чем будет рассказано во второй части книги.
Данные целочисленных типов могут быть представлены как в десятичной, так и в шестнадцатеричной системах счисления. Если число представлено в шестнадцатеричной системе, перед ним без пробела записывается знак $. Диапазон допустимых значений шестнадцатеричных чисел составляет от $0000 до $FFFF.
В десятичной системе числа могут записываться двумя способами: с фиксированной и с плавающей точкой.
Вещественные десятичные числа с фиксированной точкой записываются по обычным правилам арифметики. Целая часть от дробной отделяется десятичной точкой. Если десятичная точка отсутствует, число считается целым. Перед числом может находиться знак «+» или «–». Если знак отсутствует, то по умолчанию число считается положительным.
Примеры:
125 — целое десятичное число;
$1FF — шестнадцатеричное число;
124.674 — вещественное число;
–12.9 — отрицательное вещественное число.
Вещественные десятичные числа в форме с плавающей точкой записываются в экспоненциальном виде: mE+p, где m — мантисса (целое или дробное число с десятичной точкой), E означает десять в степени, p — порядок (целое число).
|
Пример:
5.18E+02 = 5.18 * 102 = 518
10E–03 = 10 * 10—3 = 0.01
Пользовательские типы — перечисляемый и интервальный — разрабатываются самим программистом.
Структурированные типы в своей основе имеют один или несколько скалярных типов данных. К структурированным типам относятся строки, массивы, множества, записи, файлы и данные совершенно иной природы: процедурного типа и типа object.
Скалярные типы данных
К скалярным (scalar — простые) типам данных относят типы данных таких величин, значения которых не содержат составных частей.
Целочисленные типы данных
Целочисленные типы данных представляют собой значения, которые могут использоваться в арифметических выражениях и занимать в памяти от 1 до 4 байт (табл. 3.1).
Таблица 3.1. Целочисленные типы данных | ||
Тип | Диапазон | Требуемая память, байт |
byte | 0…255 | |
shortint | –128…127 | |
integer | –32768…32767 | |
word | 0…65 535 | |
longint | 2 147 483 648…2 147 483 647 |
Значения целых типов могут изображаться в программе двумя способами: в десятичном виде (традиционно, в виде последовательности цифр) и в шестнадцатеричном виде (в этом случае число предваряется знаком $, а цифры старше 9 обозначаются латинскими буквами от A до F).
Синтаксическая диаграмма для целых чисел выглядит следующим образом.
Пример:
var
X1, X2: byte;
Y1: word;
Для данных целого типа определены следующие арифметические операции: +, –, *, /, div, mod. Результат выполнения этих операций над целыми операндами также имеет целый тип.
Для данных целого типа определены следующие операции отношения: =, <>, <, >, <=, =>, вырабатывающие результат логического типа.
|
Для целых чисел определены следующие стандартные функции:
- odd(x) — возвращает результат логического типа: для четного аргумента — false; для нечетного — true;
- succ(x) — возвращает следующее целое число (х + 1);
- pred(x) — возвращает предыдущее целое число (х – 1);
- ord(x) — возвращает аргумент х;
- abs(x) — возвращает модуль х;
- chr(x) — возвращает символ, ASCII-код которого равен х;
- sqr(x) — возвращает квадрат числа х;
- sqrt(x) — возвращает значение корня квадратного из х;
- exp(x) — возвращает е в степени х (экспоненту), результат вещественного типа;
- sin(x) — возвращает синус х, результат вещественного типа;
- cos(x) — возвращает косинус х, результат вещественного типа;
- ln(x) — возвращает натуральный логарифм х, результат вещественного типа;
- arctan(x) — возвращает арктангенс х, результат вещественного типа.
Для целых чисел определены следующие стандартные процедуры:
- dec(x,i) — уменьшает значение х на i, если i не задано, то на 1;
- inc(x,i) — увеличивает значение х на i, если i не задано, то на 1.
Вещественные типы данных
Вещественные типы данных представляют собой вещественные значения, которые используются в арифметических выражениях и занимают в памяти от 4 до 6 байт. Pascal допускает представление вещественных значений и с плавающей, и с фиксированной точкой (табл. 3.2).
Таблица 3.2. Вещественные типы данных | |||
Тип | Диапазон | Мантисса | Требуемая память, байт |
real | 2,9 • 10E – 39…1,7 • 10E + 38 | 11–12 | |
single | 1,5 • 10E – 45…3,4 • 10E + 38 | 7–8 | |
double | 5,0 • 10E – 324…1,7 • 10E + 308 | 15–16 | |
extended | 1,9 • 10E – 4951…1.1 • 10E + 4932 | 19–20 | |
comp | –2E + 63 + 1…2E+63 – 1 | 10–20 |
Вещественные значения могут изображаться в форме с фиксированной точкой, например 7,32, 456,721 или 0,015, а также в форме с плавающей точкой, то есть парой чисел вида <мантисса>E<порядок>.
Числа из предыдущего примера в форме с плавающей точкой будут записаны так: 7,32E + 00, 4,56 721E + 02, 1,5E – 02.
Синтаксические диаграммы для записи вещественного числа будут выглядеть следующим образом.
Для данных вещественного типа определены следующие арифметические операции: +, –, *, /. Результат выполнения этих операций также имеет вещественный тип.
Для данных вещественного типа определены следующие операции отношения: =, <>, <, >, <=, =>, — вырабатывающие результат логического типа.
Для вещественных чисел определены следующие стандартные функции:
- abs(x) — возвращает модуль х, результат вещественного типа;
- chr(x) — возвращает символ, ASCII-код которого равен х;
- sqr(x) — возвращает квадрат числа х, результат вещественного типа;
- sqrt(x) — возвращает значение корня квадратного из х, результат вещественного типа;
- exp(x) — возвращает е в степени х (экспоненту), результат вещественного типа;
- sin(x) — возвращает синус х, результат вещественного типа;
- cos(x) — возвращает косинус х, результат вещественного типа;
- ln(x) — возвращает натуральный логарифм х, результат вещественного типа;
- arctan(x) — возвращает арктангенс х, результат вещественного типа;
- trunc(x) — преобразует вещественный аргумент х в целое число путем отбрасывания дробной части;
- round(x) — преобразует вещественный аргумент х в целое число путем округления до ближайшего целого.
Выражение, составленное из переменных целого и вещественного типа, имеет вещественный тип. Допускается присваивание переменной вещественного типа значения выражения целого типа, но не наоборот.
Эффективное использование типов single, double, extended, comp возможно только при включенной директиве {$N+}. По умолчанию она находится в выключенном состоянии {$N–}.
Пример:
var
Summa: single;
Root1, Root2: double;
Упражнение 3.1. Измените программу Tutor3 таким образом, чтобы в результате ее выполнения вычислялось и выводилось на экран значение частного двух целых чисел. Так как результат деления будет иметь вещественный тип, в раздел описания переменных данной программы должно быть добавлено его описание. Например, если идентификатор результата деления обозначить как Ratio, то раздел описания переменных в программе будет выглядеть следующим образом:var
A,B: Integer;
Ratio: real;
Определение частного чисел A и B запишется операцией вещественного деления
Ratio:= A / B;
а вывод на экран результата можно задать следующим образом:
Writeln('Частное двух чисел равно ',Ratio);
Загрузите интегрированную среду программирования, считайте программу Tutor3 с диска, отредактируйте и проверьте ее работу. При проверке работы программы попробуйте задать переменным следующие значения: A = 33 000, B = 33.
Обратите внимание на то, что в результате вычислений получается не 1000, как вы ожидали, а –9,8593939394Е+02, то есть программа неправильно вычисляет результат арифметической операции. Причина ошибки в том, что мы, указав в разделе описания переменных для величин A и B тип integer, зарезервировали в памяти место только для хранения целого числа, принимающего значения из интервала [–32 768…32 767], а задали для величины A значение 33 000.
Внесите изменения в программу, указав в разделе описания для величин A, B тип word или longint, проверьте работу программы на примере больших значений чисел A и B. Сохраните программу на диске под именем Tutor4.
Этот пример наглядно демонстрирует необходимость правильного описания типов величин, обрабатываемых в программе.
Литерный (символьный) тип
Литерный (символьный) тип char определяется множеством значений кодовой таблицы компьютера. Каждому символу приписывается целое число в диапазоне от 0 до 255. Для кодировки используется код ASCII.
Для размещения в памяти переменной литерного типа требуется один байт.
Пример:
var
Ch: char;
Letter, Symbol: char;
В программе значения переменных и констант типа char должны быть заключены в апострофы. Например, 'А' обозначает букву А, ' ' – пробел, ';' — точку с запятой.
Для данных символьного типа определены следующие операции отношения: =, <>, <, >, <=, =>, вырабатывающие результат логического типа.
Для данных символьного типа определены следующие стандартные функции:
- chr(x) — преобразует выражение х типа byte в символ и возвращает значение символа;
- ord(ch) — преобразует символ ch в его код типа byte и возвращает значение кода;
- pred(ch) — возвращает предыдущий символ;
- succ(ch) — возвращает следующий символ.
Примеры:ord(':') = 58
ord('A') = 65
chr(128) = Б
pred('Б') = А
succ('Г') = Д
Булевский тип
Булевским типом называют тип данных, представляемый двумя значениями: True (истина) и False (ложь). Он широко применяется в логических выражениях и выражениях отношения. При описании величин этого типа указывают слово boolean. Для размещения в памяти переменной булевского типа требуется 1 байт.
Пример:
var
Flag, Rezult: boolean;