Имя материала: Информатика: Базовый курс

Автор: Сергей Витальевич Симонович

20.9. пример на си++. рисование графиков

 

Система C++Builder по своей структуре практически ничем не отличается от системы Delphi, только программа в ней составляется на языке Си++. Поэтому с принципами визуального проектирования можно познакомиться в предыдущем разделе.

 

Постановка задачи

Некоторая подпрограмма задает зависимость значения функции от аргумента. Надо нарисовать в окне график, показывающий эту зависимость.

 

Принципы рисования в C++Builder

Перерисовывать экран в Windows приходится по самым разным причинам. Например, окно было закрыто другими приложениями, свернуто или оказалось временно заслоненным своими вспомогательными окнами. При этом перерисовывать приходится или все содержимое, или только часть. Программа, созданная с помощью C++Builder, сама определяет, что и когда ей надо перерисовать, и все элементы управления тоже это «понимают». Особое требование к организации перерисовки возникает, только когда программист напрямую использует функции рисования. Все эти функции в таком случае надо размещать в обработчике события OnPaint, которое вызывается автоматически.

 

Технология рисования

Каждая форма в C++Builder имеет свойство Canvas (Холст), представляющее собой достаточно сложный класс с набором методов, позволяющих рисовать точки, линии, фигуры, заполнять их цветом и т. д. Для создания графика потребуются два метода этого класса — метод MoveTo(x,y), устанавливающий новое начальное положение — точку (х,у) для следующих операций рисования, и метод LineTo(x,y), проводящий линию из предыдущей точки в новую.

 

Метод отрисовки

После того как программа C++Builder запущена, она автоматически открывает новый проект. Дополнительные компоненты на форме размещать не надо — требуется только переопределить метод, ответственный за перерисовку изображения на форме.

Для этого в Инспекторе объектов надо выбрать закладку Events (События), на ней найти строку с названием OnPaint и дважды щелкнуть на ней мышкой. C++Builder автоматически сгенерирует соответствующий программный код обработки события перерисовки:

void        fastcall TForml::FormPaint(TObject *Sender)

{

}

Алгоритм отображения графика несложен. Он умещается в нескольких операторах.

Переменные Width (Ширина) и Height (Высота) — свойства формы, определяющие ее текущую ширину и длину в пикселах. Координату по оси Y нельзя взять непосредственно из переменной у, а надо вычислять по формуле Height-y, потому что в C++Builder считается, что точка с координатами (0,0) расположена в верхнем левом углу окна, а ось Y направлена вниз. Для удобства восприятия эту ось надо перевернуть.

 

void        fastcall TForml::FormPaint(TObject *Sender)

{

int x,y;

// начальные координаты

х = 0; у = 0;

// начальная точка графика

Canvas->MoveTo(0,Height);

// цикл, пока каждая координата очередной точки

// укладывается в размер экрана

while ( х < Width && у < Height )

{

// следующая точка по оси X

х = х + 1;

// соответствующее значение по оси Y

У = f (x) ;

// в новую точку (x,Height-y) рисуется линия

Canvas->LineTo(x,Height-y);

}

}

 

Чуть выше метода Form Paint надо определить функцию f(), не привязанную ни к какому классу. В ней происходит вычисление значения анализируемой математической функции по заданному аргументу. Для примера она может выглядеть так:

int f(int x)

{

int у;

у = floor(50*log(x));

return у;

}

 

Стандартная функция log() вычисляет значение логарифма. Коэффициент 50 нужен, чтобы кривая пропорционально размещалась в окне. Функция floor() вычисляет целую часть аргумента (преобразовывает его в целое число), потому что в методах рисования надо указывать координаты только в целых числах (пикселах).

Исходно функции log(), floor() и ряд других не подключены к текущему проекту. Чтобы они стали доступными, библиотеку, в которой они хранятся, необходимо явно указать компилятору. Делается это с помощью командной строки

#include "Math.h"

 которую можно поместить в самое начало текущего файла.

Далее проект надо сохранить, выполнить компиляцию и запустить, нажав клавишу F9. В дальнейшем, изменив один оператор присваивания в функции f() и подобрав подходящие коэффициенты, с помощью этой программы можно строить самые разные графики.

 

Практические задания по программированию

 

Задание 1

 

Дано натуральное число. Составить программу, которая представляет данное число в виде суммы квадратов натуральных чисел, содержащей минимальное число слагаемых. Например:

9=32

12=22+22+22

23=32+32+22+12

 

Задание 2

 

Дан массив, содержащий N элементов.

Написать подпрограммы, выполняющие следующие действия:

перестановку элементов массива в обратном порядке;

вычисление суммы А[ 1 ] + А[2] *А[2] + А[3] *А[3] *А[3]...;

определение элементов массива, разность модулей которых имеет наибольшее значение;

определение значения, которое встречается среди элементов массива максимальное число раз, и вычисление количества таких вхождений;

упорядочение элементов массива по возрастанию.

 

Задание 3

 

Дан двумерный массив, содержащий N´N элементов. Написать подпрограммы, выполняющие следующие действия:

вычисление среднего арифметического для элементов каждой строки массива;

замену нулями всех элементов, расположенных на главной диагонали матрицы;

определение наибольшего элемента и его положения в массиве.

 

Задание 4

 

Дана текстовая строка.

Написать подпрограммы, выполняющие следующие действия:

подсчет количества слов в строке (в качестве границ слов рассматриваются пробелы);

подсчет количества цифр в строке;

определение десятичного числа, которому соответствует строка, если она представляет запись этого числа в шестнадцатеричной системе;

проверку соответствия содержимого строки правилам записи идентификаторов языков программирования.

 

Рекомендуемая литература

 

Microsoft Access 2000: справочник. Под ред. Ю. Колесникова. — СПб.: Питер, 1999 (готовится к печати).

Microsoft Excel 2000: справочник. Под ред. Ю. Колесникова. — СПб.: Питер, 1999,480 с.

Microsoft Office 2000: справочник. Под ред. Ю. Колесникова. — СПб.: Питер, 1999 (готовится к печати).

Microsoft Word 2000: справочник. Под ред. Ю. Колесникова. — СПб.: Питер, 1999,352 с.

Андердал Б. Самоучитель Windows 98. Изд. 2-е. — СПб.: Питер, 1999, 400 с.

Березин С., Раков С. Internet у вас дома. Изд. 2-е. — СПб.: BHV-Санкт-Петербург, 1999, 736 с.

Бобровский С. Самоучитель программирования на языке C++ в системе Borland C++ Builder 4.0. - М.: Десс; Инфорком-Пресс, 1999,288 с.

Бобровский С. Программирование на языке QBASIC для школьников и студентов. — М.: Десс; Инфорком-Пресс, 1999,208 с.

Богумирский Б. Энциклопедия Windows 98 (второе издание). — СПб.: Питер, 1999, 896 с.

Борланд Р. Знакомство с Windows 98. — М.: Microsoft Press Русская редакция, 1997,376 с.

Борланд Р. Эффективная работа с Word 97. — СПб.: Питер, 1998,960 с.

Борланд Р. Эффективная работа с Word 2000. — СПб.: Питер, 2000 (готовится к печати).

Винтер П. Microsoft Access 97: справочник. — СПб.: Питер, 1998,416 с.

Винтер П. Microsoft Word 97: справочник. - СПб.: Питер, 1999, 320 с.

Габбасов Ю. Internet 2000. - СПб.: BHV-Санкт-Петербург, 1999,440 с.

Гук М. Аппаратные средства PC: Энциклопедия. — СПб.: Питер, 1999,816 с.

Денисов A. Microsoft Internet Explorer 5: справочник. — СПб.: Питер, 1999,448 с.

Додж М., Кината К., Стинсон К. Эффективная работас Excel 2000. — СПб.: Питер, 2000 (готовится к печати).

Додж М., Кината К., Стинсон К. Эффективная работа с Excel 97. — СПб.: Питер, 1998,1072 с.

Келли Дж. Самоучитель Access 97. - СПб.: Питер, 1999,336 с.

Кобурн Ф., Маккормик П. Эффективная работа с CorelDRAW 8. — СПб.: Питер, 1998,912с.

Коварт Р., Уотерс Б. Windows NT Server 4: Учебный курс. — СПб.: Питер, 1999, 448с.

Крейнак Дж., Хейбрекен Дж. Интернет: Энциклопедия. — СПб.: Питер, 1999, 560с.

Леонтьев Ю. Самоучитель Word 2000. — СПб.: Питер, 1999 (готовится к печати).

Маров М. 3D Studio MAX 2.5: справочник. - СПб.: Питер, 1999,672 с.

Маров М. 3D Studio MAX 3: Учебный курс. - СПб.: Питер, 1999,608 с.

Миронов-Д. CorelDRAW 9: Учебный курс. - СПб.: Питер, 1999,464 с.

Муллен P. Microsoft Office 97: справочник. — СПб.: Питер, 1998,448 с.

Мураховский В. Сборка, настройка, апгрейд современного компьютера. — М.: Десс; Инфорком-Пресс, 1999,256 с.

Мэтьюз М. Windows 98: Книга ответов. — СПб.: Питер, 1999,464 с.

Немнюгин С. Pascal: Учебный курс. — СПб.: Питер, 1999 (готовится к печати).

Новейший самоучитель работы на компьютере. Под ред. Симоновича С. — М.: Десс; Инфорком-Пресс, 1999, 656 с.

Нортон П., Мюллер Дж. Windows 98: энциклопедия системных ресурсов. — СПб.: BHV-Санкт-Петербург, 1998,578 с.

Нильсен Дж. Microsoft Excel 97: справочник. — СПб.: Питер, 1998,320 с.

Петерсон М., Ларри М. Эффективная работа с 3D Studio MAX 2 (+CD). — СПб.: Питер, 1998, 656 с.

Пфаффенбергер Б. Эффективная работа с Microsoft Internet Explorer 4.0. — СПб.: Питер, 1998,416 с.

Рейзнер Т. Самоучитель Word 97. - СПб.: Питер, 1999,432 с.

Робинсон С. Microsoft Access 2000: учебный курс. — СПб.: Питер, 2000 (готовится к печати).

Рудометов Е. Аппаратные средства и мультимедиа: Справочник. Изд. 2-е.—СПб.: Питер, 1999,416 с.

Рынков В. Самоучитель Excel 2000. - СПб.: Питер, 1999, 336 с.

Симонович С. Windows 98: Учебный курс. - СПб.: Питер, 1999,512 с.

Симонович С., Евсеев Г., Алексеев А. Общая информатика. — М.: ACT-ПРЕСС; Инфорком-Пресс, 1998,592 с.

Симонович С., Евсеев Г. Практическая информатика: универсальный курс.—М.: ACT-ПРЕСС; Инфорком-Пресс, 1999,480 с.

Симонович С., Евсеев Г., Алексеев А. Специальная информатика: универсальный курс. - М.: ACT-ПРЕСС; Инфорком-пресс, 1999,480 с.

Стинсон К. Эффективная работа в Windows 98. — СПб.: Питер, 1999,784 с.

Стоцкий Ю. Самоучитель Office 2000. СПб.: Питер, 1999,576 с.

Стразницкас М. Эффективная работа с Photoshop 5. — СПб.: Питер, 1999,704 с.

Тайц А. М. Тайц А. И. Adobe Illustrator 8: Учебный курс. - СПб.: Питер, 1999, 608с.

Тайц А. М., Тайц А. И. CorelDRAW 9: Краткий курс. - СПб.: Питер, 1999 (готовится к печати).

Франка П. C++: Учебный курс. - СПб.: Питер, 1999, 528 с.

Шафран Э. Создание Web-страниц: Самоучитель (+CD). — СПб.: Питер,1999, 320 с.

 

 

 

Страница: | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | 69 | 70 | 71 | 72 | 73 | 74 | 75 | 76 | 77 | 78 | 79 | 80 | 81 | 82 | 83 | 84 | 85 | 86 | 87 | 88 | 89 | 90 | 91 | 92 | 93 | 94 | 95 | 96 | 97 | 98 | 99 | 100 | 101 | 102 | 103 | 104 |