Эти типы обозначают множества целых чисел в различных диапазонах. Значения целого типа могут задаваться в десятичном, например, 5; -10, или шестнадцатеричном виде (шестнадцатеричном константы начинаются со знака $), например, $1A; $FFFF.
Тип |
Размер в байтах |
Диапазон допустимых
значений |
Shortint |
1 |
-128…127 (-27…27-1) |
Integer |
2 |
-32768…32767
(-215…215-1) |
Longint |
4 |
-231…231-1 |
Byte |
1 |
0…255 (0…28-1) |
Word |
2 |
0…65535 (0…216-1) |
Над целыми числами допустимы следующие операции:
+ сложение* умножениеb:=a*b;
- вычитание/ делениеc:=10/2-b;
div – деление нацелоb:=10 div 3 -> b=3; p:=32 div 5 -> p=6
mod – остаток от деленияb:=10 mod 3 -> b=1; p:=32 mod 5 -> p=2
Группа вещественных типов обозначает множества вещественных значений в различных диапазонах. Вещественные числа могут задаваться в форме с фиксированной точкой (например, 3.14159265; –10.2) или с плавающей точкой (например, 1.2Е–2 = 1.2× 10-2; 2.1234Е15 = 2.1234× 1015).
Тип |
Размер в байтах |
Число значащих
цифр |
Диапазон |
Real |
6 |
11-12 |
10-39…1038 |
Single |
4 |
7-8 |
10-45…1038 |
Double |
8 |
15-16 |
10-324…10308 |
Операции над переменными вещественного типа:
<, >, <=, >=, =, <>
Типы результатов операций
Операция | Типы операндов | Тип результата |
+, *, - | Целые.Хотя бы один вещественный | Целый.Вещественный |
/ | Целые, вещественные | Вещественный |
div, mod | Целые | Целые |
<, >, =, <>, <=, >= | Целые, вещественные | Логический (п.2.4.) |
Char 1 байт 256 значений
Значениями этого типа являются символы из набора ASCII – американского стандартного кода для обмена информацией.
Каждый символ имеет свой код от 0 до 255. Символы с кодами 0-127 – стандартные символы ASCII:
0-31 – управляющие символы;
32-47 – знаки препинания;
48-57 – цифры;
58-127 – латинские буквы.
Расширение кода ASCII: 128-255 – русские буквы, псевдографика (│, ┌, ┐, └, ┘…).
Символы, имеющие графическое представление, заключаются в кавычки: С=’*’. Для символов, не имеющих графического представления, используется знак #, после которого записывается код символа:
Пример:
#10 перевод строки Var c: char;
#13 переход к началу строкиx: integer;
#7 звуковой сигнал begin
#8 возврат на символ c:=’*’; x:=10;
Writeln(#7,a); writeln (#7,c,x,c);
Writeln(#10,x);end.
Для переменных символьного типа допустимы операции сравнения, при этом сравниваются коды символов:
‘ ’<’10’
‘0’<’9’
‘a’>’A’
‘A’<’Z’
‘a’>’Z’
‘a’<’z’
Коды прописных латинских букв: A - 65; B – 66; C – 67 и т.д.
Коды строчных латинских букв: a - 97; b – 98; c – 99 и т.д.
Для преобразования символа в число, равное коду символа, и наоборот, используются следующие функции:
chr(x) – преобразование ASCII-кода в символ; аргумент – целый 0-255;
ord(x) – преобразование символа в целое число.
Пример:
Var n1,n2: integer; c1,c2: char; begin c1:=’D’; n1:=ord(c1); writeln('n1 =', n1); n2:=66; c2:=chr(n2); writeln('c2 =', c2); end. |
на экране: n1 = 68 c2 = B |
Описание: varn: boolean;
Данные логического типа boolean могут принимать только два значения: true (истина) и false (ложь). Для значений логического типа допустимы операции сравнения, причем true>false.Также применяются 4 логических операции:
and логическое умножение
or логическое сложение
xor исключающее “или”
not отрицание
Правила выполнения логических операций определяются с помощью следующих таблиц истинности:
X |
Not X |
true |
false |
false |
true |
X |
Y |
X and Y |
X or Y |
X xor Y |
true |
true |
true |
true |
false |
true |
false |
false |
true |
true |
false |
true |
false |
true |
true |
false |
false |
false |
false |
false |
Пример 1:
not (5>2) = false
(5>2) and (3<10) = true
(8<>9) or (4>5) = true
not (5=2) xor (3>2) = false
Пример 2:
var test: boolean; a, b: integer; begin writeln (‘Введите а и b’); readln (a,b); test:=a>b; writeln (‘а > b - ’, test); end. |
Пусть, например, тогда test:=5>16; на экране: а > b - False |
При сравнении данных типа BOOLEAN учитывается внутреннее соглашение Турбо Паскаля, в соответствии с которым FALSE есть нулевой байт, a TRUE - байт с единицей в младшем разряде. Заметим, что функция ORD преобразует к целому не только символы, но и логические величины, поэтому
ord(false) = 0,
ord(true) = 1.
На основе стандартных типов можно строить собственные типы, ограничивая диапазон возможных значений: 1..10, -100..10, ‘a’..’z’ и т.п.
Пример:
var a: 2..5; b: ‘a’..’z’; begin a:=3; b:=0; {ошибка: несоответствие типов – переменной символьного типа присваивается целое число} a:=0; {ошибка: выход за границы диапазона 2..5} end.
Образуются путем явного перечисления всех возможных значений, задаваемых именами. Например, для программы управления светофором, может быть определен следующий тип:
var svet: (red, yellow,green); oper: (plus, minus);
Тип boolean – частный случай перечислимого типа.
Новые типы данных в Паскаль определяются посредством описаний, начинающихся со слова TYPE. Описание состоит из имени типа и значения типа, между которыми ставится знак “=”.
Пример:
Type dec=1..10; abc=’A’..’z’; int=integer;
vara: dec;b: abc;c: int; | {в разделе описания переменных var можно использовать не только стандартные типы данных, но и новые типы, описанные программистом в разделе Type } |
Как уже говорилось, тип переменной позволяет не только устанавливать длину ее внутреннего представления, но и контролировать те действия, которые выполняются над ней в программе. Контроль над использованием переменных еще на этапе компиляции программы - важное преимущество Турбо Паскаля перед другими языками программирования, в которых допускается автоматическое преобразование типов. В Турбо Паскале почти невозможны неявные (автоматические) преобразования типов. Исключение сделано только в отношении констант и переменных типа INTEGER (целые), которые разрешается использовать в выражениях типа REAL (вещественные). Если, например, переменные X и Y описаны следующим образом:
var х: integer; у: Real;
то оператор
у:=х + 2;
будет синтаксически правильным: хотя справа от знака присваивания стоит целочисленное выражение, а слева - вещественная переменная, компилятор сделает необходимые преобразования автоматически. В то же время оператор
х:=2.0;
будет неверным, так как автоматическое преобразование типа REAL (константа 2.0 содержит десятичную точку и, следовательно, принадлежит к типу REAL) в тип INTEGER в Турбо Паскале запрещено.
Таким образом, переменным можно присваивать значения только своего типа; единственное исключение: переменная вещественного типа, а значение – целого (в этом случае целое число будет преобразовано в вещественное с дробной частью, равной 0).
Разумеется, запрет на автоматическое преобразование типов еще не означает, что в Турбо Паскале нет средств преобразования данных. Они, конечно же, есть, но их нужно использовать явно. Для преобразования данных в языке существуют встроенные функции, которые получают в качестве параметра значение одного типа, а возвращают результат в виде значения другого типа. В частности, для преобразования REAL в INTEGER имеются даже две встроенные функции такого рода: ROUND округляет REAL до ближайшего целого, a TRUNC усекает REAL путем отбрасывания дробной части (см. п.1.5).
Например, ошибочным будет оператор
х := у/х;
но правильным
х := round(у/х);
(объявления переменных см. выше).
Например, для преобразования данных типа CHAR (символ) в целое число предназначена функция ORD, обратное преобразование INTEGER в CHAR осуществляет функция CHR.
Наличие двух операций деления есть еще одно проявление основополагающего принципа Турбо Паскаля: программист должен явно подтверждать компилятору, что он готов к возможным последствиям преобразования типов. Если, например, в языке Фортран используется выражение 1/2 , то результат этого выражения будет зависеть от того, переменной какого типа он будет присвоен: если N есть переменная целого типа, а Х- вещественного, то в программе на Фортране присваивания
N = 1/2
X = 1/2
дадут значения 0 для N и 0.5 для X. В Турбо Паскале такой двусмысленности нет: выражение 1/2 всегда имеет значение 0.5 и поэтому оператор
var N :integer; begin N := 1/2;
просто недопустим. В то же время допустимые в Турбо Паскале операторы:
var X : Real; N: integer; begin N := 1 div 2; X := 1 div 2;
И, наконец, об операциях отношения и логических операциях.
Над данными типа REAL, INTEGER, CHAR, STRING определены следующие операции отношения (сравнения):
= - равно;
<> - не равно;
< - меньше;
> - больше;
<= - меньше или равно,
>= - больше или равно.
В операциях сравнения должны участвовать однотипные операнды. Исключение сделано опять-таки в отношении REAL и INTEGER, которые могут сравниваться друг с другом. Результат применения операции отношения к любым операндам имеет тип BOOLEAN.
Порядок выполнения операций, входящих в выражения, определяется приоритетом операций. Для изменения порядка вычисления используются круглые скобки.
Приоритет операций:
Следует учесть, что в отличие от многих других языков программирования в Турбо Паскале логические операции имеют более высокий приоритет, чем операции отношения. В связи с этим, в сложных логических выражениях обычно необходимо расставлять скобки. Если, например, b и с имеют тип INTEGER , то выражение
а = b and с < d
вызовет сообщение о синтаксической ошибке, так как сначала выполнится операция b and с. Правильным будет выражение:
(а = b) and (с < d)
2.1. Вычислить значения выражений
а) 20 div 6; б) 20 mod 6;
в) 2 div 5; г) 2 mod 5;
д) 4 div 0; е) 2.0 mod 2.
2.2. а)Преобразовать арифметическое выражение в линейную форму записи, пригодную для ввода в компьютер. Использовать следующие обозначения операций: умножение *, деление /, возведение в степень ^, т.е. x3 = x^3.
б)Преобразовать линейную форму записи арифметического выражения в “многоэтажное” представление, обычно используемое в математике:
B:=(x/(y+3*(x–y))^2–(y+9)^3/4)/(x^2*y)+9.5*y^2+y*(8+x/(2*y));
2.3. Какие операторы являются ошибочными?
var x:integer; y:real; Begin x:=3.4; y:=5; x:=6; y:=2.5; x:=y; y:=x; x:= 6/3; x:= 6 div 3; y:= 6 div 2;
2.4. Вычислить значения выражений
а) not (6>=4) and (2<8)
б) ((5>=9) or (4>2)) and (6<12)