
- •Часть 1
- •Предмет и задачи информатики
- •История эвм
- •Состав вычислительной системы
- •Аппаратное обеспечение
- •Программное обеспечение
- •Операционная система
- •Кодирование Двоичный код
- •Кодирование чисел
- •Кодирование текстовых данных
- •Кодирование графических данных
- •Представление цвета в машинной графике
- •Кодирование звуковой информации
- •Прикладное программное обеспечение Системы обработки текстов
- •Интегрированный пакет Microsoft Office
- •Текстовый процессорWord
- •Создание в документе листа Microsoft Excel
- •О рисунках и других графических объектах
- •Закрепление областей листа
- •Скрытие и отображение столбцов и строк
- •Выделение фрагментов документа
- •Ввод данных с клавиатуры
- •Ввод текста
- •Ввод чисел
- •Ввод формул с клавиатуры
- •Установка границ ячеек
- •Работа с диаграммами
- •Работа с базами данных Основные понятия
- •Объекты базы данных
- •Запросы
- •Страницы
- •Макросы и модули
- •Безопасность баз данных
- •Технологии программирования
- •Алгоритм, программа
- •Интегрированная среда разработки приложений в Delphi
- •Стандарт и диалекты языка
- •Основы Паскаля
- •Основные понятия языка Алфавит
- •Имена и идентификаторы
- •Программные элементы
- •Описания
- •Раздел констант
- •Типизированные константы
- •Переменные
- •Функции и процедуры
- •Правила записи текста программы
- •Концепция данных
- •Основные типы данных Целые типы
- •Битовые операции
- •Вещественные типы
- •Тип дата-время
- •Символьные типы
- •Логические типы
- •Выражения
- •Оператор присваивания
- •Составной оператор
- •Раздел меток
- •Оператор перехода
- •Пустой оператор
- •Раздел типов
- •Условный оператор
- •Перечислимые типы (перечни)
- •Оператор варианта
- •Ограниченные типы
- •Операторы цикла
- •Операторы цикла с параметром
- •Оператор цикла с постусловием
- •Оператор цикла с предусловием
- •Регулярные типы (массивы)
- •Многомерные массивы
- •Комбинированные типы (записи)
- •Оператор присоединения
- •Подпрограммы
- •Подпрограммы-процедуры
- •Подпрограммы-функции
- •Формальные и фактические параметры
- •Параметры-значения
- •Параметры-переменные
- •Параметры-константы
- •ПроцедураExit
- •Процедурные типы
- •Множественные типы
- •Оглавление
- •Часть 1
Перечислимые типы (перечни)
На практике часто приходится иметь дело с разными понятиями, каждое из которых включает свое множество частных случаев. Например, «месяц года» – январь, февраль, ... декабрь; «день недели» – понедельник, ... воскресенье и т.п. При решении задач, связанных с использованием понятий подобного рода, их отдельные частные случаи можно закодировать в цифровой форме путем отображения на целые числа, например, месяцы закодировать последовательными целыми числами от 1 до 12. Однако в этом случае программа теряет наглядность.
В Паскале предусмотрены перечислимые типы значений, которые могут быть заданы программистом
<задание перечислимого типа>::=(<имя>{,<имя>})
Имена, перечисленные через запятую в круглых скобках, являются константами определяемого типа, а их набор – множеством значений этого типа. Значения перечислимого типа считаются перенумерованными, начиная с нуля, в порядке их перечисления. Для них выполнимы только операции сравнения.
Одно и то же имя не может использоваться в качестве значений в разных типах.
Пример.
typeнеделя=(пн,вт,ср,чтв,птн,сб,вс);
varday: неделя ;
Переменные перечислимого типа можно использовать, например, в качестве параметров функций succ(x), pred(x), ord(x), параметра циклаfor day :=пн to сб do Sили в условных выраженияхA>B.
Но нельзя day:=вт; write(day). Для ввода и вывода значений перечислимого типа используют оператор варианта.
Оператор варианта
Оператор варианта – это обобщение условного оператора.
<оператор варианта>::= case<селектор оператора>of
<элемент списка вар.>{;<элемент списка вар.>}
{else <оператор>}
end
<селектор оператора>::=<выражение>
<элемент списка вар.>::=<список меток вар.>:<оператор>
<список меток варианта>::=<метка варианта>{,<метка варианта>}
<метка варианта>::=<константа>
Таким образом, оператор варианта имеет следующий вид
case A of
C1: S1;
. . . . . .
Cn: Sn;
elseS;
end;
Условие ветвления Aдля оператораcaseзадается выражением порядкового типа, иcase-константыC1, …Cnдолжны иметь тот же тип, что и селектор оператора, причем ни одна из этих констант не может использоваться в качестве метки варианта более одного раза.
Здесь S1, … Sn– операторы, из которых должен выполниться только тот, у которогоcase-константа равна значению выражения A. Если средиcase-констант нет значения выражения A, выполняется оператор S, записанный послеelse. Ветвьelseможет отсутствовать. Тогда, если селектор не совпадает ни с однойcase-константой, операторcaseбудет пропущен, т.е. не выполнится ни одного оператора внутриcase.
Ограниченные типы
В Паскале особое внимание уделено вопросу повышения надежности программы, т.е. своевременному выявлению различного рода ошибок в программе. Например, Паскаль требует явного описания всех используемых в программе переменных и указания типа каждой из них, и транслятор следит за правильностью присваивания значений выражений по типу и т.п. Если у нас есть предварительная информация о диапазоне изменения переменной, то вполне естественно передать транслятору эту информацию для контроля корректности присваивания ей значений. Например, если переменная n типа integer в программе представляет текущее значение дня месяца, то 1<=n<=31.
Достижению этой цели в Паскале служат ограниченные типы (типы диапазона или интервальные). Каждый такой тип задается наложением ограничений на стандартный или заданныйбазовыйтип, который должен быть порядковым. В качестве базового можно использовать стандартные типыinteger,boolean,charи перечислимые типы. Типrealнельзя использовать в качестве базового.
Из всего множества значений базового типа берется некоторый диапазон, который и принимается в качестве допустимого множества значений вновь определяемого типа.
<задание ограниченного типа>::=<константа1>..<константа2>
Здесь <константа1>и<константа2>– константы базового типа, причем<константа1> > <константа2>.
Пример. type Месяц=1..12; РабДень=пн..птн;
Прежде должен быть введен базовый тип, если он не является стандартным, т.к. без определения базового типа невозможно сказать, сколько и какие значения входят в определяемый ограниченный тип.
Поскольку множество значений ограниченного типа принадлежит множеству значений базового типа, то к этим значениям применимы все операции и функции, которые определены над базовым типом, и значения ограниченного типа могут использоваться везде, где могут использоваться значения базового типа. Важно лишь, чтобы значения, присваиваемые переменным ограниченного типа, принадлежали соответствующему диапазону – в противном случае будет зафиксирована ошибка.
Использование ограниченных типов позволяет более наглядно формулировать алгоритм решения задачи. Программисту всегда следует стремиться зафиксировать в своей программе всю информацию, которой он располагает из рассмотрения существа решаемой задачи, в частности, относительно диапазонов изменения значений переменных.