- •Введение
- •Объектно-ориентированного программирования
- •1.3. Области видимости переменных и функций в
- •1.4. Основные рекомендации для разработки программ Стиль
- •Интерфейсы
- •Отладка
- •Тестирование
- •Производительность
- •Переносимость
- •2. Лабораторная работа № 1
- •2.1. Разработка алгоритма решения задачи Последовательность разработки алгоритма решения задачи.
- •2.3. Разработка интерфейса пользователя
- •2.4. Выбор визуальных объектов для стартовой формы
- •2.5. Задание свойств объектов
- •Создание меток и текстовых окон
- •2.6. Написание кода программы
- •2.7. Сохранение проекта
- •2.8. Компиляция программы
- •2.9. Отладка и тестирование программы
- •2.10. Задания для лабораторной работы № 1
- •2.11. Контрольные вопросы
- •3. Лабораторная работа № 2
- •3.1. Теоретический материал
- •If (условие) оператор;
- •Оператор разветвления. Форма записи структуры разветвления имеет вид:
- •If (условие) оператор1;
- •Оператор с составным условием. При составлении конструкции оператора условной передачи управления могут использоваться составные условия, в которых условия соединены логическими операциями
- •3.2. Примеры решения задач
- •3.3. Задания для лабораторной работы № 2
- •3.4. Контрольные вопросы
- •4. Лабораторная работа № 3
- •4.1. Теоретические сведения
- •4.2. Задания для лабораторной работы № 3
- •4.3. Контрольные вопросы
- •5. Лабораторная работа № 4
- •5.1. Теоретические сведения.
- •5.2. Задания для самостоятельного выполнения
- •5.3. Контрольные вопросы
- •6. Лабораторная работа № 5
- •6.1. Теоретический материал
- •Strcpy (Sp, “дополнительный текст”);
- •Библиотечные функции работы со строками типа char
- •Основные функции работы со строками типа AnsiString
- •6.3. Задания для самостоятельной работы
- •6.4. Контрольные вопросы
- •7. Лабораторная работа № 6
- •7.1. Рисование по пикселям
- •7.2. Рисование с помощью пера
- •Методы вычерчивания графических примитивов с помощью пера
- •Выбор метода решения задачи
- •Алгоритм решения задачи
- •Разработка интерфейса пользователя
- •Разработка кода программы
- •7.3. Рисование геометрических фигур
- •7.4. Задания для самостоятельного выполнения
- •7.5. Контрольные вопросы
- •Заключение
- •Библиографический список
- •Математические функции
- •Константы, используемые в математических выражениях
- •Тригонометрические функции
- •Арифметические и алгебраические функции
- •Функции перерасчета градусы-радианы
- •Компьютерные технологии
- •3 94006 Воронеж, ул. 20-летия Октября,84
Выбор метода решения задачи
Как показали предыдущие примеры, лучшим способом рисования графика является рисование пером.
Алгоритм решения задачи
Рассмотрим, решение каких частных задач необходимо запрограммировать для построения графика.
Определить размеры области, на которой будет отображаться график. Для этого необходимо определить максимальное и минимальное значение функции, в пределах которых будет изменяться амплитуда графика.
Определить положение осей координат.
Определить масштаб изображения, позволяющий построить график таким образом, чтобы он занимал всю область формы, предназначенную для вывода графика.
Выбрать толщину и цвет кривой, отображающий график.
Выбрать метод исправления возможных искажений графического изображения.
Вычисление значений функции для заданных значений a и b и выбранного диапазона изменений аргумента x.
Нарисовать график в выделенной области формы.
Разработка интерфейса пользователя
Разместим на форме:
– информацию для пользователя о назначении программы и виде функции, для которой строится график в метках Label;
– командную кнопку Button EXIT для завершения работы программы. Вид формы представлен на рис. 7.2.
Рис. 7.2. Интерфейс программы построения графика
Разработка кода программы
Для построения графика используется вся доступная область формы. Причем, если во время работы программы пользователь изменит размер окна, график будет выведен заново с учетом реальных размеров. Основу работы программы составляет функция Grafic1. Ее необходимо поместить в заголовочный файл формы в раздел Private. После запуска программы функция по исходным данным определяет область вывода графика, вычисляет коэффициенты масштабирования по осям и вычерчивает координатные оси. После вызова функции Fun (x) рисуется график.
Код программы приведен на листинге 7.3.
Следует обратить внимание, что данная программа строит график функций, принимающих как положительные, так и отрицательные значения. Для построения графиков функций, принимающих только положительные значения или только отрицательные значения, программа должна быть доработана.
Листинг 7.3
Программа построения графика
#include <vcl.h>
#pragma hdrstop
#include "UnGrafic1.h"
#include "math.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TFGrafic1 *FGrafic1;
//---------------------------------------------------------------------------
__fastcall TFGrafic1::TFGrafic1(TComponent* Owner)
: TForm(Owner)
{
}
//---------------------------------------------------------------------------
float Fun(float x)
{
return 2* sin(x)*exp(x/5);
}
void __fastcall TFGrafic1::Button1Click(TObject *Sender)
{
FGrafic1->Close();
}
//---------------------------------------------------------------------------
void Grafic1()
{
float x1,x2;// граница изменения аргумента функции
float y1,y2; // граница изменения значения функции
float x; // текущее значение координаты x
float y; // текущее значение координаты y
float dx; // приращение аргумента
int l, b; // левый верхний и нижний углы вывода функции
int w,h; // ширина и высота области вывода графика
float mx,my; // масштаб по оси x и y
int x0,y0; // начало координат
//область вывода графика
l = 10; // x – координата верхнего левого угла поля графика
b = Form1->ClientHeight-20; //y – координата левого нижнего угла поля графика
h = Form1->ClientHeight-40; //высота
w = Form1->Width-20; // ширина
x1 = 0; // нижняя граница диапазона аргумента
x2 = 25; // верхняя граница диапазона аргумента
dx = 0.01; // шаг аргумента
// найдем максимальное и минимальное значение
//функции на отрезке [x1,x2]
x = x1 ;
y1 = Fun(x); // минимум
x=x2;
y2 =Fun(x); // максимум
do {
y = Fun(x);
if (y <= y1) y1 = y;
if (y > y2) y2 = y;
x += dx;
} while(x <=x2);
//вычислим масштаб
my = (float)h/abs(y2 - y1);// масштаб по оси x
mx = w/abs(x2 - x1); );// масштаб по оси y
x0 = l + abs(x1* mx); //ось x
y0 = b-abs(y1*my);// //ось y
Canvas -> MoveTo(x0,b-h);
Canvas -> LineTo(x0,b);
Canvas -> MoveTo(1,y0);
Canvas -> LineTo(1+w,y0);
Canvas -> TextOutA(x0+5,b-h,FloatToStrF(y2,ffGeneral,6,3));
Canvas -> TextOutA(x0+5,b,FloatToStrF(y1,ffGeneral,6,3));
//построение графика
x = x1;
do{
y = Fun(x);
Canvas -> Pixels[x0+x*mx][y0 - y*my] = clRed;
// Canvas -> LineTo((x0 + x*mx),(y0 - y*my));
x =x + dx;
}while(x <= x2);
}