
- •Министерство образования и науки Российской Федерации
- •Цель лекции
- •План лекции
- •1 Происхождение вычислительных машин
- •2 Изучение алгоритмов
- •Контрольные вопросы
- •Цель лекции
- •План лекции
- •1 Биты и их хранение
- •2 Оперативная память
- •Контрольные вопросы
- •Цель лекции
- •План лекции
- •1 Устройства внешней памяти
- •3 Хранение и поиск файлов
- •Контрольные вопросы
- •Цель лекции
- •План лекции
- •1 Представление числовых значений
- •2 Хранение целых чисел
- •3 Хранение дробей
- •Контрольные вопросы
- •Цель лекции
- •План лекции
- •1 Представление текста
- •2 Представление изображений
- •Достоинства пиксельной графики
- •Недостатки пиксельной графики
- •Достоинства векторной графики
- •Недостатки векторной графики
- •3 Представление звука
- •Контрольные вопросы
- •Цель лекции
- •План лекции
- •1 Сжатие изображений
- •2 Ошибки передачи данных
- •Контрольные вопросы
- •Цель лекции
- •План лекции
- •1 Архитектура эвм
- •2 Связь процессора с другими устройствами
- •3 Другие архитектуры
- •Контрольные вопросы
- •Цель лекции
- •План лекции
- •1 Машинный язык
- •2 Пример машинного языка
- •Контрольные вопросы
- •Цель лекции
- •План лекции
- •1 Выполнение программы
- •2 Пример выполнения программы
- •3 Программы и данные
- •Контрольные вопросы
- •Цель лекции
- •План лекции
- •1 Логические операции
- •2 Операции сдвига
- •3 Арифметические операции
- •Контрольные вопросы
- •Цель лекции
- •План лекции
- •1 Эволюция операционных систем
- •2 Архитектура операционных систем
- •Контрольные вопросы
- •Цель лекции
- •План лекции
- •1 Понятие процесса
- •2 Управление процессами
- •Контрольные вопросы
- •Цель лекции
- •План лекции
- •1 Классификация сетей
- •2 Сетевые протоколы*
- •3 Безопасность сетей
- •Контрольные вопросы
- •Цель лекции
- •План лекции
- •1 Понятие алгоритма
- •2 Представление алгоритма
- •Контрольные вопросы
- •Цель лекции
- •План лекции
- •1 Теория решения задач
- •2 Общие методы решения задач
- •Контрольные вопросы
- •Цель лекции
- •План лекции
- •1 Алгоритм последовательного поиска
- •2 Управление циклами
- •3 Алгоритм сортировки методом вставки
- •Контрольные вопросы
- •Цель лекции
- •План лекции
- •1 Алгоритмы поиска и сортировки
- •2 Управление рекурсией
- •3 Разработка рекурсивных процедур
- •Контрольные вопросы
- •Цель лекции
- •План лекции
- •1 Эффективность алгоритмов
- •2 Верификация программ
- •Контрольные вопросы
- •Цель лекции
- •План лекции
- •1 Эволюция и классификация языков программирования
- •2 Концепции традиционного программирования
- •Контрольные вопросы
- •Цель лекции
- •План лекции
- •1 Процедурные единицы
- •2 Реализация языка программирования
- •Контрольные вопросы
- •Цель лекции
- •План лекции
- •1 Объектно-ориентированное программирование
- •2 Декларативное программирование
- •Контрольные вопросы
- •Цель лекции
- •План лекции
- •1 Структуры данных
- •Integer Scores (2.9).
- •2 Статические и динамические структуры
- •3 Указатели
- •Контрольные вопросы
- •Цель лекции
- •План лекции
- •1 Массивы
- •2 Списки
- •Контрольные вопросы
- •Цель лекции
- •План лекции
- •1 Структура и функции стека
- •2 Реализация стека
- •Контрольные вопросы
- •Цель лекции
- •План лекции
- •1 Очереди
- •2 Деревья
- •Контрольные вопросы
- •Цель лекции
- •План лекции
- •1 Пользовательские типы данных
- •Int Age;
- •2 Классы
- •Int *StackEntries;
- •3 Стандартная библиотека шаблонов
- •Контрольные вопросы
- •Цель лекции
- •План лекции
- •1 Роль операционной системы
- •2 Последовательные файлы
- •3 Вопросы программирования
- •0000000010000110
- •001100010011001100110100
- •Контрольные вопросы
- •Цель лекции
- •План лекции
- •1 Основные положения индексации
- •2 Вопросы программирования
- •Контрольные вопросы
- •Цель лекции
- •План лекции
- •1 Основные положения хеширования
- •2 Вопросы программирования
- •Контрольные вопросы
- •Цель лекции
- •План лекции
- •1 Общие вопросы
- •2 Система управления базой данных
- •3 Поддержка целостности баз данных
- •Контрольные вопросы
- •Цель лекции
- •План лекции
- •1 Модели баз данных
- •2 Реляционная модель баз данных
- •3 Объектно-ориентированные базы данных
- •Контрольные вопросы
- •Цель лекции
- •План лекции
- •1 Интеллект и машины
- •2 Распознавание образов
- •3 Мышление
- •Контрольные вопросы
- •Цель лекции
- •План лекции
- •1 Искусственные нейронные сети
- •2 Генетические алгоритмы
- •Контрольные вопросы
- •Невычислимые функции Цель лекции
- •План лекции
- •1 Основы машины Тьюринга
- •2 Невычислимая функция
- •3 Сложность задач
- •Листинг 1. Процедура MergeLists для объединения двух упорядоченных списков
- •Листинг 2. Алгоритм сортировки слиянием, реализованный в процедуре MergeSort
- •Контрольные вопросы
- •Цель лекции
- •План лекции
- •1 Шифрование с открытым ключом
- •2 Модульная арифметика
- •Контрольные вопросы
- •Литература
- •Internet-ресурсы
Int Age;
float SkillRating;
} EmployeeType;
определяет новый тип под названием EmployeeType, состоящий из неоднородной структуры, содержащей Name (Имя), Age (Возраст) и SkillRating (Уровень знаний). При помощи этого нового типа можно объявлять переменные в точности так же, как переменные примитивных типов. В частности, переменная Employee объявляется в следующем операторе:
EmployeeType Employee;
Преимущества такого пользовательского типа данных становятся заметнее при объявлении нескольких переменных. Так же, как на языке С программист может объявить Sleeve, Waist и Neck как переменные примитивного типа real в операторе
float Sleeve, Waist. Neck;
оператор
EmployeeType DistManager, SalesRepl, SalesRep2;
определяет три переменные — DistManager, SalesRepl и SalesRep2, как переменные типа EmployeeType.
Важно разделять определение пользовательского типа данных и фактические элементы данных этого типа. Последние называются экземплярами этого типа (instance). Определение пользовательского типа данных — это шаблон, который используется для создания экземпляров этого типа. Он описывает свойства, общие для всех экземпляров такого типа, но не объявляет реальный элемент, обладающий этими свойствами (так же, как шаблон для вырезания печенья используется для создания печенья, но сам им не является). В предыдущем примере пользовательский тип EmployeeType использован для создания трех экземпляров этого типа, известных под именами DistManager, SalesRepl и SalesRep2.
2 Классы
Хотя концепция пользовательских типов имеет множество преимуществ, она не позволяет создавать новые типы данных в полном смысле этого слова. Вспомните, что определение типа данных состоит из двух частей: предопределенной системы хранения (например, система дополнительных кодов в случае типа integer или система с плавающей точкой для типа real) и набора предопределенных операций (например, сложение и вычитание). Традиционные пользовательские типы позволяют программистам только определять новые системы хранения. Они не предоставляют способов определения операций, которые можно производить с данными в этих структурах.
Классы, с которыми мы познакомились ранее, — это более сложный способ расширения типов, доступных в языке программирования. Как и пользовательский тип, класс является шаблоном, отделенным от экземпляров этого типа. Но класс объединяет и систему хранения данных, то есть переменные экземпляров, и набор процедур, определяющих операции, которые можно выполнять с информационной системой.
Листинги 1 и 2 показывают, как класс с именем StackOfIntegers может быть определен на языках C++, С# и Java. Далее мы вкратце рассмотрим подробности этих примеров, но сейчас заметим лишь, что в каждом примере в классе StackOfIntegers определены две переменные экземпляра (массив целых чисел с названием StackEntries и целое число StackPointer, которое используется для идентификации вершины стека внутри массива —, две процедуры (с именами push и pop) и конструктор, который устанавливает максимальный объем стека при создании каждого экземпляра стека.
Листинг 1. Стек целых чисел (реализация на C++)1
class StackOfIntegers
{private: