- •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.4. Записи
Запись – это структура данных, которая может содержать информацию разных типов, объединенную под одним названием. Компоненты записи называются полями. Их фиксированное число. Описание записей имеет следующую структуру (рис. 13.4.):
Рис. 13.4. Синтаксическая диаграмма записи
Типы полей записи могут быть любыми. В свою очередь, тип запись может использоваться для создания массивов и новых записей. Степень вложенности не ограничена.
Список полей может состоять из двух разделов: постоянной и вариантной части. В постоянной части идет перечисление полей записи (идентификаторов) с указанием их типов. Синтаксис такой же, как в разделе var.
Пример 13.5: Пример объявления типа запись.
type men = record
fio , adress : string;
year : byte;
End;
var a , b : men;
Для обращения к полям записи указывается имя переменной типа запись, точка, имя поля, например:
begin
a.fio:='Иванов И.И.';
a.adress:='пp. Ленина, д. 40, кв. 10';
a.year:=1981;
end.
После описания постоянных полей может следовать вариантная часть, которая может быть только одна и имеет вид:
case поле выбора : тип of
значение 1 : (список полей 1);
– – –
значение n : (список полей N);
Поле выбора может отсутствовать. Если оно есть, то его воспринимают как постоянное поле записи. Если его нет, указывается только тип, который должен быть порядковым, но он не влияет ни на количество перечисленных ниже значений, ни на типы этих значений.
Все варианты располагаются в одном и том же месте памяти, которой выделяется столько, сколько требуется для максимального по размеру варианта. Это приводит к тому, что изменение одного вариантного поля оказывает влияние на все остальные. Это увеличивает возможности преобразования типов.
Пример 13.6: Запись с вариантами.
var r = record
rem : string;
case byte of
3 : (n:integer);
5 : (x , y, z :char);
'a' : ( i, j :byte);
end;
begin
r.rem:='запись с ваpиантами';
r.n:=25000;
write(r.i, r.x, r.j, r.y); {168и97a}
{ord('и')=168, ord('a')=97, 168+97*256=25000}
end.
Значения выбора могут повторяться. Имена полей записи не являются переменными и, следовательно, могут повторяться, но только на разных уровнях, например:
var rec : record
x : real;
sr : record a : real; x, y : integer; end;
i : byte;
end;
Для удобства обращения к полям записей может использоваться оператор присоединения:
with переменная do оператор;
Здесь переменная – это запись, за которой может следовать список вложенных полей, например следующие три оператора эквивалентны:
with rec, sr do a := x / y;
with rec.sr do a := x / y;
rec.sr.a := rec.sr.x / rec.sr.y;
13.5. Множества
Понятие множества в языке Паскаль основывается на математическом представлении о множествах: это ограниченная совокупность различных элементов. Для построения конкретного множественного типа используется перечисляемый или интервальный тип данных. Тип элементов, составляющих множество, называется базовым типом.
Описание типа множество (рис. 13.5.):
Рис. 13.5. Синтаксическая диаграмма множества
Множественный тип описывается с помощью служебных слов set of, например:
type m = set of b;
Здесь m– множественный тип;b– базовый тип.
Пример описания переменной множественного типа:
type m = set of 'A'..'D';var ms : m;
Принадлежность переменных к множественному типу может быть определена прямо в разделе описания переменных:
var c : set of 0..7;
Константы множественного типа записываются в виде заключенной в квадратные скобки последовательности элементов или интервалов базового типа, разделенных запятыми, например:
['A', 'C'] [0, 2, 7] [3, 7, 11..14].
Константа вида [] - означает пустое подмножество.
Множество включает в себя набор элементов базового типа, все подмножества данного множества, а также пустое подмножество. Если базовый тип, на котором строится множество, имеет kэлементов, то число подмножеств, входящих в это множество, равно 2k. Пусть имеется переменнаяpинтервального типа:
var p : 1..3;
Эта переменная может принимать три различных значения – либо 1, либо 2, либо 3.
Переменная tмножественного типа:
vart :setof1..3;
может принимать восемь различных значений:
[ ] [1,2][1] [1,3][2] [2,3][3] [1,2,3]
Порядок перечисления элементов базового типа в константах безразличен.
Значение переменной множественного типа может быть задано конструкцией вида [t], гдеt– переменная базового типа.
К переменным и константам множественного типа применимы операции присваивания (:=), объединения (+), пересечения (*) и вычитания (–):
['A','B'] + ['A','D'] даст ['A','B','D'],['A'] * ['A','B','C'] даст ['A'],['A','B','C'] – ['A','B'] даст ['C'].
Результат выполнения этих операций есть величина множественного типа.
К множественным величинам применимы операции: тождественность (=), не тождественность (<>), содержится в (<=), содержит (>=). Результат выполнения этих операций имеет логический тип, например:
['A','B'] = ['A','C'] даст false['A','B'] <> ['A','C'] даст true ['B'] <= ['B','C'] даст true ['C','D'] >= ['A'] даст false.
Кроме этих операций для работы с величинами множественного типа в языке Паскаль используется операция in, проверяющая принадлежность элемента базового типа, стоящего слева от знака операции, множеству, стоящему справа от знака операции. Результат выполнения этой операции – булевский. Операция проверки принадлежности элемента множеству часто используется вместо операций отношения, например:
'A' in ['A', 'B'] даст true,2 in [1, 3, 6] даст false.
При использовании в программах данных множественного типа выполнение операций происходит над битовыми строками данных. Каждому значению множественного типа в памяти ЭВМ соответствует один двоичный разряд. Например, множество
['A','B','C','D']
представлено в памяти ЭВМ битовой строкой
1 1 1 1.
Подмножества этого множества представлены строками:
['A','B','D'] 1 1 0 1['B','C'] 0 1 1 0['D'] 0 0 0 1
Величины множественного типа не могут быть элементами списка ввода – вывода.
В каждой конкретной реализации транслятора с языка Паскаль количество элементов базового типа, на котором строится множество, ограничено. В Турбо Паскале количество базовых элементов не должно превышать 256.
Инициализация величин множественного типа производится с помощью типизированных констант:
const seLit : Set of 'A'..'D'= [];
Проиллюстрируем применение данных множественного типа на примере.
Пример 13.7. Составить программу, которая вырабатывает и выводит на экран дисплея наборы случайных чисел для игры в «Спортлото 5 из 36». Для заполнения каждой карточки спортлото необходимо получить набор из пяти псевдослучайных чисел. К этим числам предъявляются два требования:
– числа должны находиться в диапазоне 1..36;
– числа не должны повторяться.
program lotto;varnb, k : set of 1..36;kol, l, i, n : Integer;beginrandomize;writeln('ВВЕДИ kol');readln(kol);nb:=[1..36];for i:=1 to kol dobegink:=[];for l:=1 to 5 dobeginrepeatn:=random(36)until (n in nb) and not (n in k);k:=k+[n];write(n:4)end;writelnendend.