
- •Любой алгоритм, какой бы он сложный не был, содержит лишь три основных, или, иначе говоря, базовых структуры. Этими базовыми структурами являютия:
- •Любой алгоритм, какой бы он сложный не был, содержит лишь три основных, или, иначе говоря, базовых структуры. Этими базовыми структурами являютия:
- •Клавиши перемещения курсора:
- •Работа с блоками текста
- •Основные клавиши работы с Турбо-Паскалем:
- •Клавиши перемещения курсора:
- •Работа с блоками текста
- •Основные клавиши работы с Турбо-Паскалем:
- •Клавиши перемещения курсора:
- •Работа с блоками текста
- •Основные клавиши работы с Турбо-Паскалем:
- •Строковый тип данных
- •Описание констант
- •Операция присваивания
- •Приоритет операций
- •Оператор присваивания
- •Совместимость и преобразование типов
- •Элементарный ввод-вывод
- •Лекция 5 Выражения
- •Математические операции
- •Логические операции
- •Операции отношения
- •Приоритет операций
- •Основные математические функции
- •Уменьшает значение числа X на y. Если число y не указано, то уменьшение происходит на 1. Циклы
- •Арифметические циклы
- •Итерационные циклы с предусловием
- •Итерационные циклы с постусловием
- •Операторы завершения цикла
- •Операторы ветвления и цикла Условный оператор if
- •Оператор множественного выбора Case
- •Операторы цикла
- •Операторы ветвления и цикла
- •Условный оператор if
- •Оператор множественного выбора Case
- •Операторы цикла
- •Лекция 7. Подпрограммы: процедуры и функции
- •Пример 27
- •Обмен данными
- •4.2. Множества
- •4.2.1. Объявление типа множества
- •4.2.2. Операции над множествами
- •4.2.3. Пример использования множества
- •Пример 33
- •4.3. Строки
- •4.3.1. Объявление типа String
- •4.3.2. Операции над строковыми переменными
- •4.3.3. Встроенные процедуры и функции обработки строк
- •Пример 34
- •4.1. Матрица
- •4.1.1. Ввод-вывод элементов матрицы
- •4.1.2. Определение индексов элементов матрицы
- •Записи Объявление типа записи
- •Вложенные записи
- •Массивы записей
- •Пример обработки массива записей
- •Определение и особенности файлов
- •Доступ к компонентам файла
- •Текстовый файл
- •Чтение из текстового файла
- •Запись в текстовый файл
- •Файлы в Тубо Паскаль
- •Файловые процедуры и функции
- •Текстовые файлы
- •Типизированные файлы
- •Нетипизированные файлы
- •Графика Турбо Паскаля
- •Записи Объявление типа записи
- •Вложенные записи
- •Массивы записей
- •Пример обработки массива записей
- •Статические и динамические памяти переменные
- •Объявление указателей
- •Выделение и освобождение динамической памяти
- •Операции с указателем
- •Пример 41
- •Связанные списки
- •Понятие бинарные деревья. Операции над бинарными деревьями
- •Применение бинарных деревьев
- •Сравнение рекурсии и итерации
- •Пример 51
- •Реализация объектно-ориентированного подхода в турбо-паскале
- •Алгоритмическая и объектная декомпозиция
- •Объектный тип в Турбо-Паскале
- •Способы наследования и переопределения
- •Виртуальные методы
- •Модуль c r t
- •Модуль g r a p h
Клавиши перемещения курсора:
|
переместить курсор на символ влево- клавиша "стрелка влево"; |
|
на символ вправо- "стрелка вправо"; |
|
на строку вверх- "стрелка вверх"; |
|
на строку вниз- "стрелка вниз"; |
|
в начало строки- клавиша "Home"; |
|
в конец строки- клавиша "End"; |
|
на страницу вверх - клавиша "Page Up"; |
|
на страницу вниз - клавиша "Page Down"; |
|
в начало текста - сочетание клавиш “Ctrl” и “Page Up”; |
|
в конец текста - сочетание клавиш “Ctrl” и “Page Down”. |
Работа с блоками текста
Редактор Турбо-Паскаля позволяет оперировать кусками (блоками) текста: копировать, удалять их, перемещать и т.п.. Прежде чем манипулировать с блоком, его сначала надо выделить. Блок выделяется так:
|
курсор помещается в начало выделяемого участка текста, затем нажимается сочетание клавиш “Ctrl”, “K”, “B”; |
|
затем курсор помещается в конец выделяемого текста и нажимается сочетание клавиш “Ctrl”, “K”, “K”. |
Намеченный участок текста будет выделен инверсным изображением (темные буквы на светлом фоне). Чтобы отменить выделение блока, следует нажать “Ctrl”, “K”, “H”. После того, как блок выделен, с ним можно выполнять ряд операций:
1. Копирование блока
Поместить курсор туда, куда следует скопировать блок, нажать “Ctrl”, “K”, “C”;
2. Перемещение блока
Поместить курсор в то место программы, куда следует перенести блок, нажать “Ctrl”, “K”, “V”;
3. Удаление блока
Независимо от местоположения курсора, для удаления выделенного блока надо нажать “Ctrl”, “K”, “Y”;
4. Запись блока в дисковый файл
Нажимаем “Ctrl”, “K”, “W”, после этого отвечаем на появившийся запрос об имени диска, каталога и файла, куда следует записать выделенный блок;
5. Вставка в текст содержимого дискового файла
Поместить курсор в нужное место текста, нажать “Ctrl”, “K”, “R”, после чего последует запрос об имени файла; когда имя будет указано, содержимое файла поместится в то место программы, где стоял курсор.
Основные клавиши работы с Турбо-Паскалем:
F10 - начать работу с главным меню;
ESC - выйти из меню обратно в окно EDIT;
F2 - записать текст программы из окна EDIT в дисковый файл;
F3 - загрузить текст из дискового файла в окно редактора;
Ctrl/F9 (то есть одновременное нажатие клавиш “Ctrl” и “F9”) - компилировать программу в оперативной памяти, после чего запустить программу на выполнение;
Alt/X - завершить работу с Турбо-Паскалем, выйти в DOS;
Alt/F5 - переход в окно пользователя, повторное нажатие этих клавиш вернет окно EDIT.
Окно пользователя (User Screen) - окно, в котором выполняется составленная пользователем программа. По завершению программы, на экране моментально высвечивается окно EDIT, которое закрывает собой User Screen с выведенными на него результатами расчета. Чтобы иметь возможность детально ознакомиться с результатами работы программы, нажимаем Alt/F5. После этого окно EDIT с текстом программы исчезнет, его заменит изображение экрана с результатами расчета. Повторное нажатие Alt/F5 вернет на экран текст программы.
ЛЕКЦИЯ 4. ВИДЫ ПРЕДСТАВЛЕНИЯ ДАННЫХ В ТУБО-ПАСКАЛЬ
Константа — величина, не изменяющая свое значение в процессе работы программы. Классификация констант Паскаля приведена в табл. 1.1. Две нижние строки таблицы представляют собой примеры соответствующих констант. Таблица 1.1. Классификация констант Паскаля
Константы |
|||||
Целые |
Вещественные |
Символьные |
Строковые |
||
Десятичные |
Шестнадцате- ричные |
С плавающей точкой |
С порядком |
|
|
2 15 |
$0101 $FFA4 |
–0.26 .005 21. |
1.2e4 0.1E–5 |
'k' #186 ^M |
'абырвалг' 'I''m fine' |
Как видно из таблицы, десятичные целые константы представляются в естественной форме. Шестнадцатеричная константа представляет собой знак $, непосредственно за которым следуют шестнадцатеричные цифры (0, 1, 2, 3, 4, 5, 6, 7, 8, 9, A, B, C, D, E, F). В табл. 1.1 представлены в шестнадцатеричном виде числа 257 и 65 444. Вещественные константы записываются с точкой перед дробной частью. Либо целая, либо дробная часть может отсутствовать. Вещественная константа с порядком представляется в виде мантиссы и порядка. Мантисса записывается слева от знака E или e, порядок — справа от этого знака. Значение константы определяется как произведение мантиссы и возведенного в указанную в порядке степень числа 10. В табл. 1.1 представлены числа 1,2ґ104 и 0,1ґ10–5. Пробелы внутри числа не допускаются. Символьные константы служат для представления любого символа из набора, используемого в данном компьютере. Так как под каждый символ отводится 1 байт, всего используется 256 символов. Каждому символу соответствует свой код. В операционной системе MS-DOS для кодировки символов используется стандарт ASCII, являющийся международным только в первой половине кодов (от 0 до 127); вторая половина кодов (от 128 до 255) является национальной и различна для разных стран. Более того, в нашей стране есть несколько видов кодировок русских букв. Кодовая таблица MS-DOS, используемая в Паскале, приведена в приложении 5 на с. . Первые 32 символа являются управляющими: хотя многие из них имеют графическое представление, предназначены они для передачи управляющих сигналов внешним устройствам, например монитору, принтеру или модему. Символьные константы записываются в одной из трех форм, представленных в табл. 1.1. 1. Символ, заключенный в апострофы. 2. Десятичный код символа, предваряемый знаком #. Применяется для представления символов, отсутствующих на клавиатуре (в табл. 1.1 приведено представление символа є). 3. Буква, предваряемая знаком ^. Используется для представления управляющих символов. Код буквы должен быть на 64 меньше, чем код представляемого таким образом символа (в табл. 1.1 представлен символ с кодом 13, по которому при выводе выполняется переход к началу строки). Строковая константа — это последовательность любых ASCII-символов, расположенная на одной строке и заключенная в апострофы. Если требуется представить сам апостроф, он дублируется. Максимальная длина строковой константы — 126 символов.
Переменная - это область оперативной памяти, занимающая несколько ячеек и имеющая свое имя. Переменная обладает следующими свойствами:
переменная хранит не более 1 значения; |
переменная способна хранить значения только одного и того же типа; |
переменная хранит значение до тех пор, пока в нее не поместят новое значение, при этом предыдущее содержимое переменной стирается; |
значение переменной может быть вызвано для использования сколько угодно раз без изменения оригинала; |
к началу выполнения программы содержимое переменной считается неопределенным; ячейки памяти, отведенные под переменную путем ее описания, заполняются значениями в ходе выполнения программы с помощью оператора присваивания; этим переменная отличается от константы, которой значение присваивается до выполнения основной программы, в разделе определения констант. |
Идентификатор - это имя объекта программы. Объектами являются сама программа, модули, процедуры, функции, типы данных, метки, константы, переменные. К идентификаторам (именам) всех перечисленных объектов предъявляются те же требования, что и к имени переменной. Нельзя использовать один и тот же идентификатор для разных объектов. Например, нельзя использовать в программе переменную с именем, которое уже присвоено ранее какой-нибудь константе, процедуре, либо другой переменной. Не допускается использовать в качестве идентификаторов служебные слова, зарезервированные в языке Паскаль для других целей, например названия стандартных функций и процедур Паскаля.
· Данные, с которыми работает программа, хранятся в оперативной памяти. Есте-ственно, что компилятору необходимо точно знать, сколько места они занимают, как именно закодированы и какие действия с ними можно выполнять. Все это задается при описании данных с помощью типа. Тип данных однозначно определяет:
· внутреннее представление данных, а следовательно, и диапазон их возможных значений;
· допустимые действия над данными (операции и функции). Например, целые и вещественные числа, даже если они занимают одинаковый объем памяти, имеют совершенно разные диапазоны возможных значений; целые числа можно умножать друг на друга, а, например, символы — нельзя. Каждое выражение в программе имеет определенный тип. Компилятор использует информацию о типе при проверке допустимости описанных в программе действий.
Классификация типов
Любая информация легче усваивается, если она “разложена по полочкам”. Поэтому, прежде чем перейти к изучению конкретных типов языка Паскаль, давайте рассмотрим их классификацию в табл. 1.2. Таблица 1.2. Типы данных Паскаля
Стандартные |
Определяемые программистом |
||
Логические |
Простые |
Составные |
|
Целые Вещественные Символьный Строковый Адресный Файловые |
Перечисляемый Интервальный Адресные |
Массивы Строки Записи Множества |
Файлы Процедурные типы Объекты |
Стандартные типы не требуют предварительного определения. Для каждого типа существует ключевое слово, которое используется при описании переменных, констант и т. д. Если же программист определяет собственный тип данных, он описывает его характеристики и сам дает ему имя, которое затем применяется точно так же, как имена стандартных типов. Описание собственного типа данных должно задавать всю информацию, необходимую для его использования: внутреннее представление и допустимые действия. Сначала мы рассмотрим стандартные типы, используемые в простейших программах. Рассмотрение каждого типа будем вести в соответствии с определением типа. ПРИМЕЧАНИЕ Типы, выделенные в табл. 1.2 подчеркиванием, объединяются термином “порядковые”. Этот термин рассмотрен на с. .
Стандартные типы данных
В этом разделе рассмотрены логические, целые, вещественные и символьный типы. Стандартные строки описаны вместе со строками, определяемыми программистом, на с. , адресный тип — в разделе “Указатели” на с. , а файловые — на с. .
Логические типы
Внутреннее представление Основной логический тип данных Паскаля называется boolean. Величины этого типа занимают в памяти 1 байт и могут принимать всего два значения: true (истина) или false (ложь). Внутреннее представление значения false — 0 (нуль), значения true — 1. Для совместимости с другими языками в Паскале определены и другие логические типы данных: ByteBool, WordBool и LongBool длиной 1, 2 и 4 байта соответственно. Истинным в них считается любое отличное от нуля значение. Операции К величинам логического типа применяются логические операции and, or, xor и not (табл. 1.3). Для наглядности вместо значения false используется 0, а вместо true — 1. Таблица 1.3. Логические операции
a |
b |
a and b |
a or b |
a xor b |
not a |
0 |
0 |
0 |
0 |
0 |
1 |
0 |
1 |
0 |
1 |
1 |
1 |
1 |
0 |
0 |
1 |
1 |
0 |
1 |
1 |
1 |
1 |
0 |
0 |
В табл. 1.3 приведены все возможные сочетания значений аргументов и соответствующие им значения результата. Такая таблица называется таблицей истинности. Операция and называется “логическое И”, или логическое умножение. Ее результат имеет значение true, только если оба операнда имеют значение true. Результат операции or (логическое ИЛИ, логическое сложение) имеет значение true, если хотя бы один из операндов имеет значение true. Например, false or true ® true, true or true ® true. Операция xor — так называемое исключающее ИЛИ, или операция неравнозначности. Ее результат истинный, когда значения операндов не совпадают. Логическое отрицание not является унарной операцией, то есть имеет один операнд, который и инвертирует. Например, not true даст в результате false. Кроме того, величины логического типа можно сравнивать между собой с помощью операций отношения, перечисленных в табл. 1.4. Результат этих операций имеет логический тип. Например, результат проверки false < true — значение true (истина), а проверки false = true — значение false (ложь). Таблица 1.4. Операции отношения
Операция |
Знак операции |
Больше |
> |
Больше или равно |
>= |
Меньше |
< |
|
|
Меньше или равно |
<= |
Равно |
= |
Не равно |
<> |
Целые типы
Внутреннее представление Целые числа представляются в компьютере в двоичной системе счисления (отрицательные числа — в дополнительном коде, но для нас это не принципиально). В Паскале определены несколько целых типов данных, отличающиеся длиной и наличием знака: старший двоичный разряд либо воспринимается как знаковый, либо является обычным разрядом числа (табл. 1.5). Внутреннее представление определяет диапазоны допустимых значений величин (от нулей во всех двоичных разрядах до единиц). Таблица 1.5. Целые типы данных
Тип |
Название |
Размер |
Знак |
Диапазон значений |
integer |
Целое |
2 байта |
Есть |
–32 768 .. 32 767 (–215 .. 215–1) |
shortint |
Короткое целое |
1 байт |
Есть |
–128 .. 127 (–27 .. 27–1) |
byte |
Байт |
1 байт |
Нет |
0 .. 255 (0 .. 28–1) |
word |
Слово |
2 байта |
Нет |
0 .. 65 535 (0 .. 216–1) |
longint |
Длинное целое |
4 байта |
Есть |
–2 147 483 648 .. 2 147 483 647 (–231 .. 231–1) |
Первоначально в Паскале был всего один целый тип — integer, остальные добавлены впоследствии для представления больших величин или для экономии памяти. Например, нет смысла отводить 4 байта под величину, про которую известно, что все ее значения находятся в диапазоне от 0 до 100. Операции С целыми величинами можно выполнять арифметические операции (табл. 1.6). Результат их выполнения всегда целый (при делении дробная часть отбрасывается). Таблица 1.6. Арифметические операции для целых величин
Операция |
Знак операции |
Сложение |
+ |
Вычитание |
– |
Умножение |
* |
Деление |
div |
Остаток от деления |
mod |
К целым величинам можно также применять операции отношения, перечисленные в разделе “Логические типы” (см. с. ). Результат этих операций имеет логический тип, например результатом сравнения 3 < 8 будет значение true. Кроме того, к целым величинам можно применять поразрядные операции and, or, xor и not. При выполнении этих операций каждая величина представляется как совокупность двоичных разрядов. Действие выполняется над каждой парой соответствующих разрядов операндов: первый разряд с первым, второй — со вторым и т. д. Таблицы истинности операций приведены в разделе “Логические типы” на с. . Например, результатом операции 3 and 2 будет 2, поскольку двоичное представление числа 3 — 11, числа 2 — 10. Для работы с целыми величинами предназначены также и операции сдвига влево shl и вправо shr. Слева от знака операции указывается, с какой величиной будет выполняться операция, а справа — на какое число двоичных разрядов требуется сдвинуть величину. Например, результатом операции 12 shr 2 будет значение 3, поскольку двоичное представление числа 12 — 1100. Выполнив операцию 12 shl 1, то есть сдвинув это число влево на 1 разряд, получим 24. Освободившиеся при сдвиге влево разряды заполняются нулями, а при сдвиге вправо — знаковым разрядом. Стандартные функции и процедуры К целым величинам можно применять стандартные функции и процедуры, перечисленные в табл. 1.7. Таблица 1.7. Стандартные функции и процедуры для целых величин
Имя |
Описание |
Результат |
Пояснения |
|
|
|
|
Функции |
|||
abs |
Модуль |
Целый |
|x| записывается abs(x) |
arctan |
Арктангенс угла |
Вещественный |
arctg x записывается arctan(x) |
cos |
Косинус угла |
Вещественный |
cos x записывается cos(x) |
exp |
Экспонента |
Вещественный |
ex записывается exp(x) |
ln |
Натуральный логарифм |
Вещественный |
logex записывается ln(x) |
odd |
Проверка на четность |
Логический |
odd(3) даст в результате true |
pred |
Предыдущее значение |
Целый |
pred(3) даст в результате 2 |
sin |
Синус угла |
Вещественный |
sin x записывается sin(x) |
sqr |
Квадрат |
Целый |
x2 записывается sqr(x) |
sqrt |
Квадратный корень |
Вещественный |
Цx записывается sqrt(x) |
succ |
Следующее значение |
Целый |
succ(3) даст в результате 4 |
Процедуры |
|||
|
|
|
|
inc |
Инкремент |
|
inc(x) — увеличить х на 1 inc(x, 3) — увеличить х на 3 |
dec |
Декремент |
|
dec(x) — уменьшить х на 1 dec(x, 3) — уменьшить х на 3 |
ПРИМЕЧАНИЕ Различие между функцией и процедурой проявляется в способе вызова. Процедура вызывается отдельным оператором, а функция — в составе выражения. На с. был приведен пример вызова процедур readln и writeln.
Вещественные типы
Внутреннее представление Вещественные типы данных хранятся в памяти компьютера иначе, чем целые. Внутреннее представление вещественного числа состоит из двух частей — мантиссы и порядка, и каждая часть имеет знак. Например, число 0,087 представляется в виде 0,87ґ10–1, и в памяти хранится мантисса 87 и порядок –1 (для наглядности мы пренебрегли тем, что данные на самом деле представляются в двоичной системе счисления и несколько сложнее). Существует несколько вещественных типов, различающихся точностью и диапазоном представления данных (табл. 1.8). Точность числа определяется длиной мантиссы, а диапазон — длиной порядка. Таблица 1.8. Вещественные типы данных
Тип |
Название |
Размер, байт |
Значащих цифр |
Диапазон значений |
real |
Вещественный |
6 |
11–12 |
2.9e–39 .. 1.7e+38 |
single |
Одинарной точности |
4 |
7–8 |
1.5e–45 .. 3.4e+38 |
double |
Двойной точности |
8 |
15–16 |
5.0e–324 .. 1.7e+308 |
extended |
Расширенный |
10 |
19–20 |
3.4e–4932 .. 1.1e+4923 |
comp |
Большое целое |
8 |
19–20 |
–9.22e18 .. 9.22e18 (–263 .. 263–1) |
ПРИМЕЧАНИЕ Для первых четырех типов в табл. 1.8 приведены абсолютные величины минимальных и максимальных значений. Автор языка Никлаус Вирт определил всего один вещественный тип — real и отвел под него разумное количество памяти. Однако аппаратно этот тип в компьютерах семейства IBM PC не поддерживается, поэтому впоследствии в язык были введены типы single и double, а также тип extended для работы с большими числами и с высокой точностью. Тип comp на самом деле представляет собой длинные целые числа. Величины этого типа хранятся таким же образом, как целые, но отнести его к целым мешает то, что по области применимости он несколько отличается от остальных. Это объясняется тем, что тип comp не относится к порядковым типам (они рассматриваются далее на с. ). Рассмотрим теперь, что же можно делать с величинами вещественных типов, то есть какие к ним применяются операции и функции. Операции С вещественными величинами можно выполнять арифметические операции, перечисленные в табл. 1.9. Результат их выполнения — вещественный. Таблица 1.9. Арифметические операции для вещественных величин
Операция |
Знак операции |
Сложение |
+ |
Вычитание |
– |
Умножение |
* |
Деление |
/ |
В общем случае при выполнении любой операции операнды должны быть одного и того же типа, но целые и вещественные величины смешивать разрешается. Иными словами, один из операндов может быть целого типа. ПРИМЕЧАНИЕ Обратите внимание на то, что целочисленное и вещественное деление записываются с помощью разных операций. Если требуется получить вещественный результат деления двух целых величин, нужно использовать операцию /, если целый — операцию div. К вещественным величинам можно также применять операции отношения, перечисленные в разделе “Логические типы” (см. с. ). Результат этих операций имеет логический тип. Стандартные функции К вещественным величинам можно применять стандартные функции (табл. 1.10). Таблица 1.10. Стандартные функции и процедуры для вещественных величин
Имя |
Описание |
Результат |
Пояснения |
|
|
abs |
Модуль |
Вещественный |
|x| записывается abs(x) |
|
|
arctan |
Арктангенс угла |
Вещественный |
arctg x записывается arctan(x) |
|
|
cos |
Косинус угла |
Вещественный |
cos x записывается cos(x) |
|
|
exp |
Экспонента |
Вещественный |
ex записывается exp(x) |
|
|
frac |
Дробная часть аргумента |
Вещественный |
frac(3.1) даст в результате 0,1 |
|
|
int |
Целая часть аргумента |
Вещественный |
int(3.1) даст в результате 3,0 |
|
|
ln |
Натуральный логарифм |
Вещественный |
logex записывается ln(x) |
|
|
pi |
Значение числа p |
Вещественный |
3,1415926536 |
|
|
round |
Округление до целого |
Целый |
round(3.1) даст в результате 3 round(3.8) даст в результате 4 |
|
|
sin |
Синус угла |
Вещественный |
sin x записывается sin(x) |
|
|
sqr |
Квадрат |
Вещественный |
x2 записывается sqr(x) |
|
|
sqrt |
Квадратный корень |
Вещественный |
Цx записывается sqrt(x) |
|
|
trunc |
Целая часть аргумента |
Целый |
trunc(3.1) даст в результате 3 |
|
Символьный тип
Этот тип данных, обозначаемый ключевым словом char, служит для представления любого символа из набора допустимых символов. Под каждый символ отводится 1 байт. К символам можно применять операции отношения (<, <=, >, >=, =, <>), при этом сравниваются коды символов. Меньшим окажется символ, код которого меньше. Других операций с символами нет, да они и не имеют смысла. Стандартных подпрограмм для работы с символами тоже немного (табл. 1.11). Таблица 1.11. Стандартные функции для символьных величин
Имя |
Описание |
Результат |
Пояснения |
ord |
Порядковый номер символа |
Целый |
ord('b') даст в результате 98 ord('ю') даст в результате 238 |
chr |
Преобразование в символ |
Символьный |
chr(98) даст в результате 'b' chr(238) даст в результате 'ю' |
pred |
Предыдущий символ |
Символьный |
pred('b') даст в результате 'a' |
succ |
Последующий символ |
Символьный |
succ('b') даст в результате 'c' |
upcase |
Перевод в верхний регистр |
Символьный |
upcase('b') даст в результате 'B' |
Порядковые типы
В группу порядковых объединены целые, символьный, логический, перечисляемый и интервальный типы. Сделано это потому, что они обладают следующими общими чертами:
· все возможные значения порядкового типа представляют собой ограниченное упорядоченное множество;
· к любому порядковому типу может быть применена стандартная функция Ord, которая в качестве результата возвращает порядковый номер конкретного значения в данном типе;
· к любому порядковому типу могут быть применены стандартные функции Pred и Succ, которые возвращают предыдущее и последующее значения соответственно;
· к любому порядковому типу могут быть применены стандартные функции Low и High, которые возвращают наименьшее и наибольшее значения величин данного типа. При изучении операторов Паскаля мы увидим, что в некоторых из них допускается использовать только величины порядковых типов.
ЛЕКЦИЯ 4. ВИДЫ ПРЕДСТАВЛЕНИЯ ДАННЫХ В ТУБО-ПАСКАЛЬ
Константа — величина, не изменяющая свое значение в процессе работы программы. Классификация констант Паскаля приведена в табл. 1.1. Две нижние строки таблицы представляют собой примеры соответствующих констант. Таблица 1.1. Классификация констант Паскаля
Константы |
|||||
Целые |
Вещественные |
Символьные |
Строковые |
||
Десятичные |
Шестнадцате- ричные |
С плавающей точкой |
С порядком |
|
|
2 15 |
$0101 $FFA4 |
–0.26 .005 21. |
1.2e4 0.1E–5 |
'k' #186 ^M |
'абырвалг' 'I''m fine' |
Как видно из таблицы, десятичные целые константы представляются в естественной форме. Шестнадцатеричная константа представляет собой знак $, непосредственно за которым следуют шестнадцатеричные цифры (0, 1, 2, 3, 4, 5, 6, 7, 8, 9, A, B, C, D, E, F). В табл. 1.1 представлены в шестнадцатеричном виде числа 257 и 65 444. Вещественные константы записываются с точкой перед дробной частью. Либо целая, либо дробная часть может отсутствовать. Вещественная константа с порядком представляется в виде мантиссы и порядка. Мантисса записывается слева от знака E или e, порядок — справа от этого знака. Значение константы определяется как произведение мантиссы и возведенного в указанную в порядке степень числа 10. В табл. 1.1 представлены числа 1,2ґ104 и 0,1ґ10–5. Пробелы внутри числа не допускаются. Символьные константы служат для представления любого символа из набора, используемого в данном компьютере. Так как под каждый символ отводится 1 байт, всего используется 256 символов. Каждому символу соответствует свой код. В операционной системе MS-DOS для кодировки символов используется стандарт ASCII, являющийся международным только в первой половине кодов (от 0 до 127); вторая половина кодов (от 128 до 255) является национальной и различна для разных стран. Более того, в нашей стране есть несколько видов кодировок русских букв. Кодовая таблица MS-DOS, используемая в Паскале, приведена в приложении 5 на с. . Первые 32 символа являются управляющими: хотя многие из них имеют графическое представление, предназначены они для передачи управляющих сигналов внешним устройствам, например монитору, принтеру или модему. Символьные константы записываются в одной из трех форм, представленных в табл. 1.1.
1. Символ, заключенный в апострофы. 2. Десятичный код символа, предваряемый знаком #. Применяется для представления символов, отсутствующих на клавиатуре (в табл. 1.1 приведено представление символа є). 3. Буква, предваряемая знаком ^. Используется для представления управляющих символов. Код буквы должен быть на 64 меньше, чем код представляемого таким образом символа (в табл. 1.1 представлен символ с кодом 13, по которому при выводе выполняется переход к началу строки). Строковая константа — это последовательность любых ASCII-символов, расположенная на одной строке и заключенная в апострофы. Если требуется представить сам апостроф, он дублируется. Максимальная длина строковой константы — 126 символов.
Переменная - это область оперативной памяти, занимающая несколько ячеек и имеющая свое имя. Переменная обладает следующими свойствами:
переменная хранит не более 1 значения; |
переменная способна хранить значения только одного и того же типа; |
переменная хранит значение до тех пор, пока в нее не поместят новое значение, при этом предыдущее содержимое переменной стирается; |
значение переменной может быть вызвано для использования сколько угодно раз без изменения оригинала; |
к началу выполнения программы содержимое переменной считается неопределенным; ячейки памяти, отведенные под переменную путем ее описания, заполняются значениями в ходе выполнения программы с помощью оператора присваивания; этим переменная отличается от константы, которой значение присваивается до выполнения основной программы, в разделе определения констант. |
Идентификатор - это имя объекта программы. Объектами являются сама программа, модули, процедуры, функции, типы данных, метки, константы, переменные. К идентификаторам (именам) всех перечисленных объектов предъявляются те же требования, что и к имени переменной. Нельзя использовать один и тот же идентификатор для разных объектов. Например, нельзя использовать в программе переменную с именем, которое уже присвоено ранее какой-нибудь константе, процедуре, либо другой переменной. Не допускается использовать в качестве идентификаторов служебные слова, зарезервированные в языке Паскаль для других целей, например названия стандартных функций и процедур Паскаля.
Данные, с которыми работает программа, хранятся в оперативной памяти. Есте-ственно, что компилятору необходимо точно знать, сколько места они занимают, как именно закодированы и какие действия с ними можно выполнять. Все это задается при описании данных с помощью типа. Тип данных однозначно определяет:
внутреннее представление данных, а следовательно, и диапазон их возможных значений;
допустимые действия над данными (операции и функции). Например, целые и вещественные числа, даже если они занимают одинаковый объем памяти, имеют совершенно разные диапазоны возможных значений; целые числа можно умножать друг на друга, а, например, символы — нельзя. Каждое выражение в программе имеет определенный тип. Компилятор использует информацию о типе при проверке допустимости описанных в программе действий.
Классификация типов
Любая информация легче усваивается, если она “разложена по полочкам”. Поэтому, прежде чем перейти к изучению конкретных типов языка Паскаль, давайте рассмотрим их классификацию в табл. 1.2.
Таблица 1.2. Типы данных Паскаля
Стандартные |
Определяемые программистом |
||
Логические |
Простые |
Составные |
|
Целые Вещественные Символьный Строковый Адресный Файловые |
Перечисляемый Интервальный Адресные |
Массивы Строки Записи Множества |
Файлы Процедурные типы Объекты |
Стандартные типы не требуют предварительного определения. Для каждого типа существует ключевое слово, которое используется при описании переменных, констант и т. д. Если же программист определяет собственный тип данных, он описывает его характеристики и сам дает ему имя, которое затем применяется точно так же, как имена стандартных типов. Описание собственного типа данных должно задавать всю информацию, необходимую для его использования: внутреннее представление и допустимые действия. Сначала мы рассмотрим стандартные типы, используемые в простейших программах. Рассмотрение каждого типа будем вести в соответствии с определением типа.
Стандартные типы данных
В этом разделе рассмотрены логические, целые, вещественные и символьный типы. Стандартные строки описаны вместе со строками, определяемыми программистом, на с. , адресный тип — в разделе “Указатели” на с. , а файловые — на с. .
Логические типы
Внутреннее представление Основной логический тип данных Паскаля называется boolean. Величины этого типа занимают в памяти 1 байт и могут принимать всего два значения: true (истина) или false (ложь). Внутреннее представление значения false — 0 (нуль), значения true — 1. Для совместимости с другими языками в Паскале определены и другие логические типы данных: ByteBool, WordBool и LongBool длиной 1, 2 и 4 байта соответственно. Истинным в них считается любое отличное от нуля значение. Операции К величинам логического типа применяются логические операции and, or, xor и not (табл. 1.3). Для наглядности вместо значения false используется 0, а вместо true — 1.
Таблица 1.3. Логические операции
a |
b |
a and b |
a or b |
a xor b |
not a |
0 |
0 |
0 |
0 |
0 |
1 |
0 |
1 |
0 |
1 |
1 |
1 |
1 |
0 |
0 |
1 |
1 |
0 |
1 |
1 |
1 |
1 |
0 |
0 |
В табл. 1.3 приведены все возможные сочетания значений аргументов и соответствующие им значения результата. Такая таблица называется таблицей истинности. Операция and называется “логическое И”, или логическое умножение. Ее результат имеет значение true, только если оба операнда имеют значение true. Результат операции or (логическое ИЛИ, логическое сложение) имеет значение true, если хотя бы один из операндов имеет значение true. Например, false or true ® true, true or true ® true. Операция xor — так называемое исключающее ИЛИ, или операция неравнозначности. Ее результат истинный, когда значения операндов не совпадают. Логическое отрицание not является унарной операцией, то есть имеет один операнд, который и инвертирует. Например, not true даст в результате false. Кроме того, величины логического типа можно сравнивать между собой с помощью операций отношения, перечисленных в табл. 1.4. Результат этих операций имеет логический тип. Например, результат проверки false < true — значение true (истина), а проверки false = true — значение false (ложь). Таблица 1.4. Операции отношения
Операция |
Знак операции |
Больше |
> |
Больше или равно |
>= |
Меньше |
< |
|
|
Меньше или равно |
<= |
Равно |
= |
Не равно |
<> |
Целые типы
Внутреннее представление Целые числа представляются в компьютере в двоичной системе счисления (отрицательные числа — в дополнительном коде, но для нас это не принципиально). В Паскале определены несколько целых типов данных, отличающиеся длиной и наличием знака: старший двоичный разряд либо воспринимается как знаковый, либо является обычным разрядом числа (табл. 1.5). Внутреннее представление определяет диапазоны допустимых значений величин (от нулей во всех двоичных разрядах до единиц). Таблица 1.5. Целые типы данных
Тип |
Название |
Размер |
Знак |
Диапазон значений |
integer |
Целое |
2 байта |
Есть |
–32 768 .. 32 767 (–215 .. 215–1) |
shortint |
Короткое целое |
1 байт |
Есть |
–128 .. 127 (–27 .. 27–1) |
byte |
Байт |
1 байт |
Нет |
0 .. 255 (0 .. 28–1) |
word |
Слово |
2 байта |
Нет |
0 .. 65 535 (0 .. 216–1) |
longint |
Длинное целое |
4 байта |
Есть |
–2 147 483 648 .. 2 147 483 647 (–231 .. 231–1) |
Первоначально в Паскале был всего один целый тип — integer, остальные добавлены впоследствии для представления больших величин или для экономии памяти. Например, нет смысла отводить 4 байта под величину, про которую известно, что все ее значения находятся в диапазоне от 0 до 100. Операции С целыми величинами можно выполнять арифметические операции (табл. 1.6). Результат их выполнения всегда целый (при делении дробная часть отбрасывается). Таблица 1.6. Арифметические операции для целых величин
Операция |
Знак операции |
Сложение |
+ |
Вычитание |
– |
Умножение |
* |
Деление |
div |
Остаток от деления |
mod |
К целым величинам можно также применять операции отношения, перечисленные в разделе “Логические типы” (см. с. ). Результат этих операций имеет логический тип, например результатом сравнения 3 < 8 будет значение true. Кроме того, к целым величинам можно применять поразрядные операции and, or, xor и not. При выполнении этих операций каждая величина представляется как совокупность двоичных разрядов. Действие выполняется над каждой парой соответствующих разрядов операндов: первый разряд с первым, второй — со вторым и т. д. Таблицы истинности операций приведены в разделе “Логические типы” на с. . Например, результатом операции 3 and 2 будет 2, поскольку двоичное представление числа 3 — 11, числа 2 — 10. Для работы с целыми величинами предназначены также и операции сдвига влево shl и вправо shr. Слева от знака операции указывается, с какой величиной будет выполняться операция, а справа — на какое число двоичных разрядов требуется сдвинуть величину. Например, результатом операции 12 shr 2 будет значение 3, поскольку двоичное представление числа 12 — 1100. Выполнив операцию 12 shl 1, то есть сдвинув это число влево на 1 разряд, получим 24. Освободившиеся при сдвиге влево разряды заполняются нулями, а при сдвиге вправо — знаковым разрядом. Стандартные функции и процедуры К целым величинам можно применять стандартные функции и процедуры, перечисленные в табл. 1.7. Таблица 1.7. Стандартные функции и процедуры для целых величин
Имя |
Описание |
Результат |
Пояснения |
|
|
|
|
Функции |
|||
abs |
Модуль |
Целый |
|x| записывается abs(x) |
arctan |
Арктангенс угла |
Вещественный |
arctg x записывается arctan(x) |
cos |
Косинус угла |
Вещественный |
cos x записывается cos(x) |
exp |
Экспонента |
Вещественный |
ex записывается exp(x) |
ln |
Натуральный логарифм |
Вещественный |
logex записывается ln(x) |
odd |
Проверка на четность |
Логический |
odd(3) даст в результате true |
pred |
Предыдущее значение |
Целый |
pred(3) даст в результате 2 |
sin |
Синус угла |
Вещественный |
sin x записывается sin(x) |
sqr |
Квадрат |
Целый |
x2 записывается sqr(x) |
sqrt |
Квадратный корень |
Вещественный |
Цx записывается sqrt(x) |
succ |
Следующее значение |
Целый |
succ(3) даст в результате 4 |
Процедуры |
|||
|
|
|
|
inc |
Инкремент |
|
inc(x) — увеличить х на 1 inc(x, 3) — увеличить х на 3 |
dec |
Декремент |
|
dec(x) — уменьшить х на 1 dec(x, 3) — уменьшить х на 3 |
ПРИМЕЧАНИЕ Различие между функцией и процедурой проявляется в способе вызова. Процедура вызывается отдельным оператором, а функция — в составе выражения. На с. был приведен пример вызова процедур readln и writeln.
Вещественные типы
Внутреннее представление Вещественные типы данных хранятся в памяти компьютера иначе, чем целые. Внутреннее представление вещественного числа состоит из двух частей — мантиссы и порядка, и каждая часть имеет знак. Например, число 0,087 представляется в виде 0,87e10–1, и в памяти хранится мантисса 87 и порядок –1 (для наглядности мы пренебрегли тем, что данные на самом деле представляются в двоичной системе счисления и несколько сложнее). Существует несколько вещественных типов, различающихся точностью и диапазоном представления данных (табл. 1.8). Точность числа определяется длиной мантиссы, а диапазон — длиной порядка.
Таблица 1.8. Вещественные типы данных
Тип |
Название |
Размер, байт |
Значащих цифр |
Диапазон значений |
real |
Вещественный |
6 |
11–12 |
2.9e–39 .. 1.7e+38 |
single |
Одинарной точности |
4 |
7–8 |
1.5e–45 .. 3.4e+38 |
double |
Двойной точности |
8 |
15–16 |
5.0e–324 .. 1.7e+308 |
extended |
Расширенный |
10 |
19–20 |
3.4e–4932 .. 1.1e+4923 |
comp |
Большое целое |
8 |
19–20 |
–9.22e18 .. 9.22e18 (–263 .. 263–1) |
ПРИМЕЧАНИЕ Для первых четырех типов в табл. 1.8 приведены абсолютные величины минимальных и максимальных значений. Автор языка Никлаус Вирт определил всего один вещественный тип — real и отвел под него разумное количество памяти. Однако аппаратно этот тип в компьютерах семейства IBM PC не поддерживается, поэтому впоследствии в язык были введены типы single и double, а также тип extended для работы с большими числами и с высокой точностью. Тип comp на самом деле представляет собой длинные целые числа. Величины этого типа хранятся таким же образом, как целые, но отнести его к целым мешает то, что по области применимости он несколько отличается от остальных. Это объясняется тем, что тип comp не относится к порядковым типам (они рассматриваются далее на с. ). Рассмотрим теперь, что же можно делать с величинами вещественных типов, то есть какие к ним применяются операции и функции. Операции С вещественными величинами можно выполнять арифметические операции, перечисленные в табл. 1.9. Результат их выполнения — вещественный. Таблица 1.9. Арифметические операции для вещественных величин
Операция |
Знак операции |
Сложение |
+ |
Вычитание |
– |
Умножение |
* |
Деление |
/ |
В общем случае при выполнении любой операции операнды должны быть одного и того же типа, но целые и вещественные величины смешивать разрешается. Иными словами, один из операндов может быть целого типа. ПРИМЕЧАНИЕ Обратите внимание на то, что целочисленное и вещественное деление записываются с помощью разных операций. Если требуется получить вещественный результат деления двух целых величин, нужно использовать операцию /, если целый — операцию div. К вещественным величинам можно также применять операции отношения, перечисленные в разделе “Логические типы” (см. с. ). Результат этих операций имеет логический тип. Стандартные функции К вещественным величинам можно применять стандартные функции (табл. 1.10). Таблица 1.10. Стандартные функции и процедуры для вещественных величин
Имя |
Описание |
Результат |
Пояснения |
|
|
abs |
Модуль |
Вещественный |
|x| записывается abs(x) |
|
|
arctan |
Арктангенс угла |
Вещественный |
arctg x записывается arctan(x) |
|
|
cos |
Косинус угла |
Вещественный |
cos x записывается cos(x) |
|
|
exp |
Экспонента |
Вещественный |
ex записывается exp(x) |
|
|
frac |
Дробная часть аргумента |
Вещественный |
frac(3.1) даст в результате 0,1 |
|
|
int |
Целая часть аргумента |
Вещественный |
int(3.1) даст в результате 3,0 |
|
|
ln |
Натуральный логарифм |
Вещественный |
logex записывается ln(x) |
|
|
pi |
Значение числа p |
Вещественный |
3,1415926536 |
|
|
round |
Округление до целого |
Целый |
round(3.1) даст в результате 3 round(3.8) даст в результате 4 |
|
|
sin |
Синус угла |
Вещественный |
sin x записывается sin(x) |
|
|
sqr |
Квадрат |
Вещественный |
x2 записывается sqr(x) |
|
|
sqrt |
Квадратный корень |
Вещественный |
Цx записывается sqrt(x) |
|
|
trunc |
Целая часть аргумента |
Целый |
trunc(3.1) даст в результате 3 |
|
Символьный тип
Этот тип данных, обозначаемый ключевым словом char, служит для представления любого символа из набора допустимых символов. Под каждый символ отводится 1 байт. К символам можно применять операции отношения (<, <=, >, >=, =, <>), при этом сравниваются коды символов. Меньшим окажется символ, код которого меньше. Других операций с символами нет, да они и не имеют смысла. Стандартных подпрограмм для работы с символами тоже немного (табл. 1.11).
Таблица 1.11. Стандартные функции для символьных величин
Имя |
Описание |
Результат |
Пояснения |
ord |
Порядковый номер символа |
Целый |
ord('b') даст в результате 98 ord('ю') даст в результате 238 |
chr |
Преобразование в символ |
Символьный |
chr(98) даст в результате 'b' chr(238) даст в результате 'ю' |
pred |
Предыдущий символ |
Символьный |
pred('b') даст в результате 'a' |
succ |
Последующий символ |
Символьный |
succ('b') даст в результате 'c' |
upcase |
Перевод в верхний регистр |
Символьный |
upcase('b') даст в результате 'B' |
Порядковые типы
В группу порядковых объединены целые, символьный, логический, перечисляемый и интервальный типы. Сделано это потому, что они обладают следующими общими чертами:
все возможные значения порядкового типа представляют собой ограниченное упорядоченное множество;
к любому порядковому типу может быть применена стандартная функция Ord, которая в качестве результата возвращает порядковый номер конкретного значения в данном типе;
к любому порядковому типу могут быть применены стандартные функции Pred и Succ, которые возвращают предыдущее и последующее значения соответственно;
к любому порядковому типу могут быть применены стандартные функции Low и High, которые возвращают наименьшее и наибольшее значения величин данного типа. При изучении операторов Паскаля мы увидим, что в некоторых из них допускается использовать только величины порядковых типов.
Перечисляемые:
type Nedel = ( poned, vtor, sreda, chetv, ptn, sub, voskr);
Интервальный тип является подмножеством своего базового типа и определяется заданием минимального и максимального значений диапазона, например:
type Days = 1 .. 31; Alphabet = 'A' .. 'Z'; |