
- •1.1. Основные этапы создания программы
- •1.2. Алгоритмы
- •2.1. Структура типов в Turbo Pascal
- •Стандартные скалярные типы. Типы целых чисел
- •2.3. Операции побитовой обработки
- •2.4. Представление вещественных чисел в эвм
- •2.5. Символьный тип
- •2.6. Булевский тип
- •2.7. Перечисленный тип
- •2.8. Интервальный тип (диапазон)
- •3.1. Структура программы на turbo pascal
- •3.2. Основные операторы языка
- •3.2.1. Простые операторы
- •3.2.2. Операторы ввода-вывода
- •3.2.3. Структурные операторы
- •3.2.4. Условные операторы
- •3.2.5. Операторы повтора (цикла)
- •4.1. Массивы
- •4.2. Строковый тип
- •4.3. Множества
- •5.1. Процедуры и функции
- •5.2. Процедуры и функции пользователя
- •5.3. Передача параметров по значению и по ссылке
- •5.4. Рекурсивные процедуры и функции
- •6.1. Структура модулей
- •6.2. Компиляция и использование модулей
- •7.1. Записи
- •7.2. Вложенные записи
- •7.3. Записи с вариантами (вариантные записи)
- •7.4. Файлы
- •7.5. Подпрограммы для работы с файлами
- •7.5.1. Процедуры
- •7.5.2. Функции
- •7.6. Примеры программ для обработки файлов
- •7.7. Текстовые файлы
- •8.1. Структура оперативной памяти для программ на Turbo Pascal
- •8.2. Динамические структуры данных
- •8.3. Основные процедуры и функции для работы с динамическими переменными
- •8.4. Динамика выделения памяти в куче
- •8.5. Линейные списки. Способы создания и обработки
- •8.6. Нелинейные списки. Способы создания и обработки
- •Библиографический список
- •Оглавление
- •394026 Воронеж, Московский просп., 14
2.1. Структура типов в Turbo Pascal
Язык Паскаль был разработан в 70-е годы 20 века швейцарским инженером Н. Виртом. Изначально язык создавался как инструмент для обучения программированию как систематической дисциплине. Однако очень скоро обнаружилась чрезвычайная эффективность языка Паскаль в самых разнообразных приложениях: от численных расчетов до разработки сложных программных систем: компиляторов, операционных систем, баз данных.
Паскаль является глубоко типизированным языком, то есть, каждая переменная характеризуется своим типом. Под типом понимается множество значений, которые может принимать переменная, а также множество операций, допустимых над переменными этого типа.
Тип каждой переменной должен быть обязательно определен в разделе описания переменных и не может быть изменен в процессе выполнения программы. Переменная может участвовать в операциях, допустимых только для ее типа. Такой подход способствует большей аккуратности и ответственности при составлении программ, позволяет автоматически проверять программы на корректность при компиляции и в конечном итоге способствует повышению надежности программ.
Дадим более подробную характеристику некоторым типам, представленным на рисунке.
14
-
Стандартные скалярные типы. Типы целых чисел
Типы целых чисел, используемые в Паскале, представлены в табл. 2.1.
15
Таблица 2.1
Тип |
Диапазон значений |
Размер памяти |
ShortInt |
-128..127 |
8 бит, со знаком |
Integer |
-32768..32767 |
16 бит, со знаком |
LongInt |
-2147483648..214748364 |
32 бита, со знаком |
Byte |
0..255 |
8 бит, без знака |
Word |
0..65535 |
16 бит, без знака |
Comp |
-2^63+1..2^63-1 |
64 бита, со знаком |
Минимальный адресуемый элемент данных состоит из восьми двоичных разрядов и называется байтом. Содержимое байта можно рассматривать как число без знака или как число со знаком. Под знак отводится самый левый двоичный разряд. Знак плюс кодируется нулем, знак минус – единицей.
Все
положительные целые числа хранятся в
прямом коде,
то есть в своем двоичном представлении
с нулем в знаковом разряде. Отрицательные
числа хранятся в дополнительном
коде,
который формируется в соответствии со
следующим алгоритмом (рассмотрим
алгоритм на примере числа
):
1.
Сначала записывается двоичное
представление абсолютного значения
числа.
.
2. Выполняется побитовая инверсия представления,
16
полученного
на предыдущем шаге. Преобразованное
число будет равно
.
3.
К младшему разряду полученного двоичного
представления добавляется единица.
Число
в дополнительном коде равно
.
Поскольку в знаковом разряде находится 1, то это означает, что число отрицательное. Для нахождения абсолютного значения числа по его представлению в дополнительном коде выполняются следующие действия:
1.
Выполняется побитовая инверсия заданного
представления:
→
.
2.
К младшему разряду полученного результата
прибавляется единица:
=
.
В
зависимости от способа представления
чисел в различных типах (знаковое или
беззнаковое) одно и тоже двоичное
представление числа в разных типах
будет соответствовать разным значениям
в десятичном представлении. Например,
двоичное представление
в типе byte
(беззнаковое представление) будет
соответствовать
,
а в типе ShortInt
(знаковое представление) -
.
При выполнении арифметических операций над целыми числами может возникнуть переполнение, то есть ситуация, когда двоичное представление числа не умещается в том количестве бит, которое отведено для переменной этого типа. Например, если выполнять операцию возведения в степень для переменной типа ShortInt, занимающей в памяти 8 бит, то результат будет таким:
-
-
17
-
Двоичное
представление правильного результата
=
будет таким:
.
Поскольку тип ShortInt
является знаковым, то появление 1 в левом
крайнем разряде означает, что число
отрицательное, а значит оно представлено
в дополнительном коде. Переход от
дополнительного кода к абсолютному
значению дает:
→
→
.
Последнее двоичное представление
соответствует
.
Для того, чтобы прервать выполнение программы при возникновении переполнения, устанавливают опции Overflow checking (Проверка переполнения) и Range checking (Проверка выхода за границы допустимого диапазона) в панели Runtime errors (Ошибки времени выполнения) пункта Compiler меню Options.
Над данными целого типа определены следующие арифметические операции:
+, -, *, / - выполняются так же, как в обычных арифметических выражениях.
Целочисленное деление (div) - в качестве результата выдает только целую часть частного, остаток отбрасывается (23 div 5 = 4).
Деление по модулю (mod) вычисляет остаток, полученный при целочисленном делении (23 mod 5 = 3).