![](/user_photo/2706_HbeT2.jpg)
- •1.2Типы данных
- •1.2.1Объявление переменной
- •1.2.2Категории типов данных
- •1.2.3Целый тип данных
- •1.2.4Данные с плавающей точкой (вещественные типы)
- •1.3Знаки операций
- •1.3.3Простое присваивание
- •1.3.4Составное присваивание
- •1.3.5Приоритеты операций и порядок вычислений
- •1.4Структура и компоненты программы на языке си
- •1.5Организация ввода-вывода в стиле си
- •1.6.1 Манипуляторы и форматирование ввода-вывода
- •1.7Математические функции
- •2Алгоритм. Элементы структурного программирования
- •2.1Понятие алгоритма
- •2.2Основные требования к алгоритмам
- •2.3Элементы структурного программирования
- •3Программирование алгоритмов линейной структуры
- •4Алгоритмы и программы ветвящейся структуры. Условный оператор if. Переключатель switch
- •4.1Алгоритмы и программы ветвящейся структуры
- •4.1.1Условный оператор if
- •If (выражение) оператор1;
- •4.1.2Логические операции
- •4.2Примеры составления алгоритмов и программ с использованием условного оператора If
- •4.3Переключатель switch
- •5Алгоритмы и программы циклической структуры
- •5.1 Понятие цикла. Разновидности циклов
- •5.3Оператор while
- •5.4Оператор do while
- •5.5Оператор continue
- •6Регулярные типы данных. Массивы
- •6.1 Понятие регулярного типа
- •6.2Алгоритмы сортировки массивов
- •6.3 Постановка задачи сортировки и методы её решения
- •6.4Алгоритм прямого упорядочения (Алгоритм сортировки выбором элемента)
- •6.5Алгоритм попарного сравнения соседних элементов («пузырьковая» сортировка)
- •6.6Алгоритм сортировки выбором элемента
- •6.7Методы доступа к элементам массивов, использование указателей
- •6.8Организация многомерных массивов. Указатели на многомерные массивы
- •7.1Описание и определение функции
- •7.2Вызов функции
- •7.3Передача параметров в функцию
- •7.4Описание прототипа функции
- •7.5Функция с переменным количеством параметров
- •7.6Понятие сигнатуры функции
- •7.7Подставляемые (встраиваемые) функции
- •7.8Передача параметров в главную функцию
- •7.9Рекурсивные вызовы функции
- •7.10Примеры составления функций
- •8Указатели
- •8.1Понятие указателя
- •8.2Инициализация указателей
- •8.3Операции с указателями
- •8.4Ссылки
- •9Структуры (struct)
- •10Динамические структуры данных
- •3.1 Односвязные списки
- •Д обавление в начало списка.
- •2 ) Добавление в середину списка.
- •У даление первого элемента списка.
- •3 )Удаление элемента из середины списка.
- •Int Data; //поле данных
- •If (!q) //...И он первый в списке
- •3.2 Стек
- •3.3 Очередь
- •11Динамические массивы
- •12Функции и массивы
- •13Указатели на функции
- •14.1Файловый ввод/вывод с помощью потоков
- •14.2 Дополнительные функции файлового ввода/вывода
- •14.3Режимы файлов
- •14.4 Двоичные файлы
- •14.5Произвольный доступ к файлам
- •Список использованных источников
14.5Произвольный доступ к файлам
Произвольный доступ к файлам предоставляет возможность переместиться в любое место файла сразу, вместо последовательного передвижения по нему. Подход с произвольным доступом часто используется при обработке файлов баз данных. Этот подход проще реализовать, если файл состоит из набора записей одинакового типа (или хотя бы размера).
Для реализации «передвижения» по файлу существуют специальные функции: seekg() передвигает указатель ввода, seekp() – указатель вывода в определенную точку файла. Соответственно, seekg() можно использовать с объектом типа ifstream, а seekp() – с объектом типа ofstream.
Функция передвижения указателя ввода имеет следующие прототипы:
istream& seekg(long);
istream& seekg(long,seek_dir);
Первый прототип устанавливает указатель чтения входного потока на абсолютную позицию, заданную параметром. Эта позиция отстоит от начала файла на указанное количество байтов, т.е. значение позиции можно трактовать как смещение от начала файла, где первый байт имеет индекс 0. Поэтому оператор
fin.seekg(112);
передвигает файловый указатель на 112-й байт, который является реальным 113-м байтом файла.
Второй прототип перемещает указатель чтения входного потока на число байтов, заданное первым параметром. Второй параметр задает точку отсчета: значение ios::beg означает, что смещение отсчитывается от начала файла, ios::cur – от текущей позиции, ios::end – от конца файла.
Примеры вызова функции:
//30 байтов от начала файла
fin.seekg(30,ios::beg);
//один байт назад от текущей позиции
fin.seekg(-1,ios::cur);
//переход к концу файла
fin.seekg(0,ios::end);
Функция передвижения указателя вывода имеет следующие прототипы:
ostream& seekp(long);
ostream& seekp(long,seek_dir);
Принципы работы этой функции полностью идентичны предыдущей, за исключением того, что она работает с объектом потока вывода:
fout.seekp(20,ios::beg);
Если необходимо проверить текущую позицию файлового указателя, можно воспользоваться функцией tellg() для потока ввода и tellp() – для потока вывода. Каждый из них возвращает типа long, представляющее собой текущее смещение указателя от начала файла в байтах. Когда создается объект типа fstream, входной и выходной указатели передвигаются одновременно, поэтому в таком случае функции tellg() и tellp() возвращают одинаковое значение. Но если используется объект типа ifstream для управления потоком ввода и объект типа ofstream для управления потоком вывода, входной и выходной указатели передвигаются независимо друг от друга и функции tellg() и tellp() могут возвращать разные значения.
Список использованных источников
Сидорина Т.Л. Самоучитель Microsoft Visual Studio C++ и MFC. – СПб.: БХВ-Петербург, 2009. – 848 ил.
Программирование на С++/С.В. Глушаков, Т.В. Дуравкина. – изд. 2-е, доп. и переработ. –М.: АСТ, 2008. – 685, [3] с. – (Эффективное руководство).
Подбельский В.В. Язык С++: Учебное пособие. – 5-е изд. -М.: Финансы и статистика, 2007. -560 с.
Павловская Т.А. C/C++. Программирование на языке высокого уровня.– СПб.: Питер, 2006.
А.Я. Архангельский, М.А. Тагин. Программирование в С++ Builder 6 и 2006. – М.: ООО «Бином-Пресс», 2007 г. – 1184 с.: ил.
Архангельский А.Я. Программирование в С++ Builder 6. – М.Ж ЗАО «Издательство БИНОМ», 2005. – 1152 с.
Шилдт Г. Полный справочник по C++.: Пер. с англ. – М.: Издательский дом «Вильямс», 2004. – 800 с.
C/C++. Структурное программирование:Практикум / Т. А. Павловская, Ю.А.Щупак. – СПб.: Питер, 2003. – 240 с.:ил.
Хабибуллин И.Ш. Программирование на языке высокого уровня. C/C++. – СПб.: БХВ-Петербург, 2006.