Вход/Регистрация
Программирование. Принципы и практика использования C++ Исправленное издание
вернуться

Страуструп Бьерн

Шрифт:

Open_polyline aged;

Distribution d;

while (ifs>>d) {

if (d.year<base_year || end_year<d.year)

error("Год не попадает в диапазон");

if (d.young+d.middle+d.old != 100)

error("Проценты не согласованы");

int x = xs(d.year);

children.add(Point(x,ys(d.young)));

adults.add(Point(x,ys(d.middle)));

aged.add(Point(x,ys(d.old)));

}

Использование функций

xs
и
ys
делает проблему масштабирования и размещения данных тривиальной. “Небольшие классы”, такие как
Scale
, могут оказаться очень важными для упрощения кода и устранения лишних повторов — тем самым они повышают читабельность и увеличивают шансы на создание правильной программы.

Для того чтобы графики были более ясными, мы пометили их и раскрасили в разные цвета.

Text children_label(Point(20,children.point(0).y),"age 0-15");

children.set_color(Color::red);

children_label.set_color(Color::red);

Text adults_label(Point(20,adults.point(0).y),"age 15-64");

adults.set_color(Color::blue);

adults_label.set_color(Color::blue);

Text aged_label(Point(20,aged.point(0).y),"age 65+");

aged.set_color(Color::dark_green);

aged_label.set_color(Color::dark_green);

В заключение нам нужно связать разные объекты класса

Shape
с объектом класса
Window
и передать управление системе графического пользовательского интерфейса (см. раздел 15.2.3).

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. Создайте пустое окно 600x600 с меткой “Графики функций”.

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. Добавьте в окно график косинуса (не пишите новую функцию).

  • Читать дальше
  • 1
  • ...
  • 233
  • 234
  • 235
  • 236
  • 237
  • 238
  • 239
  • 240
  • 241
  • 242
  • 243
  • ...

Ебукер (ebooker) – онлайн-библиотека на русском языке. Книги доступны онлайн, без утомительной регистрации. Огромный выбор и удобный дизайн, позволяющий читать без проблем. Добавляйте сайт в закладки! Все произведения загружаются пользователями: если считаете, что ваши авторские права нарушены – используйте форму обратной связи.

Полезные ссылки

  • Моя полка

Контакты

  • chitat.ebooker@gmail.com

Подпишитесь на рассылку: