- •Алгоритмы.
- •Условие
- •Типы данных.
- •Целые числа.
- •Вещественный тип данных.
- •Символьные и строковые типы данных.
- •Булевские данные.
- •Указатели.
- •Идентификаторы.
- •Операторы.
- •Операторы присваивания.
- •Арифметические операторы.
- •Побитовые операторы.
- •Операторы отношений.
- •Логические операторы.
- •Адресные операторы.
- •Операторы над множествами.
- •Строковые операторы.
- •Создание программ в среде turbo pascal Структура программ.
- •1: WriteLn(' I меньше 10 ');
- •Тип константы компилятор определяет по типу значения. Описание типов используется при создании типов данных, отличных от базовых.
- •Обзор управляющих структур языка pascal
- •Интегрированная среда turbo pascal Назначение и состав среды.
- •Строка статуса
- •Справочник.
- •Работа с блоками текста
- •Компиляция и выполнение
- •Выполнение по шагам и трассировка
- •Управляющие структуры языка Паскаль. Условные операторы.
- •Пустой оператор
- •Условный оператор
- •If Flag then Writeln(‘Истинно’)
- •If not Flag then Writeln(‘Ложно’)
- •Оператор выбора
- •Операторы цикла Оператор цикла с предусловием (while)
- •Оператор цикла с постусловием (repeat…until)
- •Оператор цикла с параметром (for...Do)
- •I : Integer; { описание параметров циклов}
- •Процедуры и функции.
- •Структура процедуры и функции.
- •Локальные и глобальные элементы.
- •I : Integer; {I - глобальная}
- •I : Integer; {I - локальная }
- •Параметры.
- •I : Integer; {I - локальная }
- •Var { описание переменных }
- •Var { описание внутренних переменных}
- •Структурированные типы данных языка паскаль Перечисляемый тип.
- •Структурированные типы
- •Массивы
- •If eq then Write(“Массивы одинаковы”);
- •Множества
- •Совместимость и преобразование типов.
- •Символы и строки Символы:
- •Строки.
- •Строка- это массив символов.
- •Доступ к файлам.
- •Логические устройства
- •Открытие файла
- •Процедуры и функции для работы с файлами.
- •Текстовые файлы.
- •Типизированные файлы.
- •Нетипизированные файлы.
- •Модуль graph.
- •Драйверы.
- •Координатная система.
- •Текущий указатель.
- •Фигуры и стили.
- •Окна и битовые образы.
- •Обработка ошибок.
- •Пример простой программы:
- •Справочник по модулю Graph
- •Модуль crt
- •Ввод данных с клавиатуры. Более подробно о cтандартных операторах ввода.
- •Функции crt.
- •Текстовый вывод на экран.
- •Некоторые процедуры модуля crt.
- •Программирование звукового генератора.
- •Указатели.
- •Динамические переменные.
- •Проблема ограничения памяти.
Совместимость и преобразование типов.
Как уже неоднократно отмечалось, Турбо Паскаль - это типизированный язык. Он построен на основе строгого соблюдения концепции типов, в соответствии с которой все применяемые в языке операции определены только над операндами совместимых типов. При обсуждении операций над вещественными данными мы уже затрагивали проблему совместимости вещественных и целых типов. Аналогичные проблемы возникают при операциях над строками разной длины, строками и символами и т.д. Ниже приводится более полное определение совместимости типов.
Два типа считаются совместимыми, если:
-
оба они есть один и тот же тип;
-
оба вещественные;
-
оба целые;
-
один тип есть тип-диапазон второго типа;
-
оба являются типами-диапазонами одного и того же базового типа;
-
оба являются множествами, составленными из элементов одного и того же базового типа;
-
оба являются упакованными строками (определены с предшествующим словом PACKED) одинаковой максимальной длины;
-
один тип есть тип-строка, а другой - тип-строка, упакованная строка или символ;
-
один тип есть любой указатель, а другой - нетипизированный указатель;
-
один тип есть указатель на объект, а другой - указатель на родственный ему объект;
-
оба есть процедурные типы с одинаковыми типом результата (для типа-функции), количеством параметров и типом взаимно соответствующих параметров.
Совместимость типов приобретает особое значение в операторах присваивания. Пусть Т1 - тип переменной, а Т2 - тип выражения, т.е. выполняется присваивание T1 := Т2. Это присваивание возможно в следующих случаях:
• T1 и Т2 есть один и тот же тип и этот тип не относится к файлам или массивам файлов, или записям, содержащим поля-файлы, или массивам таких записей;
• Т1 и Т2 являются совместимыми порядковыми типами и значение Т2 лежит в диапазоне возможных значений T1
• T1 и Т2 являются вещественными типами и значение Т2 лежит в диапазоне возможных значений T1;
• T1 - вещественный тип и Т2 - целый тип;
• T1 - строка и T2 - символ;
• T1 - строка и Т2 - упакованная строка;
• T1 и Т2 - совместимые упакованные строки;
• T1 и T2 - совместимые множества и все члены T2 принадлежат множеству возможных значений T1;
• T1 и Т2 - совместимые указатели;
• T1 и T2 - совместимые процедурные типы;
• T1 - объект и T2 - его потомок.
В программе данные одного типа могут преобразовываться в данные другого типа. Такое преобразование может быть явным или неявным.
При явном преобразовании типов используются вызовы специальных функций преобразования, аргументы которых принадлежат одному типу, а значение - другому. Таковыми являются уже рассмотренные функции ORD, TRUNC, ROUND, CHR.
В Турбо Паскале может использоваться и более общий механизм преобразования типов, согласно которому преобразование достигается применением идентификатора (имени) стандартного типа или типа, определенного пользователем, как идентификатора функции преобразования к выражению преобразуемого типа (так называемое автоопределенное преобразование типов). Например, допустимы следующие вызовы функций:
type
МуТуре = (а, b, с, d) ;
. . . .
... = МуТуре (2)
... = Integer ('D')
... = pointer (longint(a) + $FF)
... = Char (127 mod c)
... = Byte (k)
В Турбо Паскале определен еще один явный способ преобразования данных: в ту область памяти, которую занимает переменная некоторого типа, можно поместить значение выражения другого типа, если только длина внутреннего представления вновь размещаемого значения в точности равна длине внутреннего представления переменной. С этой целью вновь используется автоопределенная функция преобразования типов, но уже в левой части оператора присваивания:
type
byt = array [1..2] of Byte;
int = array [1..2] of Integer;
reс = record
x, у : Integer
end;
var
vbyt : byt;
vint : int;
vrec : rec;
begin
byt(vint[1])[2] := 0;
int(vrec)[1] := 256
end.
Неявное преобразование типов возможно только в двух случаях:
• в выражениях, составленных из вещественных и целочисленных переменных, последние автоматически преобразуются к вещественному типу, и все выражение в целом приобретает вещественный тип;
• одна и та же область памяти попеременно трактуется как содержащая данные то одного, то другого типа (совмещение в памяти данных разного типа).