
- •В.В. Чуркин технологии программирования
- •Содержание
- •Введение
- •Указатели. Операции над указателями Операции адресации и разыменования.
- •Арифметические операции.
- •Присваивание указателей.
- •Смещение и индексирование указателей.
- •Функции
- •Объявление функции (прототип)
- •Параметры функции
- •Встроенные функции
- •Функции с параметрами со значениями по умолчанию
- •Параметры функции main()
- •Рекурсивные функции
- •Перегрузка функций
- •Шаблоны функций
- •Указатели на функции
- •Объявление и инициализация массива указателей на функции:
- •Указатель на функцию как возвращаемое функцией значение
- •Выделение и освобождение динамической памяти
- •Символьные и строковые данные Символьные константы
- •Строковые константы (строки)
- •Символьные переменные
- •Строки – переменные
- •Специальные функции ввода-вывода строк
- •Стандартная библиотека функций языка с
- •Файлы Потоковый ввод-вывод в языке с Функции верхнего уровня файлового ввода-вывода
- •Открытие и закрытие потока
- •Текстовый режим
- •Бинарный режим
- •Закрытие файла
- •Функции в языке c для работы с файлами
- •Двоичный (бинарный) режим обмена с файлами
- •Строковый обмен с файлами
- •Форматный обмен с файлами
- •Позиционирование в потоке
- •Ввод-вывод нижнего уровня
- •Открытие / закрытие файла
- •Чтение и запись данных
- •Произвольный доступ к файлу
- •Позиционирование файлов
- •Сортировки числовых массивов Принцип наименьших привилегий
- •Обменная сортировка (SwapSort)
- •Сортировка выбором (SelectSort)
- •Пузырьковая сортировка (BubbleSort)
- •Сортировка вставками (InsertSort)
- •Быстрая сортировка (QuickSort)
- •Поиск в числовых массивах
- •Структуры
- •Форматы определения структурных типов
- •Форматы определения объектов структурных типов
- •Операции над объектами структурного типа
- •Доступ к элементам объектов структурного типа
- •Структуры, массивы и указатели
- •Объединения (смеси)
- •Оператор switch (переключатель)
- •Динамические структуры данных
- •Реализация стека с помощью массива
- •Очередь
- •Очередь приоритетов
- •Реализация очереди с помощью массива
- •Линейные списки
- •Функции для работы с двунаправленным линейным списком
- •Реализация списка с помощью массивов
- •Поиск хэшированием
- •Бинарные деревья
- •Бинарное упорядоченное дерево (дерево поиска)
- •Идеально сбалансированное дерево
- •Операции с бинарным упорядоченным деревом
- •Удаление узла из дерева
- •Обход (просмотр) дерева
- •Реализация дерева с помощью массивов
- •Вывод динамических структур в файл и чтение их из файла
- •Сбалансированные (avl) деревья
- •Алгоритм avl-вставки.
- •Повороты
- •Классы и объектно-ориентированное программирование
- •Объявление класса
- •Определение класса (реализация класса)
- •Использование класса (драйвер класса)
- •Доступ к элементам класса
- •Отделение интерфейса от реализации
- •Обслуживающие функции-утилиты
- •Конструкторы
- •Windows-программы в Builder
- •Структура головного файла проекта
- •Структура заголовочного файла модуля формы (“Unit1.H”)
- •Структура файла реализации модуля формы (“Unit1.Cpp”)
- •Области видимости (или области действия) переменных в блоках. Время жизни переменных
- •Доступ к свойствам и функциям-элементам (методам) объектов, переменным и функциям в приложении, содержащем одну форму
- •Константные объекты и константные функции-элементы
- •Перегрузка операций
- •Перегрузка унарных операций
- •Перегрузка бинарных операций
- •Перегрузка операции присваивания
- •Перегрузка операции приведения типа
- •Перегрузка операции индексирования []
- •Композиция классов
- •Дружественные функции класса
- •Дружественный класс
- •Использование указателя this
- •Статические элементы класса
- •Шаблон класса для статически и динамически создаваемых объектов
- •Конструктор 1
- •Деструктор
- •Вызовы конструкторов и деструкторов
- •Перегруженная операция присваивания
- •Конструктор 2 (конструктор копирования, конструктор копии)
- •Наследование. Иерархия классов.
- •Ключи доступа
- •Пример простого наследования (точка, круг)
- •Правила наследования функций-элементов. Вызовы конструкторов и деструкторов в иерархии
- •Виртуальные функции и полиморфизм
- •Правила определения и наследования виртуальных функций
- •Позднее (динамическое) связывание
- •Полиморфизм. Абстрактные и конкретные классы
- •Учебная литература (основная)
- •Учебная литература (для углубленного изучения)
- •Учебно-методические издания
Открытие и закрытие потока
#include <stdio.h>
FILE*fp; //fp – указатель на поток
FILE – структура предопределенного типа (файл). Определение этого типа находится в stdio.h. В структуре FILE содержатся компоненты, с помощью которых ведется работа с потоком: указатель на буфер, указатель (индикатор) текущей позиции в потоке (файле) и др. информация.
Указатель на поток получит значение в результате выполнения функции открытия потока (файла):
fp=fopen(имя_файла, режим_открытия);
Параметры – указатели на строку с именем файла и на строку режимов открытия. Эти параметры можно задавать и непосредственно в виде строк при вызове функции открытия файла:
fp=fopen(“t.txt”, “r”);
fp=fopen(“z:\\h\\data”, “rb+”);
При открытии потока (файла) в программу возвращается указатель на поток, являющийся указателем на объект структурного типа FILE. Этот указатель идентифицирует поток (файл) во всех последующих операциях.
Файл, связанный с потоком, можно открыть в одном из шести режимов:
“w” – новый текстовый файл открывается для записи. Если он уже существует, то он стирается, файл создается заново;
“r” – существующий текстовый файл открывается только для чтения;
“w+” – новый текстовый файл открывается для записи и последующих исправлений. Если он уже существует, то стирается. Последующие после открытия запись и чтение из него допустимы в любом месте файла, т.е. запись разрешена и в конец файла, т.е. файл может «расти»;
“r+” – существующий текстовый файл открывается как для чтения, так и для записи в любом месте файла; однако недопустимо увеличение размеров файла;
“a” – текстовый файл открывается (или создается, если его нет) для добавления в него новой информации (в конец);
“a+” – текстовый файл открывается (или создается, если его нет) и допустим для изменений, для чтения и записи в любом месте; может увеличивать размеры.
Текстовый режим
Текстовый режим обозначается через t (по умолчанию), но возможно “a+t”, “rt”, … . Текстовые файлы предназначены для чтения, т.е. читабельны.
Прочитанная из файла комбинация символов CR (возврат каретки, код 13) и LF (перевод строки, код 10) в ОП преобразуется в один символ новой строки ‘\n’ (код 10). При записи в файл осуществляется обратное преобразование, т.е. ‘\n’ заменяется последовательностью CR и LF.
Бинарный режим
При открытии файла в бинарном (двоичном) режиме (“r+b”, “wb” и др.) файл будет хранить двоичную информацию. Двоичные файлы нечитабельны. Преобразования, как в текстовом режиме, не будет.
Режимы с “+”
Смена режима (переход от записи к чтению и обратно, в режиме с “+”) должна проходить только после перевода указателя (индикатора) файла в нужную позицию.
Ошибки
При открытии файла могут возникнуть ошибки:
1)указанный файл не найден (для «чтения»);
2)диск заполнен;
3)диск защищен от записи и т.д.
При выполнении fopen выделяется динамическая память под буфер. При её отсутствии – ошибка: недостаточно памяти. В этих случаях fp=NULL.
Чтобы установить ошибку, используют последовательность операторов:
if((fp=fopen(“t.txt”,”w”))==NULL)
{ perror(“Ошибка при открытии файла t.txt”);
exit(0); // в stdlib.h
}
Функция void perror(const char* s); выводит строку “…” по указателю s, затем - : <сообщение об ошибке>. Сообщение выбирается функцией по номеру ошибки.