- •С.В.Сизов объектно-ориентированное программирование
- •Содержание
- •Лабораторная работа 1.
- •На различных платформах.
- •Реализация простейшего класса
- •Лабораторная работа 3 Классы потоков ввода-вывода данных.
- •Контрольные вопросы.
- •Лабораторная работа 4-5 (4 часа) Статически и динамически подключаемые библиотеки.
- •Контрольные вопросы.
- •Комментарии
- •Контрольные вопросы.
- •Контрольные вопросы
- •Лабораторная работа 8 Классы библиотеки Qt: элементы отображения Qt Цель работы: отработка умений и навыков использования библиотеки Qt для формирования элементов отображения.
- •Контрольные вопросы.
- •Методы и средства проектирования интерфейса пользователя
- •Методы и средства проектирования интерфейса пользователя в ос Unix
- •Контрольные вопросы
- •Создание интерфейса простых приложений.
- •Классы библиотеки Qt: обработка событий
- •Контрольные вопросы.
- •Создание приложений баз данных
- •Контрольные вопросы.
Лабораторная работа 3 Классы потоков ввода-вывода данных.
Цель работы: отработка умений и навыков работы с классами потоков ввода и вывода данных при проектировании программ на С/С++.
Теория:
(см. lek10.pdf)
Задание.
Написать программу, реализующую использование потоков ввода-вывода данных.
Варианты заданий.
Вариант 1. Напишите программу для проверки вводимых целых значений в десятичном, восьмеричном и шестнадцатеричном форматах. Выводите каждое прочитанное целое число во всех трех форматах. Проверьте программу со следующими входными данными: 10, 010, 0x10.
Вариант 2. В программе PhoneNumber (см. lek10.pdf) операции взять из потока и поместить в поток были перегружены для ввода и вывода объектов класса PhoneNumber. Перепишите операцию взять из потока так, чтобы она контролировала вводимые данные. Функция operator>> должна быть полностью переписана в соответствии со следующим алгоритмом:
Введите телефонный номер целиком в массив. Проверьте, что введено соответствующее число символов. Всего для телефонного номера должно быть прочитано 14 символов вида (800) 555-1212. Используйте функцию-элемент потока clear для установки флага ios::failbit в случае неправильного ввода.
Код местности и коммутатор не должны начинаться с 0 или 1. Проверьте первую цифру в коде местности и коммутаторе, чтобы быть уверенными, что они не начинаются ни с 0, ни с 1. Используйте функцию-элемент потока clear для установки флага ios::failbit в случае неправильного ввода.
Средняя цифра кода местности всегда 0 или 1. Проверьте среднюю цифру на 0 и 1. Используйте функцию-элемент потока clear для установки флага ios::failbit в случае неправильного ввода. Если ни одна из приведенных выше операций не привела к установке флага ios::failbit, скопируйте три части телефонного номера в элементы areaCode, exchange и line объекта класса PhoneNumber. В главной программе прежде чем печатать телефонный номер надо проверить, не установлен ли ios::failbit, свидетельствующий о неправильном вводе. Если установлен, то программа должна напечатать сообщение об ошибке и не печатать номер телефона.
Вариант 3. Напишите следующую программу:
Создайте определенный пользователем класс Point, который содержит закрытые данные-элементы xCoordinate и yCoordinate и объявляет перегруженные функции-операции взять из потока и поместить в поток как дружественные функции класса.
Опишите функции-операции взять из потока и поместить в поток. Функция-операция взять из потока должна определять, являются ли вводимые данные правильными, и если нет, то она должна устанавливать индикатор неправильного ввода ios::failbit. Операция поместить в поток не должна выводить точку, если произошла ошибка ввода.
Напишите функцию main, которая проверяет ввод и вывод определенного пользователем класса Point с помощью перегруженных операций взять из потока и поместить в поток.
Вариант 4. Напишите программу для проверки результатов вывода на печать целого значения 12345 и значения с плавающей запятой 1.2345 в поля разной ширины. Что происходит, когда значения печатаются в полях, ширина которых меньше указанных значений?
Вариант 5. Напишите следующую программу:
Создайте определенный пользователем класс Complex, который содержит закрытые данные-элементы real и imaginary и объявляет перегруженные функции-операции взять из потока и поместить в поток как дружественные функции класса.
Опишите функции-операции взять из потока и поместить в поток. Функция-операция взять из потока должна определять, являются ли вводимые данные правильными, и если нет, то она должна устанавливать индикатор неправильного ввода ios::failbit. Входные данные должны иметь форму: 3 + 8i
Значения могут быть как положительными, так и отрицательными, и одна из двух составляющих (действительная или мнимая часть) может отсутствовать. Если часть отсутствует, то соответствующий элемент данных должен быть задан равным 0. Операция поместить в поток не должна выводить, если произошла ошибка ввода. Формат вывода должен быть идентичен показанному выше формату ввода. Для отрицательных мнимых частей должен быть напечатан знак минус вместо знака плюс.
Напишите функцию main, которая проверяет ввод и вывод определенного пользователем класса Complex с помощью перегруженных операций взять из потока и поместить в поток
Вариант 6. Напишите программу, которая печатает значение 100.453627, округленное до ближайшего целого, до одной десятой, сотой, тысячной и десятитысячной.
Вариант 7. Напишите программу, которая использует структуру for для печати таблицы значений ASCII для набора символов ASCII с 33 по 126. Программа должна печатать десятичное, восьмеричное, шестнадцатеричное и символьное значения каждого символа. Используйте манипуляторы потока dec, oct и hex для печати целых значений.
Вариант 8. Напишите программу, которая вводит строку с клавиатуры и определяет длину строки. Напечатайте строку, используя ее удвоенную длину в качестве ширины поля.
Вариант 9. Напишите программу, которая показывает, что каждая из функций-элементов getline и get с тремя аргументами заканчивает ввод строки конечным нулевым символом. Покажите также, что get оставляет символ ограничитель во входном потоке, a getline извлекает его из потока и отбрасывает. Что происходит с непрочитанными символами в потоке?
Вариант 10. Напишите программу, которая преобразует температуру в целых числах по Фаренгейту от 0 до 212 градусов к значениям с плавающей запятой температуры по Цельсию с точностью до 3 знаков. Используйте для вычислений формулу: Celsius = 5.0/9.0 * (fahrenheit - 32);
Выходные данные должны быть отпечатаны в две колонки с выравниванием по правой границе поля, причем значения температуры по Цельсию должны содержать знак и перед положительными, и перед отрицательными температурами.
Вариант 11. Напишите программу, которая создает определенный пользователем манипулятор skipwhite для пропуска лидирующих (начальных) символов разделителей во входном потоке. Манипулятор должен использовать функцию isspace из библиотеки ctype.h для проверки, не является ли символ символом разделителем. Каждый символ должен вводиться функцией-элементом get класса istream. Когда очередной символ оказывается не разделителем, манипулятор skipwhite должен заканчивать свою работу возвратом этого символа назад во входной поток и возвращением ссылки на istream. Проверьте этот манипулятор, написав функцию main, в которой флаг ios::skipws не установлен, так что операция взять из потока автоматически не пропускает символы разделители. Затем проверьте манипулятор на входном потоке, вводя сначала символы разделители, а затем значащие символы. Печатайте вводимый символ, чтобы подтвердить, что символы разделители не вводятся.
Вариант 12. Напишите программу:
Напечатайте целое число 40000 с выравниванием по левой границе поля шириной 15 разрядов.
Прочитайте строку в переменную символьного массива state.
Напечатайте число 200 со знаком и без него.
Напечатайте десятичное значение 100 в шестнадцатеричном формате с предшествующими символами 0х.
Считайте символы в массив s пока не встретится символ 'р', но не более 10 символов (включая завершающий нулевой символ). Извлеките указанный ограничитель из входного потока и отбросьте его.
Напечатайте число 1.234 в виде значения с плавающей точкой с точностью 9 разрядов.
Прочитайте строку "символы" из стандартного входного потока. Сохраните строку в символьном массиве s. Удалите кавычки из входного потока. Считайте максимум 50 символов (включая заключительный нулевой символ).
