- •Ф.Ф. Павлов языки программирования
- •Санкт-Петербург
- •230201 - Информационные системы и технологии
- •Тема 2 посвящена изучению жизненного цикла программы и основным этапам решения задач на эвм.
- •Тема 4 изучает типы пользовательских интерфейсов, классификацию диалогов и основные компоненты графических пользовательских интерфейсов.
- •Тема 8 посвящена структурам данных фиксированного размера (массивы), а также типам данных, определяемых пользователем (структуры, объединения, перечисления).
- •Тема 10 изучает динамические структуры данных: виды и способы реализации списков, динамическое выделение памяти.
- •Тема 12 затрагивает вопросы обработки файлов данных: понятия записи, файла данных и способы доступа, операции и средства обработки файлов, контроль операций обработки файлов.
- •Тема 14 вводит в технологию объектно-ориентированного программирования.
- •Раздел I Принципы программирования на языках высокого уровня
- •Тема 1. Эволюция языков программирования
- •1.1. Неструктурированное, «стихийное» программирование
- •1.2. Процедурное (модульное) программирование
- •1.3. Объектно-ориентированное программирование
- •1.4. Компонентные технологии программирования
- •Тема 2. Жизненный цикл программы и основные
- •2.1. Дружественность, жизненный цикл программы
- •2.2. Постановка задачи и спецификация программы
- •2.3. Проектирование и реализация программы
- •2.4. Способы записи алгоритма
- •2.5. Критерии качества программы
- •3.1. Классификация программных продуктов
- •3.3. Модели программирования в ms-dos и Windows
- •Тема 4. Диалоговые программы
- •4.1. Типы пользовательских интерфейсов
- •4.2. Классификация диалогов и их реализация
- •4.3. Основные компоненты графических
- •Тема 5. Программа на языке высокого уровня
- •5.1. Структура программы и функции
- •5.2. Стандартные типы данных и операции над ними
- •5.3. Адресные типы данных: указатели и ссылки
- •5.4. Стандартные библиотеки языка
- •5.5. Классы памяти
- •Раздел 2 Управляющие структуры и структуры данных
- •Тема 6. Представление управляющих структур
- •6.1. Структура следования
- •6.2. Структуры ветвления
- •6.3. Структуры повторения
- •Int kol, //счетчик введенных оценок
- •Int god; //число лет
- •Тема 7. Адресные типы данных
- •7.1. Указатели
- •7.2. Ссылки
- •Тема 8. Структуры данных фиксированного размера
- •8.1. Массивы
- •8.2. Типы данных, определяемые пользователем
- •Тема 9. Функции (процедуры)
- •9.1. Определение, прототип и вызов функции
- •9.2. Передача параметров
- •9.3. Программирование рекурсивных алгоритмов
- •Тема 10. Динамические структуры данных
- •10.1. Списки: основные виды и способы реализации
- •10.2. Динамическое выделение памяти
- •Раздел 3 Процедурное программирование
- •Тема 11. Ввод/вывод данных
- •11.1. Видеофункции библиотеки conio.H
- •11.2. Функции библиотеки потокового ввода/вывода
- •Тема 12. Обработка файлов данных
- •12.1. Записи и файлы данных
- •12.2. Операции и средства обработки файлов
- •12.3. Контроль операций обработки файлов
- •Тема 13 Технология процедурного программирования
- •13.1. Способы конструирования программ
- •13.2. Проектирование программы: методы декомпозиции и и модульного программирования
- •13.3. Реализация программы: методы структурного
- •Тема 14. Введение в технологию объектно-
- •14.1. Основные понятия объектно-ориентированного
- •14.2. Проектирование программы
- •14.3. Реализация программы
- •Утверждаю
- •Рабочая программа
- •Технология программирования
- •Санкт-Петербург
- •Тема 1. Технология программирования и этапы ее
- •Тема 2. Жизненный цикл программы и основные этапы
11.2. Функции библиотеки потокового ввода/вывода
iostream.h
Потоком называется абстрактное понятие, относящееся к любому переносу данных от источника (или поставщика) к приемнику (или потребителю) данных. Также используются синонимы извлечение, прием и выборка, когда речь идет о вводе символов от источника, и вставка, помещение или запоминание, когда речь идет о выводе символов в приемник.
Базовая библиотека ввода/вывода потоков iostream обладает улучшенной гибкостью и элегантностью по сравнению с другими библиотеками ввода/вывода ,например, с stdio. Поэтому, настоятельно рекомендуем пользоваться этой библиотекой.
Потоковый ввод может применяться со стандартным входным потоком cin (клавиатура). Для выполнения ввода используется перегруженная операция ">>" - операция извлечения.
cin>>p; //p – переменная, выражение базовых типов.
С клавиатуры читается последовательность символов до пробела, преобразуется к типу p и помещается в p.
Потоковый вывод применяется со стандартным выходным потоком cout(экран дисплея). Для выполнения вывода используется перегруженная операция "<<" - операция вставки.
cout<< p;//p-переменная, выражение, константа базовых типов.
Значение p преобразуется в последовательность символов и выводится на экран.
Несколько операторов вывода с операцией вставки (<<) можно объединять в один (сцеплять). Тоже относится и к операции извлечения, но при вводе необходим разделитель-пробел.
Форматирование ввода/вывода в библиотеке iostream.h выполняется флагами форматирования и некоторыми функциями.
Перечислим флаги и поля форматирования:
- dec, oct, hex: вывод целых типов (десятичных, восьмеричных, шестнадцатиричных); поле – basefield;
- fixed, scientific: вывод вещественных типов (с фиксированной и плавающей точкой); поле – floatfield;
- left, right: прижим влево или вправо; поле – adjustfield;
- showbase: вывод целых чисел с системой счисления (0, 0х);
- showpoint: вывод вещественных чисел с десятичной точкой и хвостовыми нулями;
- showpos: вывод положительных чисел со знаком +;
- skipws: пропуск пробелов при вводе;
- uppercase: вывод прописных X и E.
Поле форматирования необходимо для альтернативных флагов, чтобы гарантировать установку только одного из флагов.
Перечислим функции форматирования:
- Установка флагов форматирования:
setf(flag) - для флагов без поля форматирования;
setf(flag,pole) - для флагов с полем форматирования.
Примеры:
cout.setf(ios::showpos);
cout.setf(ios::fixed,ios::floatfield);
cout.setf(ios::showpoint|ios::uppercase);//Несколько флагов
- Сброс флагов форматирования: unsetf(flag);
- Установка ширины поля вывода:
width(n) - устанавливает ширину поля n позиций и возвращает предыдущую ширину;
width() - только возвращает текущую ширину поля.
Пример:
cout.width(5);
cout<<123; //__123
cout<<456; //456 ширина поля сбросилась в ноль
- Установка символа-заполнителя:
fill(ch) - устанавливает символ-заполнитель ch и возвращает предыдущий;
fill() - только возвращает текущий символ-заполнитель. По умолчанию - пробел.
Пример:
cout.fill('*');
cout.width(5);
cout<<123; //**123
- Установка точности вещественных чисел:
precision(n) - устанавливает n цифр после точки и возвращает предыдущее значение;
precision() - только возвращает точность. По умолчанию точность равна 6 и хвостовые нули усекаются. Если после точки имеются только нули, то усекаются хвостовые нули и точка.
Пример:
cout.precision(2);
cout<<1.2345; //1.23
Альтернативным способом форматирования ввода/вывода является использование специальной операции (похожей на функцию), называемой манипулятором. Манипуляторы принимают в качестве аргумента ссылку на поток и возвращают ссылку на тот же поток. Поэтому, манипуляторы могут объединяться в цепочку вставок (или извлечений из потока). Например, запись:
cout<<setw(2)<<i<<setw(4)<<j; //setw – ширина поля
эквивалентна более длинной записи:
cout.width(2);
cout<<i;
cout.width(4);
cout<<j;
Перечислим манипуляторы:
dec – установка флага форматирования с десятичными преобразованиями;
oct - установка флага форматирования с восьмеричными преобразованиями;
hex - установка флага форматирования с шестнадцатеричными преобразованиями;
setw(n) - установка ширины поля n;
setprecision(n) - установка точности представления чисел n;
setfill(ch) - установка символа-заполнителя ch;
ws - извлечение пробелов при вводе;
endl - вставка символа новой строки и очистки потока(вывод);
ends - вставка конечного нулевого символа в строку(вывод);
setbase(n)-установка системы счисления при преобразованиях по основанию n (0, 8, 10, 16);
setiosflags(flag) - установка флагов форматирования flag;
resetiosflags(flag) - очистка флагов форматирования flag.
Манипуляторы могут быть записаны прямо в операциях ввода/вывода в виде цепочки. При использовании параметризированных манипуляторов необходимо включить в программу библиотеку iomanip.h .
Пример:
cout<<setw(7)<<setprecision(2)<<12.345<<endl; //__12.35
Основными средствами ввода/вывода библиотеки iostream.h являются операции вставки (<<) и извлечения (>>).
Помимо операций вставки и извлечения для ввода/вывода можно использовать функции.
- Ввод с клавиатуры символа: get(ch) - функция с параметром; get() - функция без параметра.
cin.get(ch);
ch=cin.get();
- Ввод с клавиатуры строки: get(),getline(),read().
cin.get(buf,n[,razd]);
cin.getline(buf,n[,razd]);
cin.read(buf,n);
,где buf - массив символов, n -количество символов, razd -символ-разделитель.
Функция get прекращает ввод, когда либо введено n-1 символов, либо встретился символ-разделитель razd, который не вводится, либо - символ конца файла. Отличие функции getline от get в том, что символ-разделитель razd тоже вводится.
- Вывод символа на экран: put(ch).
cout.put(ch);
- вывод строки на экран: write().
cout.write(buf.n);
Отличие этих функций от операций вставки и извлечения в том, что они не имеют средств форматирования и преобразования данных.
Для ввода с клавиатуры содержимого документов и вывода результатов задач на экран предпочтение лучше отдать операциям >> и <<. При вводе строки, имеющей внутри пробелы, операция извлечения (>>) введет только часть строки до первого пробела. В такой ситуации лучше использовать функции.
Контрольные вопросы
Какие средства ввода/вывода имеет библиотека conio.h?
Какие средства ввода/вывода имеет библиотека iostream.h?
Что такое операции извлечения (>>) и вставки (<<)?
Какие имеются способы форматирования ввода/вывода?
Какие средства обработки файлов имеет библиотека потокового ввода/вывода fstream.h?