Язык программирования TurboPascal
- Григоренко Г. Н.
- Просмотров: 36515
Turbo Pascal. Типы данных
Любые данные – константы, переменные, значения функций характеризуются в Паскале типом данных.
Определим понятие типа данных. Как уже известно, все объекты программы (переменные, константы и т.д.) должны быть описаны.
Описания информируют транслятор, во-первых, о существовании используемых переменных и других объектов, во-вторых, указывают на свойства этих объектов. Например, описание переменной, значение которой является числом, указывает на свойства чисел. Формально числа могут быть целыми и вещественными (дробными). В Паскале, как и в других языках программирования, числа разделены на два типа: целые (зарезервированное слово integer ) и вещественные (зарезервированное слово real ).
Выделение целых чисел в отдельный тип объясняется тем, что в вычислительной машине целые и вещественные числа представляются по-разному: целое число может быть представлено абсолютно точно, а вещественное – неизбежно с некоторой конечной погрешностью, которая определяется свойствами транслятора.
Например, пусть переменная x имеет тип real и ее значение равно единице: x=1 . Соответствующее значение в памяти компьютера может быть и 0.999999999, и 1.000000001, и 1.000000000 . Но если переменная x будет объявлена как переменная целого типа, то единица в компьютере будет представлена абсолютно точно и переменная x не сможет принимать вещественные (дробные) значения – ведь она была описана как переменная целого типа.
Таким образом, тип данных определяет:
- внутреннее представление данных в памяти компьютера;
- множество значений, которые могут принимать величины этого типа;
- операции, которые могут выполняться над величинами этого типа.
Введение типов данных является одной из базовых концепций языка Паскаль, заключающейся в том, что при выполнении операции присваивания переменной значения выражения, переменная и выражение должны быть одного типа. Такая проверка выполняется компилятором, что значительно упрощает поиск ошибок и приводит к повышению надежности программы.
Множество типов данных языка Турбо Паскаль можно разделить на две группы:
- стандартные (предопределенные) типы;
- типы, определяемые пользователем (пользовательские типы).
К стандартным типам Турбо Паскаль относят:
- целый тип – integer ;
- вещественный тип – real ;
- символьный тип – char ;
- логический тип – boolean ;
- строковый тип – string ;
- указательный тип – pointer ;
- текстовый тип – text .
Пользовательские типы данных представляют собой различные комбинации стандартных типов.
К пользовательским типам относят:
- перечисляемый тип;
- интервальный тип;
- указательный тип;
- структурированные типы;
- процедурный тип.
Замечание. Возможна и другая классификация типов данных, согласно которой типы делятся на простые и сложные.
К простым типам относят: целый тип, вещественный тип, символьный тип, логический тип, перечислимый тип и интервальный тип.
Сложный тип представляет собой различные комбинации простых типов (массивы, записи, множества, файлы и т.д.)
Стандартные типы
Стандартный тип данных определен самим языком Паскаль. При использовании в программе стандартных типов достаточно указать подразделы необходимых типов ( const, var ) и далее описать используемые в программе константы и переменные. Необходимость использования подраздела Type отсутствует.
Например, если в программе используются только переменные:
i,j – integer (целые);
x,y - real (вещественные);
t,s - char (символьные);
a,b – boolean (логические),
то необходим только подраздел переменных – Var . Поэтому в описательной части программы объявления переменных записываются следующим образом:
Var
i,j:integer;
x,y:real;
t,s:char;
a,b:boolean;
Целые типы
Данные этого типа могут принимать только значения целых чисел. В компьютере значения целого типа представляются абсолютно точно. Если переменная отрицательная, то перед ней должен стоять знак «–», если переменная положительная, то знак «+» можно опустить. Данный тип необходим в том случае, когда какую-то величину нельзя представить приближенно – вещественным числом. Например, число людей, животных и т.д.
Примеры записи значений целых чисел: 17, 0, 44789, -4, -127.
Диапазон изменения данных целого типа, определяется пятью стандартными типами целых чисел и представлен в таблице:
Тип | Диапазон | Размер в байтах |
Shortint | -128...+128 | 1 |
Integer | -32768...32767 | 2 |
Longint | -2147483648...2147483647 | 4 |
Byte | 0...255 | 1 |
Word | 0...65535 | 2 |
Последние два типа служат для представления только положительных чисел, а первые три как положительных, так и отрицательных чисел.
В тексте программы или при вводе данных целого типа значения записываются без десятичной точки. Фактические значения переменной не должны превышать допустимых значений того типа ( Shortint, Integer, Longint, Byte, Word ), который был использован при описании переменной. Возможные превышения при вычислениях ни как не контролируются, что приведет к неверной работе программы.
Пример использования переменной целого типа
Var
a:integer;
b:word;
c:byte;
Begin
a:=300; {a присвоено значение 300}
b:=300; {b присвоено значение300}
c:=200; {c присвоено значение200}
a:=b+c; {a присвоено значение500}
c:=b; {Ошибка! Переменная c может принимать значения не более 255. Здесь переменной c присваивается значение 500,что вызовет переполнение результата.}
End.
Вещественные типы
Значения вещественных типов в компьютере представляются приближенно. Диапазон изменения данных вещественного типа определяется пятью стандартными типами: вещественный ( Real ), с одинарной точностью ( Single ), двойной точностью ( Double ), с повышенной точностью ( Extended ), сложный ( Comp ) и представлен в таблице:
Тип | Диапазон | Число значащих цифр | Размер в байтах |
Real | 2.9E-39...1.7E+38 | 11-12 | 6 |
Single | 1.5E-45...3.4E+38 | >7-8 | 4 |
Double | 5E-324...1.7E+308 | 15-16 | 8 |
Extended | 3.4E-4951...1.1E+4932 | 19-20 | 10 |
Comp | -2E+63+1...+2E+63-1 | 19-20 | 8 |
Вещественные числа могут быть представлены в двух форматах: с фиксированной и плавающей точкой.
Формат записи числа с фиксированной точкой совпадает с обычной математической записью десятичного числа с дробной частью. Дробная часть отделяется от целой части с помощью точки, например
34.5, -4.0, 77.001, 100.56
Формат записи с плавающей точкой применяется при записи очень больших или очень малых чисел. В этом формате число, стоящее перед символом «E», умножается на число 10 в степени, указанной после символа «E».
1E-4 | 1*10-4 |
3.4574E+3 | 3.4574*10+3 |
4.51E+1 | 4.51*10+1 |
Примеры чисел с плавающей точкой:
Число | Запись на Паскале |
0,0001 | 1E-4 |
3457,4 | 34574E-1 |
45,1 | 451E-1 |
40000 | 4E+4 |
124 | 0.124E+3 |
124 | 1.24E+2 |
124 | 12.4E+1 |
124 | 1240E-1 |
124 | 12400E-2 |
В таблице с 5 по 9 строку показана запись одного и того же числа 124. Изменяя положение десятичной точки в мантиссе (точка «плывет», отсюда следует название «запись числа с плавающей точкой») и одновременно изменяя величину порядка, можно выбрать наиболее подходящую запись числа.
Пример описания переменных вещественного типа.
Var
x,y,z:real;
Символьный тип
Значениями символьного типа являются символы, которые можно набрать на клавиатуре компьютера. Это позволяет представить в программе текст и производить над ним различные операции: вставлять, удалять отдельные буквы и слова, форматировать и т.д.
Символьный тип обозначается зарезервированным словом Char и предназначен для хранения одного символа. Данные символьного типа в памяти занимают один байт.
Формат объявления символьной переменной:
<имя переменной>: Char;
При определении значения символьной переменной символ записывается в апострофах. Кроме того, задать требуемый символ можно указанием непосредственно его числового значения ASCII-кода. В этом случае необходимо перед числом, обозначающим код ASCII необходимого символа, поставить знак #.
Пример использования переменных символьного типа:
Var
c:char; {c – переменная символьного типа}
Begin
c:=’A’; {переменной c присваивается символ ’A’}
c:=#65; {переменной c также присваивается символ A. Его ASCII код равен 65}
c:=’5’; {переменной c присваивается символ 5,
End. здесь 5 это уже не число}
Логический тип
Логический тип данных называют булевским по имени английского математика Джорджа Буля, создателя области математики – математической логики.
Формат объявления переменной логического типа:
<имя переменной>: boolean;
Данные этого типа могут принимать только два значения:
- True – истина;
- False – ложь.
Логические данные широко используются при проверке правильности некоторых условий и при сравнении величин. Результат может оказаться истинным или ложным.
Для сравнения данных предусмотрены следующие операции отношений:
= | равно | |
<> | не равно | |
> | больше | |
< | меньше | |
>= | больше или равно | |
<= | меньше или равно |
Пример использования операций отношения:
отношение 5>3, результат true (истина);
отношение 5=3, результат false (ложь).
Пример использования переменных логического типа.
Var
a,b:boolean; {a,b – переменные логического типа}
Begin
a:=Тrue; {переменной a присваивается значение «истина»}
b:=false; {переменной b присваивается значение «ложь»}
End.
Константы
В качестве констант могут использоваться целые, вещественные числа, символы, строки символов, логические константы.
Константу необходимо объявить в описательной части с помощью зарезервированного слова const.
Формат объявления константы
Const <имя константы>= <значение>;
Если в программе используются несколько констант, допускается использование только одного ключевого слова Const, описание каждой константы заканчивается точкой с запятой. Блок констант заканчивается объявлением другого раздела или объявлением блока исполняемых операторов.
Пример:
Const {объявление раздела констант}
year=2003; {константа целого типа, т.к. нет в записи десятичной точки}
time=14.05; {константа вещественного типа}
N=24; {константа целого типа, т.к. нет в записи десятичной точки}
P=3.14; {константа вещественного типа}
A=true; {константа логического типа}
str1=’7’; {константа символьного типа}
str2=’A’; {константа символьного типа}
str3=’Turbo’; {константа строкового типа}
Var {объявление раздела переменных}
X,y:integer; {переменные целого типа}
Пользовательские типы
Из совокупности пользовательских типов рассмотрим только
- перечисляемый тип;
- интервальный тип.
Эти два типа нам будут необходимы при изучении массивов.
Перечисляемый тип
Перечисляемый тип данных описывает новые типы данных, значения которых определяет сам программист. Перечисляемый тип задается перечислением тех значений, которые он может получать. Каждое значение именуется некоторым идентификатором и располагается в списке, обрамленном круглыми скобками. Перечисляемый тип относится к типам данных, определяемым пользователем, поэтому объявление этого типа начинается зарезервированным словом TYPE .
Формат перечисляемого типа:
Type
<имя типа>= (константа1, константа2,..., константаN);
где
константа1, константа2,..., константаN – упорядоченный набор значений идентификаторов, рассматриваемых как константы.
Пример описания перечисляемого типа:
Type
ball=(one, two, three, four, five);
var
t:ball;
Здесь ball – имя перечисляемого типа; one, two, three, four, five – константы; t – переменная, которая может принимать любое значение констант.
В перечисляемом типе константа является идентификатором, поэтому она не заключается в кавычки и не может быть числом. Таким образом, в перечисляемом типе под константой понимается особый вид констант, которые не могут быть:
- константами числового типа: 1, 2, 3, 4 и т. д;
- константами символьного типа: 'a', 's', '1', '3' и т. д.;
- константами строкового типа: 'first', 'second' и т.д.
Кроме того, к значениям этого типа не применимы арифметические операции и стандартные процедуры ввода и вывода Read, Write .
Пример использования переменных перечисляемого типа:
Type
days = (Monday, Tuesday, Wednesday, Thursday, Friday, Saturday, Sunday);
Var
day: days;
begin
if day = Sunday then writeln(‘Сегодня Воскресенье!’);
End.
Элементы, входящие в определение перечисляемого типа, считаются упорядоченными в той последовательности, в которой они перечисляются. Нумерация начинается с нуля. Поэтому в приведенном примере дни недели имеют следующие порядковые номера
Для программного определения порядкового номера используется функция Ord() .
В нашем примере порядковые номера равны:
Ord(Monday) = 0;
Ord(Saturday) = 5;
Ord(Sunday) = 6.
Интервальный тип
Если какая-то переменная принимает не все значения своего типа, а только значения, содержащиеся в некотором диапазоне, то такой тип данных называется интервальным типом. Часто интервальный тип называют ограниченным типом и типом-диапазоном. Интервальный тип задается границами своих значений:
<минимальное значение>..<максимальное значение>
Здесь:
- два символа «..» рассматриваются как один символ, поэтому между ними недопустимы пробелы;
- левая граница диапазона не должна превышать его правую границу.
Интервальный тип относится к типам данных, определяемых пользователем, поэтому объявление этого типа начинается со служебного слова TYPE .
Пример описания интервального типа:
Type
digit = 1..10;
month = 1..31;
lat = ’A’..’Z’;