- Пример программы Function
Пример программы Function
Помимо простых фигур программно можно отображать на экране монитора сложные кривые, например, в виде графика функций. Рассмотрим очередной пример программы, осуществляющий именно такие операции. Создайте новое приложение и поместите на его форму пять компонентов кнопок Button и один компонент Image. Задайте свойство Caption для кнопок от первой до пятой, присваивающие им соответственно названия: Рисовать, +, —, Очистить и Функция. Размер пятой кнопки увеличьте по горизонтали примерно в два раза. Компонент Image растяните и разместите на оставшейся части формы. Свойство Caption формы заполните названием Function. Разместите все компоненты на форме в соответствии с рис. 23.3.
Рис. 23.3. Окно формы программы Function
Теперь сохраните модуль проекта в файле с названием Ufunction.cpp, а сам проект в файле с названием Function.bpr. Вставьте в файл описаний Ufunction.h после строки public: // user declarations следующие программные строки:
float m; // Масштаб
описывающие переменные номера функций и масштаба.
После оператора #inciude "ufunction.h" в файле Ufunction.cpp впишите строку:
которая предназначена для подключения к проекту библиотеки математических функций, что позволит нам использовать их в программе, в том числе и тригонометрические функции.
Далее впишем в программу обработчики события OnClick для всех кнопок. Начнем с четвертой кнопки, отвечающей за очистку экрана. Для нее обработчик события OnClick должен выглядеть в соответствии с листингом 23.7.
Листинг 23.7. Обработчик события OnClick
{
Image1->Canvas->FillRect(Rect (0,0,Image1->Width, Image1->Height));
}
Программная строка обработчика содержит знакомый нам метод FillRect.
Для обработчика события OnClick кнопки рисования введем строки программного кода (листинг 23.8).
Листинг 23.8. Обработчик события OnClick кнопки рисования
float X, Y; // Переменные функции
int PX, PY; // Координаты пикселов
Form1->Button4Click(0);
Image1->Canvas->MoveTo(0,Image1->Height/2);
for(PX=0; PX<=Image1->Width; РХ++)
{
X=PX*4*PI/Image1->Width;
switch(n) // Вычисление функций
{
case 1: Y=m*sin(X) ; break;
case 2: Y=m*X*sin(X*X); break;
case 3: Y=m*cos (X)*sin(X) ; break;
default: break;
}
PY=Image1->Height- (Y+1) *Image1->Height/2;
Image1->Canvas->LineTo (PX, PY) ;
}
Первая из этих строк описывает константу PI, принимающую значение числа Пифагора. Далее следует описание переменных Х, Y, PX и PY, служащих переменными функции и координатами точек рисунка. После этого следует вызов функции обработчика события OnClik кнопки очистки экрана, созданной нами ранее и предназначенной для очистки канвы компонента Image (то есть рисунка на экране). Далее вписана строка установки пера для рисования в левую среднюю точку экрана. После этой строки в программе присутствует оператор для организации цикла вычисления значения переменной y для множества значений точек РХ экрана от 0 до максимальной величины ширины экрана в пикселах. Переменная Х вычисляется в самом цикле. Одновременно масштабируется ее размер по вертикали экрана.
Оператор switch служит для сравнения номера выбранной функции и вычисления для нее значения переменной Y.
Функции могут быть произвольными. В дальнейшем при необходимости можно будет изменять и расширять список этих функций. Далее в программе вычисляется значение координат PY и рисуется фрагмент линии функции.
В обработчик события OnClick кнопки + (плюс) вставьте строки удвоения коэффициента функции и вызова обработчика перерисовки графика функции, который принадлежит кнопке рисования Button1:
Forml->ButtonlClick(0);
В обработчик события OnClick кнопки — (минус) вставьте строки уменьшения вдвое коэффициента функции и тот же обработчик перерисовки графика функции:
Forml->ButtonlClick(0);
Наконец, для кнопки выбора функции Button5 впишите обработчик события OnClick, состоящий из строк, приведенных в листинге 23.9.
Листинг 23.9. Обработчик события OnClick кнопки выбора функции
switch(n) // Выбор функций
{
case 1: Button5->Caption="Y=m*sin(X)"; break;
case 2: Button5->Caption="Y=m*X*sin(X*X)"; break;
case 3: Button5->Caption="Y=m*cos(X)*sin(X)"; break;
default: break;
}
Здесь будет происходить автоматический инкремент номера функции и присвоение ему начального значения при превышении максимального значения п>3. В зависимости от номера функции свойство Caption кнопки Buttons будет менять свое значение на строку с записью самой математической функции.
Для завершения программы необходимо задать начальные значения для переменных масштаба и номера функции. Это делается записью программных строк инициализации переменных m и п в теле функции формирования формы. Здесь же необходимо вписать вызов обработчика события OnClick для кнопки очистки экрана. В конечном виде функция формирования формы должна иметь запись, соответствующую листингу 23.10.
Листинг 23.10. Функция формирования формы
{
m=0.05; n=l;
Forml->Button4Click(0);
}
Теперь запустите приложение и проверьте его работу. Результат работы программы при выводе на экран функции Y=m*x*sin(x*x) представлен на рис. 23.4.
Рис. 23.4. Результат работы программы
В этой программе мы использовали не только методы, но и некоторые функции, например sin(x) и cos(x). Среда разработки Borland C++Builder 6 имеет огромное количество встроенных библиотек с готовыми к применению функциями, что позволяет писать мощные и элегантные программы. Для знакомства с функциями можно прибегнуть к встроенной справочной системе среды разработки, вызвав ее нажатием клавиши <F1> или <Ctrl>+<Fl>, когда курсор редактора находится на самой функции. Аналогично можно поступать при знакомстве с другими методами, не рассмотренными здесь.
Кроме того, среда разработки имеет встроенный суфлер кода, который автоматически выводит на экран список доступных методов, свойств и функций объектов при вводе символа "->", "." или "(" после записи имени объекта.
Полезной является комбинация клавиш <Ctrl>+<Space>, вызывающая список доступных функций и методов для объекта, на котором расположен курсор редактора.
Комбинация клавиш <Ctrl>+<J> открывает окно с перечнем функций-заготовок, которые выбираются программистом с помощью стрелок курсора и вставляются в программу после нажатия клавиши <Enter>.
Этими замечательными инструментами среды разработки удобно пользоваться для вызова встроенной справочной системы, ускорения ввода кода программы и исключения ошибок в записи программных строк