
- •Курс лекций по дисциплине “Основы программирования и алгоритмические языки” Бондарев в.М., Марченко ю.С. Введение
- •Основы алгоритмизации
- •1 Основные этапы решения задачи на эвм
- •1.1 Постановка задачи
- •1.2 Проектирование программы
- •1.3 Разработка алгоритма
- •1.4 Кодирование
- •1.5 Отладка и тестирование программы
- •2 Элементарные алгоритмические структуры
- •2.1 Последовательная алгоритмическая структура
- •2.2 Алгоритмическая структура выбора
- •2.3 Алгоритмическая структура повторения
- •2.4 Комбинация структур
- •2.5 Пошаговая детализация алгоритма
- •2.6 Разработка алгоритма вычисления Sin X
- •2.7 Разработка алгоритма подсчета простых чисел
- •3 Алгоритмы поиска
- •3.1 Поиск наибольшего среди вводимых чисел
- •3.2 Поиск наибольшего числа в массиве
- •3.3 Поиск заданного числа в массиве
- •3.4 Поиск с порогом
- •3.5 Двоичный поиск
- •4 Алгоритмы сортировки
- •4.1 Обменная сортировка
- •4.2 Сортировка слиянием
- •4.3 Сравнение двух алгоритмов сортировки
- •5 Рекурсивные алгоритмы
- •5.1 Простая рекурсия
- •5.2 Ханойские башни
- •5.3 Быстрая обменная сортировка
- •6.2 Простейшая программа
- •6.3 Составление простой программы
- •6.4 Программа сложение двух чисел
- •6.5 Организация повторений
- •6.6 Условный оператор
- •If (выражение) оператор [else оператор].
- •6.7 Оператор цикла for
- •7 Указатели и массивы
- •7.1 Указатели
- •7.2 Разыменование и разадресация
- •7.3 Операции new и delete
- •7.4 Массивы
- •7.5 Многомерные массивы
- •7.6 Связь между массивами и указателями
- •7.7 Массивы в динамической памяти
- •8 Строки и структуры
- •8.1 Встроенный тип char
- •8.2 Строки символов как массивы
- •8.3 Строковые библиотечные функции
- •8.4 Структуры
- •8.5 Объявление структур
- •8.6 Битовые поля
- •8.7 Объединения
- •9 Функции
- •9.1 Функция для сложения чисел
- •9.2 Ссылки
- •9.3 Выходные параметры функции
- •9.4 Ссылка — возвращаемое значение
- •9.5 Одномерные массивы как параметры
- •9.6 Двумерные массивы как параметры
- •10 Еще о функциях
- •10.1 Параметры по умолчанию
- •10.2 Произвольное число параметров
- •10.3 Неиспользуемые параметры
- •10.4 Перегруженные функции
- •10.5 Указатель на функцию
- •Void error(char* p) { /*тело ф-ции*/} ,
- •10.6 Спецификатор inline
- •Inline void error(char* p) { /*тело ф-ции*/}
- •10.7 Макросы
- •11 Ввод и вывод
- •11.1 Разновидности ввода и вывода
- •11.2 Открытие и закрытие потока
- •11.3 Ввод и вывод символов
- •11.4 Ввод и вывод строк
- •11.5 Ввод и вывод записей
- •11.6 Управление указателем файла
- •11.7 Состояние потока
- •11.8 Форматированный вывод
- •11.9 Форматированный ввод
- •11.10 Другие функции форматного ввода и вывода
- •12 Уточнение понятий языка
- •12.1 Объявление, определение, инициализация
- •12.2 Область видимости и время жизни
- •12.3 Типы
- •12.4 Производные типы
- •12.5 Числовые константы
- •12.6 Именные константы
- •12.7 Перечисление
- •12.8 Порядок вычисления выражений
- •13 Операции и операторы
- •13.1 Сводка операций
- •13.2 Сводка операторов
- •13.3 Оператор выражения
- •13.4 Оператор switch
- •13.5 Операторы break и continue
- •13.6 Оператор goto и метки
- •14 Классы
- •14.1 Определение класса
- •14.2 Инкапсуляция
- •14.3 Конструктор
- •14.4 Деструктор
- •14.5 Пример класса — список в динамической памяти
- •14.6 Указатель на себя
- •15 Производные классы
- •15.1 Простое наследование
- •15.2 Списки инициализации
- •15.3 Ключи доступа
- •15.4 Виртуальные функции
- •15.5 Реализация виртуальных функций
- •15.6 Полиморфизм
- •16 Еще о класcах
- •16.1 Статические элементы
- •16.2 Друзья класса
- •16.3 Перегрузка операций
- •16.4 Множественное наследование
- •17.1 Библиотека потоков
- •17.2 Предопределенные потоки
- •17.3 Операции помещения в поток и извлечения из потока
- •17.4 Форматирующие функции-элементы
- •17.5 Флаги форматирования
- •17.6 Манипуляторы
- •18 Еще о потоках
- •18.1 Ошибки потока
- •18.2 Опрос состояния потока
- •18.3 Файловый ввод-вывод с применением потоков
- •18.4 Конструкторы файловых потоков
- •18.5 Функции для открытия и закрытия файлов
- •18.6 Замена буфера потока
- •18.7 Текстовый и бинарный ввод-вывод
- •18.8 Бесформатный ввод и вывод
- •18.9. Часто применяемые функции потока
- •18.10 Форматирование в памяти
- •18.11 Дополнительные возможности ostrstream
- •19 Шаблоны
- •19.1 Шаблоны функций
- •19.2 Перегрузка и специализация шаблонов
- •19.3 Шаблоны классов
- •20 Директивы препроцесора
- •20.1 Директива #define
- •20.2 Директива #include
- •20.3 Условная компиляция
- •20.4 Директива #error
- •20.5 Директива #line
- •20.6 Директива #pragma
- •21.1 Адресация памяти
- •21.2 Модели памяти
- •21.3 Спецификация указателей
- •Int near* var_name;
- •Int* near var_name;
- •21.4 Макросы для указателей
- •21.5 Модификаторы переменных
- •21.6 Модификаторы функций
- •21.7 Соглашения о вызове
- •21.8 Встроенный код ассемблера
- •21.9 Псевдорегистры
- •Литература
- •Содержание
- •21.8 Встроенный код ассемблера ........................................................
- •21.9 Псевдорегистры ............................................................................
17.4 Форматирующие функции-элементы
Библиотека потоков предусматривает три способа управления форматированием: при помощи функций-элементов, при помощи флагов и посредством манипуляторов.
Функции-элементы класса ios (непосредственного предка классов istream и ostream) перегружены, что позволяет им и устанавливать, и анализировать параметры потока.
Ширина поля
Функции
int ios::width() — возвращает текущее значение ширины поля потока;
int ios::width(int) — устанавливает ширину поля.
При вводе ширина поля задает максимальное число читаемых элементов.
При выводе ширина поля задает минимальное пространство, занимаемое выводимым значением. Пространство, не занятое значением, заполняется символом, возвращаемым функцией ios::fill(). Если ширина значения превышает ширину поля, последняя игнорируется. По умолчанию ширина поля равна нулю. Ширина поля обнуляется после каждого помещения данных в поток.
Заполняющий символ
Функции
char ios::fill() — возвращает текущий символ заполнения;
char ios::fill(char) — устанавливает новый символ заполнения и возвращает значение старого.
По умолчанию заполняющим символом является пробел.
Число цифр (точность) вещественных чисел
Функции
int ios::precision() — возвращает текущее значение точности
int ios::precision(int) — устанавливает новое значение точности и возвращает старое.
По умолчанию точность равна 6 цифрам. Если установлен флаг scientific или fixed, точность задает число цифр, выводимых после десятичной точки, иначе — общее число значащих цифр.
17.5 Флаги форматирования
Флаги являются битовыми полями, хранящимися в защищенной компоненте данных ios::x_flags. Следующие компоненты-функции управляют флагами формата.
long ios::flags() — возвращает текущие флаги потока.
long ios::flags(long) — устанавливает новое значение флагов и возвращает старое.
long ios::setf(long, long) — присваивает флагам, биты которых установлены во 2-м параметре, значения соответствующих битов 1-го параметра.
long ios::setf(long) — устанавливает флаги, биты которых установлены в параметре. Возвращает прежнее значение флагов.
long ios::unsetf(long) — сбрасывает флаги, биты которых установлены в параметре. Возвращает прежнее значение флагов.
Для флагов форматирования в классе ios определены специальные константы:
skipws = 0x0001 // пропускать пробелы при вводе
left = 0x0002 // выравнивать влево при выводе
right = 0x0004 // выравнивать вправо при выводе
и т.п., всего 15 констант.
17.6 Манипуляторы
Манипуляторы являются функциями, над которыми можно выполнять операции помещения в поток и извлечения из потока. Вызов этих функций управляет флагами потока. Изменения, внесенные манипуляторами, сохраняются до следующей установки (за исключением ширины поля). Простые манипуляторы не имеют аргументов.
endl — помещает в выходной поток символ новой строки и вызывает метод flush
ends — помещает в выходной поток нулевой символ,
flush — выгружает буфер потока,
dec — устанавливает основание 10,
hex — устанавливает основание 16,
oct — устанавливает основание 8,
ws — заставляет игнорировать ведущие пробелы при вводе.
Предопределены следующие параметризованные манипуляторы:
setbase(int _b) — задает основание системы счисления,
resetiosflags(long _b) — сбрасывает флаги, указанные в параметре,
setiosflags(long _b) — устанавливает флаги, указанные в параметре,
setfill(int _f) — задает заполняющий символ,
setprecision(int _n) — задает точность вещественных чисел,
setw(int _n) — задает ширину поля.
Вопросы
1. При каком условии некоторые функции библиотеки потоков подключаются в форме inline ?
2. Что такое cin: макрос, имя файла, объект или класс?
3. Как направить в файл вывод в стандартный выходной поток ?
4. Какое значение вырабатывает операция извлечения из потока ?
5. Как распространить операцию помещения в поток на пользовательский тип данных ?
6. Перечислите способы управления форматированием потока ?
7. Какую информацию содержат флаги потока ?
8. Как изменить значения флагов потока ?
9. Каков принцип действия манипуляторов ?