к оглавлению

Пример программы отображения графика функции

Помимо простых фигур программно можно отображать на экране монитора сложные кривые, например, в виде графика функций. Рассмотрим очередной пример программы, осуществляющий именно такие операции. Создайте новое приложение и поместите на его форму пять компонентов кнопок Button и один компонент Image. Задайте свойство Caption для кнопок от первой до пятой, присваивающие им соответственно названия: Рисовать, +, —, Очистить и Функция. Размер пятой кнопки увеличьте по горизонтали примерно в два раза. Компонент Image растяните и разместите на оставшейся части формы. Свойство Caption формы заполните названием Function. Разместите все компоненты на форме в соответствии с рис. 23.3.

 

Окно формы программы Function

Рис. 23.3. Окно формы программы Function

 


Теперь сохраните модуль проекта в файле с названием Ufunction.cpp, а сам проект в файле с названием Function.bpr. Вставьте в файл описаний Ufunction.h после строки   public:  // user declarations следующие программные строки:

 

int n;   // Номер функции
float m; // Масштаб

 

описывающие переменные номера функций и масштаба.


После оператора #inciude "ufunction.h" в файле Ufunction.cpp впишите строку:

 

#include  <math.h>


которая предназначена для подключения к проекту библиотеки математических функций, что позволит нам использовать их в программе, в том числе и тригонометрические функции.


Далее впишем в программу обработчики события OnClick для всех кнопок. Начнем с четвертой кнопки, отвечающей за очистку экрана. Для нее обработчик события OnClick должен выглядеть в соответствии с листингом 23.7.

 

Листинг 23.7. Обработчик события OnClick

void __fastcall TForm1:: Button4Click(TObject *Sender)
{
Image1->Canvas->FillRect(Rect (0,0,Image1->Width, Image1->Height));
}

 

 

Программная строка обработчика содержит знакомый нам метод FillRect.
Для обработчика события OnClick кнопки рисования введем строки программного кода (листинг 23.8).


Листинг 23.8. Обработчик события OnClick кнопки рисования

#define  PI  3.14159
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:

m=m*2;
Forml->ButtonlClick(0);

 

В обработчик события OnClick кнопки — (минус) вставьте строки уменьшения вдвое коэффициента функции и тот же обработчик перерисовки графика функции:

m=m/2;
Forml->ButtonlClick(0);

 

Наконец, для кнопки выбора функции Button5 впишите обработчик события OnClick, состоящий из строк, приведенных в листинге 23.9.

 

Листинг 23.9. Обработчик события OnClick кнопки выбора функции

n++; if(n>3) n=l;
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. Функция формирования формы

__fastcall TForm1: :TForm1 (TComponent* Owner)
{
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>.
Этими замечательными инструментами среды разработки удобно пользоваться для вызова встроенной справочной системы, ускорения ввода кода программы и исключения ошибок в записи программных строк

Скачать файлы проекта

к оглавлению

Знаете ли Вы, что Программный сниппет (англ. snippet — фрагмент, отрывок) в практике программирования — небольшой фрагмент исходного кода или текста, пригодный для повторного использования. Сниппеты не являются заменой процедур, функций или других подобных понятий структурного программирования. Они обычно используются для более лёгкой читаемости кода функций, которые без их использования выглядят слишком перегруженными деталями, или для устранения повторения одного и того же общего участка кода. Интегрированные среды разработки (IDE) содержат встроенные средства для ввода конструкций языка. Например, в Microsoft Visual Studio, Borland Developer Studio, для этого необходимо ввести ключевое слово и нажать определённую клавишную комбинацию. В IDE Geany существует специальный файл snippets.conf (путь к файлу: /home/user/.config/geany) позволяющий создавать свои сниппеты. Другие программы, такие как Macromedia Dreamweaver и Zend Studio, позволяют использовать сниппеты в Веб-программировании.
НОВОСТИ ФОРУМА

Форум Рыцари теории эфира


Рыцари теории эфира
 10.11.2021 - 12:37: ПЕРСОНАЛИИ - Personalias -> WHO IS WHO - КТО ЕСТЬ КТО - Карим_Хайдаров.
10.11.2021 - 12:36: СОВЕСТЬ - Conscience -> РАСЧЕЛОВЕЧИВАНИЕ ЧЕЛОВЕКА. КОМУ ЭТО НАДО? - Карим_Хайдаров.
10.11.2021 - 12:36: ВОСПИТАНИЕ, ПРОСВЕЩЕНИЕ, ОБРАЗОВАНИЕ - Upbringing, Inlightening, Education -> Просвещение от д.м.н. Александра Алексеевича Редько - Карим_Хайдаров.
10.11.2021 - 12:35: ЭКОЛОГИЯ - Ecology -> Биологическая безопасность населения - Карим_Хайдаров.
10.11.2021 - 12:34: ВОЙНА, ПОЛИТИКА И НАУКА - War, Politics and Science -> Проблема государственного терроризма - Карим_Хайдаров.
10.11.2021 - 12:34: ВОЙНА, ПОЛИТИКА И НАУКА - War, Politics and Science -> ПРАВОСУДИЯ.НЕТ - Карим_Хайдаров.
10.11.2021 - 12:34: ВОСПИТАНИЕ, ПРОСВЕЩЕНИЕ, ОБРАЗОВАНИЕ - Upbringing, Inlightening, Education -> Просвещение от Вадима Глогера, США - Карим_Хайдаров.
10.11.2021 - 09:18: НОВЫЕ ТЕХНОЛОГИИ - New Technologies -> Волновая генетика Петра Гаряева, 5G-контроль и управление - Карим_Хайдаров.
10.11.2021 - 09:18: ЭКОЛОГИЯ - Ecology -> ЭКОЛОГИЯ ДЛЯ ВСЕХ - Карим_Хайдаров.
10.11.2021 - 09:16: ЭКОЛОГИЯ - Ecology -> ПРОБЛЕМЫ МЕДИЦИНЫ - Карим_Хайдаров.
10.11.2021 - 09:15: ВОСПИТАНИЕ, ПРОСВЕЩЕНИЕ, ОБРАЗОВАНИЕ - Upbringing, Inlightening, Education -> Просвещение от Екатерины Коваленко - Карим_Хайдаров.
10.11.2021 - 09:13: ВОСПИТАНИЕ, ПРОСВЕЩЕНИЕ, ОБРАЗОВАНИЕ - Upbringing, Inlightening, Education -> Просвещение от Вильгельма Варкентина - Карим_Хайдаров.
Bourabai Research - Технологии XXI века Bourabai Research Institution