- •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).