
- •Министерство образования и науки Российской Федерации
- •Цель лекции
- •План лекции
- •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-ресурсы
2 Вопросы программирования
Обратимся к возможностям языков программирования высокого уровня, позволяющим программистам работать с файлами, в данном случае — индексированными файлами. Помните, что индекс файла — это всего лишь еще один файл, содержащий список ключевых значений и адреса соответствующих записей. Поэтому, чтобы программист мог реализовать индексированный файл, язык должен предоставлять способы определения и регистрации местоположения каждой записи во время помещения ее на запоминающее устройство, а также способы возвращения к этому местоположению.
Расположение файлов на дисках. Предположим, что нам надо записать последовательный файл, текстовый файл или, возможно, изображение на магнитный диск. Очевидно, что эти данные займут более одного сектора, что означает, что при каждом обращении к данным нам придется считывать последовательно несколько секторов. В первую очередь обратите внимание на то, что по возможности весь файл следует записывать на одну дорожку (или один цилиндр). В противном случае при обращении к данным придется перемещать головку считывания-записи. Другая особенность не столь очевидна — не следует хранить данные в последовательных секторах дорожки. Наоборот, лучше после каждого использованного сектора пропускать несколько.
Причина заключается в том, что после считывания одного сектора происходит небольшая задержка перед чтением следующего. Если мы записали соседние части файла на соседние секторы на дорожке, к моменту, когда все будет готово к считыванию очередного сектора, он уже пройдет мимо головки считывания-записи. Тогда, чтобы считать данные из нужного сектора, придется ждать следующего оборота диска. Если же между считанным сектором и сектором, к которому мы собираемся обратиться, есть ненужные нам секторы, то мы успеем подготовиться к считыванию сектора к моменту, когда он достигнет головки считывания-записи. В случае, если дорожка разбита на 16 секторов, мы можем записать последовательный файл в секторы 5, 10, 15, 1,6, 11, 16, 2, 7 и т. д1. Так мы используем все секторы на дорожке и сможем считать данные со всей дорожки всего за пять оборотов диска.
1Такой метод размещения называется чередованием, а число пропускаемых секторов – фактором чередования (в нашем примере это 5). некоторые операционные системы позволяют изменять его (через BIOS) для ускорения обмена с накопителем на жестком диске.
Идеальный пример этому можно найти в среде языка программирования С. Функция fgetpos используется для получения текущей позиции в файле. Например, оператор
fgetpos(Personnel. &Position);
передает значение текущего положения в файле Personnel в переменную Position. (Способ кодировки этой позиции изменяется от системы к системе.) «Текущее положение» — это позиция, из/в которую в этом файле будет производиться следующая операция чтения/записи. Эту позицию можно использовать в индексе для сохранения местоположения записи на накопителе. Таким образом, если мы сохраним позицию, полученную при помощи fgetpos перед передачей на носитель каждой записи, то получим индекс, определяющий расположение записей. Если fgetpos используется для получения текущей позиции в файле, то при помощи функции fsetpos осуществляется переход к новой позиции. В частности, оператор
fsetpos(Personnel. &Position);
запрашивает перемещение текущего положения в файле Personnel к позиции, значение которой хранится в переменной Position. Если после этого оператора выполнить оператор чтения из файла, мы получим данные, хранящиеся в соответствующем Position месте. Таким образом, fsetpos — это необходимый инструмент для восстановления нужной записи с использованием информации, полученной fgetpos.
Короче говоря, функция fgetpos позволяет получить расположение элемента данных в файле, и, если мы сохраним это значение в индексе, то при помощи функции fsetpos сможем вернуться к этой позиции и считать данные.