
- •Министерство образования и науки Российской Федерации
- •Цель лекции
- •План лекции
- •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-ресурсы
3 Вопросы программирования
Поразмыслим о том, как программист мог бы написать команды для манипулирования файлами рассмотренного типа на языке программирования высокого уровня.
В большинстве высокоуровневых языков есть операторы для управления последовательными файлами, содержащими текст. Эти операторы могут принимать форму запросов на выполнение предопределенных процедур, производящих желаемые операции. Например, может существовать эквивалент этого оператора на псевдокоде, который получает следующую логическую запись из файла MailList и передает ее в переменную MailRecord:
Применить процедуру ReadFile для получения MailRecord из файла MailList
Здесь мы предполагаем, что переменная MailRecord определена как неоднородный массив, компоненты которого представляют различные поля записи: Name (Имя), Address (Адрес), EmployeeNumber (Идентификатор) и т. д. В других случаях поля записи могут передаваться последовательно, как в следующем операторе на псевдокоде:
Применить процедуру ReadFile для получения Name. Address. EmpNum из файла MailList
Еще один способ чтения данных — посимвольно, как в операторе
Применить процедуру GetCharacter для получения Symbol из файла DocumentFile
где Symbol — это переменная символьного типа, или построчно, как в операторе
Применить процедуру ReadLine для получения TextLine из файла DocumentFile
который получает из файла DocumentFile всю строку текста до маркера «конец строки» и передает ее в массив символов под названием TextLine.
Объектно-ориентированные языки программирования рассматривают файлы как объекты. В свою очередь, операторы передачи записей в последовательный файл и из него принимают форму сообщений соответствующим объектам. Например, программист мог бы использовать оператор, эквивалентный инструкции:
Отправить сообщение ReadFile объекту MailList для получения MailRecord.
Во многих случаях процесс передачи данных в файл, имеющий структуру текстового, или из него требует также преобразования данных. Рассмотрим, например, инструкцию:
Применить процедуру Write для помещения значения Length в файл TextFile
где Length — это переменная типа integer, a TextFile — это файл в кодировке ASCII. Для того чтобы записать в файл значение, назначенное переменной Length, его сначала необходимо преобразовать из двоичного дополнительного кода в символы кодов ASCII. Если говорить более точно, предположим, что каждое целое число представляется в двоичной системе двумя байтами и текущее значение Length равно 134. Тогда битовая комбинация для Length будет иметь вид
0000000010000110
(это двоичное представление числа 134), но в файл должна быть записана битовая комбинация
001100010011001100110100
(код ACSII для символа 1, за которым следует код ASCII для символа 3, и за ним — код ASCII для символа 4) (рис. 6).
Рисунок 6 – Преобразование данных из записи в двоичном дополнительном коде в коды для записи в текстовый файл
Теперь рассмотрим процесс получения значения переменной Length из файла при помощи оператора, схожего с
Применить процедуру ReadFile для получения значения Length из файла TextFile
Для этого требуется чтение символов из файла TextFile, пока не появятся символы нужного значения, а затем построение представления соответствующего значения в двоичной форме и передача его в переменную Length.
Наконец, нужно заметить, что большинство языков программирования высокого уровня позволяют программистам выполнять действия с периферийными устройствами так, как если бы они были последовательными файлами. Например, клавиатура компьютера обычно рассматривается как последовательный файл, из которого битовые комбинации восстанавливаются посимвольно. Схожим образом монитор и принтер можно представить как последовательные файлы, в которые передаются битовые комбинации. Так, чтобы получить данные, введенные с клавиатуры, программист может использовать оператор, эквивалентный инструкции:
Применить процедуру ReadFile для получения Name из файла KeyBoard
где Name — это переменная, обозначающая массив символов. Обратите внимание, что в следующем случае должно быть выполнено преобразование данных:
Применить процедуру ReadFile для получения Age из файла KeyBoard
где Age — это переменная типа integer. Если с клавиатуры ввели значение 34, операционная система преобразует нажатие клавиши в ASCII-коды символов 3 и 4. Эти текстовые данные должны быть преобразованы в двоичное представление числа 34 и переданы в переменную Age.
С течением времени HTML развился в систему разметки документов согласно тому, как они должны быть представлены на мониторе компьютера или напечатаны. Например, ингредиенты в рецепте можно пометить так, чтобы каждый из них выводился на новой строке. Однако мы надеемся, что с появлением новых языков разметки на основе XML акцент будет делаться на семантику. Предположим, например, что ингредиенты в списке помечены тегами <ingredient> и </ingredient>, а не просто перечислены. Тогда можно написать программу для поиска рецептов, содержащих или не содержащих определенные ингредиенты. Это будет существенным улучшением существующего состояния дел, поскольку сейчас мы можем только выделить рецепты, содержащие или не содержащие определенные слова. Точнее, при помощи семантических тегов программа сможет найти рецепт лазаньи, не содержащей шпинат, тогда как схожая программа, основанная на словесном содержимом, пропустит рецепт, начинающийся словами «В этой лазанье нет шпината». Такого улучшения можно было бы добиться, если бы в Интернете были задействованы стандарты разметки документов согласно семантике, а не словесному содержанию, и в результате мы получили бы всемирную семантическую сеть.