Paskal_ucheb_posob_ch1_21_11_2011
.pdf11
Идентификатор вещественного типа относится к числу стандартных идентификаторов, которые могут быть Real, Single, Double, Extended или
Comp.
12
ЛЕКЦИЯ 2. Часть 2. Порядковые типы.
Порядковые типы представляют собой подмножество простых типов. Все простые типы, отличные от вещественных типов, являются порядковыми и выделяются по следующим четырем характеристикам.
Все возможные значения данного порядкового типа представляют собой упорядоченное множество, и каждое возможное значение связано с порядковым номером, который представляет собой целочисленное значение. За исключением значений типа Integer, первое значение любого порядкового типа имеет порядковый номер 0, следующее значение имеет порядковый номер 1 и так далее для каждого значения в этом порядковом типе. Порядковым номером значения типа Integer является само это значение. В любом порядковом типе каждому значению, кроме первого, предшествует другое значение, и после каждого значения, кроме последнего, следует другое значение в соответствии с упорядоченностью типа.
К любому значению порядкового типа можно применить стандартную функцию Ord, возвращающую порядковый номер этого значения.
К любому значению порядкового типа можно применить стандартную функцию Pred, возвращающую значение, предшествующее этому значению. Если эта функция применяется к первому значению в этом порядковом типе, то выдается сообщение об ошибке.
К любому значению порядкового типа можно применить стандартную функцию Succ, возвращающую значение, следующее за этим. Если эта функция применяется к последнему значению в этом порядковом типе, то выдается сообщение об ошибке.
Turbo Pascal имеет семь встроенных порядковых типов: Integer (целый), Shortint (короткий целый), Longint (длинный целый), Byte (длиной в байт), Word (длиной в слово), Boolean (логический) и Char (символьный). Кроме того, имеется два других класса порядковых типов, определяемых пользователем: перечислимые типы и типы поддиапазона.
В процессе программирования программист имеет дело с информацией, представляющей из себя пять основных типов: целые числа, вещественные числа, символы и строки символов, булевские данные и указатели.
Целые числа - это числа, с помощью которых Вы учились считать (1, 5, -21 и 752, например).
Вещественные числа имеют дробные части (3.14159) и экспоненты(2.579*1024). Они также известны как числа с плавающей точкой.
13
Символы - это любые буквы алфавита, символы и цифры 0-9. Они могут использоваться отдельно (а, z, !, 3) или объединяться в символьные строки ('Это только проверка').
Булевские выражения имеют только два значения: TRUE или FALSE (истина или ложь). Они используются в условных выражениях.
Указатели - это адреса ячеек памяти, содержащих информацию.
Целые числа
Встандартном Паскале целочисленный тип определяется в пределах от -MaxInt до MaxInt, где MaxInt - набольшее возможное целое значение, допустимое для процессора.
ВTurbo Pascal поддерживается целочисленный тип MaxInt = 32767, допуская значение – 32 768. Переменная целочисленного типа занимает 2 байта. В Turbo Pascal, кроме того, поддерживается четыре других целочисленных типов данных, каждый из которых имеет свой диапазон значений.
Тип |
Знак/ |
Диапазон |
Размер в |
|
безнак. |
|
байтах |
Byte (целое дли- |
б/з |
0..255 |
1 (2^8) |
ной в байт |
|
|
|
Shortint (корот- |
± |
-128..127 |
1(2^8) |
кое целое) |
|
|
|
Integer (целое) |
± |
-32768..32767 |
2(2^16) |
Word (длиной в |
б/з |
0..65535 |
2(2^16) |
слово) |
|
|
|
Longint (длинное |
± |
-2147483648..2147483647 |
4(2^32) |
целое) |
|
|
|
|
Таблица 1. Целочисленные типы данных. |
|
Turbo Pascal позволяет использовать шестнадцатеричные целые значения (основание 16). При описании шестнадцатеричной константы перед ней указывается знак доллара $, например $27=39.
14
ЛЕКЦИЯ 3.
Вещественный тип данных
В стандартном Паскале тип Real представляет значение с плавающей точкой, содержащее мантиссу и экспоненту - степень числа 10.
Количество значащих цифр в мантиссе и диапазон значений экспоненты зависят от компьютера. В Turbo Pascal данные вещественного типа
имеют размер в 6 байт, с 11 значащими цифрами мантиссы и экспоненты от 10-38 до 1038.
Кроме того Turbo Pascal поддерживает стандарт IEEE 754 для двоичной арифметики с плавающей точкой. В этом случае добавляются типы данных с Single, Double, Extended и Comp:
Если у вас есть процессор 8087, и включена работа с числовым сопроцессором ({$N+}), Turbo Pascal генерирует инструкции 8087 для поддержки этих типов и выполнения всех операций с плавающей точкой на
8087.
Если у Вас нет 8087, но Вы хотите использовать IEEE типы, Вы можете указать эмулировать процессор 8087, разрешая и эмуляцию 8087 и обработку с плавающей точкой (директивы {$E+,N+}).
Turbo Pascal подключает специальную библиотеку, которая выполняет операции с плавающей точкой, так же как процессор 8087.
|
Тип |
Диапазон |
Значение |
Размер в бай- |
|
|
|
|
|
цифры |
тах |
Single |
(с |
одинарной |
1.5Е-45.. |
7-8 |
4 |
точностью) |
|
+3.4Е38 |
|
|
|
Real (вещественный) |
2.9Е-39.. |
11-12 |
6 |
||
|
|
|
+1.7Е38* |
|
|
Double |
(с |
двойной |
5.0Е-324.. |
15-16 |
8 |
точностью) |
|
+1.7Е308 |
|
|
|
Extended |
(повышен- |
1.9Е-4951.. |
19-20 |
10 |
|
ной точности) |
+1.1Е4932 |
|
|
||
Comp (сложный)** |
(-2Е+63).. |
19-20 |
8 |
||
|
|
|
+1..(2Е+63)-1 |
|
|
Таблица 2. Вещественные типы данных
* Значение 1.7Е38 эквивалентно 1.7 * 10+38 **Сomp – принимает только целые значения
Примечание: При компиляции в режиме числового сопроцессора, {$N+}, возвращаемые значения в программах с плавающей точкой в моду-
леSystem (Sqrt, Pi, Sin и т.д.) имеют тип Еxtended вместо Real.
Арифметические функции
п/п |
Функция |
Назначение |
|
Тип ар- |
Тип |
|
|
|
|
|
|
гумента |
функции |
1. |
abs(x) |
Вычисление абсолютного зна- |
real |
real |
||
|
|
чения Х |
|
|
integer |
integer |
2. |
sqr(x) |
Вычисление квадрата Х |
|
real |
real |
|
|
|
|
|
|
|
|
|
|
|
|
|
integer |
integer |
3. |
sin(x) |
Вычисление синуса Х |
|
real |
real |
|
|
|
|
|
|
integer |
real |
4. |
cos(x) |
Вычисление косинуса Х |
|
real |
real |
|
|
|
|
|
|
integer |
real |
5. |
arctan(x) |
Вычисление арктангенса Х |
real |
real |
||
|
|
|
|
|
integer |
real |
6. |
exp(x) |
Вычисление экспоненты Х |
real |
real |
||
|
|
|
|
|
integer |
real |
7. |
ln(x) |
Вычисление |
натурального ло- |
real |
real |
|
|
|
гарифма Х |
|
|
integer |
real |
8. |
log(x) |
Вычисление десятичного лога- |
real |
real |
||
|
|
рифма Х |
|
|
integer |
real |
9. |
sqrt(x) |
Вычисление |
квадратного кор- |
real |
real |
|
|
|
ня из Х |
|
|
integer |
real |
10. |
A div B |
Вычисление |
частного |
(целой |
integer |
integer |
|
|
части) при делении А на В |
|
|
||
11. |
A mod B |
Вычисление остатка при деле- |
integer |
integer |
||
|
|
нии А на В |
|
|
|
|
12. |
trunc(x) |
Нахождение целой части Х |
real |
integer |
||
|
|
|
|
|
integer |
integer |
13. |
round(x) |
Округление Х в сторону бли- |
real |
real |
||
|
|
жайшего целого |
|
integer |
integer |
|
14. |
odd(x) |
Принимает значение true, если |
integer |
boolean |
||
|
|
Х – нечетное и значение false, |
|
|
||
|
|
если Х - четное |
|
|
|
|
15. |
ord(x) |
1. Нахождение порядкового |
boolean |
integer |
||
|
|
номера элемента Х в перечне |
Перечис- |
integer |
||
|
|
допустимых |
значений |
(счет |
лимый |
|
|
|
|
|
|
|
|
|
16 |
|
|
|
|
|
|
|
|
|
начинается с 0) |
|
|
|
|
|
|
|
|
|
2. Номер целого числа равен |
integer |
integer |
|
|
его значению ord(x)=x |
|
|
|
|
3.Определение номера символа |
char |
integer |
|
|
языка в десятичной системе |
|
|
|
|
счисления |
|
|
16. |
chr(x) |
Определение символа языка в |
integer |
char |
|
|
десятичной системе счисления |
|
|
|
|
в таблице ASCII кодов |
|
|
17. |
succ(x) |
Нахождение элемента который |
integer |
integer |
|
|
следует за Х в перечне допу- |
Boolean |
Boolean |
|
|
стимых элементов |
char |
char |
|
|
|
||
|
|
|
перечис- |
перечис- |
|
|
|
лимый |
лимый |
18. |
pred(x) |
Нахождение элемента который |
integer |
integer |
|
|
предшествует Х в перечне до- |
Boolean |
Boolean |
|
|
пустимых элементов |
|
|
|
|
char |
char |
|
|
|
|
||
|
|
|
перечис- |
перечис- |
|
|
|
лимый |
лимый |
Таблица 3. Арифметические функции
Символьные и строковые типы данных
Научившись записывать числовые данные, выучим запись и использование символьных и строковых данных. Паскаль позволяет определять тип Char, имеющий размер в один байт и содержащий один символ. Символьные константы содержат один символ, заключенный в апострофы ('A','e','г','2'). Заметим, что '2' означает символ 2, а 2 означает целое число 2 (и 2.0 - вещественное число).
В Turbo Pascal существуют два дополнительных способа описания символьных констант: с помощью символа "^" и символа числа "#". Символы с кодами от 0 до 31 - управляющие символы. Они обозначаются аббревиатурами (CR - возврат каретки, LF - перевод строки, ESC - выход) или с помощью двух клавиш, одна из которых Ctrl + буква. Значение буквы получается прибавлением 64 к управляющему коду. Например, управляющий символ кода ASCII 7 известен как Del или Ctrl-G. Turbo Pascal дает возможность представить символы с помощью "^", за которым следует буква (или символ). Так, "^G" то же самое, что и Ctrl-G. "^G" можно использовать в операторах Turbo Pascal: Writeln (^G). Этот метод применим только к управляющим символам.
17
Вторая возможность обозначения - использование символа номера "#", за которым следует код ASCII. Так, #7 то же самое, что и "^G", #65 - 'A', a #233 - один из специальных псевдографических символов IBM PC.
В большинстве случаев используются строки символов. В Turbo Pascal реализована эта возможность.
Рассмотрим программу:
program Hello; var
Name: String[30];
begin
Write('What is your name? ');Readln(Name);Writeln('Hello, ', Name) end.
Рисунок 3. Копия экрана с результатами работы программы
Переменная Name объявлена, как string (строка), и под нее резервируется 30 байт (для 30 символов). Кроме того, Turbo Pascal отводит еще один байт (нулевой), в котором содержится текущая длина строки. В этом случае, независимо от того, какой длины будет введено имя, оператор Writeln распечатает имя указанной длины. Если будет введено имя больше 30 символов, то будут использоваться только первые 30 символов, а остальные будут проигнорированы.
При описании строковой переменной можно указывать ее размер, но не более 255. По умолчанию длина строковой переменной - 255символов.
18
Константы строкового типа.
Объявление типизированной (типизированной) константы строкового типа содержит максимальную длину строки и ее начальное значение: const
Heading: string [7] = `Section'; Newline: string [2] = #13#10; TrueStr : string [5] = `Yes'; FalseStr : string [5] = `No';
Перечислимые типы
Перечислимые типы определяют упорядоченные наборы значений через перечисление идентификаторов, которые обозначают эти значения. Упорядочение наборов выполняется в соответствии с последовательностью, в которой перечисляются идентификаторы.
При указании идентификатора в списке идентификаторов перечислимого типа он объявляется как константа для блока, в котором объявляется перечислимый тип. Типом этой константы является объявленный перечислимый тип.
Порядковый номер перечислимой константы определяется ее позицией в списке идентификаторов при объявлении. Перечислимый тип, в котором описывается константа, становится ее типом. Первая перечислимая константа в списке имеет порядковый номер 0.
Приведем примеры перечислимого типа:
type
Suit = (Club, Diamond, Heart, Spade);
Согласно этим объявлениям diamond является константой типа Suit. При применении функции Ord к значению перечислимого типа она
возвращает целое число, которое показывает, какое положение занимает это значение по отношению к другим значениям этого перечислимого типа. Согласно предшествующим объявлениям, Ord (Club) возвращает 0, Ord (Diamond) возвращает 1 и так далее.
Тип поддиапазона (ограниченный тип)
Тип поддиапазона представляет собой диапазон значений из порядкового типа, называемого главным типом. Определение типа поддиапазона включает наименьшее и наибольшее значения в поддиапазоне; оно имеет следующий синтаксис:
|
|
19 |
|
|
Тип |
Константа |
.. |
Константа |
|
поддиапозона |
||||
|
|
|
Рисунок 4. Синтаксис типа поддипозон
Обе константы должны быть одного порядкового типа. Типы поддиапазона, имеющие вид а .. b, требуют, чтобы а был меньше или равен b.
Приведем примеры типов поддиапазона:
0 .. 99 -128 .. 127
Club .. Heart
Переменная типа поддиапoзона имеет все свойства переменных главного типа, однако ее значение на этапе выполнения должно принадлежать указанному интервалу.
Из-за допущения константных выражений возникает синтаксическая неопределенность там, где стандартный Паскаль допускает только простые константы. Раccмотрим следующие объявления:
const
X = 50;
Y = 10;
type
Color = (Red, Green, Blue); Scale = (X - Y) * 2 .. (X + Y) * 2;
Синтаксис стандартного Паскаля ставит непременным условием, что если определение типа началось с круглой скобки, то это перечислимый тип, подобно типу Color, определенному выше. Однако целью объявления Scale является задание типа поддиапазона. Решением этой проблемы является либо переделка первого выражения поддиапазона так, чтобы оно не начиналось с круглой скобки, или задание другой константы, равной значению этого выражения, и затем использование этой константы в определении типа:
type
Scale = 2 * (X - Y) .. (X + Y) * 2;
Булевские данные
Встроенный тип Boolean данных в Turbo Pascal имеет два возможных значения: True и Falsе (истина и ложь). Можно объявить переменную типа Boolean и присвоить ей значение True или False, или же, что более важно, присвоить ей значение выражения, которое при вычислении принимает одно из этих значений.
20
Булевское выражение - это выражение, которое принимает значение True или False. Оно состоит из выражений отношений, булевских операторов, булевских переменных и/или других булевских выражений. Например:
while (Index <= Limit) and not Done do...
While содержит булевское выражение. Булевское выражение в этом случае все, что находится между ключевыми словами while и do. Done - это переменная (или функция) булевского типа.
Идентификаторы
До сих пор в примерах содержались идентификаторы переменных без описания ограничений и правил их образования. Рассмотрим их более подробно.
Имена, которые даются константам, типам данных, переменным, функциям, известны как идентификаторы.
Идентификаторы используются для:
Integer, Real, String - встроенных типов данных;
Hello, DoSum, Ratio - названия основных программ и модулей; Name, A, B, Sum, Ratio - переменных определенных;
Write, Writeln, Readln - имен встроенных процедур.
Turbo Pascal имеет несколько правил образования идентификаторов. Краткое описание правил:
Все идентификаторы начинаются с буквы или знака подчеркивания (a..z, A..Z, _). Последующими символами могут быть буква, знак подчеркивания, цифра (0-9). Другие символы недопустимы.
Идентификаторы рассматриваются без учета регистров (прописные и строчные буквы не различаются). Это значит, что a..z тождественно
A..Z. Например index тоже самое что и Index, и INDEX.
Идентификаторы могут иметь различную длину, но используются только первые 63 символа.