- •СОДЕРЖАНИЕ
- •Раздел 1. ОБЩИЕ СВЕДЕНИЯ О ПРОГРАММНОМ ОБЕСПЕЧЕНИИ
- •1.1. Принцип программного управления
- •1.2. Автоматическое выполнение команд программы
- •1.3. Этапы постановки и решения задачи на компьютере
- •1.4. Назначение и классификация языков программирования
- •1.4.1. Машинно-ориентированные языки
- •1.4.2. Машинно-независимые языки
- •1.5. Структура программного обеспечения
- •1.5.1. Системы программирования
- •1.5.2. Операционные системы
- •Раздел 2. ОСНОВЫ АЛГОРИТМИЗАЦИИ
- •2.1. Алгоритм и его свойства
- •2.2. Способы описания алгоритмов
- •2.2.1. Словесное описание
- •2.2.2. Графическое описание
- •2.2.3. Запись на алгоритмическом языке
- •2.3. Разновидности структур алгоритмов
- •2.3.1. Линейный вычислительный процесс
- •2.3.2. Разветвляющийся вычислительный процесс
- •2.3.3. Циклический вычислительный процесс
- •Раздел 3. СТРУКТУРНОЕ ПРОГРАММИРОВАНИЕ
- •3.1. Теория структурного программирования
- •3.2. Реализация структурного проектирования в современных языках программирования
- •3.3. Преобразование неструктурированных программ в структурированные
- •3.3.2. Метод введения переменной состояния
- •3.3.3. Метод булевого признака
- •3.4. Способы графического представления структурированных схем алгоритмов
- •3.4.1. Метод Дамке
- •3.4.2. Схемы Насси-Шнейдермана
- •Раздел 4. АЛГОРИТМИЧЕСКИЙ ЯЗЫК ПРОГРАММИРОВАНИЯ ПАСКАЛЬ
- •4.1. Общая характеристика языка Паскаль
- •4.2. Алфавит языка Паскаль
- •4.3. Основные понятия языка
- •4.3.1. Идентификаторы
- •4.3.2. Комментарии
- •4.4. Структура простейшей программы
- •4.5. Способы описания синтаксиса
- •4.5.2. Синтаксические диаграммы
- •Раздел 5. ОСНОВНЫЕ ТИПЫ ДАННЫХ
- •5.1. Классификация данных
- •5.2. Стандартные скалярные типы данных
- •5.2.1. Целочисленные типы
- •Формат
- •5.2.2. Вещественные типы
- •Функция
- •5.2.3. Символьный тип (тип Char)
- •5.2.4. Логический тип (тип Boolean)
- •Функция
- •5.3. Выражения
- •5.4. Оператор присваивания
- •Раздел 6. СТРУКТУРА ПРОГРАММЫ
- •6.1. Программный модуль
- •6.2. Раздел меток
- •6.3. Раздел констант
- •6.4. Раздел типов
- •6.5. Раздел переменных
- •6.6. Раздел операторов
- •Раздел 7. ОПЕРАТОРЫ
- •7.1. Составной оператор
- •7.2. Программирование линейных и разветвляющихся структур алгоритмов
- •7.2.1. Оператор перехода Goto
- •7.2.2. Условный оператор If
- •7.2.3. Оператор варианта (выбора) Case
- •7.2.4. Пустой оператор
- •7.3. Программирование циклических структур алгоритмов
- •7.3.1. Оператор цикла с параметром (оператор For)
- •7.3.2. Оператор цикла с постусловием
- •7.3.3. Оператор цикла с предусловием
- •7.3.4. Операторы Continue и Leave
- •Раздел 8. СТРУКТУРИРОВАНИЕ И ОФОРМЛЕНИЕ ПРОГРАММ
- •Раздел 9. ОПИСАННЫЕ СКАЛЯРНЫЕ ТИПЫ
- •9.1. Перечислимый скалярный тип
- •9.2. Тип диапазон
- •10.1. Массивы
- •10.1.1. Задание массивов
- •10.1.2. Действия над элементами массивов
- •10.1.3. Действия над массивами
- •10.1.4. Типизованные константы типа массив
- •10.2. Строковые данные
- •10.2.1. Строковые константы
- •10.2.2. Строковые переменные
- •10.2.3. Встроенные функции, определенные над данными типа String
- •ЛИТЕРАТУРА
РАЗДЕЛ 9. ОПИСАННЫЕ СКАЛЯРНЫЕ ТИПЫ
9.1. Перечислимый скалярный тип
Перечислимый скалярный тип не является стандартным для языка Паскаль. Он должен быть описан программистом, поэтому относится к описанным скалярным типам.
Перечислимый скалярный тип определяется в программе с помощью задания типа, формат которого содержит рисунок 9.1.
<Перечислимый_тип> ::=
( |
<Идентификатор> |
) |
,
Рисунок 9.1 – Синтаксическая диаграмма задания перечислимого типа
Перечислимый тип задается указанием всех значений, которые может принимать переменная этого типа. Каждое значение является идентификатором и считается самоопределенной константой (константой определяемого типа). Константы в списке перечисления считаются перенумерованными, начиная с нуля, в порядке их перечисления: 0, 1, 2, 3…. (т.е. считаются упорядоченными так, что первое значение меньше второго, второе меньше третьего и т.д.).
Два определения перечислимых скалярных типов не должны содержать констант с одинаковыми именами в одной и той же области действия.
В памяти компьютера переменная перечислимого типа занимает один
байт.
Пример перечислимого типа – тип Ned (Неделя), рассмотренный ранее при изучении структуры раздела описания типов (см. пример 6.4 в подразд.6.4). Данный тип может быть задан, например, следующим образом:
(Pn, Vt, Sr, Ch, Pt, Sb, Vs)
166
Вспомним, что тип данных может быть задан двумя способами: явно в разделе описания типов Type или неявно в разделе описания переменных Var
(см. подразд. 6.4, 6.5).
Типы двух переменных называются идентичными, если в объявлении этих переменных используется один и тот же идентификатор типа или используются различные идентификаторы Т1 и Т2, для которых имеется объявление вида:
Type
T1 = T2;
Идентичные типы являются совместимыми, т.е. переменные идентичных типов могут участвовать в одном выражении.
Если идентичные типы не являются файловыми типами, то они совместимы по присваиванию, т.е. значение одного типа может быть присвоено переменной другого типа.
Пример 9.1.
Раздел типов (явное задание типов).
Type
Ned = (Pn, Vt, Sr, Ch, Pt, Sb, Vs);
God = (Yan, Fev, Mar, Apr, May, Iyn, Iyl, Avg, Sen, Oct, Nob, Dec); Citr = (Mandarin, Apelsin, Limon);
Fruct = Citr;
Здесь Fruct и Citr – идентичные типы.
Одно и то же имя константы не может использоваться в качестве значений в разных типах. Поэтому в примере 9.1 нельзя было бы написать:
Fruct = (Mandarin, Apelsin, Limon);
Вданном случае типы Fruct и Citr трактуются как разные типы, а в них нельзя использовать один и те же имена констант.
Впримере 9.1 нельзя объявить, например, и такой тип:
Desert = (Ananas, Vinograd, Grusa, Sliva, Apelsin);
При объявлении типа Desert используется константа Apelsin. Однако она уже применена в другом типе (Citr).
167
Напомним, что при явном задании типа в разделе Type переменные данного типа должны быть объявлены в разделе Var с помощью указания имени типа.
Пример 9.2.
Задание переменных при явном задании типов. Типы заданы в примере
9.1.
Var
Den, Den1: Ned;
Mes, Mes1: God; C1, C2: Citr; F1, F2: Fruct;
Пример 9.3.
Неявное задание типов. Данные типы в разделе Type не задаются.
Var
Den, Den1: (Pn, Vt, Sr, Ch, Pt, Sb, Vs);
Mes, Mes1: (Yan, Fev, Mar, Apr, May, Iyn, Iyl, Avg, Sen, Oct, Nob, Dec); C1, C2, F1, F2: (Mandarin, Apelsin, Limon);
При неявном задании типов нельзя задать идентичные типы, так как тип не имеет имени. Таким образом, на него уже невозможно сослаться в других местах программы. Поэтому, как уже отмечалось, предпочтение следует отдавать явному заданию типа.
Над значениями перечислимого типа определены только операции сравнения. При сравнении учитывается перенумерованность перечислимого типа.
Значения перечислимого типа могут являться операндами оператора присваивания.
Пример 9.4.
Выполнение присваивания и операций сравнения (применительно к примерам 9.1, 9.2).
Den := Sr;
Den1 := Den;
168
Den1 := Pon;
If Den > Den1
Then ...
Else ...
Над данными перечислимого типа определены следующие встроенные
функции:
Succ (x) |
– следующее за x значение; |
|
|
|||
Pred (x) |
– предыдущее перед x значение; |
|
|
|||
Ord (x) |
– |
порядковый номер x; |
|
|
|
|
Sizeof (x) |
– |
размер |
памяти, |
занимаемый |
аргументом; |
для |
|
|
перечислимого типа результат равен 1; |
|
Значения функции Pred для аргумента, первого в списке перечисления (например, Pred (Pon)), и функции Succ для аргумента, последнего в списке перечисления (например, Pred (Vos)), не определены.
Таким образом, если в операторе присваивания слева записана переменная перечислимого типа, то в качестве выражения может быть использована только константа или переменная перечислимого типа либо функция соответствующего аргумента.
Для непосредственного ввода и вывода значений перечислимых типов не могут использоваться стандартные процедуры ввода-вывода Read, Readln, Write, Writeln. Обычно для этого используется оператор варианта Case.
Пример 9.5.
Ввод и вывод значений перечислимого типа (c учетом объявлений, сделанных в примерах 9.1, 9.2).
Var
i: 1..7;
-----------------------------------
Begin Read (i);
Case i Of
1: Den:= Pn;
2: Den:= Vt;
3: Den:= Sr;
4: Den:= Ch;
5: Den:= Pt;
6: Den:= Sb;
7: Den:= Vs
169