- Любовные романы
- Фантастика и фэнтези
- Ненаучная фантастика
- Ироническое фэнтези
- Научная Фантастика
- Фэнтези
- Ужасы и Мистика
- Боевая фантастика
- Альтернативная история
- Космическая фантастика
- Попаданцы
- Юмористическая фантастика
- Героическая фантастика
- Детективная фантастика
- Социально-психологическая
- Боевое фэнтези
- Русское фэнтези
- Киберпанк
- Романтическая фантастика
- Городская фантастика
- Технофэнтези
- Мистика
- Разная фантастика
- Иностранное фэнтези
- Историческое фэнтези
- LitRPG
- Эпическая фантастика
- Зарубежная фантастика
- Городское фентези
- Космоопера
- Разное фэнтези
- Книги магов
- Любовное фэнтези
- Постапокалипсис
- Бизнес
- Историческая фантастика
- Социально-философская фантастика
- Сказочная фантастика
- Стимпанк
- Романтическое фэнтези
- Ироническая фантастика
- Детективы и Триллеры
- Проза
- Юмор
- Феерия
- Новелла
- Русская классическая проза
- Современная проза
- Повести
- Контркультура
- Русская современная проза
- Историческая проза
- Проза
- Классическая проза
- Советская классическая проза
- О войне
- Зарубежная современная проза
- Рассказы
- Зарубежная классика
- Очерки
- Антисоветская литература
- Магический реализм
- Разное
- Сентиментальная проза
- Афоризмы
- Эссе
- Эпистолярная проза
- Семейный роман/Семейная сага
- Поэзия, Драматургия
- Приключения
- Детская литература
- Загадки
- Книга-игра
- Детская проза
- Детские приключения
- Сказка
- Прочая детская литература
- Детская фантастика
- Детские стихи
- Детская образовательная литература
- Детские остросюжетные
- Учебная литература
- Зарубежные детские книги
- Детский фольклор
- Буквари
- Книги для подростков
- Школьные учебники
- Внеклассное чтение
- Книги для дошкольников
- Детская познавательная и развивающая литература
- Детские детективы
- Домоводство, Дом и семья
- Юмор
- Документальные книги
- Бизнес
- Работа с клиентами
- Тайм-менеджмент
- Кадровый менеджмент
- Экономика
- Менеджмент и кадры
- Управление, подбор персонала
- О бизнесе популярно
- Интернет-бизнес
- Личные финансы
- Делопроизводство, офис
- Маркетинг, PR, реклама
- Поиск работы
- Бизнес
- Банковское дело
- Малый бизнес
- Ценные бумаги и инвестиции
- Краткое содержание
- Бухучет и аудит
- Ораторское искусство / риторика
- Корпоративная культура, бизнес
- Финансы
- Государственное и муниципальное управление
- Менеджмент
- Зарубежная деловая литература
- Продажи
- Переговоры
- Личная эффективность
- Торговля
- Научные и научно-популярные книги
- Биофизика
- География
- Экология
- Биохимия
- Рефераты
- Культурология
- Техническая литература
- История
- Психология
- Медицина
- Прочая научная литература
- Юриспруденция
- Биология
- Политика
- Литературоведение
- Религиоведение
- Научпоп
- Психология, личное
- Математика
- Психотерапия
- Социология
- Воспитание детей, педагогика
- Языкознание
- Беременность, ожидание детей
- Транспорт, военная техника
- Детская психология
- Науки: разное
- Педагогика
- Зарубежная психология
- Иностранные языки
- Филология
- Радиотехника
- Деловая литература
- Физика
- Альтернативная медицина
- Химия
- Государство и право
- Обществознание
- Образовательная литература
- Учебники
- Зоология
- Архитектура
- Науки о космосе
- Ботаника
- Астрология
- Ветеринария
- История Европы
- География
- Зарубежная публицистика
- О животных
- Шпаргалки
- Разная литература
- Зарубежная литература о культуре и искусстве
- Пословицы, поговорки
- Боевые искусства
- Прочее
- Периодические издания
- Фанфик
- Военное
- Цитаты из афоризмов
- Гиды, путеводители
- Литература 19 века
- Зарубежная образовательная литература
- Военная история
- Кино
- Современная литература
- Военная техника, оружие
- Культура и искусство
- Музыка, музыканты
- Газеты и журналы
- Современная зарубежная литература
- Визуальные искусства
- Отраслевые издания
- Шахматы
- Недвижимость
- Великолепные истории
- Музыка, танцы
- Авто и ПДД
- Изобразительное искусство, фотография
- Истории из жизни
- Готические новеллы
- Начинающие авторы
- Спецслужбы
- Подростковая литература
- Зарубежная прикладная литература
- Религия и духовность
- Старинная литература
- Справочная литература
- Компьютеры и Интернет
- Блог
Программирование. Принципы и практика использования C++ Исправленное издание - Бьёрн Страуструп
Шрифт:
Интервал:
Закладка:
win.attach(children);
win.attach(adults);
win.attach(aged);
win.attach(children_label);
win.attach(adults_label);
win.attach(aged_label);
win.attach(x);
win.attach(y);
win.attach(current_year);
gui_main();
Весь код можно поместить в функцию main(), хотя мы предпочитаем использовать вспомогательные классы Scale и Distribution, а также оператор ввода, определенный в классе Distribution.
Если вы забыли, что мы делаем, посмотрите на рисунок.
Задание
Задание, связанное с построением графиков.
1. Создайте пустое окно 600×600 с меткой “Графики функций”.
2. Создайте проект, свойства которого заданы в руководстве по инсталляции библиотеки FLTK.
3. Поместите файлы Graph.cpp и Window.cpp в ваш проект.
4. Добавьте оси x и y длиной по 400 пикселей каждая, с метками “1 == 20 пикселей” и делениями длиной по 20 пикселей. Оси должны пересекаться в точке (300,300).
5. Сделайте обе оси красными.
В дальнейшем используйте отдельный объект класса Shape для построения каждой из перечисленных ниже функций.
1. Постройте график функции double one(double x) { return 1; } в диапазоне [–10,11] с началом координат (0,0) в точке (300,300), используя 400 точек и не делая масштабирования (в окне).
2. Измените рисунок, применив масштабирование по оси x с коэффициентом 20 и по оси y с коэффициентом 20.
3. В дальнейшем используйте этот диапазон и коэффициенты масштабирования при построении всех графиков.
4. Добавьте в окно график функции double slope(double x) { return x/2; }.
5. Пометьте наклонную линию с помощью объекта класса Text со значением "x/2" в точке, расположенной прямо над левым нижним углом окна.
6. Добавьте в окно график функции double square(double x) { return x*x; }.
7. Добавьте в окно график косинуса (не пишите новую функцию).
8. Сделайте график косинуса синим.
9. Напишите функцию sloping_cos(), суммирующую косинус, и функцию slope() (как определено выше) и постройте ее график в окне.
Задание, связанное с определением класса.
1. Определите класс struct Person, содержащий член name типа string и член age типа int.
2. Определите переменную класса Person, инициализируйте ее значением “Goofy” и 63 и выведите на экран (cout).
3. Определите оператор ввода (>>) и вывода (<<) для класса Person; считайте объект класса Person с клавиатуры (cin) и выведите его на экран (cout).
4. Напишите конструктор класса Person, инициализирующий члены name и age.
5. Сделайте представление класса Person закрытым и включите в него константные функции-члены name() и age(), предназначенные для чтения имени и возраста.
6. Модифицируйте операторы >> и << для заново определенного класса Person.
7. Модифицируйте конструктор, чтобы определить, что переменная age лежит в диапазоне [0:150], а переменная name не содержит символы ; : " ' [ ] * & ^ % $ # @ !. В случае ошибки используйте функцию error(). Протестируйте программу.
8. Считайте последовательность объектов класса Person с устройства ввода (cin) в вектор типа vector<Person>; выведите его на экран (cout). Проверьте правильность ввода.
9. Измените представление класса Person так, чтобы вместо члена name использовались члены first_name и second_name. Отсутствие хотя бы одного из этих членов должно считаться ошибкой. Исправьте операторы >> и <<. Протестируйте программу.
Контрольные вопросы
1. Что такое функция одного аргумента?
2. Когда для представления данных используется непрерывная линия, а когда дискретные точки?
3. Какая функция определяет наклон? Напишите ее математическую формулу.
4. Что такое парабола?
5. Как создать ось x? Как создать ось y?
6. Что такое аргумент, заданный по умолчанию, и зачем он нужен?
7. Как составить сложную функцию?
8. Как при построении графиков используются цвет и метки?
9. Что представляет собой приближение функции с помощью ряда?
10. Зачем разрабатывать эскиз графика перед разработкой кода для его построения?
11. Как масштабировать график?
12. Как масштабировать входные данные без многократных попыток и ошибок?
13. Зачем форматировать входные данные? Не лучше ли рассматривать файл, просто заполненный числами?
14. Как вы разрабатываете общий эскиз графика? Как этот эскиз отражается в вашей программе?
Термины
Упражнения
1. Рассмотрим еще один способ определения функции, вычисляющей факториал.
int fac(int n) { return n>1 ? n*fac(n–1) : 1; } // n!
Эта функция вычисляет значение fac(4). Поскольку 4>1, ответ равен 4*fac(3), т.е. 4*3*fac(2), т.е 4*3*2*fac(1), т.е. 4*3*2*1. Посмотрите, как это работает. Функция, вызывающая сама себя, называется рекурсивной (recursive). Альтернативная реализация, описанная в разделе 15.5, называется итеративной (iterative), потому что в ней используется итерация по значениями (в цикле while). Убедитесь, что рекурсивная функция fac() работает и выдает те же результаты, что и итеративная функция fac() при вычислении факториала чисел 0, 1, 2, 3, 4 и так далее до 20. Какую реализацию функции fac() вы предпочитаете и почему?
2. Определите класс Fct, который почти совпадает с классом Function, за исключением того, что он хранит аргументы конструктора. Включите в класс Fct операции “восстановления” параметров, чтобы мы могли повторять вычисления с разными диапазонами, функциями и т.д.
3. Модифицируйте класс Fct из предыдущего упражнения так, чтобы в нем был дополнительный аргумент, позволяющий контролировать точность. Сделайте тип этого аргумента шаблонным параметром, чтобы повысить гибкость класса.
4. Постройте график функций sin(), cos(), sin(x)+cos(x) и sin(x)*sin(x)+cos(x)*cos(x) на одном рисунке. Нарисуйте оси и метки.
5. “Анимируйте” (как в разделе 15.5) ряд 1–1/3+1/5–1/7+1/9–1/11+... Он называется рядом Лейбница (Leibniz) и сходится к числу π/4.
6. Разработайте и реализуйте класс для построения гистограммы. Его исходные данные должны храниться в векторе типа vector<double>, в котором записаны N значений и каждое значение представляется “столбиком”, т.е. прямоугольником с соответствующей высотой.
7. Разработайте класс для построения гистограмм, позволяющий расставлять метки на рисунке в целом и на отдельных столбиках в частности. Предусмотрите использование цвета.
8. Ниже перечислено множество пар, составленных из роста и количества людей указанного роста (с точностью до пяти сантиметров): (170,7), (175,9), (180,23), (185,17), (190,6), (195,1). Как изобразить эти данные? Если вы не

