- •Федеральное агентство по образованию
- •1. Метод проектирования программных средств
- •1.1. Техническое задание
- •1.2. Анализ задачи
- •1.3. Разработка алгоритма
- •1.4. Выбор языка программирования
- •2. Структуры алгоритмов
- •2.1. Алгоритм линейной структуры
- •2.2. Ветвления
- •2.3. Циклы
- •3. Еспд
- •3.1. Схемы алгоритмов, программ, данных и систем
- •1. Правила применения символов
- •2 Правила выполнения соединений
- •3 Специальные условные обозначения
- •3.2. Другие разделы еспд приведены в приложении №1.
- •4. Классификация языков программирования
- •Краткая история языков программирования
- •5. Работа в интегрированной среде Турбо Паскаль 7.0.
- •6. Основы Паскаля
- •6.1. Алфавит и лексемы
- •6.1.1. Имена, ключевые слова и знаки операций
- •6.1.2. Константы
- •6.1.3. Метки
- •6.1.4. Комментарии
- •6.1.5. Директивы компилятору
- •6.2. Структура программной единицы
- •6.3. Стиль записи программ на языке Паскаль
- •7. Типы данных в Паскале
- •7.1. Классификация типов данных в Турбо Паскале
- •7.2. Порядковые типы
- •7.2.1. Логический (булевский) тип
- •7.2.2. Целые типы
- •7.2.3. Перечисляемый тип
- •7.2.4. Тип – диапазон
- •7.2.5. Символьный тип
- •7.3. Вещественные типы
- •7.4. Строки
- •7.4.1. Основные понятия
- •7.4.2. Операции над строками
- •7.4.3. Процедуры и функции для работы со строками
- •8. Совместимость и преобразование типов
- •8.1. Совместимость типов
- •8.2. Преобразование (приведение) типов и значений
- •8.2.1. Явное преобразование типов и значений
- •8.2.2. Неявное преобразование типов
- •9. Выражения в языке Паскаль
- •10. Оператор присваивания
- •11. Простейший ввод-вывод на Паскале
- •11.1. Стандартные файлы Input и Output
- •11.2. Ввод с клавиатуры
- •11.3. Вывод на экран
- •12. Средства языка тр для циклов с известным числом повторений
- •12.1. Табулирование функций
- •13. Разветвляющиеся алгоритмы
- •13.1. Команда выбора case
- •13.2. Команда ветвления
- •14. Циклы с неизвестным числом повторений
- •14.1. Цикл с предусловием (While)
- •14.2. Цикл с постусловием (Repeat … until)
- •Приложение 1. «Стандарты еспд»
- •Руководство системного программиста гост 19503-79*
- •Общие положения
- •Содержание разделов
- •Руководство оператора гост 19.505 – 79* Общие положения
- •Содержание разделов
- •Описание программы гост 19.402-78
- •Программа и методика испытаний еспд. Гост 19.301-79
- •Общие положения
- •Содержание разделов
- •59 Лекции по курсу «Языки программирования» Часть I.
8. Совместимость и преобразование типов
8.1. Совместимость типов
Турбо Паскаль - это типизированный язык. Он построен на основе строгого соблюдения концепции типов, в соответствии с которой все применяемые в языке операции определены только над операндами совместимых типов.
Определение совместимости типов.
Два типа считаются совместимыми, если:
оба они есть один и тот же тип;
оба вещественные;
оба целые;
один тип есть тип-диапазон второго типа;
оба являются типами-диапазонами одного и того же базового типа;
оба являются множествами, составленными из элементов одного и того же базового типа;
оба являются упакованными строками (определены с предшествующим словом PACKED) одинаковой максимальной длины;
один тип есть тип-строка, а другой - тип-строка, упакованная строка или символ;
один тип есть любой указатель, а другой - нетипизированный указатель;
один тип есть указатель на объект, а другой - указатель на родственный ему объект;
оба есть процедурные типы с одинаковыми типом результата (для типа-функции), количеством параметров и типом взаимно соответствующих параметров.
Совместимость типов приобретает особое значение в операторах присваивания. Пусть Т1 - тип переменной, а Т2 - тип выражения, т.е. выполняется присваивание Т1 :=T2. Это присваивание возможно в следующих случаях:
T1 и Т2 есть один и тот же тип и этот тип не относится к файлам или массивам файлов, или записям, содержащим поля-файлы, или массивам таких записей;
T1 и Т2 являются совместимыми порядковыми типами и значение Т2 лежит в диапазоне возможных значений Т1;
Т1 и Т2 являются вещественными типами и значение Т2 лежит в диапазоне возможных значений Т1;
Т1 - вещественный тип и Т2 - целый тип;
T1 - строка и T2 - символ;
Т1 - строка и Т2 - упакованная строка;
T1 и Т2 - совместимые упакованные строки;
T1 и T2 - совместимые множества и все члены Т2 принадлежат множеству возможных значений Т1;
T1 и Т2 - совместимые указатели;
Т1 и Т2 - совместимые процедурные типы;
T1 - объект и Т2 - его потомок.
Строгая дисциплина типов — это несомненное преимущество языка Паскаль, поскольку несоответствие типов в определенных ситуациях может приводить к неверной работе программы, а обнаружить в программе ошибки такого рода часто очень и очень сложно. Нарушение правил совместимости типов обнаруживается обычно на стадии компиляции и сопровождается выдачей сообщения Type mismatch.
8.2. Преобразование (приведение) типов и значений
В программе данные одного типа могут преобразовываться в данные другого типа. Такое преобразование может быть явным или неявным.
8.2.1. Явное преобразование типов и значений
При явном преобразовании типов используются вызовы специальных функций преобразования, аргументы которых принадлежат одному типу, а значение -другому. Таковыми являются уже рассмотренные функции ORD, TRUNC, ROUND, CHR.
В Турбо Паскале может использоваться и более общий механизм преобразования типов, согласно которому преобразование достигается применением идентификатора (имени) стандартного типа или типа, определенного пользователем, как идентификатора функции преобразования к выражению преобразуемого типа.
Пусть, например, типы typel и type2 имеют одинаковый размер (занимают в памяти одинаковое число байтов). Допустим, что х является переменной типа typel, а у — переменной типа type2. Предположим, наконец, что х присвоено какое-то значение. Тогда приведение типа
y := type2(x)
просто интерпретирует данные, хранящиеся в х, как значение типа type2, на которое ссылаются по имени у. В частности, если N имеет тип Byte, a ch — тип Char, то допустимы следующие операторы присваивания:
Ch := Char(N);
N := Byte(Ch);
В Паскале допускается и приведение типа значений. Приведение типа значений выглядит следующим образом:
TypeID(expression),
где TypeID — идентификатор типа, а в круглых скобках стоит выражение expressi on, которое может представлять собой просто константу. Следует иметь в виду, что тип выражения и задаваемый тип должны быть перечисляемыми типами или указателями. Для перечисляемых типов результирующее значение получается путем преобразования выражения и его проверки на нахождение в допустимых границах. Преобразование может привести к усечению или увеличению размера исходного значения в том случае, если результирующий тип отличается от типа выражения. В том случае, когда значение расширяется, его знак всегда сохраняется. Приведение типа значений не должно встречаться в левой части оператора присваивания.
