- •1. Двоичная система счисления.
- •2. Восьмеричная система счисления.
- •3. Шестнадцатеричная система счисления.
- •4. Сложение и вычитание в 2, 8 и 16 c/c.
- •2. Вещественные числа (числа с плавающей запятой).
- •3. Логические данные.
- •2. Зарезервированные слова.
- •X a8 alpha Massiv z52d9 eps Res_52_a ___75
- •6. Метка.
- •2. Целые типы данных.
- •4. Вещественные типы.
- •1. Раздел описания меток.
- •2. Раздел описания констант.
- •3. Раздел описания типов.
- •4. Раздел описания переменных.
- •6. Раздел операторов.
- •7. Последовательность разделов.
- •1. Формульно-словесный способ.
- •2. Блок-схемный способ.
- •Ввод - вывод одномерного массива
- •2. Ввод массива из текстового файла.
- •3. Вывод одномерного массива на экран.
- •Примеры обработки одномерных массивов
- •1. Параметр цикла должен быть ординального типа.
- •2. Параметр должен быть описан в том же блоке, где находится сам оператор цикла.
- •5. В теле цикла параметр не должен изменяться.
- •6. Начальное и конечное значения параметра цикла вычисляются только один раз, до начала цикла.
- •7. При нормальном завершении цикла значение его параметра считается неопределенным.
- •Контроль ординальных переменных
- •Вставка элемента в упорядоченный массив
- •Удаление элементов из массива
- •«Школьный» алгоритм сортировки
- •Группировка массива методом прямой выборки
- •Группировка массива методом прямого обмена
- •Var c : array[1..10,1..15,1..8] of real.
- •1. Ввод элементов матрицы с клавиатуры.
- •2. Ввод матрицы из текстового файла.
- •3. Вывод матрицы на экран.
- •Тождественные и совместимые типы
- •Обработка в процедуре одномерных массивов с различными именами типов
- •Обработка в процедуре матриц с различными именами типов
- •Var s : string[V],
- •Процедуры и функции для обработки строк
- •Определение битовой структуры поля памяти
- •Процедуры и функции для файлов любого типа
- •Var p : pointer;
- •1. Формирование стека из текстового файла.
- •7. Определение значения и местоположения максимального элемента в стеке.
- •8. Удаление из стека максимального элемента.
- •9. Добавление элемента в упорядоченный стек.
- •2. Добавление нового элемента в очередь.
- •3. Удаление элемента из очереди.
- •6. Удаление произвольного элемента из очереди.
- •7. Добавление нового элемента в произвольное место очереди.
- •1. Формирование дека.
- •Var sin : integer;
- •Процедура заполнения FillChar
- •Процедура перемещения данных move
- •Управление экраном в текстовом режиме
- •Сохранение и восстановление экрана
- •Interface
- •Implementation
- •Процедуры управления текстовым режимом экрана
- •Intr(n:byte; Var Reg:Registers),
- •If KeyPressed then
- •Автоматическая оптимизация программ
- •1. Свертывание констант.
- •2. Слияние констант.
- •3. Вычисление по короткой схеме.
- •4. Удаление неиспользуемого кода.
- •If false then
- •5. Эффективная компоновка.
- •Оверлейная структура программы
- •Interface
- •Implementation
- •Interface
- •Implementation
- •Использование сопроцессора
X a8 alpha Massiv z52d9 eps Res_52_a ___75
Прописные и строчные буквы в идентификаторах считаются эквивалентными. Поэтому PASCAL, Pascal, pascal - это один и тот же идентификатор.
Длина идентификатора в Турбо Паскале не ограничивается, но значимыми считаются лишь первые 63 символа.
6. Метка.
Метка в Паскале представляет собой целое без знака и используется для маркировки операторов программы. Метка может принимать значения от 0 до 9999. В Турбо Паскале в качестве метки можно применять также идентификатор. Внешним признаком метки в программе является двоеточие, которое записывается перед маркируемым оператором.
П Р О С Т Ы Е Т И П Ы Д А Н Н Ы Х
Данные - это общее понятие для всего того, с чем оперирует ЭВМ.
В машине все данные представлены как последовательность двоичных цифр и могут иметь различный смысл в зависимости от того, как они обрабатываются.
Для примера рассмотрим в ПЭВМ два поля памяти А1 и А2 длиной 4 байта:
A1 A2
Содержимое полей A1 и A2 - это последовательность двоичных цифр 0 и 1, которая ничего не означает, если не применить к ней конкретную машинную операцию.
Четырехбайтное поле в ПЭВМ может интерпретироваться как целое число длиной 4 байта (тип longint, условно формат L), как число с плавающей запятой длиной 4 байта (тип single, условно формат S), как строка символов, как битовая последовательность и др. Если для полей A1 и A2 мы применим операцию сложения для формата L “( + ) L A1 A2” , то тогда содержимое полей A1 и A2 будет рассматриваться как целые двоичные числа типа longint.
Для операции “( + ) S A1 A2” содержимое полей A1 и A2 интерпретируется как числа с плавающей запятой типа single.
При использовании логической операции “( \/ ) A1 A2” содержимое этих же полей памяти интерпретируется как битовые последовательности длиной 32 бита.
Пусть содержимое A1 в шестнадцатеричной записи имеет вид 50 6A 37 B1. Рассмотрим его интерпретацию при обработке различными машинными операциями.
Тип longint.
5 + 0 + 6 + 10 + 3 + 7 + 11 + 1 = 1 349 088 353.
б) Тип single (в предположении, что подобно типу real первые три байта поля A1 - мантисса, а четвертый байт - характеристика вещественного числа).
= B1; = - 80 = B1 - 80 = 31 = 490,101 0000 0110 1010 0011 0111 = 0,1101 0000 0110 1010 0011 0111 =
= 0,D06A37 = D06A37 = 13 658 679 33 554 432 = 458 309 215 275 328
в) Битовая последовательность: 0101 0000 0110 1010 0011 0111 1011 0001
г) Строка символов (по таблице ASCII): 'Pj7Б' .
При программировании на Ассемблере, который фактически представляет собой условную запись машинного языка, программист может по-разному использовать одно и то же поле памяти. Эта свобода действий одновременно таит в себе опасность неверной трактовки содержимого поля памяти (например, целое число может ошибочно обрабатываться как число с плавающей запятой). Ограничение такой свободы и возложено на тип данных, основным назначением которого является контроль корректности использования переменных.
Языки высокого уровня, в том числе и Паскаль, позволяют абстрагироваться от деталей конкретного представления данных за счет введения концепции типов данных.
Тип данных определяет:
- множество значений, которые имеет право принимать переменная заданного типа;
- множество операций, которые допустимы при обработке этой переменной;
- формат внутреннего представления данных в памяти ЭВМ, в том числе объем памяти, выделяемой для размещения переменной.
С каждой переменной в программе может быть сопоставлен только один тип.
Классификация типов данных в Турбо Паскале представлена на приведенной ниже схеме.
В учебном пособии будут рассмотрены все перечисленные здесь типы данных, кроме классов, которые являются основой в объектно-ориентированном программировании.
Т
и п д
а н н ы х
Классы Процедурные
типы Строки Адресные типы Составные типы Простые типы
Классификация простых типов данных представлена на следующей схеме. Здесь термин "ординальный" означает "порядковый" (ordinal - порядковое числительное).
Простые
типы данных
Вещественные типы Ординальные типы
Диапазонные типы Предописанные ординальные типы Перечисляемые типы
Символьный тип Целые типы Логический тип
Ординальный тип описывает конечное и упорядоченное множество значений, для каждого элемента которого однозначно определяется предыдущий и следующий за ним элементы. В частности, последовательность целых чисел является ординальным типом данных. Например, для элемента 5 существует единственное следующее значение (6) и единственное предыдущее значение (4). Символы алфавита также представляют собой ординальный тип данных. Например, в латинском алфавите для символа "M" следующим является символ "N", а предыдущим - "L". В то же время вещественные числа нельзя отнести к ординальному типу. Так, для числа 15.8 существует бесконечное множество следующих и предыдущих значений (15.81, 15.801, 15.8001 и т.д.).
Каждый ординальный тип имеет минимальное и максимальное значения. Для всех значений, кроме минимального, существует предшествующее значение; для всех значений, кроме максимального, существует последующее значение.
Предописанные функции succ, pred и ord воспринимают аргументы любого из ординальных типов.
Функция succ() (succeed - следующий) дает следующее после ординальное значение; функция pred() (predecessed - предшествующий) - предшествующее значение; функция ord() дает ординальный (порядковый) номер для значения .
Значения переменных ординального типа однозначно отображаются на последовательность порядковых номеров 0, 1, 2,... Исключение сделано только для целых чисел, которые отображаются сами на себя.
Пример 1.
succ(8) = 9 ; succ('d') = 'e' ;
pred(8) = 7 ; pred('d') = 'c' ;
ord(' ') = 32; ord('Ю') = 158 ;
ord(8) = 8 ; ord(-8) = -8 .
Для всех ординальных типов существуют операции отношения "=", "<>", "<", "<=", ">", ">=". При этом предполагается, что оба операнда в операции отношения имеют одинаковый тип. Отношение определяется с помощью порядковых номеров, присущих операндам. Например, проверка истинности отношения 'A' > 'Z' заменяется проверкой отношения ord('A') > ord('Z').
Термин "предописанный" (или "предопределенный"), в отличие от термина "зарезервированный", означает, что в принципе предописанные слова можно переназначать в программе, например, использовать их как имена переменных. Однако такое переназначение делать не рекомендуется, поскольку это ухудшает понимание программы.
1. Логический тип (тип boolean).
Логическое значение - это одно из двух значений истинности, которые обозначают предописанными именами false и true (false эквивалентно значению 0, true - значению 1 в алгебре логики; использование имен false и true вызвано стремлением отличать в программе логические значения от числовых значений 0 и 1).
Логический тип определен так, что false < true, что соответствует машинному представлению логических констант false и true.
Операции отношения всегда дают логический результат. Например, отношение x+1<y при x = 0, y = 0 дает false; при x = 0, y = 10 - значение true.
Для переменных логического типа в Турбо Паскале определены четыре логические операции:
1) отрицание not;
2) логическое умножение and;
3) логическое сложение or;
4) исключающее ИЛИ (отрицание равнозначности, сложение по модулю 2) xor.
Исключающее ИЛИ определяется следующей таблицей операций:
0 0 = 0 0 1 = 1 1 0 = 1 1 1 = 0 |
Как было ранее указано в разделе «Представление информации в ПЭВМ», в алгебре логики основными операциями являются отрицание not, логическое умножение and и логическое сложение or. Все остальные операции могут быть выражены через эти базовые операции. Например, a xor b эквивалентно
(a or b) and (not a or not b).
Обозначения в символах алгебры логики:
.
Справедливо также выражение
.
Примечание.
Если переменные a, b, c имеют тип boolean, то оператор
c:=a xor b
эквивалентен оператору
c:=a<>b.
В самом деле, из таблицы операций видно, что если переменные a и b имеют одинаковые значения, то переменная с получает значение 0, в протвном случае – значение 1.
Пример логического выражения:
((x + 1 < y) and not (x > 5)) or ((y > 0) and true) .
Вычислим значение этого выражения при x = 5, y = 5 :
((6 < 1) and not (5 > 5)) or ((5 > 0) and true) ( false and not false ) or
( true and true ) ( false and true ) or ( true and true ) false or true true .
В символике алгебры логики:
.
Для переменной типа boolean отводится один байт памяти. Машинное представление значения true имеет вид 00000001, значения false - 00000000, т.е. ord(false) = 0, ord(true) =1.
Существуют несколько предописанных логических функций, т.е. функций, которые дают логический результат. В частности, при обработке целочисленных переменных применяется функция odd(x), которая дает значение true, если целое x - нечетное, и значение false, если x - четное. Другие логические функции будут рассмотрены позже.