- •1.Технология программирования. Основные понятия и подходы 8
- •Технология программирования. Основные понятия и подходы
- •1.1. Технология программирования и основные этапы ее развития
- •1.2. Жизненный цикл и этапы разработки программного обеспечения
- •Контрольные вопросы
- •2.Разработкаструктуры программы и модульное программирование
- •2.1. Цель модульного программирования
- •2.2. Основные характеристики программного модуля
- •2.3. Методы разработки структуры программы
- •Контрольные вопросы
- •3.Тестирование и отладка программного средСтВа
- •3.1. Принципы и виды отладки программного средства
- •3.2. Заповеди отладки программного средства
- •3.3. Автономная отладка программного средства
- •3.3. Комплексная отладка программного средства
- •Контрольные вопросы
- •4. Обеспечение качества программного средства
- •4.1. Общая характеристика процесса обеспечения качества программного средства
- •4.2. Обеспечение легкости применения программного средства
- •4.3. Обеспечение эффективности программного средства
- •4.4. Обеспечение сопровождаемости программного средства
- •Контрольные вопросы
- •5. Документирование программных средств составление программной документации
- •5.1. Виды программных документов
- •5.2. Пояснительная записка
- •5.3. Руководство пользователя
- •5.4. Руководство системного программиста
- •5.5. Основные правила оформления программной документации
- •Контрольные вопросы
- •6. Объектный подход к разработке программных средств
- •6.1. Объекты и отношения в программировании. Сущность объектного подхода к разработке программных средств
- •6.2. Особенности объектного подхода к разработке внешнего описания программного средства
- •6.3. Особенности объектного подхода на этапе конструирования программного средства
- •Контрольные вопросы
- •7. Постановка и алгоритмизация задач
- •7.1. Понятие алгоритма
- •7.2. Способы описания алгоритмов
- •Условные обозначения блоков
- •7.3. Структурные схемы алгоритмов
- •Контрольные вопросы
- •8. Основы языка
- •8.1. Алфавит языка
- •8.2. Структура программы
- •Контрольные вопросы
- •9. Типы данных
- •9.1. Целые типы
- •9.2. Вещественные типы
- •9.3. Логический тип
- •9.4. Символьный тип
- •9.5. Выражения
- •Арифметические операции
- •Операция отрицания
- •Операции конъюнкция, дизъюнкция, «исключающее» или
- •Приоритет операций
- •9.6. Константы
- •9.7. Совместимость типов данных
- •Контрольные вопросы
- •10. Линейные алгоритмы
- •10.1. Пустой и составной операторы
- •10.2. Оператор присваивания
- •10.3. Простейший ввод и вывод
- •Контрольные вопросы
- •11. Разветвляющиеся алгоритмы
- •11.1. Оператор перехода
- •11.2. Условный оператор
- •11.3. Оператор выбора
- •Контрольные вопросы
- •12. Циклические алгоритмы
- •12.1. Циклы с параметром
- •12.2. Циклы с условием
- •Контрольные вопросы
- •13. Пользовательские типы данных
- •13.1. Перечисляемый тип
- •13.2. Тип - диапазон
- •13.3. Массивы
- •13.4. Записи
- •13.5. Множества
- •Контрольные вопросы
- •14. Работа со строками
- •Контрольные вопросы
- •15. Процедуры и функции
- •15.1. Параметры-значения
- •15.2. Параметры-переменные
- •15.3. Параметры-константы
- •15.4. Открытые параметры-массивы
- •15.5. Бестиповые параметры
- •15.6. Процедурные типы
- •15.7. Рекурсия
- •Контрольные вопросы
- •16. Типизированные константы
- •Контрольные вопросы
- •17. Модули
- •Interface
- •Implementation
- •Interface
- •18.2. Поиск с барьером
- •83.3. Двоичный (бинарный) поиск
- •Контрольные вопросы
- •19. Алгоритмы сортировки
- •19.1. Сортировка выбором
- •19.2.Сортировка обменом (методом «пузырька»)
- •19.3. Сортировка включением
- •Контрольные вопросы
- •20. Файлы
- •20.1. Текстовые файлы
- •20.2. Компонентные файлы
- •20.3. Бестиповые файлы
- •20.4. Последовательный и прямой доступ
- •Контрольные вопросы
- •21.Программирование с использованием динамической памяти
- •21.1. Указатели и операции над ними
- •21.2. Процедуры и функции, работающие с указателями
- •Контрольные вопросы
- •22. Модуль crt (основные возможности)
- •Контрольные вопросы
- •22. Модуль graph (основные возможности)
- •22.1. Базовые процедуры и функции
- •22.2. Экран и окно в графическом режиме
- •22.3. Вывод точки
- •22.4. Вывод линии
- •22.5. Построение прямоугольников
- •22.6. Построение многоугольников
- •22.7. Построение дуг и окружностей
- •22.8. Работа с текстом
- •Контрольные вопросы
- •Заключение
- •Библиографический список
13. Пользовательские типы данных
В Турбо Паскале предусмотрен механизм создания новых типов, которые принято называть пользовательскими или конструируемыми. Их можно создавать на основе стандартных и ранее созданных типов. Описание новых типов происходит в разделе type. После этого можно в разделе var создавать переменные этих типов. Также, можно сразу описывать новый тип при создании переменной в разделе var. В этой главе мы рассмотрим следующие пользовательские типы:
перечисляемый тип,
тип–диапазон,
массивы,
записи.
13.1. Перечисляемый тип
Перечисляемый тип задается перечислением тех значений, которые он может получать (рис. 13.1.).
Рис. 13.1. Синтаксическая диаграмма перечисляемого типа
Каждое значение должно являться идентификатором и располагаться в круглых скобках через запятую. Количество элементов в перечислении не более 65536. Вводить и выводить переменные перечисляемого типа запрещено. Перечислимый тип является порядковым, поэтому к переменным такого типа можно применять функции ord, pred, succ. Функция ord возвращает порядковый номер значения начиная с нуля.
Пример 13.1: Объявление перечисляемых типов.
type colors = (red, green, blue);
numbers = (zero, one, two, three, four, five);
var c : colors; n : numbers;
begin
c:=red; write(ord(c)); {0}
n:=four; write(ord(n)); {4}
c:=succ(c); {c=green}
for n:=one to five do write(ord(n)); {12345}
end.
Следует отметить, что стандартные типы byte, word, char и boolean также можно считать вариантами перечислимого типа.
13.2. Тип - диапазон
Тип-диапазон также называют ограниченным или интервальным типом.
Описание интервального типа (рис. 13.2.):
Рис. 13.2. Синтаксическая диаграмма интервального типа
Он является подмножеством своего базового типа, в качестве которого может выступать любой порядковый тип кроме типа–диапазона. Тип–диапазон наследует все свойства своего базового типа. Имеются две стандартные функции, работающие с этим типом: high(x)– возвращает максимальное значение типа–диапазона, к которому принадлежит переменная x; low(x) – возвращает минимальное значение.
Пример 13.2: Объявление типа–диапазон.
type numbers = (zero, one, two, three, four, five);
num = two .. four; {диапазон на базе типа numbers}
abc = 'A' .. 'z'; {все английские буквы: на базе типа char}
digits = 0 .. 9; {цифры}
var n : num; c, d : abc; x : integer;
begin
n:=four; writeln(ord(n)); {4 как в базовом типе}
n:=succ(n); { ОШИБКА (следующее значение вне диапазона)}
read(c, d);
if c = d then write('одинаковые буквы');
writeln( low(c),' .. ',high(c)); { A .. z }
writeln( low(x),' .. ',high(x)); { –32768 .. 32767 }
end.
В тексте программы на Турбо Паскале могут встречаться директивы компилятору, которые также называют опциями. Опции {$R+} и {$R–} позволяют включать и отключать проверку соблюдения границ при работе с диапазонами. Когда проверка включена, при нарушении границ диапазонов происходит аварийное завершение работы программы. В другом случае ответственность за возможные ошибки лежит на программисте.
13.3. Массивы
Массив – это упорядоченная структура однотипных данных, хранящая их последовательно. Доступ к элементу массива осуществляется через его индекс. Массивы описываются следующим образом (рис. 13.3.):
Рис. 13.3. Синтаксическая диаграмма массива
В качестве типа для элементов массива можно использовать любые типы Турбо Паскаля, кроме файлового. Диапазоны индексов представляют собой один или несколько диапазонов, перечисленные через запятую. В качестве диапазонов индексов нельзя использовать диапазоны с базовым типом longint.
Пример 13.3: Три способа описания одного и того же типа массива:
type {1} m1 = array [0..5] of integer;
m2 = array [char] of M1;
m3 = array [–2..2] of M2;
{2} m3 = array [–2..2] of array [char] of array [0..5] of integer;
{3} m3 = array [–2..2,char,0..5] of integer;
var a : m3;
{Обращаться к элементам массива можно следующим образом:}
begin
read(a[–1,'a',3]);
read(a[1]['x'][0]);
a[1]['c',1]:=100;
end.
Глубина вложенности, т.е. количество индексов, при определении массивов не ограничена. Играет роль только суммарный объем данных в программе. В стандартном режиме работы Турбо Паскаля этот объем ограничен размерами сегмента, т.е. 64 килобайта. Целиком над массивами допускается применение только операции присваивания массивов (подмассивов) одинаковых типов. Остальные операции должны выполняться поэлементно.
Пример 13.4: Вычисление значения многочлена степени n, коэффициенты которого находятся в массиве a в точке x по схеме Горнера:
Pn(x) = a[0]*x^n + a[1]*x^(n–1) + ... + a[n–1]*x + a[n] =
= (...((a[0]*x + a[1])*x + a[2])*x + ... + a[n–1])*x + a[n].
program scheme_gorner;
type mas = array[0..100] of integer;
var a : mas; i, j, n : integer; x, p : real;
begin
write('степень многочлена = '); read(n);
writeln('введите целые коэффициенты : ');
for i:=0 to n do read(a[i]);
write('значение x= '); read(x);
p:=0;
for i:=0 to n do p:=p*x+a[i];
writeln('Pn(x) = ', p);
end.